saveinmed/backend/DOMAIN.md
2026-03-07 18:45:58 -03:00

23 lines
1.5 KiB
Markdown

# 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.