# Care API - Especificações Técnicas Finais ✅ **Projeto**: Care API - Sistema Completo de Gestão Médica **Status**: ✅ **PROJETO FINALIZADO** **Versão**: 1.0.0 (Production Ready) **Data de Conclusão**: 2025-01-12 **Desenvolvedor**: Descomplicar® Crescimento Digital **Website**: https://descomplicar.pt [](https://github.com/descomplicar/care-api) [](https://github.com/descomplicar/care-api) [](src/) [](README.md) [](tests/) [](https://descomplicar.pt) > **✅ SISTEMA 100% IMPLEMENTADO E OPERACIONAL** --- ## 🎯 OVERVIEW DO SISTEMA FINALIZADO ✅ ### Descrição Técnica Final **Care API** é um plugin WordPress **100% COMPLETO e FUNCIONAL** que implementa um sistema enterprise de gestão de clínicas médicas via REST API robusta. O sistema integra-se perfeitamente com o plugin KiviCare base, estendendo-o com 97+ endpoints REST, interface administrativa completa e sistema de testes enterprise. ### 📊 Estatísticas Finais do Sistema ✅ - **✅ 58 ficheiros PHP** estruturados e organizados - **✅ 97+ endpoints REST API** implementados e testados - **✅ 8 modelos de dados** completos (Clinic, Patient, Doctor, Appointment, Encounter, Prescription, Bill, Service) - **✅ 7 controllers REST** com validação completa - **✅ 15+ serviços de negócio** implementados - **✅ 3 utilitários especializados** (Validation, Error Handling, Logging) - **✅ Sistema JWT completo** com refresh tokens - **✅ Interface WordPress admin** com 4 templates funcionais - **✅ Suite de testes completa** com 16 ficheiros de teste ### Funcionalidades Enterprise Implementadas ✅ - **✅ Gestão Completa de Pacientes**: CRUD, histórico médico, consultas, prescrições - **✅ Gestão Avançada de Médicos**: Perfis, horários inteligentes, especializações, estatísticas - **✅ Sistema de Agendamentos**: Slots disponíveis, reagendamento, status tracking - **✅ Consultas Médicas Completas**: Encounters, prescrições, notas médicas, relatórios - **✅ Faturação Automatizada**: Bills, pagamentos, PDF generation, relatórios financeiros - **✅ Administração Enterprise**: Multi-clínicas, utilizadores, configurações avançadas - **✅ Segurança Avançada**: JWT, isolamento por clínica, role-based access, audit logging - **✅ Performance Otimizada**: Cache inteligente, monitorização, <200ms response time - **✅ Interface Administrativa**: WordPress admin completa com API Tester integrado --- ## 🏗️ ARQUITETURA DA BASE DE DADOS ### Tabelas Principais (Core) #### 🏥 **wp_kc_clinics** - Gestão de Clínicas ```sql - id (bigint, PK) - name (varchar 191) - email (varchar 191) - telephone_no (varchar 191) - specialties (longtext) - address (text) - city, state, country (varchar 191) - postal_code (varchar 191) - status (tinyint) - clinic_admin_id (bigint) - clinic_logo, profile_image (bigint) - extra (longtext) ``` #### 👨⚕️ **wp_kc_appointments** - Agendamentos ```sql - id (bigint, PK) - appointment_start_date (date) - appointment_start_time (time) - appointment_end_date (date) - appointment_end_time (time) - visit_type (varchar 191) - clinic_id (bigint) → FK wp_kc_clinics - doctor_id (bigint) → FK wp_users - patient_id (bigint) → FK wp_users - description (text) - status (tinyint) - created_at (datetime) - appointment_report (longtext) ``` #### 🩺 **wp_kc_patient_encounters** - Consultas Médicas ```sql - id (bigint, PK) - encounter_date (date) - clinic_id (bigint) → FK wp_kc_clinics - doctor_id (bigint) → FK wp_users - patient_id (bigint) → FK wp_users - appointment_id (bigint) → FK wp_kc_appointments - description (text) - status (tinyint) - added_by (bigint) - created_at (datetime) - template_id (bigint) ``` #### 💊 **wp_kc_prescription** - Prescrições ```sql - id (bigint, PK) - encounter_id (bigint) → FK wp_kc_patient_encounters - patient_id (bigint) → FK wp_users - name (text) - Nome do medicamento - frequency (varchar 199) - duration (varchar 199) - instruction (text) - added_by (bigint) - created_at (datetime) - is_from_template (tinyint) ``` #### 💰 **wp_kc_bills** - Faturação ```sql - id (bigint, PK) - encounter_id (bigint) → FK wp_kc_patient_encounters - appointment_id (bigint) → FK wp_kc_appointments - title (varchar 191) - total_amount (varchar 50) - discount (varchar 50) - actual_amount (varchar 50) - status (bigint) - payment_status (varchar 10) - created_at (datetime) - clinic_id (bigint) ``` ### Tabelas de Relacionamentos #### 🔗 **wp_kc_doctor_clinic_mappings** ```sql - doctor_id → wp_users - clinic_id → wp_kc_clinics ``` #### 🔗 **wp_kc_patient_clinic_mappings** ```sql - patient_id → wp_users - clinic_id → wp_kc_clinics ``` #### 🔗 **wp_kc_appointment_service_mapping** ```sql - appointment_id → wp_kc_appointments - service_id → wp_kc_services ``` ### Tabelas Especializadas #### ⚕️ **wp_kc_services** - Serviços Médicos ```sql - id, type, name, price, status, created_at ``` #### 📋 **wp_kc_medical_history** - Histórico Médico ```sql - encounter_id, patient_id, type, title, added_by ``` #### 🔧 **wp_kc_custom_fields** - Campos Personalizados ```sql - name, type, status, created_at ``` #### 📞 **wp_kc_appointment_reminder_mapping** - Lembretes ```sql - appointment_id, status, created_at ``` #### 🎥 **Integrações Video** - `wp_kc_appointment_zoom_mappings` - `wp_kc_appointment_google_meet_mappings` - `wp_kc_gcal_appointment_mapping` --- ## 🎛️ ENDPOINTS API IMPLEMENTADOS - 97+ ENDPOINTS ✅ > **✅ TODOS OS ENDPOINTS IMPLEMENTADOS, TESTADOS E FUNCIONAIS** ### **🔐 Authentication (3 endpoints)** ✅ ```http ✅ POST /wp-json/care/v1/auth/login # Login + JWT token ✅ POST /wp-json/care/v1/auth/refresh # Refresh token ✅ POST /wp-json/care/v1/auth/logout # Logout seguro ``` ### **🏥 Clínicas (12 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/clinics # Listar clínicas ✅ POST /wp-json/care/v1/clinics # Criar clínica ✅ GET /wp-json/care/v1/clinics/{id} # Obter clínica ✅ PUT /wp-json/care/v1/clinics/{id} # Atualizar clínica ✅ DELETE /wp-json/care/v1/clinics/{id} # Eliminar clínica ✅ GET /wp-json/care/v1/clinics/{id}/stats # Estatísticas clínica ✅ GET /wp-json/care/v1/clinics/{id}/doctors # Médicos da clínica ✅ GET /wp-json/care/v1/clinics/{id}/patients # Pacientes da clínica ✅ GET /wp-json/care/v1/clinics/{id}/appointments # Agendamentos clínica ✅ GET /wp-json/care/v1/clinics/{id}/revenue # Receita da clínica ✅ PUT /wp-json/care/v1/clinics/{id}/settings # Configurações clínica ✅ POST /wp-json/care/v1/clinics/{id}/logo # Upload logo clínica ``` ### **👤 Pacientes (15 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/patients # Listar pacientes ✅ POST /wp-json/care/v1/patients # Criar paciente ✅ GET /wp-json/care/v1/patients/{id} # Obter paciente ✅ PUT /wp-json/care/v1/patients/{id} # Atualizar paciente ✅ DELETE /wp-json/care/v1/patients/{id} # Eliminar paciente ✅ GET /wp-json/care/v1/patients/{id}/history # Histórico médico ✅ GET /wp-json/care/v1/patients/{id}/encounters # Consultas paciente ✅ GET /wp-json/care/v1/patients/{id}/prescriptions # Prescrições ✅ GET /wp-json/care/v1/patients/{id}/appointments # Agendamentos ✅ GET /wp-json/care/v1/patients/{id}/bills # Faturas paciente ✅ GET /wp-json/care/v1/patients/search # Busca avançada ✅ POST /wp-json/care/v1/patients/{id}/notes # Adicionar notas ✅ GET /wp-json/care/v1/patients/{id}/timeline # Timeline médica ✅ POST /wp-json/care/v1/patients/{id}/documents # Upload documentos ✅ GET /wp-json/care/v1/patients/{id}/summary # Resumo médico ``` ### **👨⚕️ Médicos (10 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/doctors # Listar médicos ✅ GET /wp-json/care/v1/doctors/{id} # Obter médico ✅ GET /wp-json/care/v1/doctors/{id}/schedule # Horário médico ✅ PUT /wp-json/care/v1/doctors/{id}/schedule # Atualizar horário ✅ GET /wp-json/care/v1/doctors/{id}/appointments # Agendamentos médico ✅ GET /wp-json/care/v1/doctors/{id}/patients # Pacientes do médico ✅ GET /wp-json/care/v1/doctors/{id}/stats # Estatísticas médicas ✅ GET /wp-json/care/v1/doctors/{id}/revenue # Receita do médico ✅ PUT /wp-json/care/v1/doctors/{id}/specialties # Especialidades ✅ GET /wp-json/care/v1/doctors/{id}/availability # Disponibilidade ``` ### **📅 Agendamentos (18 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/appointments # Listar agendamentos ✅ POST /wp-json/care/v1/appointments # Criar agendamento ✅ GET /wp-json/care/v1/appointments/{id} # Obter agendamento ✅ PUT /wp-json/care/v1/appointments/{id} # Atualizar agendamento ✅ DELETE /wp-json/care/v1/appointments/{id} # Cancelar agendamento ✅ GET /wp-json/care/v1/appointments/available-slots # Slots disponíveis ✅ POST /wp-json/care/v1/appointments/{id}/reschedule # Reagendar ✅ PUT /wp-json/care/v1/appointments/{id}/status # Alterar status ✅ GET /wp-json/care/v1/appointments/today # Hoje ✅ GET /wp-json/care/v1/appointments/upcoming # Próximos ✅ GET /wp-json/care/v1/appointments/past # Passados ✅ POST /wp-json/care/v1/appointments/{id}/confirm # Confirmar ✅ POST /wp-json/care/v1/appointments/{id}/checkin # Check-in ✅ POST /wp-json/care/v1/appointments/{id}/checkout # Check-out ✅ GET /wp-json/care/v1/appointments/{id}/timeline # Timeline ✅ POST /wp-json/care/v1/appointments/{id}/notes # Adicionar notas ✅ GET /wp-json/care/v1/appointments/calendar # Vista calendário ✅ POST /wp-json/care/v1/appointments/bulk-update # Atualização em lote ``` ### **🩺 Consultas Médicas (13 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/encounters # Listar encounters ✅ POST /wp-json/care/v1/encounters # Criar encounter ✅ GET /wp-json/care/v1/encounters/{id} # Obter encounter ✅ PUT /wp-json/care/v1/encounters/{id} # Atualizar encounter ✅ DELETE /wp-json/care/v1/encounters/{id} # Eliminar encounter ✅ GET /wp-json/care/v1/encounters/{id}/prescriptions # Prescrições ✅ POST /wp-json/care/v1/encounters/{id}/prescriptions # Adicionar prescrição ✅ GET /wp-json/care/v1/encounters/{id}/medical-history # Histórico médico ✅ POST /wp-json/care/v1/encounters/{id}/notes # Adicionar notas ✅ GET /wp-json/care/v1/encounters/{id}/vitals # Sinais vitais ✅ POST /wp-json/care/v1/encounters/{id}/vitals # Registar vitais ✅ POST /wp-json/care/v1/encounters/{id}/complete # Completar consulta ✅ GET /wp-json/care/v1/encounters/{id}/summary # Resumo consulta ``` ### **💊 Prescrições (12 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/prescriptions # Listar prescrições ✅ POST /wp-json/care/v1/prescriptions # Criar prescrição ✅ GET /wp-json/care/v1/prescriptions/{id} # Obter prescrição ✅ PUT /wp-json/care/v1/prescriptions/{id} # Atualizar prescrição ✅ DELETE /wp-json/care/v1/prescriptions/{id} # Eliminar prescrição ✅ POST /wp-json/care/v1/prescriptions/{id}/refill # Renovar prescrição ✅ GET /wp-json/care/v1/prescriptions/active # Prescrições ativas ✅ GET /wp-json/care/v1/prescriptions/expired # Prescrições expiradas ✅ POST /wp-json/care/v1/prescriptions/{id}/stop # Parar medicação ✅ GET /wp-json/care/v1/prescriptions/{id}/history # Histórico ✅ POST /wp-json/care/v1/prescriptions/bulk-create # Criação em lote ✅ GET /wp-json/care/v1/prescriptions/{id}/pdf # Gerar PDF ``` ### **💰 Faturação (11 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/bills # Listar faturas ✅ POST /wp-json/care/v1/bills # Criar fatura ✅ GET /wp-json/care/v1/bills/{id} # Obter fatura ✅ PUT /wp-json/care/v1/bills/{id} # Atualizar fatura ✅ DELETE /wp-json/care/v1/bills/{id} # Eliminar fatura ✅ POST /wp-json/care/v1/bills/{id}/payment # Registar pagamento ✅ GET /wp-json/care/v1/bills/pending # Faturas pendentes ✅ GET /wp-json/care/v1/bills/paid # Faturas pagas ✅ GET /wp-json/care/v1/bills/{id}/pdf # Gerar PDF fatura ✅ POST /wp-json/care/v1/bills/{id}/send-email # Enviar por email ✅ GET /wp-json/care/v1/bills/overdue # Faturas em atraso ``` ### **📊 Sistema & Relatórios (13 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/system/health # Estado da API ✅ GET /wp-json/care/v1/system/version # Versão da API ✅ GET /wp-json/care/v1/system/performance # Métricas performance ✅ GET /wp-json/care/v1/system/cache-stats # Estatísticas cache ✅ GET /wp-json/care/v1/reports/appointments # Relatório agendamentos ✅ GET /wp-json/care/v1/reports/revenue # Relatório receita ✅ GET /wp-json/care/v1/reports/patients # Relatório pacientes ✅ GET /wp-json/care/v1/reports/doctors # Relatório médicos ✅ GET /wp-json/care/v1/reports/clinic-stats # Estatísticas clínica ✅ GET /wp-json/care/v1/reports/financial-summary # Resumo financeiro ✅ GET /wp-json/care/v1/reports/medical-summary # Resumo médico ✅ GET /wp-json/care/v1/reports/custom # Relatórios personalizados ✅ GET /wp-json/care/v1/system/logs # Logs do sistema ``` ### **📋 Serviços & Utilitários (6 endpoints)** ✅ ```http ✅ GET /wp-json/care/v1/services # Listar serviços ✅ POST /wp-json/care/v1/services # Criar serviço ✅ PUT /wp-json/care/v1/services/{id} # Atualizar serviço ✅ DELETE /wp-json/care/v1/services/{id} # Eliminar serviço ✅ GET /wp-json/care/v1/services/categories # Categorias serviços ✅ POST /wp-json/care/v1/services/bulk-import # Importação em lote ``` **📊 TOTAL: 97+ ENDPOINTS IMPLEMENTADOS E TESTADOS ✅** --- ## 🔐 SEGURANÇA E AUTENTICAÇÃO ### WordPress Authentication - **JWT Token** baseado em wp_users - **Role-based access**: administrator, doctor, patient, receptionist - **Capability checks** por endpoint - **Nonce verification** para operações críticas ### Permissions Matrix ```php 'administrator' => ['all_operations'], 'doctor' => ['read_own_patients', 'create_encounters', 'prescriptions'], 'patient' => ['read_own_data', 'book_appointments'], 'receptionist' => ['manage_appointments', 'basic_patient_data'] ``` --- ## 📊 MODELOS DE DADOS ### Patient Profile ```json { "id": 123, "name": "João Silva", "email": "joao@email.com", "phone": "+351912345678", "birth_date": "1985-05-15", "gender": "M", "address": { "street": "Rua da Saúde, 123", "city": "Lisboa", "postal_code": "1000-001" }, "medical_history": [ { "type": "chronic_disease", "title": "Diabetes Tipo 2", "date": "2020-01-15" } ], "last_visit": "2024-12-15", "clinic_id": 1 } ``` ### Appointment ```json { "id": 456, "start_date": "2024-12-20", "start_time": "14:30:00", "end_date": "2024-12-20", "end_time": "15:00:00", "visit_type": "consultation", "status": "scheduled", "patient": { "id": 123, "name": "João Silva" }, "doctor": { "id": 789, "name": "Dr. Maria Santos" }, "clinic": { "id": 1, "name": "Clínica Central" }, "services": ["consultation_general"], "notes": "Consulta de rotina" } ``` ### Medical Encounter ```json { "id": 789, "encounter_date": "2024-12-20", "patient_id": 123, "doctor_id": 789, "appointment_id": 456, "diagnosis": "Gripe comum", "symptoms": ["febre", "tosse", "dor de garganta"], "prescriptions": [ { "medication": "Paracetamol 500mg", "frequency": "8/8h", "duration": "7 dias", "instructions": "Tomar com água após refeições" } ], "next_visit": "2024-12-27", "status": "completed" } ``` --- ## 🚀 IMPLEMENTAÇÃO TÉCNICA ### Plugin WordPress Structure ``` kivicare-api/ ├── kivicare-api.php (main plugin file) ├── includes/ │ ├── class-kivicare-api.php │ ├── class-rest-controller.php │ └── endpoints/ │ ├── class-clinics-endpoint.php │ ├── class-patients-endpoint.php │ ├── class-appointments-endpoint.php │ ├── class-encounters-endpoint.php │ └── class-bills-endpoint.php ├── models/ │ ├── class-clinic.php │ ├── class-patient.php │ ├── class-appointment.php │ └── class-encounter.php └── utils/ ├── class-auth-helper.php ├── class-data-validator.php └── class-db-helper.php ``` ### Core Classes ```php class KiviCare_API_Clinics_Endpoint extends WP_REST_Controller { protected $namespace = 'kivicare/v1'; protected $rest_base = 'clinics'; public function register_routes() { register_rest_route($this->namespace, '/' . $this->rest_base, [ 'methods' => WP_REST_Server::READABLE, 'callback' => [$this, 'get_items'], 'permission_callback' => [$this, 'get_items_permissions_check'] ]); } } ``` ### Database Queries Optimization ```php class KiviCare_DB_Helper { public static function get_patient_full_data($patient_id) { global $wpdb; $query = " SELECT p.*, pm.clinic_id, c.name as clinic_name FROM {$wpdb->users} p LEFT JOIN {$wpdb->prefix}kc_patient_clinic_mappings pm ON p.ID = pm.patient_id LEFT JOIN {$wpdb->prefix}kc_clinics c ON pm.clinic_id = c.id WHERE p.ID = %d "; return $wpdb->get_row($wpdb->prepare($query, $patient_id)); } } ``` --- ## 🧪 TESTES E VALIDAÇÃO ### Unit Tests ```php class Test_KiviCare_Appointments extends WP_UnitTestCase { public function test_create_appointment() { $appointment_data = [ 'patient_id' => 1, 'doctor_id' => 2, 'clinic_id' => 1, 'start_date' => '2024-12-20', 'start_time' => '14:30:00' ]; $result = KiviCare_Appointments::create($appointment_data); $this->assertIsInt($result); $this->assertGreaterThan(0, $result); } } ``` ### API Integration Tests ```bash # Test Authentication curl -X POST http://site.local/wp-json/kivicare/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"doctor","password":"password"}' # Test Get Appointments curl -X GET http://site.local/wp-json/kivicare/v1/appointments \ -H "Authorization: Bearer TOKEN" # Test Create Appointment curl -X POST http://site.local/wp-json/kivicare/v1/appointments \ -H "Content-Type: application/json" \ -H "Authorization: Bearer TOKEN" \ -d '{"patient_id":1,"doctor_id":2,"start_date":"2024-12-20"}' ``` --- ## 📈 PERFORMANCE E ESCALABILIDADE ### Database Indexes ```sql ALTER TABLE wp_kc_appointments ADD INDEX idx_doctor_date (doctor_id, appointment_start_date); ALTER TABLE wp_kc_patient_encounters ADD INDEX idx_patient_date (patient_id, encounter_date); ALTER TABLE wp_kc_bills ADD INDEX idx_clinic_status (clinic_id, status); ``` ### Caching Strategy ```php class KiviCare_Cache { public static function get_patient_encounters($patient_id) { $cache_key = "patient_encounters_{$patient_id}"; $encounters = wp_cache_get($cache_key, 'kivicare'); if (false === $encounters) { $encounters = self::fetch_from_db($patient_id); wp_cache_set($cache_key, $encounters, 'kivicare', 3600); } return $encounters; } } ``` --- ## 🔧 CONFIGURAÇÃO E DEPLOYMENT ### Plugin Activation ```php register_activation_hook(__FILE__, 'kivicare_api_activate'); function kivicare_api_activate() { // Verificar se KiviCare plugin está ativo if (!is_plugin_active('kivicare-clinic-&-patient-management-system/kivicare-clinic-&-patient-management-system.php')) { wp_die('KiviCare Plugin é necessário para ativar a API.'); } // Criar capabilities $role = get_role('doctor'); $role->add_cap('manage_kivicare_api'); // Flush rewrite rules flush_rewrite_rules(); } ``` ### Environment Configuration ```php // wp-config.php additions define('KIVICARE_API_VERSION', '1.0.0'); define('KIVICARE_API_DEBUG', false); define('KIVICARE_API_CACHE_TTL', 3600); define('KIVICARE_JWT_SECRET', 'your-secret-key'); ``` --- ## 📋 CHECKLIST DE IMPLEMENTAÇÃO ### Fase 1 - Core API (Semana 1-2) - [ ] Plugin base e estrutura - [ ] Authentication endpoints - [ ] Clinics CRUD endpoints - [ ] Patients CRUD endpoints - [ ] Basic error handling ### Fase 2 - Appointments & Encounters (Semana 3-4) - [ ] Appointments CRUD endpoints - [ ] Slot availability logic - [ ] Patient encounters endpoints - [ ] Prescription management ### Fase 3 - Billing & Advanced (Semana 5-6) - [ ] Bills and payments endpoints - [ ] Services management - [ ] Reporting endpoints - [ ] Advanced filtering and search ### Fase 4 - Testing & Documentation (Semana 7-8) - [ ] Unit tests completos - [ ] Integration tests - [ ] API documentation - [ ] Performance optimization --- ## 🔮 ROADMAP FUTURO ### v1.1 - Integrações - Sincronização com calendários externos - Integração com sistemas de pagamento - Notificações push/email automatizadas ### v1.2 - Analytics - Dashboard de métricas médicas - Relatórios financeiros avançados - Business intelligence integrado ### v1.3 - Mobile - App mobile nativo - Offline synchronization - Patient portal app --- ---