arcadiasuite/docs/archive/PLANO_IMPLEMENTACAO_RETAIL.md

482 lines
22 KiB
Markdown

# Plano de Implementação - Módulo Retail (Loja de Celular e Assistência Técnica)
**Versão:** 1.1
**Data:** Janeiro 2026
**Status:** Em Desenvolvimento
---
## 0. Requisitos Especiais Identificados
### 0.1 Fluxo Trade-In → O.S. Interna → Estoque
Quando um aparelho Trade-In é aprovado para aquisição, deve:
1. Criar automaticamente uma **Ordem de Serviço Interna** para revisão/manutenção
2. Ao finalizar a O.S., o aparelho entra no **estoque como produto normal**
3. O estoque deve **diferenciar a origem**: Trade-In vs Fornecedor
```
┌─────────────────┐ ┌───────────────────┐ ┌─────────────────┐
│ TRADE-IN │ │ O.S. INTERNA │ │ ESTOQUE │
│ (Avaliação) │ ──→ │ (Revisão) │ ──→ │ (Disponível) │
└─────────────────┘ └───────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
• Checklist OK • Limpeza • Origem: Trade-In
• Valor acordado • Teste funcional • Custo: valor + OS
• Assinatura • Troca peças? • Preço venda
• Documento legal • Laudo técnico • IMEI rastreado
```
### 0.2 Cadastro Unificado de Pessoas
Uma única tabela de **Pessoas** com múltiplos papéis:
- Cliente
- Fornecedor
- Colaborador/Funcionário
- Técnico
- Representante
```
┌─────────────────────────────────────────────────────────────────┐
│ PESSOA (person) │
│ • id, nome, cpf_cnpj, email, telefone, endereço │
└─────────────────────────────────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ CLIENTE │ │FORNECEDOR│ │COLABORADOR│
│ (role) │ │ (role) │ │ (role) │
└──────────┘ └──────────┘ └──────────┘
```
---
## 1. Análise do Estado Atual
### 1.1 O Que Já Temos Implementado
| Módulo | Funcionalidade | Status | Observações |
|--------|----------------|--------|-------------|
| **Estrutura Base** | Schema de tabelas (mobile_devices, device_evaluations, service_orders, pos_sales, stock_transfers) | ✅ Completo | Alinhado com requisitos |
| **Lojas/Filiais** | CRUD de lojas (retail_stores) e armazéns (retail_warehouses) | ✅ Completo | Suporte multi-loja |
| **Dispositivos/IMEI** | Cadastro, busca por IMEI, listagem | ✅ Básico | Falta histórico (Kardex) |
| **Trade-In** | Avaliação com checklist customizável, termo de transferência, assinatura digital | ✅ Completo | Documento imprimível |
| **Ordens de Serviço** | CRUD básico, itens da OS | ✅ Parcial | Falta fluxo completo de status |
| **PDV** | Sessões, vendas básicas, itens | ✅ Parcial | Falta carrinho funcional no frontend |
| **Transferências** | Estrutura para transferência entre lojas | ✅ Parcial | Falta workflow completo |
| **Dashboard** | Estatísticas básicas | ✅ Básico | Pode ser expandido |
### 1.2 O Que Está Faltando (Gap Analysis)
| Requisito (Documento) | Status | Prioridade | Esforço |
|-----------------------|--------|------------|---------|
| Histórico completo de IMEI (Kardex) | ❌ Não implementado | Alta | Médio |
| Geração de etiquetas com código de barras | ❌ Não implementado | Alta | Baixo |
| Fluxo completo de status da O.S. | ⚠️ Parcial | Alta | Médio |
| Orçamentação automática | ❌ Não implementado | Alta | Médio |
| Notificação ao cliente (WhatsApp/SMS) | ⚠️ Integração existe | Média | Baixo |
| Portal público de consulta O.S. | ❌ Não implementado | Média | Baixo |
| PDV com carrinho funcional | ⚠️ Parcial | Alta | Alto |
| Validação IMEI na venda | ❌ Não implementado | Alta | Baixo |
| Baixa automática de peças | ❌ Não implementado | Alta | Médio |
| Separação estoque venda/reparo | ⚠️ Via warehouses | Média | Baixo |
| Impressão de recibos/comprovantes | ❌ Não implementado | Média | Médio |
| Relatórios específicos | ⚠️ Parcial (BI existe) | Média | Médio |
---
## 2. Arquitetura de Integração
### 2.1 Reutilização de Módulos Existentes
```
┌─────────────────────────────────────────────────────────────────┐
│ ARCÁDIA SUITE (Base) │
├─────────────────────────────────────────────────────────────────┤
│ ✅ Clientes (customers) → Usar cadastro existente │
│ ✅ Produtos (products) → Usar cadastro existente │
│ ✅ Fornecedores (suppliers) → Usar cadastro existente │
│ ✅ Usuários/Funcionários (users) → Usar sistema de auth │
│ ✅ WhatsApp (Baileys) → Integrar notificações │
│ ✅ ERPNext → Sincronizar dados quando conectado │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ MÓDULO RETAIL (Novo) │
├─────────────────────────────────────────────────────────────────┤
│ 📱 Dispositivos (mobile_devices) → Controle por IMEI │
│ 🔧 Ordens de Serviço (service_orders) → Assistência Técnica │
│ 💰 PDV (pos_sales) → Ponto de Venda │
│ 📦 Estoque Retail (via warehouses) → Peças e Aparelhos │
│ 🔄 Trade-In (device_evaluations) → Avaliação de usados │
│ 🏪 Multi-Loja (retail_stores) → Franquias │
└─────────────────────────────────────────────────────────────────┘
```
### 2.2 Fluxo de Status da O.S. (Implementar)
```
┌──────────┐ ┌────────────┐ ┌───────────┐ ┌────────────────────┐
│ ABERTA │ → │ DIAGNÓSTICO│ → │ ORÇAMENTO │ → │ AGUARDANDO_APROVAÇÃO│
└──────────┘ └────────────┘ └───────────┘ └────────────────────┘
┌───────────────────────────────────────┴────┐
▼ ▼
┌────────────┐ ┌────────────┐
│ RECUSADA │ │ APROVADA │
└────────────┘ └────────────┘
┌─────────────────────────────────────────┘
┌─────────────────┐ ┌───────────┐ ┌──────────┐
│ AGUARDANDO_PECA │ ← │ EM_REPARO │ → │ QUALIDADE │
└─────────────────┘ └───────────┘ └──────────┘
┌─────────────────────────┐
│ AGUARDANDO_RETIRADA │
└─────────────────────────┘
┌─────────────┐
│ FINALIZADA │
└─────────────┘
```
---
## 3. Plano de Implementação por Fases
### Fase 0: Estrutura Base - Pessoas e Trade-In Flow (Semana 0-1) ⭐ PRIORIDADE
#### 0.1 Cadastro Unificado de Pessoas
- [ ] Criar tabela `persons` com campos base (nome, cpf_cnpj, email, telefone, endereço)
- [ ] Criar tabela `person_roles` (person_id, role_type, dados específicos do papel)
- [ ] Tipos de papel: `customer`, `supplier`, `employee`, `technician`, `partner`
- [ ] API CRUD `/persons` com filtro por papel
- [ ] Migrar referências de customers/suppliers para usar persons
- [ ] UI unificada de cadastro de pessoas com seleção de papéis
#### 0.2 Fluxo Trade-In → O.S. Interna → Estoque
- [ ] Adicionar campo `origin_type` em mobile_devices (trade_in, supplier, internal)
- [ ] Adicionar campo `is_internal` em service_orders para diferenciar OS cliente vs interna
- [ ] Criar trigger automático: ao aprovar Trade-In → criar O.S. Interna
- [ ] O.S. Interna com tipo: revisão, limpeza, manutenção preventiva
- [ ] Ao finalizar O.S. Interna → criar dispositivo no estoque
- [ ] Calcular custo total: valor_trade_in + custo_os
- [ ] Sugerir preço de venda baseado em margem configurável
- [ ] UI de acompanhamento do fluxo Trade-In completo
#### 0.3 Diferenciação de Estoque por Origem
- [ ] Campo `acquisition_type` em mobile_devices: trade_in, purchase, consignment
- [ ] Campo `acquisition_cost` (custo de aquisição)
- [ ] Campo `related_evaluation_id` (link com avaliação Trade-In)
- [ ] Campo `related_service_order_id` (link com O.S. de revisão)
- [ ] Filtros no estoque por origem
- [ ] Relatório de margem por origem
### Fase 1: Completar o Núcleo (Semana 2-3)
#### 1.1 Histórico de IMEI (Kardex)
- [ ] Criar tabela `imei_history` no schema
- [ ] API para registrar movimentações automáticas
- [ ] Endpoint GET `/devices/:imei/history`
- [ ] UI de visualização do histórico do dispositivo
#### 1.2 Fluxo Completo de O.S.
- [ ] Atualizar enum de status conforme fluxograma
- [ ] API PATCH `/service-orders/:id/status` com validação de transições
- [ ] Registrar automaticamente em `imei_history`
- [ ] UI com workflow visual de status
- [ ] Diferenciar O.S. Cliente vs O.S. Interna na listagem
#### 1.3 Orçamentação
- [ ] API POST `/service-orders/:id/generate-quote`
- [ ] Cálculo automático baseado em itens adicionados
- [ ] UI para adicionar peças/serviços e visualizar orçamento
- [ ] Impressão de orçamento
#### 1.4 Geração de Etiquetas
- [ ] API GET `/devices/:imei/label` retornando PDF
- [ ] Incluir código de barras (IMEI + número OS)
- [ ] Botão de impressão na tela de dispositivo/OS
### Fase 2: PDV Funcional (Semana 3-4)
#### 2.1 Carrinho de Vendas
- [ ] Componente de carrinho no frontend
- [ ] Busca de produtos por código/nome
- [ ] Leitura de IMEI para aparelhos
- [ ] Validação de IMEI disponível para venda
#### 2.2 Integração Venda + O.S.
- [ ] Adicionar O.S. finalizada como item da venda
- [ ] Baixa automática de peças no fechamento da OS
#### 2.3 Formas de Pagamento
- [ ] UI para múltiplas formas de pagamento
- [ ] Cálculo de troco
- [ ] Integração Trade-In como forma de pagamento
#### 2.4 Recibos e Comprovantes
- [ ] Geração de recibo de venda (impressão)
- [ ] Comprovante de entrega de OS
### Fase 3: Automação e Comunicação (Semana 5-6)
#### 3.1 Notificações ao Cliente
- [ ] Integrar com WhatsApp existente (Baileys)
- [ ] Templates de mensagem: orçamento pronto, OS pronta, lembrete
- [ ] API POST `/service-orders/:id/notify-customer`
- [ ] Histórico de notificações enviadas
#### 3.2 Portal do Cliente (Público)
- [ ] Rota pública GET `/public/os/:orderNumber`
- [ ] Página simples de consulta de status
- [ ] QR Code na etiqueta/recibo
#### 3.3 Relatórios Específicos
- [ ] OS por período/técnico/status
- [ ] Vendas por vendedor/produto/período
- [ ] Tempo médio de reparo
- [ ] Peças mais utilizadas
### Fase 4: Estoque Avançado (Semana 7-8)
#### 4.1 Separação Estoque Venda/Reparo
- [ ] Categorização de warehouses (tipo: venda/reparo)
- [ ] Regras de transferência entre tipos
- [ ] Alertas de estoque mínimo por categoria
#### 4.2 Baixa Automática de Peças
- [ ] Trigger ao finalizar reparo
- [ ] Reserva de peças ao aprovar OS
- [ ] Liberação se OS cancelada
#### 4.3 Inventário por IMEI
- [ ] Listagem de aparelhos em estoque por IMEI
- [ ] Localização física (prateleira/loja)
- [ ] Tempo em estoque
---
## 4. APIs a Implementar
### 4.0 Módulo Pessoas (Prioridade Máxima) ⭐
| Método | Endpoint | Descrição | Status |
|--------|----------|-----------|--------|
| GET | `/persons` | Listar pessoas (filtro por papel) | ❌ Fazer |
| POST | `/persons` | Criar pessoa | ❌ Fazer |
| GET | `/persons/:id` | Detalhes da pessoa | ❌ Fazer |
| PUT | `/persons/:id` | Atualizar pessoa | ❌ Fazer |
| POST | `/persons/:id/roles` | Adicionar papel à pessoa | ❌ Fazer |
| DELETE | `/persons/:id/roles/:role` | Remover papel | ❌ Fazer |
| GET | `/persons/search?q=` | Buscar por nome/CPF | ❌ Fazer |
### 4.1 Módulo Trade-In Flow (Prioridade Máxima) ⭐
| Método | Endpoint | Descrição | Status |
|--------|----------|-----------|--------|
| POST | `/evaluations/:id/approve-and-process` | Aprovar e criar O.S. Interna | ❌ Fazer |
| GET | `/evaluations/:id/full-flow` | Status completo do fluxo | ❌ Fazer |
| POST | `/service-orders/:id/finalize-internal` | Finalizar OS e criar no estoque | ❌ Fazer |
### 4.2 Módulo IMEI (Prioridade Alta)
| Método | Endpoint | Descrição | Status |
|--------|----------|-----------|--------|
| GET | `/devices/:imei/history` | Histórico completo (Kardex) | ❌ Fazer |
| GET | `/devices/:imei/label` | Gerar etiqueta PDF | ❌ Fazer |
| PATCH | `/devices/:id/status` | Atualizar status c/ registro | ❌ Fazer |
| GET | `/devices?origin=trade_in` | Filtrar por origem | ❌ Fazer |
### 4.3 Módulo O.S. (Prioridade Alta)
| Método | Endpoint | Descrição | Status |
|--------|----------|-----------|--------|
| POST | `/service-orders/:id/generate-quote` | Gerar orçamento | ❌ Fazer |
| PATCH | `/service-orders/:id/status` | Workflow de status | ⚠️ Melhorar |
| POST | `/service-orders/:id/notify-customer` | Enviar notificação | ❌ Fazer |
| GET | `/public/os/:orderNumber` | Consulta pública | ❌ Fazer |
| GET | `/service-orders?is_internal=true` | Filtrar OS internas | ❌ Fazer |
### 4.4 Módulo Vendas (Prioridade Alta)
| Método | Endpoint | Descrição | Status |
|--------|----------|-----------|--------|
| POST | `/sales/validate-imei` | Validar IMEI para venda | ❌ Fazer |
| GET | `/sales/:id/receipt` | Gerar recibo PDF | ❌ Fazer |
### 4.5 Módulo Estoque (Prioridade Média)
| Método | Endpoint | Descrição | Status |
|--------|----------|-----------|--------|
| POST | `/inventory/:id/decrease` | Baixar do estoque | ❌ Fazer |
| GET | `/inventory/low-stock` | Itens abaixo do mínimo | ❌ Fazer |
| GET | `/inventory/by-origin` | Relatório por origem | ❌ Fazer |
---
## 5. Componentes de UI a Criar/Melhorar
### 5.0 Componentes Novos - Fase 0 ⭐
| Componente | Descrição | Prioridade |
|------------|-----------|------------|
| `PersonForm` | Cadastro unificado de pessoas com seleção de papéis | Máxima |
| `PersonSearch` | Busca de pessoas por nome/CPF com indicador de papéis | Máxima |
| `TradeInFlowTracker` | Acompanhamento visual: Avaliação → O.S. → Estoque | Máxima |
| `InternalServiceOrder` | Formulário de O.S. interna (revisão/manutenção) | Máxima |
| `DeviceOriginBadge` | Badge indicando origem (Trade-In / Fornecedor) | Alta |
### 5.1 Novos Componentes - Outras Fases
| Componente | Descrição | Prioridade |
|------------|-----------|------------|
| `IMEIHistory` | Timeline de movimentações do IMEI | Alta |
| `ServiceOrderWorkflow` | Painel visual de status da OS | Alta |
| `QuoteGenerator` | Formulário de orçamentação | Alta |
| `POSCart` | Carrinho do PDV funcional | Alta |
| `PaymentMethods` | Seletor de formas de pagamento | Alta |
| `ReceiptPreview` | Visualização/impressão de recibos | Média |
| `LabelPrint` | Impressão de etiquetas | Média |
| `CustomerPortal` | Página pública de consulta | Média |
| `NotificationHistory` | Histórico de mensagens enviadas | Baixa |
### 5.2 Melhorias em Componentes Existentes
| Componente | Melhoria | Prioridade |
|------------|----------|------------|
| `ArcadiaRetail.tsx` | Adicionar carrinho no PDV | Alta |
| Aba Estoque | Filtrar por origem (Trade-In/Fornecedor) | Alta |
| Aba Estoque | Separar por tipo (venda/reparo) | Média |
| Aba Serviços | Workflow visual de status | Alta |
| Aba Serviços | Diferenciar O.S. Cliente vs O.S. Interna | Alta |
| Aba Trade-In | Botão "Aprovar e Processar" com fluxo completo | Alta |
| Dashboard | KPIs específicos do negócio | Média |
---
## 6. Estimativa de Esforço
| Fase | Duração | Complexidade | Dependências |
|------|---------|--------------|--------------|
| **Fase 0 - Pessoas + Trade-In Flow** | 1-2 semanas | Alta | Nenhuma |
| Fase 1 - Núcleo (IMEI, OS, Orçamento) | 2 semanas | Média | Fase 0 |
| Fase 2 - PDV | 2 semanas | Alta | Fase 1 |
| Fase 3 - Automação | 2 semanas | Média | Fase 1, WhatsApp |
| Fase 4 - Estoque Avançado | 2 semanas | Média | Fases 1-2 |
**Total Estimado:** 8-10 semanas para MVP completo
---
## 7. Schema de Dados - Novas Tabelas
### 7.1 Tabela `persons` (Pessoas Unificadas)
```sql
CREATE TABLE persons (
id SERIAL PRIMARY KEY,
tenant_id INTEGER REFERENCES tenants(id),
full_name VARCHAR(255) NOT NULL,
cpf_cnpj VARCHAR(20) UNIQUE,
email VARCHAR(255),
phone VARCHAR(20),
phone2 VARCHAR(20),
address TEXT,
city VARCHAR(100),
state VARCHAR(2),
zip_code VARCHAR(10),
birth_date DATE,
notes TEXT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### 7.2 Tabela `person_roles` (Papéis da Pessoa)
```sql
CREATE TABLE person_roles (
id SERIAL PRIMARY KEY,
person_id INTEGER REFERENCES persons(id) NOT NULL,
role_type VARCHAR(20) NOT NULL, -- customer, supplier, employee, technician, partner
-- Campos específicos por papel
credit_limit NUMERIC(12,2), -- para customer
payment_terms VARCHAR(50), -- para supplier
employee_code VARCHAR(20), -- para employee
commission_rate NUMERIC(5,2), -- para employee/technician
hire_date DATE, -- para employee
specialization VARCHAR(100), -- para technician
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### 7.3 Campos Adicionais em `mobile_devices`
```sql
ALTER TABLE mobile_devices ADD COLUMN acquisition_type VARCHAR(20) DEFAULT 'purchase';
-- Valores: trade_in, purchase, consignment, internal_transfer
ALTER TABLE mobile_devices ADD COLUMN acquisition_cost NUMERIC(12,2);
ALTER TABLE mobile_devices ADD COLUMN related_evaluation_id INTEGER REFERENCES device_evaluations(id);
ALTER TABLE mobile_devices ADD COLUMN related_service_order_id INTEGER REFERENCES service_orders(id);
ALTER TABLE mobile_devices ADD COLUMN person_id INTEGER REFERENCES persons(id); -- substituir supplier_id
```
### 7.4 Campos Adicionais em `service_orders`
```sql
ALTER TABLE service_orders ADD COLUMN is_internal BOOLEAN DEFAULT false;
ALTER TABLE service_orders ADD COLUMN internal_type VARCHAR(30); -- revision, cleaning, maintenance
ALTER TABLE service_orders ADD COLUMN source_evaluation_id INTEGER REFERENCES device_evaluations(id);
```
### 7.5 Tabela `imei_history` (Kardex do IMEI)
```sql
CREATE TABLE imei_history (
id SERIAL PRIMARY KEY,
device_id INTEGER REFERENCES mobile_devices(id) NOT NULL,
action VARCHAR(50) NOT NULL,
-- entrada, venda, devolucao, transferencia, reparo_iniciado, reparo_finalizado, trade_in_aprovado
previous_status VARCHAR(50),
new_status VARCHAR(50),
related_order_id INTEGER, -- pode ser OS, venda, transferência
related_order_type VARCHAR(20), -- service_order, sale, transfer, evaluation
notes TEXT,
created_by INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
---
## 7. Próximos Passos Imediatos
1. **Criar tabela `imei_history`** para rastreamento completo
2. **Implementar API de histórico** GET `/devices/:imei/history`
3. **Melhorar fluxo de status** da O.S. com validações
4. **Criar componente de carrinho** funcional no PDV
5. **Implementar geração de orçamento** automático
---
## 8. Integrações Existentes a Utilizar
| Sistema | Uso | Status |
|---------|-----|--------|
| ERPNext | Sincronizar clientes, produtos, fornecedores | ✅ Conectado |
| WhatsApp (Baileys) | Notificações ao cliente | ✅ Disponível |
| OpenAI | Sugestões inteligentes | ✅ Disponível |
| PostgreSQL | Banco de dados | ✅ Em uso |
---
*Este documento deve ser atualizado conforme o progresso da implementação.*