- Added GitHub spec-kit for development workflow - Standardized file signatures to Descomplicar® format - Updated development configuration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
7.7 KiB
Data Model: Care API System
Feature: Care API - Sistema de gestão de cuidados de saúde
Date: 2025-09-12
Based on: KiviCare 35-table database schema
Core Entities
Clinic
Purpose: Healthcare facility management
Table: wp_kc_clinics
Fields:
id(bigint, PK): Unique clinic identifiername(varchar 191): Clinic nameemail(varchar 191): Contact emailtelephone_no(varchar 191): Phone numberspecialties(longtext): JSON array of medical specialtiesaddress(text): Physical addresscity,state,country(varchar 191): Location detailspostal_code(varchar 191): ZIP/postal codestatus(tinyint): Active/inactive statusclinic_admin_id(bigint): Administrator user IDcreated_at(datetime): Record creation timestamp
Validation Rules:
- Name: Required, 1-191 characters
- Email: Valid email format, unique per clinic
- Status: Must be 0 (inactive) or 1 (active)
- Admin ID: Must reference valid wp_users record
Relationships:
- Has many doctors (via wp_kc_doctor_clinic_mappings)
- Has many patients (via wp_kc_patient_clinic_mappings)
- Has many appointments
- Belongs to admin user (wp_users)
Patient
Purpose: Individual receiving healthcare
Tables: wp_users + wp_kc_patient_clinic_mappings
Fields (combined):
ID(bigint, PK): WordPress user IDuser_login(varchar 60): Usernameuser_email(varchar 100): Email addressdisplay_name(varchar 250): Full nameclinic_id(bigint): Associated clinicregistration_date(datetime): Account creation- Meta fields: phone, birth_date, gender, address
Validation Rules:
- Email: Required, valid format, unique
- Display name: Required, 1-250 characters
- Phone: Valid phone number format
- Birth date: Valid date, not future
- Gender: M/F/Other or empty
Relationships:
- Belongs to clinic (wp_kc_clinics)
- Has many appointments
- Has many encounters
- Has many prescriptions
- Has medical history entries
Doctor
Purpose: Healthcare provider
Tables: wp_users + wp_kc_doctor_clinic_mappings
Fields (combined):
ID(bigint, PK): WordPress user IDuser_login(varchar 60): Usernameuser_email(varchar 100): Email addressdisplay_name(varchar 250): Full nameclinic_id(bigint): Primary clinic- Meta fields: specialization, qualifications, schedule
Validation Rules:
- Must have 'doctor' role in WordPress
- Specialization: From predefined list
- Schedule: Valid time slots format
Relationships:
- Belongs to clinics (many-to-many)
- Has many appointments
- Conducts encounters
- Creates prescriptions
Appointment
Purpose: Scheduled healthcare visit
Table: wp_kc_appointments
Fields:
id(bigint, PK): Unique appointment IDappointment_start_date(date): Visit dateappointment_start_time(time): Start timeappointment_end_date(date): End dateappointment_end_time(time): End timevisit_type(varchar 191): consultation/follow-up/emergencyclinic_id(bigint): FK to wp_kc_clinicsdoctor_id(bigint): FK to wp_userspatient_id(bigint): FK to wp_usersdescription(text): Appointment notesstatus(tinyint): 0=cancelled, 1=scheduled, 2=completed, 3=no-showcreated_at(datetime): Record creation
Validation Rules:
- Start time must be before end time
- Cannot schedule in the past (except admin override)
- Doctor and patient must belong to same clinic
- Status: Must be valid enum value
State Transitions:
scheduled → completed (normal flow)
scheduled → cancelled (user action)
scheduled → no-show (admin action)
completed → [terminal state]
Relationships:
- Belongs to clinic, doctor, patient
- Has many service mappings
- May have one encounter
- May generate bills
Encounter
Purpose: Actual medical consultation record
Table: wp_kc_patient_encounters
Fields:
id(bigint, PK): Unique encounter IDencounter_date(date): Consultation dateclinic_id(bigint): FK to wp_kc_clinicsdoctor_id(bigint): FK to wp_userspatient_id(bigint): FK to wp_usersappointment_id(bigint): FK to wp_kc_appointmentsdescription(text): Medical notes/diagnosisstatus(tinyint): 0=draft, 1=completedadded_by(bigint): Creating user IDcreated_at(datetime): Record creationtemplate_id(bigint): Optional template reference
Validation Rules:
- Must link to valid appointment
- Doctor must match appointment doctor
- Status: 0 or 1 only
- Description: Required for completed encounters
Relationships:
- Belongs to appointment, clinic, doctor, patient
- Has many prescriptions
- Has medical history entries
- May generate bills
Prescription
Purpose: Medication orders
Table: wp_kc_prescription
Fields:
id(bigint, PK): Unique prescription IDencounter_id(bigint): FK to wp_kc_patient_encounterspatient_id(bigint): FK to wp_usersname(text): Medication namefrequency(varchar 199): Dosage frequencyduration(varchar 199): Treatment durationinstruction(text): Special instructionsadded_by(bigint): Prescribing doctor IDcreated_at(datetime): Record creation
Validation Rules:
- Name: Required medication name
- Frequency: Standard medical frequency format
- Duration: Valid time period
- Must be created by doctor role user
Relationships:
- Belongs to encounter and patient
- Created by doctor (added_by)
Bill
Purpose: Financial records for services
Table: wp_kc_bills
Fields:
id(bigint, PK): Unique bill IDencounter_id(bigint): FK to wp_kc_patient_encountersappointment_id(bigint): FK to wp_kc_appointmentstitle(varchar 191): Bill descriptiontotal_amount(varchar 50): Total chargesdiscount(varchar 50): Discount appliedactual_amount(varchar 50): Final amountstatus(bigint): Bill statuspayment_status(varchar 10): paid/pending/overduecreated_at(datetime): Record creationclinic_id(bigint): FK to clinic
Validation Rules:
- Amounts: Valid decimal format
- Payment status: Must be valid enum
- Total = actual + discount
Relationships:
- Belongs to encounter, appointment, clinic
- May have payment records
Service
Purpose: Medical services offered
Table: wp_kc_services
Fields:
id(bigint, PK): Service IDtype(varchar): Service categoryname(varchar): Service nameprice(decimal): Service coststatus(tinyint): Active/inactivecreated_at(datetime): Record creation
Validation Rules:
- Name: Required, unique per clinic
- Price: Non-negative decimal
- Status: 0 or 1
Relationships:
- Can be mapped to appointments
- Used in billing calculations
Entity Relationships Summary
Clinic (1) ←→ (M) Doctor (M) ←→ (M) Patient
↓ ↓ ↓
Appointments ←→ Encounters ←→ Prescriptions
↓ ↓
Services ←→ Bills
Data Integrity Constraints
- Referential Integrity: All foreign keys must reference valid records
- Clinic Isolation: Users can only access data from their authorized clinics
- Role Constraints: Only doctors can create encounters and prescriptions
- Temporal Constraints: Appointments cannot be scheduled in conflicting time slots
- Status Consistency: Related records must maintain consistent status values
Performance Considerations
Indexes Required:
wp_kc_appointments: (doctor_id, appointment_start_date)wp_kc_patient_encounters: (patient_id, encounter_date)wp_kc_bills: (clinic_id, status)wp_kc_prescription: (encounter_id)
Caching Strategy:
- Patient encounters: 1 hour TTL
- Appointment schedules: 30 minutes TTL
- Clinic information: 24 hours TTL
Data Model Complete: Ready for API contract generation