← Volver al listado
Conectando ejecutor…

PROYECTOS / PYTHON

Explora el proyecto. Resuelve el problema.

Revisa los archivos, corrige su lógica y comprueba tu solución con pruebas.

DifícilPagos de facturas
main.py

CONSOLA

Listo para ejecutar
Selecciona un archivo y comienza a explorar.
PROYECTO CONTEXTUALIZADODifícilEstado · Idempotencia

Pagos de facturas

Evita cobros duplicados al recibir de nuevo una misma referencia de pago.

1. Contexto y Situación

El problema en el entorno real

Una pasarela de pagos registra abonos a facturas. Cuando ocurren reintentos automáticos por inestabilidad de red, el cliente puede enviar dos veces la misma operación con idéntica referencia. Actualmente el sistema cobra dos veces y descuenta doble saldo.

Pregunta a responder:

¿Cómo corregir el registro de pagos para que reenviar una operación confirmada devuelva "Pago duplicado" sin descontar dos veces el saldo?

2. Qué se tiene

Archivos y estructura recibida

El proyecto cuenta con varios archivos ya configurados:

facturacion/pagos.pyPunto de partida

Función registrar_pago: omite la detección de operaciones repetidas.

facturacion/modelos.py

Modelo Factura con total, pagado y diccionario de pagos por referencia.

main.py

Simulación de pagos normales, reintento de la misma referencia y exceso de saldo.

tests/test_publico.py

Pruebas unitarias de reintentos, validación de importes y saldo.

3. Qué se espera

Reglas y solución esperada
  • Idempotencia: Si llega la misma referencia con el mismo monto, responder "Pago duplicado" sin descontar de nuevo.
  • Si llega la misma referencia con distinto monto, rechazar por referencia reutilizada incompatible.
  • Cálculos monetarios con Decimal exacto y validación de hasta dos decimales.
  • Ninguna operación rechazada debe modificar el saldo de la factura.
Salida esperada resumida:

Evitar cobros dobles en reintentos legítimos y proteger la consistencia del saldo.

Inicia sesión para guardar tu actividad en Progreso y métricas. Al pulsar «Probar» se usan las pruebas públicas originales, aunque hayas editado tests/.