Saltar a contenido

Especificación: Sistema de Créditos

Descripción

Mecanismo para monetizar o limitar el uso de recursos costosos (API de IA). Los estudiantes consumen créditos por cada evaluación solicitada.

Modelo de Datos

StudentCredit

Relación 1 a 1 con User.

Campo Tipo Descripción
user OneToOne Usuario propietario
balance Integer Créditos actuales disponibles
total_purchased Integer Histórico comprado
total_used Integer Histórico gastado

CreditTransaction

Log inmutable de movimientos.

Campo Tipo Descripción
user ForeignKey Usuario afectado
amount Integer Cantidad (negativo para gastos, positivo para cargas)
type Choice PURCHASE, CONSUMPTION, REFUND, BONUS
description CharField Razón del movimiento (ej: "Evaluación Pregunta #123")
timestamp DateTime Cuándo ocurrió

Lógica de Negocio

Consumo

  1. Verificar student_credit.balance >= cost.
  2. Si es suficiente:
    • balance -= cost
    • total_used += cost
    • Crear CreditTransaction(amount=-cost, type=CONSUMPTION)
  3. Si no es suficiente:
    • Lanzar excepción InsufficientCredits.

Administración

  • Comando de Django para asignar créditos iniciales a todos los usuarios: manage.py give_initial_credits.
  • Acción en Admin para "Regalar Créditos" a usuarios seleccionados.

Criterios de Aceptación

  • [ ] Los usuarios nuevos reciben X créditos por defecto (configurable).
  • [ ] No es posible tener saldo negativo.
  • [ ] Historial de transacciones visible para el usuario.