Camilo Castro
Todo el trabajoCaso 01 / 05

Sistema Contable + Nómina Sistema para cliente

Motor de nómina y contabilidad

El reemplazo propio del ERP Siesa para la fábrica: nómina colombiana, comprobantes contables automáticos, nómina electrónica DIAN y planillas PILA — con snapshots, reversiones y auditoría.

  • Hice ingeniería inversa de los documentos de nómina de Siesa y dejé por escrito 22 reglas de negocio y 18 decisiones de arquitectura antes de que existiera el motor.
  • Cada liquidación se convierte en comprobantes contables cuadrados, XML UBL para la DIAN firmado con XAdES, planillas PILA y lotes de pago bancario.
  • 569 pruebas automatizadas — incluida una prueba golden que reproduce enero de 2026 de punta a punta — detrás de un pipeline de CI de nueve etapas.
Cliente
Industria Bizcopan Zapatoca — panificadora, ~50 empleados
Rol
Desarrollador único: levantamiento, arquitectura, back end y front end
Año
2026 En construcción · salida en ene. 2027
Tecnologías
  • Python
  • FastAPI
  • SQLAlchemy 2 (async)
  • PostgreSQL 16
  • Alembic
  • Redis + arq
  • React 18
  • TanStack Query
  • Tailwind CSS
  • pytest
  • GitHub Actions
  • Docker
Borrador vivo de la primera quincena de septiembre en la interfaz tipo libro mayor: riel de secciones y pestañas, ocho empleados con horas, devengos, deducciones y neto, una fila desplegada en sus conceptos y los totales fijos abajo.
El inicio en un teléfono, en tema oscuro: accesos directos a las tareas del día.

El encargo

Bizcopan, una panificadora de Zapatoca (Santander), liquida la nómina y la contabilidad de unas cincuenta personas en Siesa, un ERP comercial. El objetivo: reemplazarlo por un sistema propio, alineado con la ley laboral colombiana y en el que el equipo contable confíe desde el primer día.

La confianza es lo difícil, así que el proyecto empezó sin código: estudio del marco legal, ingeniería inversa de los documentos mensuales de Siesa, un cuestionario con la persona que liquida la nómina y un modelo de datos construido a partir de lo que el sistema anterior realmente produce.

Lo que construí

  • Motor de nómina quincenal y mensual, con snapshots mensuales de provisiones y aportes
  • Novedades: horas extras y recargos, licencias, incapacidades, vacaciones y cuotas de préstamos
  • Comprobantes contables automáticos por cada nómina, con reversión y árbol del PUC
  • Nómina electrónica DIAN: XML UBL, firma XAdES y seguimiento de transmisiones
  • Planillas PILA con hash de integridad, lotes de pago y archivos planos bancarios
  • Consulta de empleado por periodo, saldos iniciales importados desde Excel y cierre mensual
  • Una interfaz tipo libro mayor en claro y oscuro: riel de secciones, pestañas, procesos agrupados y buscador «Ir a…» con Ctrl K

Arquitectura

  1. Empleados y contratossalario · EPS · pensión · ARL
  2. Novedadeshoras extras · licencias · préstamos
  3. Parámetros del añoSMMLV · tasas · umbrales
Motor de nóminaquincena / mes · 22 reglas · snapshots mensuales
  1. Comprobantes contablescuadrados · reversibles
  2. Nómina electrónica DIANXML UBL · firma XAdES
  3. Planilla PILAarchivo plano · hash · estados
  4. Lotes de pagoarchivos planos bancarios

Cada cambio pasa por

  1. 1ruff
  2. 2mypy --strict
  3. 3pytest unit
  4. 4pytest integration
  5. 5pytest golden
  6. 6alembic ↑↓
  7. 7front-end build
  8. 8docker build
  9. 9deploy staging
Diagrama: empleados, novedades y parámetros alimentan el motor de nómina, que produce comprobantes contables, nómina electrónica DIAN, planillas PILA y lotes de pago. Debajo, las nueve etapas del CI.

Por dentro

  1. Reglas antes que código

    22 reglas de negocio y 18 ADR se escribieron y revisaron antes de la primera migración. El diseño de cada módulo nombra las reglas que implementa, así que una diferencia en un número se vuelve una conversación sobre una regla.

  2. Pruebas que incluyen el mundo real

    Pruebas unitarias para los cálculos puros, de integración contra un PostgreSQL real levantado con testcontainers y una prueba golden que reproduce un mes completo de nómina.

  3. El CI como puerta

    ruff, mypy --strict, tres suites de pytest, un ciclo de upgrade/downgrade de Alembic, el build del front end y un build de Docker deben pasar antes de desplegar a staging.

  4. Seguro para ensayar

    Un modo playground simula la DIAN y los bancos y muestra un aviso en cada pantalla, para que el equipo contable practique sin que nada salga de la empresa.

  5. Asíncrono donde conviene

    SQLAlchemy 2 asíncrono sobre FastAPI para la API, Alembic síncrono por decisión, y reintentos y consultas a la DIAN en un worker de arq sobre Redis con backoff.

Galería

Dónde está hoy

Los módulos de nómina, contabilidad y seguridad social están construidos y probados. La marcha en paralelo contra Siesa está planeada para octubre–diciembre de 2026 y la salida a producción para enero de 2027.

El soporte multiempresa está en el diseño desde el inicio: ya hay una segunda empresa en la hoja de ruta.

Las pantallas muestran empleados ficticios creados en el modo playground del sistema. En este sitio no aparece ningún dato real de nómina.