Qué resuelve
Una sociedad cerrada de pocos socios no falla por falta de contabilidad: falla por falta de acuerdo sobre los hechos. Quién aportó cuánto y cuándo, quién autorizó ese egreso, qué se decidió en la reunión de marzo y con qué mayoría.
Valoriza existe para que esas preguntas tengan una sola respuesta, y para que esa respuesta no cambie después. Casi todo el diseño se explica por ahí: los estados que obligan a pasar por una aprobación, los periodos que se cierran, el borrado que exige un motivo.
Con evidencia y aprobación
Cada cuota tiene su comprobante, quién la aprobó y, si se rechazó, por qué.
Autorizados antes de pagarse
Un movimiento recorre solicitud, aprobación y pago. No se puede pagar lo que nadie aprobó.
Mayorías según el tipo
Ordinaria, calificada o unánime, con el conflicto de interés descontado del censo.
Periodos que se cierran
Un mes cerrado deja de aceptar movimientos: los números del pasado dejan de moverse.
Aportes de los socios
El plan de aportes se genera completo desde el inicio: el aporte inicial y las cuotas mensuales, cada una con su fecha de vencimiento y su monto esperado. Existir antes de pagarse es lo que permite hablar de mora.
Cada cuota guarda el monto esperado y el efectivamente pagado por separado, así que un pago parcial es representable sin mentir en ninguno de los dos. Y guarda quién aprobó, cuándo, y en caso de rechazo el motivo: rechazar sin explicar no es una opción del modelo.
Tesorería con aprobaciones
Un movimiento de tesorería no se registra: se tramita. Recorre una cadena de estados donde cada paso lo ejecuta alguien distinto.
Un movimiento en borrador ya existe y ya es visible: se puede discutir antes de solicitarlo formalmente. Si el borrador viviera solo en el formulario de quien lo escribe, la conversación previa a la solicitud ocurriría fuera del sistema, que es justo donde después no hay rastro.
Capital y participación
La participación de cada socio no se escribe a mano: se calcula a partir del capital efectivamente pagado y el valor nominal de la acción.
La fila de capital que ve un socio en su propia pantalla usa la misma función que la tabla general de contabilidad. No es una consulta parecida escrita dos veces: es el mismo código.
En una sociedad, dos pantallas que muestran porcentajes distintos por un redondeo diferente no son un detalle estético — son una discusión entre socios.
Votaciones y conflicto de interés
Contar votos parece trivial hasta que aparecen dos cosas: tipos de mayoría distintos y socios que no pueden votar.
Quién puede votar
El censo de una votación son los socios activos que no tengan conflicto declarado en esa votación concreta. El conflicto no es un atributo del socio sino de la pareja socio–votación: alguien puede estar impedido en la decisión sobre un contrato y ser perfectamente elegible en la siguiente.
Declarar un conflicto bloquea el voto de ese socio y lo saca del censo elegible. Si solo bloqueara el voto, su ausencia contaría como un voto que falta y una decisión unánime sería imposible de alcanzar. Sacándolo del censo, la unanimidad se mide entre quienes sí podían decidir.
Las tres mayorías
| Tipo | Condición para aprobar | Ejemplo sobre 10 elegibles |
|---|---|---|
| Ordinaria | Mayoría simple de los votos emitidos | más votos a favor que en contra |
| Calificada | favor ≥ ⌈ 2/3 · elegibles ⌉ | 7 aprueban · 6 no |
| Unánime | favor = elegibles, con elegibles > 0 | una abstención ya lo impide |
Dos detalles que las pruebas fijan de forma explícita: la calificada se mide contra los elegibles y no contra los que votaron —abstenerse no baja el umbral—, y la unanimidad exige que haya al menos un elegible, para que una votación sin censo no se apruebe sola.
Cada voto es a favor, en contra o abstención, y queda atado a su socio. La votación puede colgar de una reunión o existir por sí sola, para decisiones que se toman fuera de sesión.
Reuniones y actas
Una reunión tiene convocatoria, asistencia registrada y acta. Las tres cosas separadas, porque responden a preguntas distintas y se producen en momentos distintos.
La asistencia es su propia entidad: quién estaba es un hecho verificable que condiciona la validez de lo decidido, y no puede quedar como una frase dentro del acta. Las votaciones asociadas a la reunión se enlazan a ella, de modo que el acta y el resultado de la votación no pueden contarse distinto.
Cierre de periodo
Un mes se cierra, y a partir de ahí deja de aceptar movimientos con fecha dentro de él.
Sin cierre, un reporte del primer trimestre puede dar un número distinto cada vez que se abre, porque alguien siguió registrando cosas hacia atrás. En una sociedad donde ese reporte respalda un reparto o una decisión, que el pasado se mueva es un problema de gobierno, no de contabilidad.
El cierre guarda quién lo hizo y cuándo, y es una entidad propia con año y mes, no una bandera dentro de otra tabla.
Trazabilidad
Tres mecanismos, cada uno cubriendo un hueco distinto.
| Mecanismo | Qué garantiza |
|---|---|
| Registro de auditoría | Qué cambió, quién lo cambió y cuándo |
| Borrado lógico con motivo | Nada se elimina de verdad. Se guarda quién lo dio de baja y por qué |
| Documentos con estado | Los soportes viven en el sistema, no en el correo de alguien |
Que el borrado exija un motivo es una decisión de diseño, no un campo opcional que alguien olvidó marcar como obligatorio. En una sociedad, «este aporte ya no aparece» sin explicación es peor que el error que se intentaba corregir.
El sistema incluye además tareas y notificaciones, para que un aporte en mora o un movimiento esperando aprobación no dependan de que alguien se acuerde de mirar.
Tránsito a S.A.S.
Formalizar una sociedad en Colombia es una secuencia de trámites que se hacen una sola vez, en orden, y donde olvidar uno bloquea los siguientes.
El sistema lleva esa lista como una entidad única con once hitos: disponibilidad del nombre, estatutos, documento de constitución, registro en cámara de comercio, RUT, cuenta bancaria, acuerdo de accionistas, libro de accionistas, actas iniciales, contador y facturación electrónica. Cada uno se marca al cumplirse, y de ahí sale un porcentaje de avance.
Es un solo registro con identificador fijo, porque la lista de trámites de constitución no se repite: una sociedad se constituye una vez. Modelarla como una colección invitaría a que existieran dos, y entonces habría que decidir cuál es la buena.
Arquitectura y verificación
La aplicación está organizada por módulos de dominio, no por capas técnicas. Cada módulo agrupa su lógica, sus consultas y sus acciones.
Dos niveles de prueba
81 pruebas, divididas en dos clases con propósito distinto:
| Nivel | Qué verifica |
|---|---|
| Unitarias | Las reglas puras: umbrales de mayoría, censo elegible, tabla de capital, periodo cerrado |
| Integración | El comportamiento contra una base de datos real: que un conflicto declarado bloquee el voto, que el cierre rechace el movimiento |
La puerta de calidad levanta una base de datos, aplica las migraciones y corre ambos niveles junto con el lint y el chequeo de tipos antes de permitir un despliegue.