- Spegnimento
- 28 maggio 2026 alle ore 21:01 UTC
- Autore
- Kamo
- Impegno
- 0c59054
Movimento dei soldi (il nucleo P1): - LoanPaymentPostingService: markSucceedAndPost / markFailed / markReturnedAndReverse / markDisbursementSucceededed / markDrawDisbursed. Ordine di allocazione bloccato: tasse → interesse → preside. Auto-avanze di stato DELINQUENT ↔ ACTIVE ↔ PAID OFF basato sull'equilibrio risultante. - StripeWebhookService non è più log-only: payment intent.succeed / pagamento failed / charge.refunded (rimborso di ACH) / disputa.created+chiuso / pagamento.pagato + fatto tutti anticipare il registro tramite PostingService. - NachaReturnCode + RetryScheduler: NACHA-compliant R-code routing — R01/R09 riprova fino a 2× / 5 giorni di distanza, R07/R10/R29 revoca il mandato, ripiani esauriti flip LoanPaymentMethod → REQUIRES REVERIFY. Composizione commerciale-verticale: # Ora crea Engagement # (PERSONAL LOANS, COMITATO), Impegno (ACTIVE, con prezzi + termini JSON snapshot), Ordine (AUTHORIZED, subtotal=principal), e filetta i loro ID torna su Loan.commitmentUid / engagementUid / originOrderUid in la stessa transazione. Lavoro Cron (vera logica, non stubs): - CoolingOffAdvanceCategoria professionale: prevede un pagamento FINE DISBURSEMENT OUT per ogni PENDING DISBURGAMENTO prestito il cui raffreddamento è trascorso. - InteressiAccrualCategoria professionale: abituale quotidiano sul principaleBalance per i prestiti ACTIVE + DELINQUENT. - StatementGenerationCategoria professionale: installazione per-due-date dichiarazione, LOC per-ciclo dichiarazione con approssimazione ADB + valutazione annuale delle tasse + pagamento automatico Sto programmando. - AutoDebitRunCategoria professionale: incendi PENDING auto-debiti + pagamenti DISBURSEMENT OUT + Retries NACHA tramite StripeConnectService con chiavi idempotency. - RiconciliazioneCategoria professionale: riassorbimento notturno delle tasse/principale/equilibrio ledger; correzione alla deriva registrato + verificato. - ReminderDispatchJob: tira notifiche SCHEDULED oltre il loro programmatoFor e consegna tramite NotificationDispatchService. Notifica: - No, no. reale HTTP POST a EmailService (/api/email/transactional/send) e VOIPService (/api/voip/sms/send, /api/voip/voice/send), templateKey = "loan.{kind lowercase}". Validazione: - LoanProductValidationService: applica il tappo di stato APR ≤ (per genere), controlli proibiti, pena min/max-principale. agganciato in LoanProductService.create + aggiornamento. Caricamento: - LoanChargeOffService.queue() elenca i prestiti D120; a CHARGED OFF e scrive un evento di audit CHARGE OFF RECORDED. - LoanChargeOffController espone Non e' vero. Navigatore: - LoanAuditEventController espone Non e' vero