Saltar al contenido principal

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

CampoTipoDescripción
idUUIDPK
codeVARCHAR(20) UNIQUECódigo corto (CC-OPS, CC-MTO-POZOS, …)
nameVARCHAR(150)Nombre descriptivo
typeENUMPRODUCTIVE / ADMINISTRATIVE / SUPPORT / PROJECT
parent_idUUID FK selfCC padre en la jerarquía (opcional)
levelINTProfundidad en el árbol (0 = raíz)
department_idUUID FKDepartamento al que pertenece (NOT NULL)
manager_idUUID FK employeesResponsable / gerente (opcional)
statusENUMACTIVE / INACTIVE
valid_fromDATEInicio de vigencia
valid_toDATEFin de vigencia (opcional)

Restricciones

  • code UNIQUE.
  • parent_id != id (no auto-referencia).
  • department_id NOT 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ódigoNombreTipoDepto
CC-DIRDirección TécnicaADMINISTRATIVEDIR
CC-PLTPlantaPRODUCTIVEPLT
CC-PRODProducciónPRODUCTIVEPROD

Nivel 1 (gerencias)

CódigoNombreTipoDeptoPadre
CC-COMComercializaciónADMINISTRATIVECOMCC-DIR
CC-CONTContrataciónSUPPORTCONTCC-DIR
CC-FINFinanzasADMINISTRATIVEFINCC-DIR
CC-INFInfraestructuraSUPPORTINFCC-DIR
CC-LEGLegalADMINISTRATIVELEGCC-DIR
CC-LOGLogísticaSUPPORTLOGCC-DIR
CC-MTOMantenimientoSUPPORTMTOCC-DIR
CC-OPSOperacionesPRODUCTIVEOPSCC-PROD
CC-PCPPCPSUPPORTPCPCC-DIR
CC-PLANPlanificaciónADMINISTRATIVEPLANCC-DIR
CC-RRHHRecursos HumanosADMINISTRATIVERRHHCC-DIR
CC-SIHOASIHOASUPPORTSIHOACC-DIR
CC-YACYacimientosPRODUCTIVEYACCC-PROD

Nivel 2 (productivos bajo OPS y MTO)

CódigoNombreTipoPadre
CC-OPS-POZOSOperaciones PozosPRODUCTIVECC-OPS
CC-OPS-ESTACIONESOperaciones EstacionesPRODUCTIVECC-OPS
CC-OPS-RECOLECCIONOperaciones RecolecciónPRODUCTIVECC-OPS
CC-MTO-POZOSMantenimiento PozosPRODUCTIVECC-MTO
CC-MTO-PLANTAMantenimiento PlantaPRODUCTIVECC-MTO
CC-MTO-FLOTAMantenimiento FlotaPRODUCTIVECC-MTO

Tipos de Centro de Costo

TipoSignificadoEjemplos
PRODUCTIVEGenera valor / produce hidrocarburosOperaciones, Yacimientos, Mantenimiento Pozos
ADMINISTRATIVESoporte administrativoDirección, Finanzas, Legal, RRHH
SUPPORTSoporte operativo no productivoLogística, SIHOA, Infraestructura
PROJECTCC dedicado a proyectos específicos(creados ad hoc)

Validaciones de Negocio

costCenterService.create()

  • parent_id no puede ser self ni descendiente (anti-ciclo).
  • department_id debe existir y estar ACTIVE.
  • manager_id es opcional pero, si se proporciona, debe ser un employee ACTIVE.
  • level se 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_lines abiertos.
  • No tiene cost_centers hijos activos.

Si está bloqueado, se puede desactivar (status=INACTIVE) para ocultarlo de selectores.


Operaciones Disponibles

OperaciónEndpointPermiso
ListarGET /api/accounting/cost-centers:read
DetalleGET /api/accounting/cost-centers/:id:read
CrearPOST /api/accounting/cost-centers:write
EditarPUT /api/accounting/cost-centers/:id:write
Eliminar / desactivarDELETE /api/accounting/cost-centers/:id:write
Árbol descendienteGET /api/accounting/cost-centers/:id/tree:read
Por departamentoGET /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_idCostCenter.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_id que apunta a un employee. Es el responsable contable.

Con Nómina

  • payrollService propaga cost_center_id y functional_area_id = 'PER' al asiento al cerrar el período.

Con Contabilidad

  • Cada journal_entry_line lleva cost_center_id como una de las 5 dimensiones.
  • Para cuentas EXPENSE/REVENUE, cost_center_id es obligatorio (journalEntryService.create() lo valida).

Con Proyectos

  • Cuando un proyecto se ejecuta, los gastos típicamente cargan cost_center_id del responsable + project_id del proyecto. Las dos dimensiones son independientes.

Vista de Árbol vs. Lista

VistaCuándo usarla
ÁrbolPara entender la estructura organizacional completa
ListaPara 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

  1. Contabilidad > Centros de Costo > + Nuevo.
  2. 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).
  3. 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

ConceptoPreguntaTabla
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