EN · DE · RU · FR · ES

#785: Buchungssatz.java

projectforge-business/src/main/java/org/projectforge/reporting/Buchungssatz.java Interfaz Java — contrato de asiento contable (registro contable) para la capa de informes. Fuente: projectforge-business/src/main/java/org/projectforge/reporting/Buchungssatz.java 86 líneas · 23 código · 43 comentarios · 20 en blanco
Define el contrato de solo lectura para un asiento contable individual (Buchungssatz) en informes financieros. Implementado por BuchungssatzDO (entidad JPA) y BuchungssatzImpl (adaptador de informes). La interfaz es el patrón Adaptador entre la capa de persistencia (DO) y la capa de informes (BWA, informes de costos): extrae solo los campos necesarios para los informes, ocultando los detalles internos de JPA a los consumidores de informes.

Campos

MétodoTipoPropósito
getId()LongClave de base de datos sustituta
getYear()IntegerAño de contabilización
getMonth()IntegerMes de contabilización (1-12)
getFormattedMonth()StringMes con relleno de ceros (01-12)
getSatznr()IntegerNúmero de secuencia dentro del mes
getDatum()LocalDateFecha de contabilización
getBetrag()BigDecimalImporte monetario
getSh()SHTypeIndicador de Débito/Crédito (Soll/Haben)

Patrón Adaptador

La interfaz se sitúa entre BuchungssatzDO (la entidad JPA con anotaciones Hibernate, carga diferida y preocupaciones de persistencia) y los motores de informes (ReportBwa, KostReportSenior). Al definir una interfaz pura de solo lectura, la capa de informes nunca toca directamente las entidades JPA — solo ve este contrato. Esto evita la carga diferida accidental en la generación de informes (que causaría LazyInitializationException fuera de una transacción) y desacopla la lógica de informes de los detalles específicos del ORM.

Commit clave: 4c04cfd65 — Migración int→Long

El tipo de retorno de getId() se cambió de Integer a Long como parte de la migración MAJOR de id. Esto requirió actualizar todas las implementaciones (BuchungssatzDO, BuchungssatzImpl) y todos los generadores de informes que llamaban a getId(). La interfaz actuó como un límite de contrato: cambiar el tipo de retorno aquí forzó una actualización impulsada por el compilador de todos los llamantes, evitando roturas silenciosas.

Historial de Git

868d6abb7 2025→2026 | 63081666f 2024→2025 | 4c04cfd65 MAJOR: migración int→Long | b6092df09 2023→2024 | a6a7aece4 Optimizar importaciones | 57761f2a2 Eliminar palabras clave public innecesarias | 9456bbb6c Mes→Integer basado en 1 | 8c31eba2a Migración pesada Calendar/DateHolder | 9ebb88522 Commit inicial

Commit clave: 9456bbb6c — Mes basado en 1

Se cambió la representación del mes de basada en 0 (estilo Calendar) a basada en 1 (legible para humanos). Se añadió el método getFormattedMonth() para proporcionar cadenas con relleno de ceros ("01"–"12") para visualización y ordenación consistentes. Esto fue parte de un esfuerzo más amplio para eliminar la confusión del mes basado en 0 en toda la base de código (afectando a EmployeeSalary, VacationServiceImpl, AccountingRecord y MonthlyEmployeeFilter).