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/suggestcomrequire_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 responsivaretention.ts— API client com interfaceRetentionSuggestion- 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
| Ambiente | Pipeline | test:backend | E2E admin-retention | Estado |
|---|---|---|---|---|
| dev | #3345 | 1078 PASS | SUCCESS | promote UAT |
| dev | #3348 | 1078 PASS | SUCCESS | promote UAT (com E2E fixes) |
| UAT | #3346 | — | SUCCESS (98s) | admin-pricing FAILED (fix em #3351) |
| UAT | #3351 | — | running | E2E fixes incluidos |
Auto-Healing (6 tentativas)
| # | Erro | Fix | Root Cause |
|---|---|---|---|
| 1 | ruff I001 main.py | Import ordering | retention_suggest antes de reports |
| 2 | prettier AdminSidebar.tsx | --write | Formatação sidebar link |
| 3 | ruff format retention_suggest.py | ruff format | Multi-line expressions |
| 4 | TS1484 type import | import type { } | verbatimModuleSyntax |
| 5 | timezone naive/aware | .replace(tzinfo=UTC) | BD naive vs código UTC |
| 6 | RETENTION-03 regex + PRICING-04 mobile | regex + viewport-safe | Acção "Sem" + coluna hidden |
Commits (12)
| SHA | Descrição |
|---|---|
| 84e8a6d | feat(retention): endpoint ML retention suggest |
| cf0e0fc | feat(retention): UI dashboard + i18n + routing |
| 43ee926 | test(retention): E2E suite 98 RETENTION-01..05 |
| 0d15cf0 | ci(retention): jobs E2E 98-admin-retention |
| 882f813 | fix(retention): ruff I001 + prettier |
| 762d656 | fix(retention): ruff format |
| a9d310a | fix(retention): type-only import TS1484 |
| 4baeac6 | fix(retention): timezone datetime + multi_class |
| 0a7b582 | fix(e2e): RETENTION-03 regex + PRICING-04 viewport |
MRs
- MR !249 — feat/retention-suggest → dev (MERGED)