Centros de Costo
Cambio importante (mayo 2026): Hasta el Sub-proyecto 1 esta página describía lo que en realidad eran renglones presupuestarios (matriz de clasificación PDVSA). El concepto de "centro de costo" se redefinió a su semántica original: unidad organizacional con responsable, departamento y jerarquía. Si buscabas el clasificador PDVSA y la matriz de partidas, ve a Renglones Presupuestarios.
Acceso al Módulo
Menú principal: Contabilidad > Centros de Costo
Permisos requeridos: accounting:cost-centers:read (lectura), accounting:cost-centers:write (escritura)
Ruta API: /api/accounting/cost-centers
¿Qué es un Centro de Costo?
Un Centro de Costo (CC) es una unidad organizacional a la que se asigna responsabilidad por gastos e inversiones. Responde la pregunta:
"¿Quién o qué unidad es responsable de este flujo?"
A diferencia de los renglones presupuestarios (¿qué partida del presupuesto consume?) y las áreas funcionales (¿cómo se reporta a PDVSA?), el CC representa la dimensión organizacional. Es una de las 5 dimensiones contables del modelo dimensional — ver Dimensiones Contables.
Estructura del Modelo
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | PK |
code | VARCHAR(20) UNIQUE | Código corto (CC-OPS, CC-MTO-POZOS, …) |
name | VARCHAR(150) | Nombre descriptivo |
type | ENUM | PRODUCTIVE / ADMINISTRATIVE / SUPPORT / PROJECT |
parent_id | UUID FK self | CC padre en la jerarquía (opcional) |
level | INT | Profundidad en el árbol (0 = raíz) |
department_id | UUID FK | Departamento al que pertenece (NOT NULL) |
manager_id | UUID FK employees | Responsable / gerente (opcional) |
status | ENUM | ACTIVE / INACTIVE |
valid_from | DATE | Inicio de vigencia |
valid_to | DATE | Fin de vigencia (opcional) |
Restricciones
codeUNIQUE.parent_id != id(no auto-referencia).department_idNOT NULL — todo CC pertenece a un departamento.- No se permiten ciclos en la jerarquía (
parent → … → self).
Catálogo Inicial — 22 Centros de Costo
El sistema arranca con 22 CCs derivados de los 16 departamentos existentes más nodos productivos bajo OPS y MTO.
Nivel 0 (raíces)
| Código | Nombre | Tipo | Depto |
|---|---|---|---|
CC-DIR | Dirección Técnica | ADMINISTRATIVE | DIR |
CC-PLT | Planta | PRODUCTIVE | PLT |
CC-PROD | Producción | PRODUCTIVE | PROD |
Nivel 1 (gerencias)
| Código | Nombre | Tipo | Depto | Padre |
|---|---|---|---|---|
CC-COM | Comercialización | ADMINISTRATIVE | COM | CC-DIR |
CC-CONT | Contratación | SUPPORT | CONT | CC-DIR |
CC-FIN | Finanzas | ADMINISTRATIVE | FIN | CC-DIR |
CC-INF | Infraestructura | SUPPORT | INF | CC-DIR |
CC-LEG | Legal | ADMINISTRATIVE | LEG | CC-DIR |
CC-LOG | Logística | SUPPORT | LOG | CC-DIR |
CC-MTO | Mantenimiento | SUPPORT | MTO | CC-DIR |
CC-OPS | Operaciones | PRODUCTIVE | OPS | CC-PROD |
CC-PCP | PCP | SUPPORT | PCP | CC-DIR |
CC-PLAN | Planificación | ADMINISTRATIVE | PLAN | CC-DIR |
CC-RRHH | Recursos Humanos | ADMINISTRATIVE | RRHH | CC-DIR |
CC-SIHOA | SIHOA | SUPPORT | SIHOA | CC-DIR |
CC-YAC | Yacimientos | PRODUCTIVE | YAC | CC-PROD |
Nivel 2 (productivos bajo OPS y MTO)
| Código | Nombre | Tipo | Padre |
|---|---|---|---|
CC-OPS-POZOS | Operaciones Pozos | PRODUCTIVE | CC-OPS |
CC-OPS-ESTACIONES | Operaciones Estaciones | PRODUCTIVE | CC-OPS |
CC-OPS-RECOLECCION | Operaciones Recolección | PRODUCTIVE | CC-OPS |
CC-MTO-POZOS | Mantenimiento Pozos | PRODUCTIVE | CC-MTO |
CC-MTO-PLANTA | Mantenimiento Planta | PRODUCTIVE | CC-MTO |
CC-MTO-FLOTA | Mantenimiento Flota | PRODUCTIVE | CC-MTO |
Tipos de Centro de Costo
| Tipo | Significado | Ejemplos |
|---|---|---|
PRODUCTIVE | Genera valor / produce hidrocarburos | Operaciones, Yacimientos, Mantenimiento Pozos |
ADMINISTRATIVE | Soporte administrativo | Dirección, Finanzas, Legal, RRHH |
SUPPORT | Soporte operativo no productivo | Logística, SIHOA, Infraestructura |
PROJECT | CC dedicado a proyectos específicos | (creados ad hoc) |
Validaciones de Negocio
costCenterService.create()
parent_idno puede ser self ni descendiente (anti-ciclo).department_iddebe existir y estarACTIVE.manager_ides opcional pero, si se proporciona, debe ser un employeeACTIVE.levelse calcula automáticamente desde el padre (parent.level + 1).
costCenterService.delete()
Un CC sólo puede eliminarse si:
- No tiene asientos contables asociados (
journal_entry_lines.cost_center_id). - No tiene
budget_linesabiertos. - No tiene
cost_centershijos activos.
Si está bloqueado, se puede desactivar (status=INACTIVE) para ocultarlo de selectores.
Operaciones Disponibles
| Operación | Endpoint | Permiso |
|---|---|---|
| Listar | GET /api/accounting/cost-centers | :read |
| Detalle | GET /api/accounting/cost-centers/:id | :read |
| Crear | POST /api/accounting/cost-centers | :write |
| Editar | PUT /api/accounting/cost-centers/:id | :write |
| Eliminar / desactivar | DELETE /api/accounting/cost-centers/:id | :write |
| Árbol descendiente | GET /api/accounting/cost-centers/:id/tree | :read |
| Por departamento | GET /api/accounting/cost-centers/by-department/:departmentId | :read |
Vinculación con Otros Módulos
Con Departamentos
- Cada CC pertenece a un departamento (FK obligatoria).
- La referencia circular previa (
Department.cost_center_id↔CostCenter.department_id) se eliminó: ahora el CC apunta al depto, pero el depto no apunta de vuelta.
Con Empleados
- Cada CC opcionalmente tiene un
manager_idque apunta a un employee. Es el responsable contable.
Con Nómina
payrollServicepropagacost_center_idyfunctional_area_id = 'PER'al asiento al cerrar el período.
Con Contabilidad
- Cada
journal_entry_linellevacost_center_idcomo una de las 5 dimensiones. - Para cuentas EXPENSE/REVENUE,
cost_center_ides obligatorio (journalEntryService.create()lo valida).
Con Proyectos
- Cuando un proyecto se ejecuta, los gastos típicamente cargan
cost_center_iddel responsable +project_iddel proyecto. Las dos dimensiones son independientes.
Vista de Árbol vs. Lista
| Vista | Cuándo usarla |
|---|---|
| Árbol | Para entender la estructura organizacional completa |
| Lista | Para buscar y editar rápidamente |
La vista de árbol expande/colapsa cada nodo y muestra: código, nombre, tipo, estado, responsable.
Crear un Centro de Costo
- Contabilidad > Centros de Costo > + Nuevo.
- Capturar:
- Código UNIQUE (ej.
CC-OPS-NORTE). - Nombre descriptivo.
- Tipo: PRODUCTIVE / ADMINISTRATIVE / SUPPORT / PROJECT.
- Departamento (obligatorio).
- CC Padre (opcional, para jerarquía).
- Responsable (opcional, employee).
- Vigencia desde (opcional, default = hoy).
- Código UNIQUE (ej.
- Guardar.
Permisos
accounting:cost-centers:read Ver CCs
accounting:cost-centers:write Crear / editar / desactivar CCs
Estos permisos son distintos de
budget:positions:*, que controlan los renglones presupuestarios. Un usuario puede tener uno sin el otro.
Diferencia con Renglones Presupuestarios y Áreas Funcionales
| Concepto | Pregunta | Tabla |
|---|---|---|
| Centro de Costo | ¿Quién es responsable? | cost_centers (22) |
| Renglón Presupuestario | ¿Qué partida del presupuesto consume? | budget_positions (149) |
| Área Funcional | ¿Cómo se reporta a PDVSA? | functional_areas (26) |
Las tres son dimensiones independientes que pueden cruzarse libremente en cualquier asiento. Ver Dimensiones Contables.
Documentación relacionada
- Gestión de Centros de Costo — guía operativa paso a paso.
- Dimensiones Contables
- Áreas Funcionales
- Renglones Presupuestarios
- Departamentos