Plataforma técnica · Orchestrator
Servicios de Activo Fijo
Orchestrator Activo Fijo Servicios
Propósito
Section titled “Propósito”El dominio Activo Fijo del Orchestrator se compone de dos servicios que viven en orchestrator/src/domain/activo-fijo/. Comparten la tabla activo_fijo.activos y el catálogo de categorías, pero cada uno tiene su propio repositorio y responsabilidad acotada:
ActivoFijoService— alta y mantenimiento de categorías, proveedores clasificados, compras disponibles, activos y la baja. Marca la compra de origen como contabilizada para evitar doble imputación como gasto.DepreciacionService— cálculo de la cuota mensual (lineal con corrección monetaria), persistencia, contabilización del detalle contable, anulación y reverso. Publica el evento de dominiodepreciacion:calculada.
Ninguno de los dos servicios contiene la lectura contable (criterios IFRS, ejemplos contables, NIC 16). Esa lectura vive en accounting/activos-fijos/. Ver Activos Fijos · contable.
Mapa del Dominio
Section titled “Mapa del Dominio”flowchart LR
subgraph ROUTES["routes/activo-fijo/"]
R1["/api/activo-fijo/* (alta, baja, categorías)"]
R2["/api/activo-fijo/depreciacion (futuro)"]
end
subgraph DOMAIN["domain/activo-fijo/"]
AFS["ActivoFijoService"]
DS["DepreciacionService"]
AFR["ActivoFijoRepository"]
DR["DepreciacionRepository"]
TYPES["types.ts<br/>(DTOs e interfaces)"]
end
subgraph DB["Mother · schema activo_fijo"]
CAT[("categorias_activo")]
ACT[("activos")]
DEP[("depreciacion")]
DET[("depreciacion_detalle")]
VIEW[("v_activos_estado_actual")]
end
subgraph EXT["Schemas externos consumidos"]
PC[("administracion.plan_contable")]
OP[("operaciones_sii.compras_ventas_detalle")]
CM[("parametros.correccion_monetaria")]
end
subgraph EVENTS["domain/common/events"]
BUS["DomainEventBus"]
end
R1 --> AFS
R2 --> DS
AFS -.usa.-> AFR
DS -.usa.-> DR
DS -.lee activo.-> AFR
AFR --> CAT
AFR --> ACT
AFR --> VIEW
AFR --> PC
AFR --> OP
DR --> DEP
DR --> DET
DS --> CM
DS -- "outbox.queue<br/>'depreciacion:calculada'" --> BUS Servicios
Section titled “Servicios”Patrones compartidos
Section titled “Patrones compartidos”Ambos servicios siguen el mismo modelo arquitectónico, definido por BaseService (domain/common/BaseService.ts):
| Patrón | Cómo se aplica aquí |
|---|---|
| Template Method | BaseService.withTransaction(ctx, fn) provee el esqueleto de manejo transaccional; los servicios sólo pasan el callback. También validateRequired, assertExists, success y failure. |
| Repository (estático) | ActivoFijoRepository y DepreciacionRepository exponen sólo métodos static async que reciben pool | client como primer parámetro. Sin instancias ni inyección. |
| Transactional Outbox | Cada withTransaction recibe un TxOutbox. Los servicios encolan eventos durante la TX y se emiten al DomainEventBus sólo después del COMMIT. ROLLBACK descarta la cola — cero efectos fantasma. |
| Observer (vía DomainEventBus) | DepreciacionService.generar publica depreciacion:calculada. Otros dominios pueden suscribirse sin acoplarse al servicio. |
| Snapshot | El alta de activo copia vida_util_anos y dep_acelerada_anos desde la categoría. Cambios futuros a la categoría no reescriben la contabilidad de activos ya registrados. |
Strategy, Builder, Decorator, Factory y Singleton no aplican explícitamente en este dominio.
Tipos del Dominio
Section titled “Tipos del Dominio”types.ts define las interfaces que cruzan el borde HTTP. Las más relevantes:
| Tipo | Uso |
|---|---|
CategoriaActivo | Categoría con sus tres cuentas (activo, dep. acumulada, gasto dep.), vida útil normal y acelerada, y la clasificación SII. |
ActivoFijo | Bien individual con su snapshot de vida útil; monto_depreciable es columna generada (monto_neto - valor_residual). |
DepreciacionEntry | Cuota mensual con cm_factor y cm_mes_origen para trazabilidad de corrección monetaria. |
DepreciacionDetalleEntry | Línea contable de un asiento de depreciación (CUOTA_DEP, CM_ACTIVO, CM_DEP_ACUM). |
CompraDisponible | Línea de operaciones_sii.compras_ventas_detalle candidata a generar un activo fijo. |
ActivoEstadoActual | Vista materializada (v_activos_estado_actual) con depreciación acumulada, valor libro y porcentaje depreciado. |