#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étodo | Tipo | Propósito |
|---|
getId() | Long | Clave de base de datos sustituta |
getYear() | Integer | Año de contabilización |
getMonth() | Integer | Mes de contabilización (1-12) |
getFormattedMonth() | String | Mes con relleno de ceros (01-12) |
getSatznr() | Integer | Número de secuencia dentro del mes |
getDatum() | LocalDate | Fecha de contabilización |
getBetrag() | BigDecimal | Importe monetario |
getSh() | SHType | Indicador 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).