✅ Checklist: Onboarding Agent
Status: 🟢 Implementado e Deployado em DEV
Prioridade: 2 (Depende do Account State Agent) ✅
Deploy: 2026-01-25 | URL: https://csuite-dev.vallery.com.br/onboarding/
📋 Resumo
| Item | Valor |
|---|---|
| Código | onboarding |
| Porta | 8021 |
| Database | csuite_context |
| Prefixo API | /v1/onboarding |
| Traefik Path | /onboarding/ |
| Depende de | Account State Agent |
🎯 Objetivo
Gerenciar os primeiros 30-60 dias de uma nova revenda. Criar plano de ativação, acompanhar progresso e garantir que a revenda "crie raiz" no canal.
Frase-guia: Onboarding não é cadastro. Onboarding é engenharia de sobrevivência da revenda.
📊 Tipos de Plano
| Tipo | Duração | Para Quem |
|---|---|---|
STRATEGIC_60 |
60 dias | Revendas estratégicas |
STANDARD_30 |
30 dias | Revendas normais |
LIMITED_14 |
14 dias | Revendas limitadas |
📊 Atividades do Plano
| Atividade | Dia Típico | Responsável |
|---|---|---|
WELCOME |
D+0 | Sistema |
TRAINING |
D+1-3 | Vendedor |
FIRST_ORDER |
D+7 | Vendedor |
FOLLOW_UP |
D+14 | Sistema/Vendedor |
CHECK_IN |
D+21 | Vendedor |
SECOND_ORDER |
D+30 | Vendedor |
✅ Fases de Implementação
Fase 1: Estrutura Base ✅
- [x] Criar diretório
/c-suite/agents/onboarding/ - [x] Criar
requirements.txt - [x] Criar
.env.example - [x] Criar
main.py(FastAPI app) - [x] Criar
app/__init__.py - [x] Criar
app/settings.py - [x] Criar
app/database.py
Fase 2: Schema SQL ✅
- [x] Criar
sql/schema.sql - [x] Criar tabela
channel_onboarding_plans - [x] Criar tabela
channel_onboarding_activities - [x] Criar índices
- [x] Executar no RDS DEV
- [x] Criar
sql/views.sql
Fase 3: Modelos Python ✅
- [x] Criar
app/models.py - [x]
PlanTypeEnum- tipos de plano - [x]
TierEnum- tiers de revenda - [x]
ActivityTypeEnum- tipos de atividade - [x]
OnboardingPlan- plano completo - [x]
OnboardingActivity- atividade individual - [x]
CreatePlanRequest - [x]
OnboardingProgress- resposta com progresso
Fase 4: Repository (Queries) ✅
- [x] Criar
app/repository.py - [x]
create_plan(account_id, plan_type, tier) - [x]
get_plan(account_id) - [x]
get_plan_by_id(plan_id) - [x]
update_plan_status(plan_id, status) - [x]
create_activities(plan_id, activities) - [x]
update_activity(activity_id, status, notes) - [x]
get_pending_activities(date) - [x]
get_activities_by_plan(plan_id) - [x]
get_plans_at_risk() - [x]
get_metrics(period)
Fase 5: Heuristics (Lógica de Decisão) ✅
- [x] Criar
app/heuristics.py - [x]
determine_plan_type(account_data, tier)- qual plano usar - [x]
suggest_initial_kit(account_data)- mix ideal - [x]
generate_activity_schedule(plan_type)- cronograma - [x]
calculate_onboarding_risk(plan)- LOW/MEDIUM/HIGH - [x]
calculate_progress(plan)- % concluído - [x]
should_complete_plan(plan)- verificar se deve finalizar
Fase 6: Account State Integration ✅
- [x] Criar
app/state_client.py - [x]
get_account_state(account_id) - [x]
update_to_activating(account_id) - [x]
update_on_order(account_id, order_date, total_orders, total_value)
Fase 7: Routes/API ✅
- [x] Criar
routes/__init__.py - [x] Criar
routes/core.py - [x]
GET /- info - [x]
GET /health- health check - [x] Criar
routes/onboarding.py - [x]
POST /v1/onboarding/create- criar plano - [x]
GET /v1/onboarding/plan/{account_id}- consultar plano - [x]
GET /v1/onboarding/plan-by-id/{plan_id}- por ID - [x]
POST /v1/onboarding/activity/{activity_id}/complete- completar atividade - [x]
POST /v1/onboarding/activity/{activity_id}/skip- pular - [x]
GET /v1/onboarding/pending- atividades pendentes hoje - [x]
GET /v1/onboarding/at-risk- planos em risco - [x]
GET /v1/onboarding/metrics- métricas gerais - [x]
POST /v1/onboarding/{plan_id}/record-order- registrar pedido - [x]
POST /v1/onboarding/{plan_id}/cancel- cancelar plano
Fase 8: Policies ✅
- [x] Criar
policies/__init__.py - [x] Criar
policies/onboarding.py - [x] Regras por tier
- [x] Limites de incentivo no onboarding
- [x] SLAs de ativação
Fase 9: Docker ✅
- [x] Criar
Dockerfile - [x] Criar
docker-stack.yml - [x] Criar
deploy.sh - [x] Build local e testar
Fase 10: Deploy DEV ✅
- [x] Deploy com docker-stack.yml próprio
- [x] Configurar secrets (reutiliza csuite_db_password_robsonrr)
- [x] Deploy em DEV
- [x] Testar endpoints via curl
- [x] Verificar logs
Fase 11: Integração Seller Cockpit (Backend) ✅
- [x] Criar
seller-cockpit/backend/src/services/onboarding.service.js - [x] Adicionar métodos:
- [x]
getPlan(accountId) - [x]
getPendingActivities() - [x]
completeActivity(activityId) - [x]
getAtRiskPlans() - [x]
getMetrics() - [x]
recordOrder() - [x]
cancelPlan() - [x] Criar
routes/onboarding.routes.js - [x] Atualizar
config/agents.jscom endpoints de onboarding
Fase 12: Integração Seller Cockpit (Frontend) ✅
- [x] Criar
services/onboarding.service.js(API client) - [x] Criar componente
components/onboarding/OnboardingPanel.jsx - [x] Criar componente
components/onboarding/OnboardingProgress.jsx - [x] Adicionar seção "Novas Revendas" no
DashboardPage.jsx - [x] Mostrar progresso de onboarding no
InboxPage.jsxpara contas NEW/ACTIVATING
Fase 13: Documentação ✅
- [x] Criar
README.mdcompleto - [x] Documentar API endpoints
- [x] Adicionar exemplos de uso
- [ ] Atualizar
AGENTS_OVERVIEW.md
Fase 14: Testes ✅
- [x] Testar cada endpoint isoladamente
- [x] Testar criação de plano
- [x] Testar execução de atividades
- [x] Testar cálculo de risco
- [x] Testar registro de pedido
- [x] Frontend build funcionando
📁 Estrutura de Arquivos
onboarding/
├── .env.example
├── Dockerfile
├── README.md
├── deploy.sh
├── docker-stack.yml
├── main.py
├── requirements.txt
├── app/
│ ├── __init__.py
│ ├── database.py
│ ├── heuristics.py
│ ├── models.py
│ ├── repository.py
│ ├── settings.py
│ └── state_client.py
├── policies/
│ ├── __init__.py
│ └── onboarding.py
├── routes/
│ ├── __init__.py
│ ├── core.py
│ └── onboarding.py
└── sql/
├── schema.sql
└── views.sql
🔌 API Endpoints
| Método | Endpoint | Descrição |
|---|---|---|
| GET | / |
Info do serviço |
| GET | /health |
Health check |
| POST | /v1/onboarding/create |
Criar plano de onboarding |
| GET | /v1/onboarding/plan/{account_id} |
Consultar plano |
| POST | /v1/onboarding/activity/{id}/complete |
Completar atividade |
| POST | /v1/onboarding/activity/{id}/skip |
Pular atividade |
| GET | /v1/onboarding/pending |
Atividades pendentes hoje |
| GET | /v1/onboarding/at-risk |
Planos em risco |
| GET | /v1/onboarding/metrics |
Métricas de onboarding |
| POST | /v1/onboarding/{plan_id}/record-order |
Registrar pedido |
📊 Schema SQL Principal
CREATE TABLE IF NOT EXISTS channel_onboarding_plans (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
org_id INT NOT NULL DEFAULT 1,
account_id VARCHAR(100) NOT NULL,
-- Plan Config
plan_type ENUM('STANDARD_30', 'STRATEGIC_60', 'LIMITED_14') NOT NULL,
tier ENUM('STRATEGIC', 'OPPORTUNISTIC', 'TRANSACTIONAL', 'LIMITED') NOT NULL,
-- Dates
start_date DATE NOT NULL,
target_end_date DATE NOT NULL,
actual_end_date DATE,
-- Status
status ENUM('ACTIVE', 'COMPLETED_SUCCESS', 'COMPLETED_FAILED', 'CANCELLED') NOT NULL DEFAULT 'ACTIVE',
onboarding_risk ENUM('LOW', 'MEDIUM', 'HIGH') DEFAULT 'MEDIUM',
-- Goals
first_order_target_days INT DEFAULT 7,
first_order_actual_date DATE,
second_order_target_days INT DEFAULT 30,
second_order_actual_date DATE,
activation_target_value DECIMAL(15,2),
activation_actual_value DECIMAL(15,2) DEFAULT 0,
-- Kit
suggested_kit_json JSON,
actual_first_order_json JSON,
-- Tracking
cadence_pattern VARCHAR(50) DEFAULT 'DAY1,DAY3,DAY7,DAY14,DAY30',
contacts_scheduled INT DEFAULT 0,
contacts_made INT DEFAULT 0,
progress_pct INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_account (org_id, account_id),
INDEX idx_status (status),
INDEX idx_risk (onboarding_risk),
INDEX idx_dates (start_date, target_end_date)
);
CREATE TABLE IF NOT EXISTS channel_onboarding_activities (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
plan_id BIGINT NOT NULL,
activity_type ENUM('WELCOME', 'TRAINING', 'FIRST_ORDER', 'FOLLOW_UP', 'CHECK_IN', 'SECOND_ORDER') NOT NULL,
activity_order INT NOT NULL,
scheduled_date DATE,
completed_date DATE,
status ENUM('PENDING', 'COMPLETED', 'SKIPPED', 'OVERDUE') DEFAULT 'PENDING',
notes TEXT,
completed_by VARCHAR(50),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_plan (plan_id),
INDEX idx_scheduled (scheduled_date, status),
FOREIGN KEY (plan_id) REFERENCES channel_onboarding_plans(id)
);
🎨 UI no Seller Cockpit
Dashboard - Seção "Novas Revendas"
┌────────────────────────────────────────────────────┐
│ 🌱 Novas Revendas para Ativar (3) │
├────────────────────────────────────────────────────┤
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Mercado Central │ │ Auto Peças Norte │ │
│ │ 🔵 NEW • 5 dias │ │ 🟡 ACTIVATING │ │
│ │ ━━━━━━░░░░ 40% │ │ ━━━━━━━━░░ 80% │ │
│ │ Próximo: 1ª Cota │ │ Próximo: 2ª Compra│ │
│ └──────────────────┘ └──────────────────┘ │
└────────────────────────────────────────────────────┘
✅ Critérios de Conclusão
- [ ] Planos sendo criados automaticamente
- [ ] Atividades gerando tarefas para vendedor
- [ ] Risco calculado corretamente
- [ ] Integração com Account State funcionando
- [ ] Seção visível no Dashboard do Seller Cockpit
- [ ] Progresso visível para contas em onboarding
- [ ] README completo
- [ ] Deploy em DEV funcionando
Atualizado: 2026-01-24