- 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>
252 lines
7.7 KiB
Markdown
252 lines
7.7 KiB
Markdown
# 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 identifier
|
|
- `name` (varchar 191): Clinic name
|
|
- `email` (varchar 191): Contact email
|
|
- `telephone_no` (varchar 191): Phone number
|
|
- `specialties` (longtext): JSON array of medical specialties
|
|
- `address` (text): Physical address
|
|
- `city`, `state`, `country` (varchar 191): Location details
|
|
- `postal_code` (varchar 191): ZIP/postal code
|
|
- `status` (tinyint): Active/inactive status
|
|
- `clinic_admin_id` (bigint): Administrator user ID
|
|
- `created_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 ID
|
|
- `user_login` (varchar 60): Username
|
|
- `user_email` (varchar 100): Email address
|
|
- `display_name` (varchar 250): Full name
|
|
- `clinic_id` (bigint): Associated clinic
|
|
- `registration_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 ID
|
|
- `user_login` (varchar 60): Username
|
|
- `user_email` (varchar 100): Email address
|
|
- `display_name` (varchar 250): Full name
|
|
- `clinic_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 ID
|
|
- `appointment_start_date` (date): Visit date
|
|
- `appointment_start_time` (time): Start time
|
|
- `appointment_end_date` (date): End date
|
|
- `appointment_end_time` (time): End time
|
|
- `visit_type` (varchar 191): consultation/follow-up/emergency
|
|
- `clinic_id` (bigint): FK to wp_kc_clinics
|
|
- `doctor_id` (bigint): FK to wp_users
|
|
- `patient_id` (bigint): FK to wp_users
|
|
- `description` (text): Appointment notes
|
|
- `status` (tinyint): 0=cancelled, 1=scheduled, 2=completed, 3=no-show
|
|
- `created_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 ID
|
|
- `encounter_date` (date): Consultation date
|
|
- `clinic_id` (bigint): FK to wp_kc_clinics
|
|
- `doctor_id` (bigint): FK to wp_users
|
|
- `patient_id` (bigint): FK to wp_users
|
|
- `appointment_id` (bigint): FK to wp_kc_appointments
|
|
- `description` (text): Medical notes/diagnosis
|
|
- `status` (tinyint): 0=draft, 1=completed
|
|
- `added_by` (bigint): Creating user ID
|
|
- `created_at` (datetime): Record creation
|
|
- `template_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 ID
|
|
- `encounter_id` (bigint): FK to wp_kc_patient_encounters
|
|
- `patient_id` (bigint): FK to wp_users
|
|
- `name` (text): Medication name
|
|
- `frequency` (varchar 199): Dosage frequency
|
|
- `duration` (varchar 199): Treatment duration
|
|
- `instruction` (text): Special instructions
|
|
- `added_by` (bigint): Prescribing doctor ID
|
|
- `created_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 ID
|
|
- `encounter_id` (bigint): FK to wp_kc_patient_encounters
|
|
- `appointment_id` (bigint): FK to wp_kc_appointments
|
|
- `title` (varchar 191): Bill description
|
|
- `total_amount` (varchar 50): Total charges
|
|
- `discount` (varchar 50): Discount applied
|
|
- `actual_amount` (varchar 50): Final amount
|
|
- `status` (bigint): Bill status
|
|
- `payment_status` (varchar 10): paid/pending/overdue
|
|
- `created_at` (datetime): Record creation
|
|
- `clinic_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 ID
|
|
- `type` (varchar): Service category
|
|
- `name` (varchar): Service name
|
|
- `price` (decimal): Service cost
|
|
- `status` (tinyint): Active/inactive
|
|
- `created_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
|
|
|
|
1. **Referential Integrity**: All foreign keys must reference valid records
|
|
2. **Clinic Isolation**: Users can only access data from their authorized clinics
|
|
3. **Role Constraints**: Only doctors can create encounters and prescriptions
|
|
4. **Temporal Constraints**: Appointments cannot be scheduled in conflicting time slots
|
|
5. **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 |