Plan de Cuentas
Vista del Plan de Cuentas

El listado muestra para cada cuenta: código, nombre, tipo (Activo/Pasivo/Patrimonio/Ingreso/Gasto), subtipo VEN-NIIF (CURRENT_ASSET, FIXED_ASSET, OCI, etc.), nivel jerárquico, saldos deudor/acreedor/neto, y estado.
Filtro por subtipo

El filtro Subtipo permite acotar el listado por categorías VEN-NIIF para PYMES (Sec 4-5-29-31): Activo Corriente, Propiedad Planta y Equipo, Imp. Diferido Activo, ORI, REI, Costo de Ventas, etc.
Acceso
Ruta: Contabilidad > Plan de Cuentas
Permisos: accounting:read o accounting:*
El Plan de Cuentas es la estructura jerárquica de todas las cuentas contables utilizadas en el sistema. Cada cuenta tiene un código único, un subtipo VEN-NIIF, y está clasificada según su naturaleza contable.
Estructura jerárquica
El plan de cuentas usa 5 niveles organizados así:
Nivel 1 (raíz) 1 ACTIVO [tipo ASSET]
Nivel 2 (subcategoría) 1.1 ACTIVO CORRIENTE [subtipo CURRENT_ASSET]
Nivel 3 (grupo) 1.1.1 EFECTIVO EN CAJA Y BANCO
Nivel 4 (cuenta mayor) 1.1.1.01 BANCOS NACIONALES VES
Nivel 5 (auxiliar) 1.1.1.01.01 BANCO PROVINCIAL CTA 0108-XXXX
- Cuentas de resumen: L1, L2, L3 — no aceptan movimientos directos
- Cuentas de detalle: L4, L5 — aceptan movimientos (
acceptsTransactions=true)
Las 6 raíces L1
| Code | Nombre | Tipo |
|---|---|---|
| 1 | ACTIVO | ASSET |
| 2 | PASIVOS | LIABILITY |
| 3 | CAPITAL | EQUITY |
| 4 | INGRESOS | REVENUE |
| 5 | GASTOS OPERATIVOS | EXPENSE |
| 6 | COSTOS | EXPENSE |
Formulario de cuenta

El formulario captura todos los campos del modelo. Cambios sub2 destacados:
- "Código SUDEBAN (legacy, opcional)": el campo lleva un icono ℹ️ con tooltip explicando que es deprecated (ACE no es banco). Si se llena, debe ser exactamente 7 dígitos.
- Subtipo (selector): cambia de input libre a dropdown con opciones VEN-NIIF según el
accountTypeseleccionado. Es requerido para cuentas L1 y L2.
Selector de Subtipo (dropdown abierto)

El dropdown ofrece sólo subtipos válidos para el tipo de cuenta seleccionado (ASSET → CURRENT_ASSET, FIXED_ASSET, INTANGIBLE_ASSET, NON_CURRENT_ASSET, DEFERRED_TAX_ASSET).
Subtipos VEN-NIIF (sub2 — 2026-05-02)
Cada cuenta L1 y L2 lleva un accountSubtype que clasifica su rol en los EEFF según VEN-NIIF para PYMES Sec 4-5-29-31. Esto permite generar reportes financieros sin parsear el code.
Subtipos por categoría
| accountType | Subtipos válidos |
|---|---|
| ASSET | CURRENT_ASSET, FIXED_ASSET, INTANGIBLE_ASSET, NON_CURRENT_ASSET, DEFERRED_TAX_ASSET |
| LIABILITY | CURRENT_LIABILITY, LONG_TERM_LIABILITY, DEFERRED_TAX_LIABILITY |
| EQUITY | CAPITAL, RETAINED_EARNINGS, OTHER_EQUITY, OCI, REI, RESERVES, DIVIDENDS |
| REVENUE | OPERATING_REVENUE, OTHER_REVENUE, FINANCIAL_REVENUE |
| EXPENSE | OPERATING_EXPENSE, ADMINISTRATIVE_EXPENSE, FINANCIAL_EXPENSE, COST_OF_SALES, NON_OPERATING_EXPENSE |
Bloques nuevos sub2 (Sec 5/29/31)
ORI — Otros Resultados Integrales (Sec 5)
3.6 OTROS RESULTADOS INTEGRALES [subtype OCI]
3.6.01 Ajuste por revaluación PPE
3.6.02 Ganancias/pérdidas actuariales
3.6.03 Otros componentes ORI
Requeridos para presentar el Estado de Resultado Integral según Sec 5.
REI — Resultado por Exposición a la Inflación (Sec 31 / BA VEN-NIF 2 v4)
Reorganización del bloque 5.11 NO MONETARIOS:
5.11 NO MONETARIOS [subtype NON_OPERATING_EXPENSE]
5.11.01 REI sobre activos no monetarios
5.11.02 REI sobre patrimonio
5.11.03 REI sobre partidas monetarias
Impuestos diferidos (Sec 29)
1.2.4 IMPUESTO DIFERIDO ACTIVO [subtype DEFERRED_TAX_ASSET]
1.2.4.01 Diferencias temporales activas
2.2.2 IMPUESTO DIFERIDO PASIVO [subtype DEFERRED_TAX_LIABILITY]
2.2.2.01 Diferencias temporales pasivas
Validaciones (sub2)
El servicio chartOfAccountsService aplica:
accountSubtyperequerido para cuentas L1 y L2.- Nombre child ≠ parent: rechaza child con nombre idéntico al padre (case-insensitive). Anti-patrón detectado en auditoría.
- No proveedores en PUC: rechaza L4+ con razón social (matching
S.A.,C.A.,LTDA,INDUSTRIES,CORP,INC,LLC). Los proveedores van al módulo Vendors. - Hard-delete bloqueado si la cuenta está referenciada en
accounting_link_configurations,accounting_mapping_configurations,accounting_transaction_mappings, ojournal_entry_lines. UsarsoftDeleteAccount(isActive=false).
Campos del modelo
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | PK |
code | varchar(20) | Código jerárquico único (1.1.01.001) |
name | varchar(200) | Nombre de la cuenta |
accountType | enum | ASSET / LIABILITY / EQUITY / REVENUE / EXPENSE |
accountSubtype | varchar(30) | Subtipo VEN-NIIF (CHECK constraint enum) |
parentId | UUID nullable | FK a accounting_accounts(id) |
level | int | 1-5 |
isDebitNature | bool | true=deudora, false=acreedora |
acceptsTransactions | bool | Si acepta movimientos (cuentas de detalle) |
currency | varchar(3) | USD / VES / EUR |
isActive | bool | Soft-delete vía isActive=false |
fullCode | varchar(200) | Read-only, sincronizado con code por trigger |
code_sort_key | text | GENERATED ALWAYS (M8). Padding 4-dígitos por segmento para sort lexicográfico correcto. |
externalCode | varchar(10) | DEPRECATED: PDCA SUDEBAN 7-dígitos. Opcional, validado por regex ^\d{7}$. ACE no es banco. |
balance, balanceDebit, balanceCredit | decimal | Saldos calculados |
Sort lexicográfico (code_sort_key)
Antes de sub2, ordenar por code daba: 5.1 < 5.10 < 5.11 < 5.2 (string-sort roto).
code_sort_key resuelve esto padeando cada segmento a 4 dígitos:
| code | code_sort_key |
|---|---|
5.1 | 0005.0001 |
5.10 | 0005.0010 |
5.11 | 0005.0011 |
5.2 | 0005.0002 |
Sort lexicográfico produce 5.1, 5.2, 5.10, 5.11 ✓.
Reportes y queries deben usar ORDER BY code_sort_key no ORDER BY code.
Endpoints API
| Método | Ruta | Permiso |
|---|---|---|
| GET | /api/accounting/accounts | accounting:read |
| GET | /api/accounting/accounts/:id | accounting:read |
| POST | /api/accounting/accounts | accounting:create |
| PUT | /api/accounting/accounts/:id | accounting:update |
| DELETE | /api/accounting/accounts/:id | accounting:delete (hard-delete; bloqueado si tiene refs) |
| GET | /api/accounting/accounts/tree | accounting:read |
Filtros soportados en GET list: accountType, accountSubtype, isActive, acceptsTransactions, search (buscar en code, name, externalCode).
Migraciones aplicadas (sub2 — 2026-05-02)
| # | Archivo | Acción |
|---|---|---|
| M2 | 20260502000001-sub2-repair-full-code-nulls.js | Repara full_code NULL legacy |
| M3 | 20260502000002-sub2-add-account-subtype-check.js | Enum CHECK + populate de account_subtype |
| M4 | 20260502000003-sub2-add-external-code-format-check.js | Regex CHECK ^\d{7}$ + COMMENT deprecated |
| M5 | 20260502000004-sub2-sync-full-code-trigger.js | Trigger sync full_code = code |
| M6 | 20260502000005-sub2-eliminate-redundant-l3.js | Elimina L3 con name=parent.name; reasigna L4 al abuelo |
| M7 | 20260502000006-sub2-detect-vendor-accounts.js | Detecta+elimina razones sociales L5 (no crea Vendor automático) |
| M8 | 20260502000007-sub2-add-code-sort-key.js | Columna GENERATED code_sort_key + index |
| M9 | 20260502000008-sub2-seed-venniif-blocks.js | Siembra ORI (3.6.x), REI (5.11.0x), Imp. Diferido (1.2.4 + 2.2.2) |
Estado en producción tras sub2 (2026-05-02)
| Métrica | Valor |
|---|---|
| Total cuentas | 387 (era 401, -14) |
| Cuentas con subtype poblado | 367 / 387 (95%) |
| Subtipos distintos en uso | 18 |
Cuentas con full_code desfasado | 0 (trigger M5) |
external_code mal formado | 0 (CHECK M4) |
Cuentas con code_sort_key calculado | 387 (100%, columna GENERATED) |
| Cuentas L3 redundantes eliminadas | 21 (M6) |
| Cuentas-de-proveedor eliminadas | 4 (M7 — 6 quedaron pendientes por refs) |
| Cuentas nuevas sembradas (Sec 5/29/31) | 11 (ORI 4, REI 3, Imp.Diferido 4) |
Marco legal aplicable
| Norma | Aplicación |
|---|---|
| VEN-NIIF para PYMES Sec 4-5-29 | ✅ EEFF + impuestos diferidos |
| BA VEN-NIF 2 v4 (vigente 01-ene-2025) | ✅ Reexpresión INPC obligatoria + REI granular |
| Código de Comercio Art. 32-34 | ✅ Libros obligatorios — NO impone PUC |
| PDCA SUDEBAN 7-dígitos | ❌ NO aplica a ACE (no es banco) — externalCode opcional |
| LISLR Art. 173 | ⚠️ Depende de contribuyente especial |
ACE tiene libertad técnica total para definir su PUC mientras los EEFF cumplan VEN-NIIF Sec 4-7 + reexpresión Sec 31.