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

1.5 KiB

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.