Cuando se modela una multa de tránsito, lo primero que aparece es un campo debe: true/false. Es el error más común. Una infracción pasa por etapas, y cada etapa tiene un plazo que cambia el monto y las opciones de quien la recibe. Si el modelo no las distingue, el software le dice a alguien que "todavía puede pagar con descuento" cuando el plazo venció hace una semana.
Las etapas
De forma simplificada, el recorrido de una multa es:
- Labrada y notificada. El reloj de los plazos suele empezar con la notificación.
- Pago voluntario. Pagar reconociendo la infracción, con descuento.
- Descargo. Presentar la defensa ante el juzgado, si no se pagó.
- Sentencia. El juez resuelve.
- Apelación. Un plazo corto para recurrir.
- Firme. Si no se apeló o la apelación fracasó. Puede terminar en apremio (cobro judicial).
Los plazos, con su fuente
Esto es lo que pudimos verificar en las normas, y lo que no:
- Provincia de Buenos Aires. El Decreto 532/09 fija 30 días desde la notificación para acogerse al pago voluntario (50% sobre el mínimo en UF). Si no se paga, hay 15 días desde el día siguiente al vencimiento para presentar el descargo, que el juez puede ampliar. La Ley 13.927 (art. 40) da 5 días para apelar la sentencia. El texto que consultamos no aclara si los 30 y los 15 días son hábiles o corridos.
- Ciudad de Buenos Aires. La Ley 451 (art. 18) da 50% de bonificación por pago voluntario dentro de los 40 días corridos de notificado, y 25% si se pide la intervención del controlador dentro de ese plazo y hay condena. En el texto consultado no figura el plazo del descargo.
- Excepciones. En la Provincia, si el acta se labra en el acto, funciona como boleta de citación y hay que presentarse dentro de los 30 días corridos de la infracción. Para las fotomultas, la notificación debe llegar dentro de los 60 días hábiles.
Puede haber decretos modificatorios, así que el plazo que vale es el que dice la notificación.
El código
La idea central: no guardes el estado, derivalo de las fechas y de las reglas de cada lugar.
const DIA = 24 * 60 * 60 * 1000;
const REGLAS = {
// Decreto 532/09: 30 días de pago voluntario, 15 de descargo
pba: { voluntario: 30, descargo: 15 },
// Ley 451, art. 18: 40 días corridos de pago voluntario; descargo no verificado
caba: { voluntario: 40, descargo: null },
};
const sumarDias = (fecha, dias) => new Date(fecha.getTime() + dias * DIA);
function plazos(regla, notificada) {
const r = REGLAS[regla];
const finVoluntario = sumarDias(notificada, r.voluntario);
return {
finVoluntario,
finDescargo: r.descargo == null ? null : sumarDias(finVoluntario, r.descargo),
};
}
function estado(regla, notificada, hoy, { pagada = false } = {}) {
if (pagada) return 'pagada';
const p = plazos(regla, notificada);
if (hoy <= p.finVoluntario) return 'pago_voluntario';
if (p.finDescargo === null) return 'plazo_de_descargo_desconocido';
if (hoy <= p.finDescargo) return 'descargo_abierto';
return 'a_resolver';
}
const n = new Date('2026-09-01T00:00:00Z');
estado('pba', n, new Date('2026-09-20T00:00:00Z')); // "pago_voluntario"
estado('pba', n, new Date('2026-10-05T00:00:00Z')); // "descargo_abierto"
estado('pba', n, new Date('2026-10-30T00:00:00Z')); // "a_resolver"
estado('caba', n, new Date('2026-11-30T00:00:00Z')); // "plazo_de_descargo_desconocido"
Las decisiones que importan
-
"Desconocido" es un estado, no un valor por defecto. Para la Ciudad no teníamos el plazo del descargo. En lugar de inventar uno, el modelo devuelve
plazo_de_descargo_desconocido, y la pantalla puede decir "revisá la notificación". - Las reglas viven en un solo lugar, con su fuente. Un objeto por jurisdicción, con el artículo al lado. Cuando cambia una norma se cambia un número y se ve de dónde sale.
- Hábil o corrido es un dato, no un detalle. Si la norma no lo aclara, guardalo como pendiente de confirmar. Sumar 30 días corridos cuando eran hábiles te da una fecha incorrecta.
- El reloj arranca en la notificación. No en la fecha de la infracción, salvo las excepciones que la norma indique.
- La prescripción tiene su propio reloj. Es independiente de estas etapas y se modela aparte.
Y para quien solo quiere el resumen
Si lo que querés es la versión para conductores, la explicamos en cómo hacer el descargo de una multa y en cómo funciona el pronto pago en Provincia. En un artículo anterior contamos cómo unificamos más de 30 sistemas de multas en una sola API.
Top comments (0)