diff --git a/AGENT.md b/AGENT.md new file mode 100644 index 0000000..2fe79cd --- /dev/null +++ b/AGENT.md @@ -0,0 +1,23 @@ +# SaveInMed - AI Engineering Standards (Advanced) + +## 🎨 Lei do Estilo Único (Frontend) +1. **Zero CSS Customizado**: É PROIBIDO criar classes CSS novas no `globals.css` ou usar o atributo `style={{}}`. +2. **Componentes UI**: Use EXCLUSIVAMENTE componentes da pasta `@/components/ui` (padrão shadcn). Se precisar de um componente novo, peça permissão ou siga o padrão Radix UI. +3. **Atomicidade**: Separe "Smart Components" (que buscam dados) de "Dumb Components" (que apenas renderizam UI). +4. **Tailwind Only**: Use apenas classes utilitárias padrão do Tailwind. Não invente valores arbitrários (ex: `w-[347px]`), use a escala padrão (`w-80`). + +## 🧪 Protocolo de Teste (Mandatório) +1. **Backend**: Todo UseCase em `internal/usecase` DEVE ter um arquivo `_test.go` cobrindo sucesso e erro (usando mocks das interfaces em `domain/ports`). +2. **Frontend**: Componentes críticos (Checkout, Cart) devem ter testes unitários com Vitest. +3. **Validação**: Antes de dar a tarefa como pronta, o agente deve rodar `go test ./...` e `npm run build` no frontend para garantir que não quebrou tipos. + +## 📠Estrutura de Pastas (Lei do Projeto) +- `@/components/modules/*`: Componentes complexos por funcionalidade (ex: `Cart/`, `Checkout/`). +- `@/components/ui/*`: Componentes base (Botão, Input, Modal). +- `@/hooks/*`: Toda lógica de API e estados complexos. +- `@/services/*`: Chamadas puras de API (Axios/Fetch). + + +## ?? Gestão de Credenciais +- **Dinâmico**: Todas as chaves de API devem ser gerenciáveis via Dashboard e salvas no banco de dados. +- **Segurança**: Chaves sensíveis devem ser armazenadas de forma segura ou rotacionadas via sistema. diff --git a/TASKS.md b/TASKS.md new file mode 100644 index 0000000..af7423e --- /dev/null +++ b/TASKS.md @@ -0,0 +1,15 @@ +# SaveInMed - Atividades + +## 🎯 Backlog Prioritário +1. [ ] Implementar listagem de pedidos na Distribuidora. +2. [ ] Adicionar filtro por validade no catálogo de produtos. +3. [ ] Integrar checkout com gateway de pagamento (Asaas/Stripe). + +## 🛠Bugs Conhecidos +- [x] Erro de acentuação (Encoding UTF-8) - CORRIGIDO. +- [x] Falha no login do admin (Password Pepper) - CORRIGIDO. +- [ ] Modal de endereço fechando ao clicar fora sem salvar. + +## ✅ Concluído recentemente +- Setup do ambiente Docker com Hot Reload na VPS echo. +- Sincronização de domínios sim.rede5.com.br. diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..e8f9e43 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,15 @@ +# SaveInMed - Protocolo de Testes + +## ðŸ› ï¸ Ferramentas +- **Backend**: Go `testing` package + `stretchr/testify` + `sqlmock`. +- **Frontend**: `Vitest` + `Testing Library`. + +## 🔬 O que testar? (Prioridades) +1. **Auth**: Fluxo de login e extração de `company_id` do JWT. +2. **Cart**: Adição de itens, cálculo de centavos e prevenção de quantidades negativas. +3. **Checkout**: Garantir que a reserva de estoque ocorre corretamente. +4. **CORS/Nginx**: Testes de fumaça (Smoke Tests) via `curl` nas URLs da VPS. + +## 🃠Como rodar +- **Backend**: `docker exec sim-backend-dev go test ./...` +- **Frontend**: `npm run test` diff --git a/backend/DOMAIN.md b/backend/DOMAIN.md new file mode 100644 index 0000000..0e4784e --- /dev/null +++ b/backend/DOMAIN.md @@ -0,0 +1,23 @@ +# SaveInMed - Domínio e Lógica de Negócio Profunda + +## 🢠Arquitetura Multi-Tenant +- **Isolamento**: Usamos `company_id` em todas as tabelas transacionais. +- **Identificadores**: Usamos **UUID v7** para chaves primárias (sortable e performance-friendly). +- **Cadastro**: Toda empresa (`Tenant`) deve fornecer um CNPJ válido. A validação (`is_verified`) é manual pelo admin da plataforma. + +## 📦 Gestão de Inventário e Medicamentos +- **Lotes e Validades**: O sistema é focado em medicamentos. Produtos sem `batch` (lote) e `expires_at` (validade) são proibidos. +- **Preços**: + - `price_cents`: Preço base em centavos. + - `commercial_discount_cents`: Desconto aplicado. + - `tax_substitution_cents`: ST (Substituição Tributária) obrigatória para farmácias. +- **Estoque**: Reservas de estoque ocorrem no momento da criação do pedido (`Order`). Se o pedido expirar ou for cancelado, o estoque volta (`InventoryAdjustment`). + +## 💰 Fluxo Financeiro e Split de Pagamento +- **Ledger (Livro Razão)**: Toda transação gera uma entrada imutável no `ledger_entries`. +- **Marketplace Fee**: A plataforma retém uma porcentagem fixa (configurável em `MARKETPLACE_COMMISSION`). +- **Withdrawals**: Distribuidoras solicitam saques. O status muda de `PENDING` -> `APPROVED` -> `PAID`. + +## 📠Logística e Geolocalização +- **Cálculo de Frete**: Baseado na distância euclidiana entre as coordenadas (lat/long) da Farmácia e da Distribuidora. +- **Mapbox**: Usado para geocodificação de endereços no cadastro.