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
- Verificar
student_credit.balance >= cost. - Si es suficiente:
balance -= costtotal_used += cost- Crear
CreditTransaction(amount=-cost, type=CONSUMPTION)
- Si no es suficiente:
- Lanzar excepción
InsufficientCredits.
- Lanzar excepción
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.