Appearance
💊 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:
| KPI | Descrição | Implementação |
|---|---|---|
| Total de Medicamentos | Cadastrados no tenant | ✅ GetDashboardStatsAction |
| Unidades em Estoque | Soma de quantidades > 0 | ✅ MedicineStock::sum('quantity') |
| Lotes Vencendo | Próximos 30 dias | ✅ expiring_soon |
| Lotes Vencidos | Com quantidade > 0 | ✅ expired |
| Estoque Baixo | Abaixo do mínimo | ✅ low_stock |
| Dispensações Hoje | Contagem diária | ✅ dispensations_today |
| Dispensações Mês | Contagem mensal | ✅ dispensations_month |
📊 Relatórios e Análises
Sistema completo de relatórios com geração assíncrona:
| Relatório | Formato | Descrição | Status |
|---|---|---|---|
| Posição de Estoque | CSV/PDF | Por item/unidade/lote com custos | ✅ Implementado |
| Movimentação | CSV | Entradas/saídas por período | ✅ Implementado |
| Dispensações | CSV | Histórico filtrado por período | ✅ Implementado |
| Top Medicamentos | API | Mais dispensados (dashboard) | ✅ Implementado |
| Lotes Vencendo | API | Pró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áriosActions 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::classAPIs 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/csvTestes (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()(usaDispenseMedicationAction)Actions
App\Actions\Pharmacy\AdjustStockAction– lógica transacional de entrada/saída de lotesApp\Actions\Pharmacy\DispenseMedicationAction– validações de stock/validade e gravação deDispensation+ itens
Requests (Validação / Autorização)
App\Http\Requests\Pharmacy\AdjustStockRequestApp\Http\Requests\Pharmacy\DispenseMedicationRequest
Jobs & Services
App\Jobs\SyncAnvisaMedicinesJob– importa CSV da ANVISA (utilizaApp\Services\AnvisaApiService)
Models / Database
Central DB
Medicine– catálogo único (uso connectionmysql)
Tenant DB
TenantMedicine– referência local ao medicamentoPharmacyLocation– unidades/almoxarifadosMedicineStock– lote, validade, quantidade, relação com local + medicamentoDispensation/DispensationItem– registro de atendimentos
Observações
- Todos os modelos incluem ULID e auditoria.
- As migrations para tenant ficam em
database/migrations/tenant/.
