Carpetas que alguien hacía a mano
El problema
El sistema contable es de terceros y no se toca. Lo que hace es volcar todos los comprobantes que emite —facturas, notas de crédito, notas de débito— como archivos PDF dentro de un solo directorio. Todo junto, sin separar.
Del otro lado, el trabajo real necesita lo contrario: una carpeta por comprobante, con todo lo relacionado a ese comprobante adentro. Así que alguien abría el directorio gigante, buscaba el archivo, creaba la subcarpeta, copiaba el archivo adentro. Y de nuevo. Y de nuevo.
No es que estuviera mal hecho: es que era trabajo humano puesto a hacer algo que una persona no debería estar haciendo, todos los días, mientras el directorio no paraba de crecer.
Lo que hacía una persona
Antes — a mano
Un directorio con todo adentro
- El sistema contable vuelca cada PDF en la misma carpeta.
- Alguien busca el archivo, crea la subcarpeta y lo copia.
- Cuanto más crece el directorio, más tarda cada búsqueda.
Después — automático
Una carpeta por comprobante
- El servicio consulta qué comprobantes se emitieron.
- Busca el archivo, arma la carpeta y lo deja adentro.
- Si un archivo no aparece, lo dice. Antes no lo decía nadie.
Qué construí
Un servicio que corre solo: consulta qué comprobantes se emitieron, busca el archivo de cada uno en el directorio de origen, le arma su carpeta y lo copia adentro con el nombre que corresponde. Deja registrado qué pasó en cada ejecución.
Arriba de eso, una aplicación web para ver el estado del servicio, mirar el historial y cambiar la configuración sin bajar nada.
Reemplaza a una versión anterior en VB .NET.
Las decisiones que costaron
Replicar exactamente las carpetas y los nombres de antes. Era la oportunidad de ordenar esa nomenclatura, que no es linda. No la tomé. Del otro lado hay gente que ya sabe dónde buscar y procesos que levantan archivos de esas rutas, y ninguno de los dos avisa si el archivo dejó de aparecer donde lo esperaban: simplemente no lo encuentran. Un nombre feo que funciona vale más que uno prolijo que rompe cosas que no sé que existen.
No repetir la misma alerta. Si se cae el recurso de red, la versión ingenua manda un correo por ciclo. A las tres horas hay decenas de correos iguales, y la persona que los recibe deja de abrirlos — con lo cual la próxima alerta, la que sí importa, tampoco se lee. El servicio detecta que el error es el mismo de antes y se calla.
Reintentar antes de dar por perdido. Un archivo que no está puede ser un archivo que no está, o un recurso de red que tardó. Son cosas distintas y se ven igual. El servicio reintenta y deja registrado cuándo un archivo apareció recién en el segundo intento — porque eso, repetido, ya no es un problema de archivos sino de red.
Configuración que se cambia sin bajar el servicio. La periodicidad, la hora, las rutas y las credenciales viven en la base y se editan desde la web. Las credenciales se guardan cifradas.
Vista ilustrativa · datos de ejemplo
Control del servicio
En ejecución
- Últimahoy 14:00
- Próximahoy 15:00
- Cada60 minutos
Ejecutar ahora
| Hora | Evento | Aviso |
|---|---|---|
| 14:00 | Proceso finalizado · 312 comprobantes | — |
| 14:00 | Archivo recuperado en el reintento 2 | — |
| 13:00 | Comprobante sin archivo en el directorio de origen | Enviado |
| 12:00 | Comprobante sin archivo en el directorio de origen | Omitido · mismo error |
Resultado
Las carpetas se arman solas, con reintentos, historial y avisos que se mandan una vez por problema. La estructura y los nombres son los mismos de antes, así que nadie tuvo que aprender a buscar en otro lado.