Entidades Centrais e Relacionamentos
Todo banco de dados HMS gira em torno do paciente. A tabela patients armazena dados demográficos, informações de contato e referências de histórico médico. Cada paciente pode ter múltiplas consultas, cada uma vinculada a um médico específico (da tabela staff com filtro de função). A tabela appointments é a junção central — ela se conecta a faturamento, prescrições, pedidos de laboratório e registros de visitas. Um esquema bem projetado normaliza os dados no mínimo em 3FN para evitar redundância enquanto mantém o desempenho de consultas para operações diárias.
Tabelas de Gestão de Pacientes
A tabela patients inclui campos como patient_id (PK), first_name, last_name, date_of_birth, gender, blood_group, phone, email, address, emergency_contact_name, emergency_contact_phone e registration_date. Uma tabela patient_medical_history rastreia diagnósticos anteriores, cirurgias, alergias e condições crônicas com chaves estrangeiras de volta ao patient_id. Esta separação mantém o registro principal do paciente leve enquanto permite entradas históricas ilimitadas. Para conformidade, cada registro deve incluir timestamps de created_at e updated_at.
Esquema de Consultas e Agendamento
A tabela appointments é o batimento cardíaco do HMS. Os campos incluem appointment_id (PK), patient_id (FK), doctor_id (FK), appointment_date, appointment_time, status (scheduled/completed/cancelled/no-show), reason_for_visit e notes. Uma tabela doctor_schedule armazena janelas de disponibilidade (doctor_id, day_of_week, start_time, end_time, slot_duration_minutes). O sistema gera horários disponíveis cruzando a agenda com consultas existentes para evitar agendamentos duplos.
Faturamento e Seguro
A tabela billing rastreia cada transação financeira: bill_id (PK), appointment_id (FK), patient_id (FK), bill_date, total_amount, discount, tax, paid_amount, balance e payment_status. Uma tabela insurance_claims armazena detalhes da apólice incluindo provider_name, policy_number, coverage_percentage, claim_status e claim_amount. Para cenários de faturamento complexos como cobertura parcial de seguro com coparticipação do paciente, o esquema suporta pagamentos divididos através de uma tabela payment_transactions.
Farmácia e Estoque
A tabela pharmacy_inventory gerencia medicamentos: item_id (PK), medicine_name, generic_name, category, manufacturer, batch_number, expiry_date, quantity_in_stock, unit_price e reorder_level. Uma tabela prescriptions conecta médicos a medicamentos: prescription_id (PK), appointment_id (FK), medicine_id (FK), dosage, frequency, duration e instructions. Quando uma prescrição é dispensada, a quantidade de estoque é decrementada automaticamente e um alerta de reposição é acionado quando o estoque cai abaixo do limite.
Laboratório e Diagnósticos
A tabela lab_orders registra testes solicitados durante consultas: lab_order_id (PK), appointment_id (FK), test_name, test_category (blood/urine/imaging), ordered_by (doctor_id), order_date, status (pending/collected/processing/completed) e result_date. Uma tabela lab_results armazena os valores reais: result_id (PK), lab_order_id (FK), parameter_name, parameter_value, normal_range e interpretation. Para imagem, uma tabela radiology_images armazena referências de arquivos.
Gestão de Pessoal
A tabela staff unifica todos os funcionários do hospital: staff_id (PK), first_name, last_name, role (doctor/nurse/admin/lab_technician/pharmacist/receptionist), specialization, department_id (FK), phone, email, hire_date e shift_preference. Uma tabela departments lista as unidades hospitalares (Cardiologia, Ortopedia, Emergência, Radiologia, etc.). A tabela staff_shifts atribui turnos reais: shift_id (PK), staff_id (FK), shift_date, start_time, end_time e notes.
Melhores Práticas para Design de Banco de Dados HMS
Sempre use UUIDs ou chaves primárias compostas para sistemas distribuídos. Implemente exclusões suaves (flag is_active) em vez de exclusões físicas para registros de pacientes. Adicione restrições no nível do banco de dados para campos críticos como exclusividade de e-mail do paciente e validação de horário de consulta. Indexe colunas de chave estrangeira que aparecem em operações JOIN — especialmente patient_id, doctor_id e appointment_id. Para conformidade com HIPAA ou regulamentações semelhantes, adicione uma tabela audit_log que registre cada operação INSERT, UPDATE e DELETE com o user_id, timestamp e valores antigos/novos. Particione tabelas grandes como billing e lab_results por mês ou ano para manter o desempenho de consultas conforme os dados crescem.
AIAZH