Contrato de modernización del registro de pedidos
Interfaz existente
service.py --source <csv> [--customer <id>] emite exactamente un objeto JSON en stdout.
Los registros se ordenan por id; los totales son centavos enteros; un cliente desconocido devuelve
una lista vacía y un total cero. Una entrada no válida devuelve un código distinto de cero y un error en stderr.
Cambio solicitado
Añade la selección explícita --backend sqlite --source <database> con el mismo contrato
observable de consulta. Mantén CSV como opción predeterminada durante el ejercicio. Implementa migrate.py
por separado de las consultas.
Puntos de control
- MOD-1: la caracterización CSV fijada sigue pasando.
- MOD-2: coinciden el recuento migrado, el total entero, el orden y la versión del esquema.
- MOD-3: las entradas mal formadas o duplicadas fallan sin un destino parcial considerado exitoso.
- MOD-4: nunca se sobrescribe un destino existente, tampoco al repetir la ejecución.
- MOD-5: leer una base de datos SQLite ausente no la crea.
- MOD-6: la reversión a CSV funciona y su hash de origen no cambia.
El rango de enteros aceptado por Python no debe reducirse silenciosamente al rango de 64 bits
con signo de INTEGER/SUM de SQLite. Almacena texto decimal validado si es necesario, conviértelo a
enteros de Python al leer y concilia con aritmética entera exacta. Nunca cambies
a sumas en coma flotante. El contrato JSON sigue exponiendo centavos enteros.
No forman parte de esta modernización cuentas, pagos, API HTTP, registros de producción, bases de datos externas ni despliegue en la nube.