R-006 — Marcação de status do caso de cobrança

TLDR: NEGOCIADO só depois de confirmação de pagamento por webhook — nunca por promessa; NAO_RESPONDEU exige os 4 disparos da régua; e reincidente é 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ão NEGOCIADO.
  • RN-STATUS-3 implica que reincidente é recomputável: materializado como flag atualizada por evento, mas reconstruível em batch a partir do histórico de casos.
  • A transição para NEGATIVAR herda os critérios de elegibilidade de R-003 (RN-NEG-1, RN-NEG-2) e a alçada de GESTOR (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 Debit voltar a EM_COBRANCA, ele fica sem cobrança ativa no Asaas até um novo reparcelamento.
  • A transição para CANCELADO herda 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)