# RF-FIN-001: Plan de Cuentas ## Identificacion | Campo | Valor | |-------|-------| | **ID** | RF-FIN-001 | | **Modulo** | MGN-010 Financial | | **Titulo** | Plan de Cuentas | | **Prioridad** | P0 - Critica | | **Estado** | Draft | | **Fecha** | 2025-12-05 | --- ## Descripcion El sistema debe permitir definir y gestionar el plan de cuentas contables, con estructura jerarquica, multiples niveles, y soporte para diferentes normativas contables (PCGA, NIIF). --- ## Requisitos Funcionales ### RF-FIN-001.1: Estructura del Plan de Cuentas ```typescript interface ChartOfAccounts { id: UUID; tenantId: UUID; code: string; // "PCGA-2025" name: string; // "Plan General Contable 2025" description?: string; standard: AccountingStandard; baseCurrencyId: UUID; // Moneda base isActive: boolean; createdAt: TIMESTAMPTZ; updatedAt: TIMESTAMPTZ; } enum AccountingStandard { PCGA = 'pcga', // Plan Contable General NIIF = 'niif', // Normas Internacionales US_GAAP = 'us_gaap', // US Generally Accepted CUSTOM = 'custom' // Personalizado } ``` ### RF-FIN-001.2: Estructura de Cuenta ```typescript interface Account { id: UUID; chartId: UUID; // FK al plan parentId?: UUID; // FK cuenta padre code: string; // "1.1.01.001" name: string; // "Caja General" description?: string; accountType: AccountType; nature: AccountNature; level: number; // Nivel en jerarquia isDetail: boolean; // Permite movimientos isActive: boolean; currencyId?: UUID; // Moneda especifica tags?: string[]; // Etiquetas createdAt: TIMESTAMPTZ; updatedAt: TIMESTAMPTZ; } enum AccountType { ASSET = 'asset', // Activo LIABILITY = 'liability', // Pasivo EQUITY = 'equity', // Capital INCOME = 'income', // Ingreso EXPENSE = 'expense', // Gasto COST = 'cost', // Costo CONTRA_ASSET = 'contra_asset', // Contra-activo CONTRA_LIABILITY = 'contra_liability' } enum AccountNature { DEBIT = 'debit', // Naturaleza deudora CREDIT = 'credit' // Naturaleza acreedora } ``` ### RF-FIN-001.3: Jerarquia de Cuentas Estructura tipica: ``` 1. ACTIVO (Grupo) 1.1. Activo Corriente (Subgrupo) 1.1.01. Efectivo y Equivalentes (Rubro) 1.1.01.001. Caja General (Cuenta de detalle) 1.1.01.002. Bancos (Auxiliar) 1.1.01.002.001. Banco Nacional - Cuenta 123 1.1.02. Cuentas por Cobrar ... 2. PASIVO ... ``` ### RF-FIN-001.4: Reglas de Codificacion ```typescript interface CodingRules { separator: string; // "." o "-" levelLengths: number[]; // [1, 1, 2, 3] = X.X.XX.XXX maxLevels: number; // Maximo niveles permitidos autoCode: boolean; // Generar codigo automatico } // Validacion de codigo function validateAccountCode(code: string, rules: CodingRules): boolean { const parts = code.split(rules.separator); if (parts.length > rules.maxLevels) return false; return parts.every((part, i) => part.length === rules.levelLengths[i]); } ``` ### RF-FIN-001.5: Saldos de Cuenta ```typescript interface AccountBalance { accountId: UUID; periodId: UUID; openingDebit: Decimal; openingCredit: Decimal; movementDebit: Decimal; movementCredit: Decimal; closingDebit: Decimal; closingCredit: Decimal; balance: Decimal; // Saldo final balanceInBase: Decimal; // En moneda base } ``` ### RF-FIN-001.6: Planes de Cuentas Predefinidos El sistema incluye templates: | Template | Descripcion | Cuentas | |----------|-------------|---------| | PCGA_MX | Plan Contable Mexico | ~500 | | PCGA_CO | Plan Contable Colombia | ~450 | | NIIF_BASIC | NIIF Simplificado | ~200 | | MINIMAL | Minimo funcional | ~50 | --- ## Operaciones ### Listar Planes de Cuentas ```typescript GET /api/v1/financial/charts Response: { "data": [ { "id": "uuid", "code": "PCGA-2025", "name": "Plan General Contable 2025", "standard": "pcga", "accountCount": 250, "isActive": true } ] } ``` ### Obtener Arbol de Cuentas ```typescript GET /api/v1/financial/charts/:id/accounts?tree=true Response: { "chart": { "id": "...", "name": "..." }, "accounts": [ { "id": "uuid", "code": "1", "name": "ACTIVO", "level": 1, "isDetail": false, "children": [ { "id": "uuid2", "code": "1.1", "name": "Activo Corriente", "children": [...] } ] } ] } ``` ### Crear Cuenta ```typescript POST /api/v1/financial/charts/:chartId/accounts { "parentId": "uuid-parent", "code": "1.1.01.003", "name": "Caja Chica", "accountType": "asset", "nature": "debit", "isDetail": true } ``` ### Obtener Saldo de Cuenta ```typescript GET /api/v1/financial/accounts/:id/balance?periodId=uuid Response: { "accountId": "uuid", "accountCode": "1.1.01.001", "accountName": "Caja General", "period": { "name": "Diciembre 2025" }, "openingBalance": 50000, "movements": { "debit": 100000, "credit": 80000 }, "closingBalance": 70000 } ``` ### Importar Plan de Template ```typescript POST /api/v1/financial/charts/import { "template": "PCGA_MX", "name": "Mi Plan 2025", "customizations": { "addAccounts": [...], "removeAccounts": [...] } } ``` --- ## Reglas de Negocio | ID | Regla | Severidad | |----|-------|-----------| | BR-001 | Codigo de cuenta unico dentro del plan | Error | | BR-002 | No eliminar cuenta con movimientos | Error | | BR-003 | Solo cuentas de detalle aceptan movimientos | Error | | BR-004 | Tipo de cuenta no modificable si tiene movimientos | Error | | BR-005 | Balance de cuenta padre = suma de hijos | Info | --- ## Criterios de Aceptacion - [ ] CRUD de planes de cuentas - [ ] Estructura jerarquica ilimitada - [ ] Templates predefinidos importables - [ ] Validacion de codigos - [ ] Calculo automatico de saldos - [ ] No permitir eliminar cuentas con movimientos - [ ] Exportar/importar plan en Excel --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | Requirements-Analyst | Creacion inicial |