A-Conta ERP · Informe Técnico
Módulo de Contabilidad
Estado de avance y plan de desarrollo para cierre del proyecto
1. Resumen Ejecutivo
7
Funcionalidades faltantes
~79
Horas estimadas restantes
Resumen de situación
El módulo de contabilidad tiene una base sólida: 47 controllers Laravel, 48 modelos, 98+ rutas API y 21 de 24 vistas Vue completamente funcionales. Los flujos principales — Registro SII, Centralización, Vouchers y Plan de Cuentas — están operativos. Las brechas críticas son el sistema de asientos automáticos post-cierre (0% de lógica de ejecución), el control de períodos contables y tres vistas de Reportes con funciones incompletas.
2. Inventario completo de vistas
2.1 Plan de Cuentas
| Vista | Ruta Frontend | Estado | Notas |
| Cuentas Madres | /contabilidad/cuentas/cmadres | COMPLETA | CRUD completo, selects en cascada Tipo → Categoría |
| Cuentas Contables | /contabilidad/cuentas/cuentas | COMPLETA | CRUD completo, jerarquía 4 niveles, recarga dinámica |
| Sub Cuentas | /contabilidad/cuentas/subcuentas | COMPLETA | CRUD completo, filtrado dinámico por cuenta madre |
2.2 Registro SII
| Vista | Ruta Frontend | Estado | Notas |
| Compras SII | /contabilidad/registrosii/ccompras | COMPLETA | Tabla paginada, asiento contable, exportar Excel, activos fijos |
| Ventas SII | /contabilidad/registrosii/cventas | COMPLETA | CRUD completo, 3 modales, exportar Excel |
| Honorarios Compras | /contabilidad/registrosii/hcompras | COMPLETA | CRUD, cálculo brutos y retenido, centros de costo |
| Honorarios Ventas | /contabilidad/registrosii/hventas | COMPLETA | CRUD, validación debe/haber |
| Sincronización Masiva SII | /contabilidad/registrosii/sicsii | COMPLETA | 5 endpoints paralelos, barra progreso, reintentos automáticos |
2.3 Centralización
| Vista | Ruta Frontend | Estado | Notas |
| Centralizar Compras | /contabilidad/centralizacion/cencompras | COMPLETA | 4 modales, actualización masiva por proveedor, genera voucher |
| Centralizar Ventas | /contabilidad/centralizacion/cenventas | COMPLETA | 4 modales, actualización por cliente, genera voucher |
| Centralizar Hon. Compras | /contabilidad/centralizacion/cenhcompras | COMPLETA | 3 modales, paginadores anidados |
| Centralizar Hon. Ventas | /contabilidad/centralizacion/cenhventas | FALTANTE | No existe esta vista. Solo existe cenhcompras. |
2.4 Vouchers
| Vista | Ruta Frontend | Estado | Notas |
| Vouchers | /contabilidad/voucher/voucher | COMPLETA | CRUD completo, validación cuadre Debe=Haber, folio automático, exportar |
2.5 Libros Contables (Foliados)
| Vista | Ruta Frontend | Estado | Notas |
| Libro Diario | /contabilidad/libros/ldiario | COMPLETA | Foliación integrada, exportar PDF |
| Libro Mayor | /contabilidad/libros/mayor | COMPLETA | Saldos acumulados por cuenta, exportar PDF |
| Balance General | /contabilidad/libros/bgeneral | COMPLETA | Totales activo/pasivo/resultado del ejercicio |
2.6 Reportes (vistas parciales)
| Vista | Ruta Frontend | Estado | Problema específico |
| Reporte Balance General | /contabilidad/reportes/bgeneral | PARCIAL | Función agregarNuevoItem() referenciada en el template pero no implementada en el script. El botón "Agregar línea" no funciona. |
| Reporte Libro Diario | /contabilidad/reportes/ldiario | PARCIAL | Error en línea 109: v-model="folios.folio" sobre un array (debería ser folios[0].folio). Modal de foliado no guarda correctamente. |
| Reporte Libro Mayor | /contabilidad/reportes/mayor | PARCIAL | Solo lectura. Tiene foliación con tipo_libro=2 pero le falta el mismo ajuste de binding que ldiario. |
2.7 Rendiciones y Formularios
| Vista | Ruta Frontend | Estado | Notas |
| Rendiciones | /contabilidad/rendiciones/rendicion | COMPLETA | CRUD completo con documentos SII asociados |
| Formulario 29 | /contabilidad/formularios/form29 | COMPLETA | CRUD de parámetros, exportar |
2.8 Parámetros
| Vista | Ruta Frontend | Estado | Notas |
| Impuestos | /contabilidad/parametros/impuestos | COMPLETA | Tablas de tramos mensuales y anuales, 5 tabs |
| Cuenta Impuestos | /contabilidad/parametros/cparametros | COMPLETA | 6 tabs por tipo de cuenta contable |
| Parámetros Formularios | /contabilidad/parametros/parformularios | COMPLETA | CRUD básico |
| Asientos Predefinidos | /contabilidad/parametros/aautomaticos | PARCIAL | Solo lista/lectura. Campo "Carga" mal configurado (key en lugar de model). Sin sección de líneas debe/haber. Sin botón ejecutar. |
3. Estado del Backend (Laravel)
Cobertura general del backend
47 controllers, 48 modelos, 98+ rutas API definidas. La mayoría de los CRUD están implementados. Las brechas son puntuales: dos controllers de asientos automáticos con métodos vacíos y ausencia total de lógica de ejecución/cierre de período.
| Controller | index/filtro | store | update | destroy | Métodos especiales |
ConVoucherController | OK | OK | OK | OK | Balance() — genera balance completo con activo/pasivo/resultado |
ConLibroDiarioController | OK | OK | OK | OK | Solo CRUD — generación real del libro ocurre en ConVoucher::store() |
ConLibroFoliadoController | OK | OK | OK | OK | foliarAnual(), foliarAnualMayor() — genera PDFs foliados |
ConSiiComprasController | OK | OK | OK | OK | Importación CSV, descarga SII |
ConSiiVentaController | OK | OK | OK | OK | Importación CSV, descarga SII |
ConRendicionController | OK | OK | OK | OK | — |
ConAAutomaticoController | OK | VACÍO | VACÍO | VACÍO | Sin método ejecutar(). Sin lógica de generación de asientos. |
ConAAutDetalleController | VACÍO | VACÍO | VACÍO | VACÍO | Controller completamente vacío. Solo Filtro() con campo incorrecto (empresa_id en vez de par_empresa_id). |
ConCCostosAcumuladoController | ? | ? | ? | ? | Existe pero sin vista frontend |
ConPAuxiliaresController | ? | ? | ? | ? | Existe pero sin vista frontend |
3.1 Estructura de Base de Datos — Asientos Automáticos
Tablas existentes para el sistema de asientos automáticos
con_a_automaticos
- id
- nombre (string)
- con_t_voucher_id (FK)
- ajuste (bigint)
- t_ajuste (bigint)
- par_empresa_id (FK)
- unico (nullable)
- estado (tinyint)
- carga (integer) — 1=Apertura, 0=Cierre
- tipo_asiento — FALTA (PPM, Deprec., etc.)
- formula / fuente_monto — FALTA
- cuenta_origen_id — FALTA
- porcentaje / monto_fijo — FALTA
con_a_aut_detalles
- id
- con_a_automatico_id (FK)
- con_sub_cuenta_id (FK)
- debe_haber (enum)
- estado (tinyint)
- fuente_monto — FALTA
- porcentaje — FALTA
- monto_fijo — FALTA
- cuenta_origen_id — FALTA
Tablas relacionadas (ya existen)
- par_periodos — períodos del sistema
- par_periodo_empresas — período por empresa
- con_vouchers — donde se generan los asientos
- con_libro_diarios — líneas del diario
- con_folio_vouchers — foliación automática
- con_cierre_contable — FALTA (tabla nueva)
- con_asientos_generados — auditoría, FALTA
4. Módulo de Asientos Automáticos Post-Cierre (NUEVO)
Estado actual: 20% completado
Las tablas de base de datos existen pero están incompletas (faltan campos clave). Los controllers tienen métodos vacíos. No existe ninguna lógica de ejecución ni de cierre de período contable. Este es el módulo de mayor complejidad pendiente.
4.1 Tipos de asientos automáticos a implementar
| Tipo | Descripción | Fuente del monto | Momento |
| PPM Acumulado | Provisión mensual por ventas netas del período | % configurable sobre saldo cuenta ventas | Cierre de mes |
| Depreciación | Cargo mensual por activos fijos | Monto fijo mensual por activo o cuenta | Cierre de mes |
| Provisión Impuesto | Estimación del impuesto a la renta del período | % configurable sobre utilidad antes de impuesto | Cierre de mes |
| Reclasificación | Traslado de saldo entre cuentas (ej: corto/largo plazo) | Saldo completo de cuenta origen | Cierre de mes / Apertura |
| Formulario 29 | Generación del asiento de impuesto mensual (ya existe el seed) | Calculado desde cuentas de IVA | Cierre de mes |
| Cierre Anual | Traslado de resultado del ejercicio a patrimonio | Saldo cuenta resultado | Cierre de año |
| Apertura Siguiente | Saldos iniciales del período nuevo desde balance de cierre | Saldos finales de todas las cuentas | Apertura de mes/año |
| Personalizado | Definido completamente por el usuario | Monto fijo o % definido por usuario | Configurable |
4.2 Checklist de desarrollo — Backend
- Completar
ConAAutomaticoController::store(), update(), destroy()
- Completar
ConAAutDetalleController completo (actualmente vacío en todos sus métodos)
- Corregir campo incorrecto en
ConAAutDetalleController::Filtro() — usa empresa_id en vez de par_empresa_id
- Agregar relación
hasMany en modelo ConAAutomatico → ConAAutDetalle
- Migración: agregar campos
tipo_asiento, fuente_monto, cuenta_origen_id, porcentaje, monto_fijo a con_a_automaticos
- Migración: agregar campos
fuente_monto, porcentaje, monto_fijo, cuenta_origen_id a con_a_aut_detalles
- Crear migración tabla
con_cierre_contable (empresa, período, estado, fecha_cierre, usuario_cierre, asientos_generados_ids)
- Crear
ConCierreContableController con método ejecutarCierre(empresa, periodo) que: (1) valide cuadre debe=haber, (2) lea asientos con carga=0, (3) calcule montos según fuente, (4) genere vouchers automáticos, (5) cierre el período
- Crear método
ejecutarApertura(empresa, periodo) que genere asientos de inicio del mes siguiente
- Crear método
previewCierre(empresa, periodo) que devuelva los asientos que se generarían SIN ejecutarlos
- Crear método
revertirCierre(empresa, periodo) para deshacer un cierre (solo si no hay períodos posteriores cerrados)
- Agregar rutas en
api.php para los nuevos endpoints de cierre
4.3 Checklist de desarrollo — Frontend
- Rediseñar
aautomaticos.vue: corregir campo "Carga" en el formulario (agregar como dropdown editable: Cierre / Apertura / Cierre Anual)
- Agregar en
aautomaticos.vue selector de Tipo de asiento (PPM, Depreciación, Provisión, Reclasificación, Personalizado)
- Agregar en
aautomaticos.vue selector de Fuente del monto (% de cuenta, monto fijo, saldo completo de cuenta)
- Agregar en
aautomaticos.vue tabla de líneas debe/haber (detalle del asiento) usando ConAAutDetalle
- Crear vista
pages/contabilidad/cierre/cierre-periodo.vue con:
- — Selector de empresa y período
- — Panel de validaciones previas (todos SII cargados, cuadre debe=haber)
- — Botón "Vista previa de asientos" que llame a
previewCierre()
- — Tabla de asientos que se generarán (con montos calculados)
- — Botón "Ejecutar cierre" con confirmación
- — Log de asientos generados con número de voucher
- — Botón "Revertir cierre" con advertencia
- Agregar
cierre-periodo al menú de Contabilidad en menuOptions.js
- Crear vista
pages/contabilidad/periodos/periodos-contables.vue — semáforo de estado de períodos (Abierto / En cierre / Cerrado) con opción de reabrir
5. Correcciones inmediatas — Vistas parciales
| # | Archivo | Problema exacto | Corrección | Estimado |
| 1 |
reportes/bgeneral.vue |
Función agregarNuevoItem() llamada en línea 155 del template pero no existe en el <script> |
Implementar la función que agrega { con_sub_cuenta_id:'', monto1:0, monto2:0, filtro:'', mostrarOpciones:false } al array nuevoitems |
2 hrs |
| 2 |
reportes/ldiario.vue |
Línea 109: v-model="folios.folio" — folios es un ref([]) (array), no un objeto. El binding falla silenciosamente. |
Cambiar a v-model="folios[0]?.folio" o refactorizar folios como ref({}) |
1 hr |
| 3 |
reportes/mayor.vue |
Mismo problema de binding que ldiario con folios. Tipo de libro hardcodeado como 2 sin validación. |
Mismo fix que ldiario + verificar que el endpoint foliarAnualMayor existe en el backend |
1 hr |
| 4 |
parametros/aautomaticos.vue |
Línea 117: campo "Carga" usa key en lugar de model en modalFields. El campo no es editable en el formulario. |
Cambiar a { label:'Carga', model:'carga', type:'dropdown', options:[{v:0,l:'Cierre'},{v:1,l:'Apertura'}], cols:6 } y agregar carga: 0 a modalForm |
1 hr |
6. Funcionalidades faltantes por prioridad
| # | Funcionalidad | Prioridad | Descripción | Estimado |
| 1 |
Motor de asientos automáticos |
ALTA |
Backend completo: CRUD controllers + lógica de ejecución post-cierre. Es el módulo más complejo y bloqueante para la contabilidad real. |
20 hrs |
| 2 |
Vista Cierre de Período |
ALTA |
Frontend: wizard de cierre con validaciones previas, preview de asientos, ejecución y log. Depende del backend de asientos automáticos. |
12 hrs |
| 3 |
Control de períodos contables |
ALTA |
Vista semáforo de estado de períodos + validación transversal que bloquee modificaciones en períodos cerrados. |
8 hrs |
| 4 |
Centralizar Honorarios Ventas |
MEDIA |
Vista cenhventas.vue que no existe. El modelo de la vista es análogo a cenhcompras.vue, acelera el desarrollo. |
6 hrs |
| 5 |
Centro de Costos |
MEDIA |
El controller ConCCostosAcumuladoController existe. Falta la vista frontend para gestionar y consultar centros de costo. |
5 hrs |
| 6 |
Plan de Auxiliares |
MEDIA |
El controller ConPAuxiliaresController existe. Falta la vista frontend. |
4 hrs |
| 7 |
Exportación SII (XML/CSV oficial) |
BAJA |
Generación de archivos en el formato oficial del SII para declaración de Libros de Compras y Ventas. |
10 hrs |
| 8 |
Conciliación Bancaria |
BAJA |
Módulo nuevo desde cero: importación de cartola, matching con vouchers, vista de diferencias. |
20 hrs |
7. Plan de trabajo — 6 semanas
Semana 1 — Correcciones y base de asientos automáticos
- Fix
reportes/bgeneral.vue: implementar agregarNuevoItem() 2 hrs
- Fix
reportes/ldiario.vue: corregir binding folios línea 109 1 hr
- Fix
reportes/mayor.vue: mismo fix de folios 1 hr
- Fix
aautomaticos.vue: campo carga editable 1 hr
- Backend: completar CRUD
ConAAutomaticoController 3 hrs
- Backend: completar
ConAAutDetalleController desde cero 3 hrs
Semana 2 — Ampliar modelo de asientos automáticos
- Migración: nuevos campos en
con_a_automaticos y con_a_aut_detalles 2 hrs
- Migración: nueva tabla
con_cierre_contable 2 hrs
- Rediseñar
aautomaticos.vue: tipos, fórmulas, tabla de líneas 6 hrs
- Backend: método
previewCierre() — calcula sin guardar 4 hrs
Semana 3 — Motor de cierre y vista de cierre
- Backend:
ejecutarCierre() — genera vouchers automáticos 8 hrs
- Backend:
ejecutarApertura() — asientos inicio del mes 4 hrs
- Backend:
revertirCierre() — deshacer cierre 3 hrs
- Frontend: esqueleto de
cierre-periodo.vue con selector y validaciones 4 hrs
Semana 4 — Cierre completo + control de períodos
- Frontend: tabla preview de asientos + botón ejecutar con confirmación 5 hrs
- Frontend: log de asientos generados + revertir cierre 3 hrs
- Vista
periodos-contables.vue — semáforo de estados 5 hrs
- Validación transversal en vistas de registro (períodos cerrados = solo lectura) 3 hrs
Semana 5 — Vistas pendientes medianas
- Vista
cenhventas.vue (Centralizar Honorarios Ventas) 6 hrs
- Vista
centrocostos.vue — Centro de Costos 5 hrs
- Vista
auxiliares.vue — Plan de Auxiliares 4 hrs
- Agregar nuevas rutas al menú en
menuOptions.js 1 hr
Semana 6 — QA, cierre anual y exportación SII
- Pruebas de flujo completo: SII → Centralizar → Voucher → Cierre 4 hrs
- Asiento de cierre anual (resultado → patrimonio) 4 hrs
- Asiento de apertura año siguiente (saldos iniciales) 3 hrs
- Exportación SII XML/CSV para declaración oficial 5 hrs
- Ajustes de UX, revisión general 2 hrs
8. Resumen de horas estimadas
| Semana | Foco principal | Horas |
| Semana 1 | Correcciones de bugs existentes + CRUD base asientos automáticos | 11 hrs |
| Semana 2 | Extensión del modelo de datos + rediseño UI asientos automáticos + preview cierre | 14 hrs |
| Semana 3 | Motor de ejecución de cierre (backend) + esqueleto UI cierre | 19 hrs |
| Semana 4 | UI de cierre completa + control de períodos | 16 hrs |
| Semana 5 | Vistas medianas pendientes (cenhventas, costos, auxiliares) | 16 hrs |
| Semana 6 | QA + cierre anual + exportación SII | 18 hrs |
| TOTAL ESTIMADO | 94 hrs |
Nota sobre concurrencia
Las semanas 1 y 2 pueden paralelizarse si hay dos desarrolladores: uno en backend (controllers y migraciones) y otro en frontend (correcciones de bugs y rediseño de aautomaticos.vue). Esto podría comprimir el plan a 4 semanas efectivas de trabajo.
9. Dependencias entre módulos
Cadena de dependencias para el cierre de período
1. Registro SII (ya funciona)
→ 2. Centralización (ya funciona)
→ 3. Vouchers generados (ya funciona)
→ 4. Control de período ← FALTA
→ 5. Asientos automáticos (configuración) ← FALTA
→ 6. Motor de ejecución cierre ← FALTA
→ 7. Libros foliados y reportes (ya funciona)
Los pasos 4, 5 y 6 son los únicos bloqueantes para tener un ciclo contable mensual completo y auditable.
Todo lo demás está operativo.