Skip to content

💊 Módulo de Farmácia

O módulo de Farmácia é o coração da assistência farmacêutica básica no SUS, focando em Componente Básico da Assistência Farmacêutica (CBAF), com integração RNDS/BNAFAR para rastreabilidade nacional.

✅ Status de Implementação

Status Atual: ✅ COMPLETAMENTE IMPLEMENTADO (Fase 1 do roadmap concluída)

  • Backend: 100% implementado com 12 Actions, APIs completas e testes
  • Frontend: Interfaces básicas implementadas
  • Banco de Dados: Estrutura completa com isolamento tenant
  • Integrações: Base preparada para RNDS/BNAFAR
  • Testes: 12 testes de feature cobrindo funcionalidades críticas

Funcionalidades Implementadas

📋 Gestão de Catálogo de Medicamentos

  • Catálogo Central: Referência Hórus/ANVISA na base central (mysql)
  • Tenant Medicines: Habilitação local por município (tenant_medicines)
  • Busca Avançada: Filtro por princípio ativo, forma farmacêutica, concentração
  • Status Local: Ativo/inativo por tenant
  • Código de Barras: Suporte a códigos customizados por medicamento

📥 Entrada de Estoque (Aquisição e Recebimento)

  • Registro por Lote: Batch number, data de validade, quantidade
  • Múltiplas Localizações: Almoxarifado, dispensários, unidades
  • Transferências: Entre farmácias/unidades do município
  • Auditoria Completa: Todo movimento registrado com OwenIt Auditing

📊 Controle de Estoque em Tempo Real

  • FEFO Automático: First Expired, First Out para dispensação
  • Movimentações: Entrada, saída, devolução, perda, ajuste manual
  • Alertas: Próximos ao vencimento (30 dias), estoque mínimo
  • Rastreabilidade: Por lote com histórico completo

💊 Dispensação Eletrônica

  • Validação CNS: Integração com pacientes do sistema
  • Receitas Digitais: Vinculação com prescrições do Clinical
  • Dispensação Parcial: Controle de sobras e quantidades
  • Comprovantes: Recibos digitais para pacientes
  • Histórico Completo: Todas as dispensações auditadas

📈 Dashboard e KPIs

APIs completas para métricas em tempo real:

KPIDescriçãoImplementação
Total de MedicamentosCadastrados no tenantGetDashboardStatsAction
Unidades em EstoqueSoma de quantidades > 0MedicineStock::sum('quantity')
Lotes VencendoPróximos 30 diasexpiring_soon
Lotes VencidosCom quantidade > 0expired
Estoque BaixoAbaixo do mínimolow_stock
Dispensações HojeContagem diáriadispensations_today
Dispensações MêsContagem mensaldispensations_month

📊 Relatórios e Análises

Sistema completo de relatórios com geração assíncrona:

RelatórioFormatoDescriçãoStatus
Posição de EstoqueCSV/PDFPor item/unidade/lote com custos✅ Implementado
MovimentaçãoCSVEntradas/saídas por período✅ Implementado
DispensaçõesCSVHistórico filtrado por período✅ Implementado
Top MedicamentosAPIMais dispensados (dashboard)✅ Implementado
Lotes VencendoAPIPróximos ao vencimento✅ Implementado

🔄 Movimentações de Estoque

Sistema completo de controle de inventário:

  • Entradas: Aquisição e recebimento
  • Saídas: Dispensação e baixas
  • Transferências: Entre localizações
  • Ajustes: Manuais com justificativa
  • Inventários: Contagem física com diferenças

🏗️ Arquitetura Técnica

Models Principais

php
// Central (mysql)
Medicine::class           // Catálogo ANVISA/Hórus

// Tenant (tenant DB)
TenantMedicine::class     // Habilitação local
MedicineStock::class      // Estoque por lote/localização
Dispensation::class       // Dispensações
DispensationItem::class   // Itens dispensados
StockMovement::class      // Movimentações
StockTransfer::class      // Transferências
InventoryCount::class     // Inventários

Actions Implementadas (12)

php
AdjustStockAction::class           // Ajustes manuais
DispenseMedicationAction::class    // Dispensação FEFO
GenerateDispensationsCsvAction::class
GenerateStockCsvAction::class
GetDailyDispensationsAction::class
GetDashboardStatsAction::class     // KPIs principais
GetExpiringBatchesAction::class
GetTopDispensedMedicinesAction::class
GetWeeklyMovementsAction::class
PerformInventoryAction::class
RegisterStockEntryAction::class
TransferStockAction::class

APIs REST (OpenAPI Documentadas)

php
GET    /api/pharmacy/dashboard/stats
GET    /api/pharmacy/dashboard/daily-dispensations
GET    /api/pharmacy/dashboard/weekly-movements
GET    /api/pharmacy/dashboard/top-medicines
GET    /api/pharmacy/dashboard/expiring-batches
POST   /api/pharmacy/reports/dispensations/csv
POST   /api/pharmacy/reports/stock/csv

Testes (12 Feature Tests)

  • Dashboard completo
  • Dispensação e políticas
  • Relatórios CSV
  • Controle de estoque
  • Transferências
  • Inventários

🔗 Integrações e Conformidade

RNDS/BNAFAR

  • Estrutura Preparada: Models e campos compatíveis
  • APIs Pendentes: Implementação dos web services
  • Conformidade: Portarias MS (5713/2024)

Prontuário/Clinical

  • Integração Base: Vinculação com prescrições
  • Validação: CNS e dados do paciente
  • Fluxo: Prescrição → Dispensação

Sistema de Compras

  • Base Preparada: Dados de consumo histórico
  • Integração Pendente: API com sistema de licitações

Auditoria e Segurança

  • OwenIt Auditing: Todo movimento auditado
  • LGPD: Dados de pacientes criptografados
  • Rastreabilidade: Por lote e usuário
  • Permissões: Granulares por ação

📱 Interfaces Implementadas

Dashboard

  • KPIs em tempo real
  • Gráficos de dispensações diárias
  • Alertas de vencimento/estoque baixo
  • Top medicamentos dispensados

Gestão de Estoque

  • Entrada de medicamentos
  • Transferências entre unidades
  • Ajustes manuais
  • Consulta de saldos

Dispensação

  • Busca de pacientes por CNS/CPF
  • Seleção de medicamentos
  • Controle de quantidades
  • Impressão de recibos

Relatórios

  • Geração CSV/PDF
  • Filtros por período/localização
  • Download assíncrono

🎯 Próximos Passos

Fase 2 (Clinical/Prontuário)

  • Integração completa com prescrições
  • Validação automática de receitas
  • Compartilhamento de dados do paciente

Fase 7 (Integrações RNDS)

  • Implementação dos web services
  • Envio automático de dados
  • Conformidade total com protocolos

Melhorias Planejadas

  • Interface mobile para dispensação
  • Leitor de código de barras
  • Integração com sistemas de compras
  • Dashboards avançados com Power BI/Tableau

Telas e Fluxos de Usuário

Dashboard Inicial

Cards com estoque crítico, dispensações do dia, alertas de validade, gráfico de consumo mensal.

Cadastro/Entrada

Formulário de nota fiscal → scan lote → confirmação estoque.

Dispensação Rápida

Busca paciente por CPF/CNS → lista receitas pendentes → seleciona itens → imprime.

Inventário

Contagem física por unidade, com discrepâncias automáticas e aprovação farmacêutico.

Relatórios

Filtros avançados + export CSV/PDF + agendamento por email.

Modelos de Dados Essenciais (Tenant)

  • DrugLocal: Habilita itens do catálogo central

    • id, central_drug_id, quantidade_minima, preco_medio
  • StockMovement: Movimentações de estoque

    • tipo (entrada/saida), lote_id, quantidade, data, user_id, motivo
  • Dispensation: Dispensações para pacientes

    • paciente_id, prescription_id, drug_local_id, quantidade_dispensada, lote_usado
  • Lot: Controle de lotes

    • numero_lote, validade, quantidade_atual, drug_local_id

Dicas de Implementação

Priorize MVP: catálogo → entrada → dispensação → relatórios básicos → integrações. Use PrimeVue DataTable para listagens com filtros e export. Para Reverb: canais como pharmacy.{tenant_id}.alerts para atualizações em tempo real de estoque.

💡 Nota Técnica

No código, este módulo é representado pelo namespace App\Modules\Pharmacy. As tabelas no banco de dados utilizam o prefixo pharmacy_.

  • create()

  • store() (usa DispenseMedicationAction)

  • Actions

    • App\Actions\Pharmacy\AdjustStockAction – lógica transacional de entrada/saída de lotes
    • App\Actions\Pharmacy\DispenseMedicationAction – validações de stock/validade e gravação de Dispensation + itens

Requests (Validação / Autorização)

  • App\Http\Requests\Pharmacy\AdjustStockRequest
  • App\Http\Requests\Pharmacy\DispenseMedicationRequest

Jobs & Services

  • App\Jobs\SyncAnvisaMedicinesJob – importa CSV da ANVISA (utiliza App\Services\AnvisaApiService)

Models / Database

  • Central DB

    • Medicine – catálogo único (uso connection mysql)
  • Tenant DB

    • TenantMedicine – referência local ao medicamento
    • PharmacyLocation – unidades/almoxarifados
    • MedicineStock – lote, validade, quantidade, relação com local + medicamento
    • Dispensation / DispensationItem – registro de atendimentos

Observações

  • Todos os modelos incluem ULID e auditoria.
  • As migrations para tenant ficam em database/migrations/tenant/.