Pular para conteúdo

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.