Créditos de Mensagens¶
Modelo StudentMessageCredit¶
Controla o uso de mensagens por aluno, por escola, por agente, por período mensal.
class StudentMessageCredit(models.Model):
student = ForeignKey(User)
school = ForeignKey(School)
agent = ForeignKey(Agent, null=True, blank=True)
messages_used = IntegerField(default=0)
messages_limit = IntegerField(default=50)
extra_credits = IntegerField(default=0)
period_start = DateField()
period_end = DateField()
class Meta:
constraints = [
UniqueConstraint(
fields=['student', 'school', 'agent', 'period_start'],
name='unique_student_credit_period_agent',
),
]
@property
def total_limit(self):
return self.messages_limit + self.extra_credits
@property
def is_exhausted(self):
return self.messages_remaining <= 0
Créditos por Agente¶
O limite de créditos é definido pelo campo Agent.credits_per_student (padrão: 50). Ao criar o StudentMessageCredit, o sistema usa esse valor como messages_limit.
A escola pode ajustar o limite individual de um aluno para um agente específico via UpdateStudentCreditsView no painel de detalhe do aluno.
Renovação¶
Créditos são renovados automaticamente no início de cada ciclo de faturamento. O novo período é criado com messages_used=0 sem afetar o período anterior.
Quando Esgota¶
Ao esgotar os créditos de um agente, o chat exibe um banner com opção de comprar pacotes avulsos. O bloqueio é por agente: o aluno ainda pode conversar com outros agentes que tenham créditos disponíveis.