El Consejo General de Educación es el organismo rector del sistema educativo de la provincia de Entre Ríos. El sistema es de alcance provincial: lo usa todo el personal escolar —docentes, directivos, administrativos y auxiliares—, no solo el personal del organismo.
Digitalización provincial de un trámite que vivía en papel: de 4 meses a 5 semanas de resolución promedio, con una campaña anual concentrada de 20.000 a 30.000 expedientes y cerca de 50.000 archivos, sobre un stack heredado y sin poder instalar una sola librería externa.
Promedio del trámite, antes y después
Campaña única anual de 3 a 4 meses
2 archivos y 2 etapas de validación por trámite
El trámite de salario familiar se hacía en papel. Cada establecimiento educativo mantenía sus propias planillas físicas, y la documentación viajaba hasta el área de Liquidaciones para ser validada a mano.
El volumen no es continuo: se concentra en una campaña única de tres a cuatro meses por año, con entre 20.000 y 30.000 trámites. Cada trámite lleva dos archivos y pasa por dos etapas de validación, así que la campaña mueve alrededor de 50.000 archivos en una ventana corta.
En papel no había forma de responder dos preguntas básicas: dónde está mi trámite, y quién validó qué. Sin trazabilidad, cada consulta era una búsqueda manual.
01
Subir archivos es la superficie de ataque más peligrosa de un sistema público: si se acepta cualquier cosa, el servidor termina ejecutando lo que le manden. Sin librerías disponibles, implementé validación de tipo real, saneamiento de nombres y control de acceso a la descarga, todo con las primitivas del lenguaje.
Trade-off: Código propio de seguridad es código propio que hay que mantener y auditar, y no tiene detrás los años de escrutinio público de una librería establecida. Lo asumí porque la alternativa no era usar una librería, era no validar.
02
En un trámite que afecta la liquidación de un sueldo, la pregunta “quién validó esto y cuándo” no es diagnóstico: es parte del expediente. Modelarlo en la base, y no en un archivo de log aparte, hace que la respuesta sea una consulta y no una investigación.
Trade-off: Más escrituras por trámite y un esquema más pesado. A cambio, la trazabilidad no se puede perder ni rotar por accidente.
03
Separar la validación permite frenar un expediente incompleto antes de que llegue a liquidación, que es donde un error cuesta plata y retrabajo real.
Trade-off: Un paso más para el usuario y el doble de archivos a procesar. El costo se paga en la campaña; el error, en el sueldo de alguien.
04
Escribí los manuales en PDF, pero para una audiencia de toda la provincia y sin formación técnica un documento no alcanza: hay gente que no lo va a abrir nunca. Dirigí además los videos instructivos, que muestran la pantalla real paso a paso y se difundieron para toda la comunidad educativa. No era elegir uno u otro: era cubrir a quien lee y a quien no.
Trade-off: Dos materiales que mantener en lugar de uno. Si cambia la interfaz hay que rehacer los dos, y el video es el caro de rehacer. Para un sistema con una única campaña al año, el intercambio conviene.
Backend en PHP 7 sobre SQL Server, con la base modelada alrededor del expediente y sus estados de validación. El frontend es JavaScript con jQuery y AJAX para que la carga y el seguimiento no exijan recargar la página en conexiones lentas. La capa de archivos está separada del resto: recibe, valida, sanea y recién entonces persiste, y toda descarga pasa por control de acceso en lugar de servirse directo del filesystem. Las consultas de seguimiento y los procesos de carga masiva están optimizados para el pico de campaña, que es cuando el sistema realmente se prueba.