Passa al contenuto principale

PLN097 EVIDENCE — Retenção Inteligente ML

Entrega

Backend

  • retention_suggest.py — LogisticRegression multiclass (6 acções, 7 features binárias)
  • Reutiliza churn_predict._get_model() para churn_probability por subscrição
  • GET /api/admin/retention/suggest com require_permission("can_view_reports")
  • 6 testes pytest: auth(401/403), empty, returns_list, schema, model_builds

Frontend

  • AdminRetention.tsx — dashboard com KPIs, filtro prioridade, tabela responsiva
  • retention.ts — API client com interface RetentionSuggestion
  • Rota /admin/retention + sidebar ShieldAlert
  • 6 idiomas i18n (PT, EN, FR, ES, IT, DE)

E2E

  • Suite 98-admin-retention: RETENTION-01..05 (3 viewports, data-safe)
  • 3 jobs CI/CD: e2e:{dev,uat,staging}:admin-retention

Pipeline Results

AmbientePipelinetest:backendE2E admin-retentionEstado
dev#33451078 PASSSUCCESSpromote UAT
dev#33481078 PASSSUCCESSpromote UAT (com E2E fixes)
UAT#3346SUCCESS (98s)admin-pricing FAILED (fix em #3351)
UAT#3351runningE2E fixes incluidos

Auto-Healing (6 tentativas)

#ErroFixRoot Cause
1ruff I001 main.pyImport orderingretention_suggest antes de reports
2prettier AdminSidebar.tsx--writeFormatação sidebar link
3ruff format retention_suggest.pyruff formatMulti-line expressions
4TS1484 type importimport type { }verbatimModuleSyntax
5timezone naive/aware.replace(tzinfo=UTC)BD naive vs código UTC
6RETENTION-03 regex + PRICING-04 mobileregex + viewport-safeAcção "Sem" + coluna hidden

Commits (12)

SHADescrição
84e8a6dfeat(retention): endpoint ML retention suggest
cf0e0fcfeat(retention): UI dashboard + i18n + routing
43ee926test(retention): E2E suite 98 RETENTION-01..05
0d15cf0ci(retention): jobs E2E 98-admin-retention
882f813fix(retention): ruff I001 + prettier
762d656fix(retention): ruff format
a9d310afix(retention): type-only import TS1484
4baeac6fix(retention): timezone datetime + multi_class
0a7b582fix(e2e): RETENTION-03 regex + PRICING-04 viewport

MRs

  • MR !249 — feat/retention-suggest → dev (MERGED)