agenda: consumeSaldo agora amarra billing_contract_id no evento
Bug em cascata descoberto durante C11/B com Andre Green: - User clicou Falta + Descontar (consumeSaldo) -> sessions_used: 1->2 - billing_contract_id do agenda_evento ficou NULL (omissao no flow) - User clicou Agendada (reverse) -> detector saldoConsumed em _loadStatusChangeContext checa evRow.billing_contract_id, que esta NULL -> saldoConsumed=false -> bloco "Devolver saldo" NAO aparece no dialog -> saldo NAO devolvido - Next Falta mostra "Descontar 2 para 3" em vez de "1 para 2" Fix: bloco consumeSaldo agora tambem amarra billing_contract_id no agenda_eventos. Replica o padrao que ja existe no generatePackageCharge e no onUsarSessao. Sem isso, qualquer reverse pos-consumeSaldo nao detecta o saldo consumido. Backfill manual do Andre: sessions_used voltou pra 1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1564,6 +1564,9 @@ function _buildHandlers(deps) {
|
|||||||
// 1) Consumir saldo (pacote saldo + faltou/cancelado + decisão sim)
|
// 1) Consumir saldo (pacote saldo + faltou/cancelado + decisão sim)
|
||||||
// ⚠ billing_contracts NÃO tem coluna updated_at — passar esse campo
|
// ⚠ billing_contracts NÃO tem coluna updated_at — passar esse campo
|
||||||
// causa "column does not exist" silenciosamente em Promise.allSettled.
|
// causa "column does not exist" silenciosamente em Promise.allSettled.
|
||||||
|
// Também precisa amarrar billing_contract_id no evento — sem isso, o
|
||||||
|
// reverse não detecta saldoConsumed depois (bug cascata descoberto
|
||||||
|
// durante teste C11/B: Falta+Descontar, depois Agendada não devolvia).
|
||||||
if (decision.consumeSaldo && ctx.billingContract?.id) {
|
if (decision.consumeSaldo && ctx.billingContract?.id) {
|
||||||
tasks.push(
|
tasks.push(
|
||||||
supabase
|
supabase
|
||||||
@@ -1573,6 +1576,13 @@ function _buildHandlers(deps) {
|
|||||||
})
|
})
|
||||||
.eq('id', ctx.billingContract.id)
|
.eq('id', ctx.billingContract.id)
|
||||||
);
|
);
|
||||||
|
// Amarra evento ao contrato pra rastreabilidade + reverse correto
|
||||||
|
tasks.push(
|
||||||
|
supabase
|
||||||
|
.from('agenda_eventos')
|
||||||
|
.update({ billing_contract_id: ctx.billingContract.id, updated_at: new Date().toISOString() })
|
||||||
|
.eq('id', eventoId)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) Aplicar multa (cria financial_record avulsa). Description leva
|
// 2) Aplicar multa (cria financial_record avulsa). Description leva
|
||||||
|
|||||||
Reference in New Issue
Block a user