R-006 — Marcação de status do caso de cobrança
TLDR:
NEGOCIADOsó depois de confirmação de pagamento por webhook — nunca por promessa;NAO_RESPONDEUexige os 4 disparos da régua; ereincidenteé atributo derivado, não status.
Família original no blueprint §06/§08: RN-STATUS. Detalhada em
USER-004 — Modelo de domínio.
Given / When / Then
Dado um CasoDeCobranca em EM_COBRANCA,
Quando um atendente ou um evento do sistema tenta mudar o status,
Então a transição só é aceita se satisfizer o critério objetivo do status de destino — e
NEGOCIADO exige confirmação de pagamento vinda de webhook, nunca a palavra do aluno.
Regras
| ID | Regra |
|---|---|
RN-STATUS-1 |
NEGOCIADO só após confirmação de pagamento via webhook — nunca por promessa |
RN-STATUS-2 |
NAO_RESPONDEU exige contador de disparos = 4; marcado automaticamente no fechamento do ciclo |
RN-STATUS-3 |
reincidente = ter sido NEGOCIADO em mais de um lote histórico. É atributo derivado, não status |
RN-STATUS-4 |
AGUARDANDO_PAGAMENTO_NEGOCIACAO é marcado quando o reparcelamento é criado no Asaas (Debits::Repayment). Dele só se sai por webhook: NEGOCIADO (1ª parcela do acordo paga) ou de volta a EM_COBRANCA (1ª parcela vencida sem pagamento). Os dois webhooks ainda não existem |
Máquina de estados
mermaid
stateDiagram-v2
[*] --> EM_COBRANCA
EM_COBRANCA --> NEGOCIADO: pagou / regularizou<br/>(via webhook)
EM_COBRANCA --> SEM_PREVISAO: 1-2 parcelas em atraso,<br/>sem previsão
EM_COBRANCA --> NEGATIVAR: progresso > 25% &<br/>3+ em atraso (gestor)
EM_COBRANCA --> NAO_RESPONDEU: 4 disparos<br/>sem resposta
EM_COBRANCA --> CANCELADO: aceite de termo<br/>pelo aluno
EM_COBRANCA --> AGUARDANDO_PAGAMENTO_NEGOCIACAO: reparcelamento criado<br/>no Asaas (Debits::Repayment)
AGUARDANDO_PAGAMENTO_NEGOCIACAO --> NEGOCIADO: 1ª parcela do acordo paga<br/>(via webhook — pendente)
AGUARDANDO_PAGAMENTO_NEGOCIACAO --> EM_COBRANCA: 1ª parcela vencida<br/>(via webhook — pendente)
SEM_PREVISAO --> EM_COBRANCA: retomada
NAO_RESPONDEU --> EM_COBRANCA: retomada
NEGATIVAR --> EM_COBRANCA: retomada
NEGATIVAR --> NEGOCIADO: pagou a 1ª do acordo<br/>(via webhook)
Transição fora da máquina retorna 422 invalid_transition. Toda transição gera registro de auditoria
e item de histórico do caso.
Restrições
RN-STATUS-1é o ponto central: o status do caso deixa de ser célula de planilha preenchida por quem atendeu e passa a ser consequência de um fato verificável. Promessa de pagamento vira agendamento (USER-017), nãoNEGOCIADO.RN-STATUS-3implica quereincidenteé recomputável: materializado como flag atualizada por evento, mas reconstruível em batch a partir do histórico de casos.- A transição para
NEGATIVARherda os critérios de elegibilidade de R-003 (RN-NEG-1,RN-NEG-2) e a alçada deGESTOR(RN-NEG-3). - O reparcelamento cancela no Asaas o parcelamento vigente na hora em que é criado. Se o acordo não for
pago e o
Debitvoltar aEM_COBRANCA, ele fica sem cobrança ativa no Asaas até um novo reparcelamento. - A transição para
CANCELADOherda o protocolo de R-005 (RN-CANC-3): o aceite do aluno efetiva sem aval da gestão.
Teste vinculado
(sem teste ainda — USER-004 ainda não implementada)