Bikans: SaaS de nómina y retención
Los clientes de una firma de asesoría contable y de nómina llevaban la nómina y la retención en la fuente en dos herramientas, y digitaban dos veces los mismos datos de la empresa y de los empleados.
Qué hace: Una sola plataforma donde los datos de los empleados se cargan una vez y alimentan la nómina y la retención en la fuente, con segundo factor obligatorio y acceso por herramienta.
Resumen
Bikans reúne en una sola plataforma la nómina y la retención en la fuente de los clientes de Bikans Asesores. Antes eran dos herramientas y los mismos datos se digitaban en las dos: un dato cargado dos veces puede no coincidir, y los dos cálculos dependen de él.
Hoy el registro de empleados es uno solo, la nómina de un período se importa desde Excel y la retención se calcula con los catálogos de la DIAN. Hice el sistema completo, backend y frontend, y está en producción en app.bikans.com.
La necesidad
Los clientes de la firma llevaban la nómina en una herramienta y la retención en la fuente en otra, y digitaban dos veces los mismos datos de la empresa y de los empleados. Un dato cargado dos veces puede no coincidir, y de él dependen los dos cálculos.
Restricciones
- Son datos de nómina y tributarios de terceros: cada cuenta ve solo lo suyo, y una contraseña sola no basta para entrar.
- Cada cliente usa solo las herramientas que tiene contratadas, y quien las asigna es la firma, no el usuario.
- Los valores en pesos y los porcentajes vienen de normas de la DIAN y no pueden perder precisión por redondeo.
- Las nóminas ya existían en Excel: había que traerlas sin volver a digitarlas.
La solución
Un solo registro de empleados, identificados por cédula, que comparten los dos módulos. La nómina de cada período se importa desde Excel o se registra con sus novedades, y la retención se calcula con los catálogos de la DIAN: conceptos con su base mínima en UVT y su porcentaje, y actividades económicas con su tarifa de ICA. Se entra con contraseña y un código TOTP, y la firma decide desde el panel de administración qué herramientas ve cada cuenta.
Cómo funciona
Aplicación de una sola página en React y TypeScript sobre una API REST en Django REST Framework, con PostgreSQL como base de datos única. Cada herramienta es una app de Django, y cada vista revisa la herramienta y el dueño de los datos.
- Inicio de sesión: la contraseña devuelve un token de reto firmado que vence en 5 minutos, no una sesión
- Segundo factor TOTP obligatorio: quien no lo tiene lo configura antes de entrar; el secreto se guarda cifrado con Fernet
- Sesión con JWT en cookies httpOnly, no en localStorage
- Cada vista exige acceso a la herramienta (
HasProductAccess) y filtra por el dueño de los datos - Nómina: períodos, detalle por empleado, novedades e importación desde Excel
- Retención en la fuente con los catálogos de conceptos y de actividades económicas de la DIAN
- PostgreSQL: un solo registro de empleados para los dos módulos
Decisiones técnicas
- Un empleado se identifica por su cédula dentro de cada cuenta: reimportar una nómina actualiza al empleado en lugar de duplicarlo (
update_or_create). - Los tokens viajan en cookies httpOnly para que un script inyectado en la página no pueda leerlos.
- Dinero y porcentajes en
Decimal, nunca enfloat. - Los registros no se borran, se desactivan: el historial de las nóminas ya calculadas no se pierde.
- Las cuentas que crea la firma nacen sin contraseña: la persona recibe un correo de activación y define la suya.
Cómo se valida
- 105 pruebas automatizadas en el backend (runner de Django): inicio de sesión, segundo factor, permisos por herramienta, nómina, importación y retenciones.
- Tras cinco intentos fallidos, django-axes bloquea el inicio de sesión durante una hora.
- El reto del segundo factor vence a los 5 minutos y no guarda estado en el servidor.
Resultado
- En producción en app.bikans.com: los dos módulos trabajan sobre los mismos datos, detrás de un solo inicio de sesión.
Límites y próximos pasos
- Es un producto privado de un cliente: el código no es público y no publico datos de uso ni de clientes.
Mi parte
Hice el sistema completo como Full Stack Developer en Coordenadas.co para Bikans, una firma de asesoría contable y de nómina: el backend en Django, el frontend en React, la autenticación de dos factores y el panel de administración.
Stack
¿Te interesa este tipo de trabajo?
Busco trabajo remoto como Full Stack Engineer. Si quieres hablar de este proyecto o de tu equipo, escríbeme.