Saltar al contenido principal

Flujo Operativo — Renglones Presupuestarios y Centros de Costo

Cambio importante (mayo 2026): Tras el Sub-proyecto 1, lo que antes se llamaba "centro de costo" en este flujo es ahora un renglón presupuestario (budget_position). Los centros de costo verdaderos (cost_centers nuevo) son unidades organizacionales que aparecen como dimensión adicional en cada operación. Ver Dimensiones Contables.

Descripción de los flujos operativos de las dimensiones contables (renglón presupuestario, área funcional, centro de costo) en el sistema ERP del Consorcio Alvorada & Cladoca.


Flujo General: Del Renglón al Dashboard

flowchart TD
A[Configurar Renglón Presupuestario\ncon Área Funcional PDVSA] --> B{Tipo}
B -->|OPEX| C[Plan Presupuestario OPEX\nBudgetPlan]
B -->|CAPEX| D[Plan Presupuestario CAPEX\nBudgetPlan / Línea CAPEX]
C --> E[Línea Presupuestaria\nBudgetLine]
D --> F[Línea Presupuestaria\nBudgetLine]
E --> G{Origen del Gasto}
F --> G
G -->|Orden de Compra| H[PurchaseOrder\nRequisición → OC → Recepción]
G -->|Contrato / Valuación| I[ProjectValuation\nContrato → Valuación → Pago]
G -->|Gasto Interno| J[ProjectExpense\nGasto → Aprobación → Pago]
H --> K[BudgetCommitment\nComprometido]
I --> K
J --> K
K --> L[BudgetExecution\nEjecutado al Pagar]
L --> M[Dashboard]
M --> N[Ejecución por CC]
M --> O[Agrupación PDVSA]
M --> P[OPEX vs CAPEX]

Flujo de Creación de un Renglón Presupuestario

sequenceDiagram
actor Admin
participant Sistema
participant BD as Base de Datos

Admin->>Sistema: POST /budget/positions
Note over Admin,Sistema: { code, name, costType, functionalAreaId, category }
Sistema->>BD: INSERT BudgetPosition
BD-->>Sistema: budgetPosition creado
Sistema-->>Admin: 201 Created { id, code, functionalAreaId, costType }

Admin->>Sistema: POST /budget/plans
Note over Admin,Sistema: { fiscalYear, budgetType: OPEX/CAPEX }
Sistema->>BD: INSERT BudgetPlan
BD-->>Sistema: plan creado

Admin->>Sistema: POST /budget/lines
Note over Admin,Sistema: { budgetPlanId, budgetPositionId, costCenterId, amount }
Sistema->>BD: INSERT BudgetLine con budgetPositionId + costCenterId
BD-->>Sistema: línea presupuestaria creada (functionalAreaId inferido desde bp)

Flujo OPEX: Requisición → Orden de Compra → Ejecución

stateDiagram-v2
[*] --> Requisicion: Solicitud de Compra
Requisicion --> OC_Pendiente: Aprobar Requisición\nGenerates BudgetCommitment (PENDING)
OC_Pendiente --> OC_Aprobada: Aprobar OC\nBudgetCommitment = APPROVED
OC_Aprobada --> Recepcion: Recibir Mercancía/Servicio
Recepcion --> Factura: Generar Factura Proveedor
Factura --> Pago: Procesar Pago
Pago --> [*]: BudgetExecution creado\nBudgetCommitment = PAID

Impacto presupuestario por etapa:

EtapaMonto ComprometidoMonto Ejecutado
Requisición aprobada+X0
OC aprobadaX (sin cambio)0
RecepciónX (sin cambio)0
Pago procesado-X+X

Flujo CAPEX: Contrato → Valuación → Pago

stateDiagram-v2
[*] --> Contrato: Crear Contrato con Contratista
Contrato --> Línea CAPEX: Crear Línea CAPEX (Authorization For Expenditure)
Línea CAPEX --> Valuacion_Draft: Crear Valuación\nBudgetCommitment = PENDING
Valuacion_Draft --> Valuacion_Aprobada: Aprobar Valuación\nAsiento: Construcción D / CxP C
Valuacion_Aprobada --> Factura_Contratista: Generar Factura Contratista
Factura_Contratista --> Pago_Contratista: Procesar Pago\nAsiento: CxP D / Banco C
Pago_Contratista --> [*]: BudgetExecution creado\nBudgetCommitment = PAID

Flujo de Datos en el Dashboard

flowchart LR
subgraph Backend
BE1[BudgetExecution] --> Q1[Query: GROUP BY budgetPositionId]
Q1 --> EP1[GET /dashboard/execution-by-position]
BE1 --> Q2[Query: GROUP BY functionalAreaId]
Q2 --> EP2[GET /dashboard/by-functional-area]
BC[BudgetCommitment] --> Q3[Query: GROUP BY costCenterId]
Q3 --> EP3[GET /commitments/summary/by-cost-center]
end

subgraph Redux
EP1 --> T1[fetchExecutionByPosition]
EP2 --> T2[fetchByFunctionalArea]
EP3 --> T3[fetchCommitmentsByCostCenter]
T1 --> S1[state.budget.executionByPosition]
T2 --> S2[state.budget.byFunctionalArea]
T3 --> S3[state.budget.commitmentsByCostCenter]
end

subgraph Dashboards
S1 --> D1[BudgetDashboard\nTabla Renglón + Semáforo]
S2 --> D2[BudgetDashboard\nGráfico Dona Áreas Funcionales]
S1 --> D3[RealTimeDashboard\nSección por Dimensión]
S1 --> D4[BudgetExecutionDashboard\nTab 5 - Por Renglón]
S3 --> D5[BudgetCommitmentDashboard\nSección Compromisos CC]
end

Reglas de Negocio

Semáforo de Ejecución

El color del indicador de progreso en tablas de centros de costo sigue estas reglas:

% EjecuciónColorSignificado
< 80%VerdeEjecución normal
80% - 95%AmarilloPrecaución — cerca del límite
> 95%RojoAlerta — presupuesto casi agotado
> 100%RojoSobre-presupuesto

Disponible = Planificado - Comprometido - Ejecutado

El monto disponible se calcula:

disponible = planificado - comprometido - ejecutado

Si disponible < 0, el centro de costo está sobre-presupuesto y se muestra en rojo en los dashboards.

Herencia de Tipo (OPEX/CAPEX)

  • BudgetLine.budgetType no existe como columna independiente.
  • El tipo se determina siempre a través de BudgetLine → BudgetPlan.budgetType.
  • Al filtrar por OPEX/CAPEX, siempre se aplica el filtro en el include de BudgetPlan, no en BudgetLine.

Permisos Requeridos

AcciónPermiso
Ver dashboards de presupuestobudget:read
Ver desgloses por renglónbudget:positions:read
Crear/editar renglonesbudget:positions:write
Ver desgloses por centro de costoaccounting:cost-centers:read
Crear/editar centros de costoaccounting:cost-centers:write
Ver reportes de compromisosbudget:read

Referencias