Core Components
Patient
Every healthcare journey begins with a person - the patient. This component captures who they are, where they live, and important personal information that helps healthcare providers give them the best care possible.
Think of the patient record as the foundation of everything else. It's like the cover page of a medical file that tells you who this person is, how to contact them, and important details about their identity and background.
Data Model
| Field | Type | Description |
|---|---|---|
| code | string | Unique identifier for this patient in the system |
| surname | string | Patient's family name |
| name | string | Patient's given name |
| sex | string | Patient's biological sex (M/F) |
| birthdate | date | Patient's date of birth |
| phone | string | Patient's contact number |
| nationality | string | Patient's nationality |
| disabilities | array of strings | Any disabilities the patient has |
| occupation | string | Patient's job or profession |
| marital_status | string | Patient's marital status |
| photos | array of strings | URLs to patient photos (for identification) |
| address | object | Where the patient lives (detailed address) |
| identifications | array of objects | ID cards, passports, etc. |
| death_date | datetime | Date of death (if applicable) |
| spid | string | Social Protection ID (for benefit programs) |
| created_at | datetime | When this record was created |
| updated_at | datetime | When this record was last updated |
Address Model
Cambodia uses a specific address structure based on NCDD standards:
| Field | Type | Description |
|---|---|---|
| province | object | Province information (code and name) |
| district | object | District information (code and name) |
| commune | object | Commune information (code and name) |
| village | object | Village information (code and name) |
| house_number | string | House number |
| street_number | string | Street number |
| location | string | Additional location details |
Example
{
"patient": {
"code": "P25003877",
"surname": "សៅ",
"name": "សុវ៉ាន់",
"sex": "M",
"birthdate": "1980-05-15",
"phone": "+855 12 345 678",
"nationality": "Cambodian",
"disabilities": ["Hearing impairment"],
"occupation": "Teacher",
"marital_status": "Married",
"photos": ["https://hospital.example/photos/PT20250317001_1.jpg"],
"address": {
"province": {
"code": "12",
"name": "Phnom Penh"
},
"district": {
"code": "1201",
"name": "Chamkar Mon"
},
"commune": {
"code": "120101",
"name": "Tonle Bassac"
},
"village": {
"code": "12010101",
"name": "Phsar Deum Thkov"
},
"house_number": "45",
"street_number": "302",
"location": "Near Central Market"
},
"identifications": [
{
"patient_code": "P25003877",
"card_code": "ID123456789",
"card_type": "National ID"
}
],
"death_date": null,
"spid": "250317001",
"created_at": "2025-03-17T08:30:00.000+07:00",
"updated_at": "2025-03-17T08:30:00.000+07:00"
}
}Visit
A visit is like opening a new chapter in the patient's medical story. It represents their entire stay at the hospital - from the moment they walk in (or are brought in) until they leave.
Every visit has a beginning and an end, and everything that happens in between gets connected to this visit. Think of it as the "container" that holds all the medical care, tests, treatments, and interactions that occur during this particular trip to the hospital.
Data Model
| Field | Type | Description |
|---|---|---|
| health_facility_code | string | Which hospital or clinic this visit is at |
| patient_code | string | Which patient this visit belongs to |
| code | string | Unique identifier for this specific visit |
| admission_type | string | How the patient arrived (Walk-in, Appointment, Referral) |
| discharge_type | string | How the patient left (Authorized, Refer Out, etc.) |
| visit_outcome | string | Patient's condition when leaving (Improved, Recovered, etc.) |
| visit_type | string | Type of care (IPD for inpatient, OPD for outpatient) |
| admitted_at | datetime | When the patient arrived |
| discharged_at | datetime | When the patient left |
| followup_at | datetime | When they should return for follow-up |
| created_at | datetime | When this record was created |
| updated_at | datetime | When this record was last updated |
Example
{
"visits": [
{
"health_facility_code": "121020",
"patient_code": "P25003877",
"code": "V420650",
"admission_type": "Walk-in",
"discharge_type": "Authorized",
"visit_outcome": "Improved",
"visit_type": "OPD",
"admitted_at": "2025-03-17T09:30:00.000+07:00",
"discharged_at": "2025-03-17T10:45:00.000+07:00",
"followup_at": "2025-03-24T09:00:00.000+07:00",
"created_at": "2025-03-17T09:30:00.000+07:00",
"updated_at": "2025-03-17T10:45:00.000+07:00"
}
]
}Triage
Triage is like the "first impression" of the patient's visit. When someone arrives at the hospital, a nurse or healthcare worker quickly assesses them to understand: How urgent is their condition? What are their main complaints? What are their basic vital measurements?
This is where the patient's story begins to unfold. The triage nurse asks "What brings you here today?" and records the patient's chief complaint - the main reason they came to the hospital.
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient this triage belongs to |
| visit_code | string | Which visit this triage is part of |
| encounter_code | string | Reference to encounter (usually itself) |
| code | string | Unique identifier for this triage |
| chief_complaint | text | Patient's main complaint in their own words |
| height | number | Patient's height in centimeters |
| weight | number | Patient's weight in kilograms |
| recorded_at | datetime | When this triage was done |
| recorded_by | string | Name of the healthcare provider |
| title | string | Provider's role (Doctor, Nurse, etc.) |
Example
{
"triages": [{
"visit_code": "V420650",
"encounter_code": "P25003877",
"code": "TR250317",
"chief_complaint": "Periodic fever with chills for 3 days",
"height": 170,
"weight": 65,
"recorded_at": "2025-03-17T09:32:00.000+07:00",
"recorded_by": "Khun Srey Mom",
"title": "Nurse"
}]
}Vital Signs
Vital signs are like taking a snapshot of how the patient's body is functioning right now. These are the basic measurements that tell healthcare providers if the patient is stable, in distress, or needs immediate attention.
Think of vital signs as the body's "dashboard" - just like a car's dashboard shows speed, fuel level, and engine temperature, vital signs show the body's key functions: heart rate, blood pressure, temperature, breathing rate, and oxygen levels.
Normal Ranges Reference
| Vital Sign | Normal Range | Units |
|---|---|---|
| Temperature | 36.5-37.3 °C | °C |
| Heart Rate | 60-100 beats per minute | /min |
| Respiratory Rate | 12-20 breaths per minute | /min |
| Blood Pressure | Systolic: 90-120, Diastolic: 60-80 | mmHg |
| Oxygen Saturation | 95-100% | % |
| Blood Glucose | Fasting: 70-99, Random: < 140 | mg/dL |
Data Model
| Field | Type | Description |
|---|---|---|
| encounter_code | string | Which encounter these vital signs were taken during |
| recorded_at | datetime | When these measurements were taken |
| recorded_by | string | Who took these measurements |
| title | string | Their role (Doctor, Nurse, etc.) |
| observations | array of objects | The actual vital sign measurements |
Example
{
"vital_signs": [
{
"encounter_code": "E417001",
"recorded_at": "2025-03-17T09:40:00.000+07:00",
"recorded_by": "Khun Srey Mom",
"title": "Nurse",
"observations": [
{
"name": "Systolic Blood Pressure",
"value": 135
},
{
"name": "Diastolic Blood Pressure",
"value": 85
},
{
"name": "Heart Rate",
"value": 92
},
{
"name": "Temperature",
"value": 38.7
},
{
"name": "Blood Oxygen",
"value": 97
}
]
}
]
}Medical History
Medical history is like reading the previous chapters of the patient's health story. Before treating someone, doctors need to know: What health problems have they had before? What medications are they taking? Are they allergic to anything? What runs in their family?
This information helps doctors understand the full picture and make better decisions about treatment.
History Categories
| Category | What It Includes |
|---|---|
| Current Illness | What's happening now - symptoms, when they started, what makes them better or worse |
| Current Medications | What medicines the patient is taking right now |
| Past Medical History | Previous illnesses, hospitalizations, chronic conditions |
| Past Surgical History | Any surgeries the patient has had |
| Allergies | Things the patient is allergic to (foods, medicines, etc.) |
| Immunizations | Vaccinations the patient has received |
| Family History | Health problems that run in the family |
| Social History | Lifestyle factors like smoking, drinking, occupation |
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient this history belongs to |
| visit_code | string | Which visit this was recorded during |
| encounter_code | string | Which encounter this was discussed in |
| name | string | Category of history (from table above) |
| value | array of strings | List of relevant information for this category |
Example
{
"medical_histories": [
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"name": "Current Illness History",
"value": [
"Patient reports high fever with chills occurring every 48 hours, accompanied by headache and joint pain. Symptoms started 3 days ago after returning from a trip to Mondulkiri province."
]
},
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"name": "Allergies",
"value": [
"Penicillin",
"Shellfish"
]
},
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"name": "Family History",
"value": [
"Mother with diabetes",
"Father with hypertension"
]
}
]
}Physical Examination
Physical examination is where the doctor becomes a detective, using their senses to gather clues about what's wrong with the patient. They look, listen, feel, and sometimes smell to understand what's happening inside the patient's body.
This is hands-on medicine - the doctor examines different parts of the body systematically, from head to toe, looking for signs of illness or injury.
Examination Areas
| Body System | What Doctors Check |
|---|---|
| General Appearance | How the patient looks overall - alert, distressed, well-nourished |
| Head & Neck | Eyes, ears, nose, throat, neck lymph nodes |
| Heart & Lungs | Heart sounds, breathing sounds, chest movement |
| Abdomen | Belly tenderness, organ size, bowel sounds |
| Skin | Rashes, color changes, wounds |
| Nervous System | Reflexes, coordination, mental status |
| Muscles & Joints | Strength, movement, swelling |
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient was examined |
| visit_code | string | Which visit this examination was part of |
| encounter_code | string | Which encounter this examination occurred during |
| name | string | Which body system or area was examined |
| value | various | What the doctor found |
| value_type | string | Type of finding (text, complex data, etc.) |
| value_unit | string | Unit of measurement (if applicable) |
Example
{
"physical_examinations": [
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"name": "General Appearance",
"value": "Patient appears ill and tired, with intermittent shivering",
"value_type": "text",
"value_unit": null
},
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"name": "Skin",
"value": "Warm to touch, slightly yellow color (jaundiced), no rash visible",
"value_type": "text",
"value_unit": null
}
]
}Laboratories
Laboratory tests are like sending samples to a detective lab to uncover hidden clues about the patient's condition. Blood, urine, and other samples are analyzed to reveal information that can't be seen with the naked eye.
These tests can confirm what doctors suspect, rule out certain conditions, or sometimes reveal unexpected findings that change the entire treatment plan.
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient these tests belong to |
| visit_code | string | Which visit these tests were ordered during |
| encounter_code | string | Which encounter prompted these tests |
| request_code | string | Unique identifier for this lab request |
| requested_at | datetime | When the tests were ordered |
| requested_by | string | Which doctor ordered the tests |
| title | string | Doctor's role |
| results | array of objects | The test results |
Result Model
| Field | Type | Description |
|---|---|---|
| name | string | Name of the test |
| category | string | Type of test (Hematology, Chemistry, etc.) |
| value | various | The test result |
| value_type | string | Type of result (number, text, etc.) |
| value_unit | string | Unit of measurement |
| reference_range | string | Normal range for this test |
| interpretation | string | Is it normal, high, low? |
| verified_by | string | Lab technician who verified the result |
| recorded_by | string | Who entered the result |
Example
{
"laboratories": [
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"request_code": "L7001",
"requested_at": "2025-03-17T10:30:00.000+07:00",
"requested_by": "Dr. Chhun Sovannarith",
"title": "Doctor",
"results": [
{
"name": "Malaria Blood Smear",
"category": "Parasitology",
"value": "Positive for P. falciparum",
"value_type": "string",
"value_unit": null,
"reference_range": "Negative",
"interpretation": "Positive - Malaria parasites found",
"verified_by": "Dr. Meas Chenda",
"recorded_by": "Lab Tech Chandaravuth"
},
{
"name": "Hemoglobin",
"category": "Hematology",
"value": 11.2,
"value_type": "float",
"value_unit": "g/dL",
"reference_range": "13.5-17.5",
"interpretation": "Low - Below normal range",
"verified_by": "Dr. Meas Chenda",
"recorded_by": "Lab Tech Chandaravuth"
}
]
}
]
}Diagnosis
Diagnosis is the moment when all the pieces of the puzzle come together. After listening to the patient, examining them, and reviewing test results, the doctor determines what's wrong. This is the "answer" to the medical mystery.
Sometimes there's one clear diagnosis, sometimes there are multiple conditions, and sometimes doctors need to consider several possibilities (differential diagnosis).
Diagnosis Types
| Type | When It's Used |
|---|---|
| Primary | The main reason for this hospital visit |
| Secondary | Other conditions that also need attention |
| Differential | Possible diagnoses being considered |
| Admission | Initial diagnosis when patient arrives |
| Discharge | Final diagnosis when patient leaves |
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient this diagnosis belongs to |
| visit_code | string | Which visit this diagnosis was made during |
| encounter_code | string | Which encounter this diagnosis was determined in |
| diagnosis_type | string | Type of diagnosis (Primary, Secondary, etc.) |
| diagnosis_code | string | ICD-10 medical code for this condition |
| diagnosis_name | string | Name of the condition |
| diagnosis_description | string | More detailed description |
| diagnosed_at | datetime | When this diagnosis was made |
| diagnosed_by | string | Which doctor made this diagnosis |
Example
{
"diagnoses": [
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E317001",
"diagnosis_type": "Primary",
"diagnosis_code": "B50.9",
"diagnosis_name": "Plasmodium falciparum malaria, unspecified",
"diagnosis_description": "Malaria caused by P. falciparum parasites, confirmed by blood smear",
"diagnosed_at": "2025-03-17T10:05:00.000+07:00",
"diagnosed_by": "Dr. Chhun Sovannarith"
}
]
}Prescriptions
Updated on 2026-03-06Prescriptions are the doctor's treatment plan written down as specific medications. After diagnosing the problem, the doctor decides which medicines will help the patient get better.
Some medications are given at the hospital during treatment, while others are prescribed for the patient to take at home. Each prescription includes detailed instructions on how much to take, when to take it, and for how long.
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient this prescription is for |
| visit_code | string | Which visit this prescription was written during |
| encounter_code | string | Which encounter prompted this prescription |
| code | string | Unique identifier for this prescription |
| prescribed_at | datetime | When this prescription was written |
| prescribed_by | string | Which doctor wrote this prescription |
| title | string | Doctor's role |
| medications | array of objects | List of prescribed medications |
Medication Model
| Field | Type | Description |
|---|---|---|
| medicine_code | string | Unique identifier for this medication |
| medicine_name | string | Name of the medicine |
| strength | string | How strong the medicine is (e.g., "500mg") |
| form | string | What form it comes in (tablet, syrup, injection) |
| method | string | How to take it (oral, injection, topical) |
| unit | string | Unit of measurement |
| morning | numeric | How many to take in the morning |
| afternoon | numeric | How many to take in the afternoon |
| evening | numeric | How many to take in the evening |
| night | numeric | How many to take at night |
| days | integer | How many days to take this medicine |
| interval | string | How often to take it (e.g., "every 8 hours") |
| note | text | Special instructions |
| dispense | object | Optional Total quantity dispensed to the patient |
Dispense Field
The dispense object contains:
quantity(number): Total amount dispensedunit(string): Unit of measurement (e.g., "Boxes", "Bottles")
If not provided, the system calculates quantity as: (morning + afternoon + evening + night) × days
Example
{
"prescriptions": [
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"code": "RX20250317001",
"prescribed_at": "2025-03-17T10:10:00.000+07:00",
"prescribed_by": "Dr. Chhun Sovannarith",
"title": "Doctor",
"medications": [
{
"medicine_code": "MED001",
"medicine_name": "Artemether-Lumefantrine",
"strength": "20/120mg",
"method": "Oral",
"unit": "Tablet",
"morning": 4,
"afternoon": 0,
"evening": 4,
"night": 0,
"days": 3,
"interval": null,
"note": "Take with food. Complete the full course.",
"dispense": {
"quantity": 1,
"unit": "Boxes"
}
},
{
"medicine_code": "MED002",
"medicine_name": "Paracetamol",
"strength": "500mg",
"method": "Oral",
"unit": "Tablet",
"morning": 0,
"afternoon": 0,
"evening": 0,
"night": 0,
"days": 5,
"interval": "8 hours",
"note": "Take only when you have fever or pain.",
"dispense": {
"quantity": 1,
"unit": "Boxes"
}
}
]
}
]
}Invoices
Invoices are the financial record of the patient's visit - what services were provided and what they cost. This includes everything from consultation fees to laboratory tests to medications.
In Cambodia's healthcare system, many patients are covered by health insurance programs (like HEF or NSSF), so the invoice also tracks what the patient pays versus what the insurance covers.
Data Model
| Field | Type | Description |
|---|---|---|
| patient_code | string | Which patient this invoice belongs to |
| visit_code | string | Which visit this invoice covers |
| encounter_code | string | Which encounter these charges are from |
| code | string | Unique identifier for this invoice |
| payment_type | string | How this will be paid (HEF, NSSF, Cash, etc.) |
| invoice_date | datetime | When this invoice was created |
| total | number | Total amount of all charges |
| cashier | string | Who processed this invoice |
| services | array of objects | Medical services provided |
| medications | array of objects | Medications dispensed |
Example
{
"invoices": [
{
"patient_code": "P25003877",
"visit_code": "V420650",
"encounter_code": "E417001",
"code": "INV20250317001",
"payment_type": "HEF",
"invoice_date": "2025-03-17T11:00:00.000+07:00",
"total": 45000,
"cashier": "Sok Kunthea",
"services": [
{
"service_code": "SRV001",
"service_name": "Blood Smear for Malaria",
"service_category": "Laboratory Test",
"price": 15000,
"payment": 0,
"paid": false,
"discount": 15000
}
],
"medications": [
{
"medicine_code": "MED001",
"medicine_name": "Artemether-Lumefantrine 20/120mg",
"quantity": 24,
"unit": "Tablet",
"price": 1250,
"payment": 0,
"paid": false,
"discount": 30000
}
]
}
]
}Referrals
Sometimes a patient needs care that the current hospital can't provide - maybe they need specialized treatment, advanced equipment, or a higher level of care. When this happens, the patient is "referred" to another healthcare facility.
Referrals are like passing the patient's story to the next chapter, but at a different hospital. All the information about their condition, treatment so far, and why they need to be transferred is carefully documented.
Data Model
| Field | Type | Description |
|---|---|---|
| referred_from | object | Information about where the patient came from |
| referred_to | object | Information about where the patient is going |
Referral Details
| Field | Type | Description |
|---|---|---|
| code | string | Unique identifier for this referral |
| referral_number | string | Official referral document number |
| transportation | string | How the patient will travel (Ambulance, Family car, etc.) |
| reason | string | Why the patient needs to be referred |
| has_called | boolean | Whether the receiving hospital was contacted in advance |
| caretaker_name | string | Person accompanying the patient |
| caretaker_phone | string | Contact number for the caretaker |
| referred_by | string | Doctor making the referral |
| referred_at | datetime | When the referral was made |
| received_by | string | Doctor receiving the patient |
| received_at | datetime | When the patient arrived at the new hospital |
| medications | string | Current medications the patient is taking |
| health_facility | object | Details about the receiving hospital |
Example
{
"referrals": {
"referred_from": null,
"referred_to": {
"code": "REF20250317001",
"referral_number": "HCPP/REF/2025/317",
"transportation": "Ambulance",
"health_facility": {
"name": "Calmette Hospital",
"code": "121020",
"label": "National Referral Hospital",
"type": "Tertiary"
},
"reason": "Severe malaria with complications requiring intensive care and specialized treatment not available at this facility",
"has_called": true,
"caretaker_name": "Sok Channary (wife)",
"caretaker_phone": "012345678",
"referred_by": "Dr. Chhun Sovannarith",
"referred_at": "2025-03-17T11:30:00.000+07:00",
"received_by": "Dr. Pich Vothy",
"received_at": "2025-03-17T12:15:00.000+07:00",
"medications": "Currently on Artemether-Lumefantrine (1 dose given), IV fluids started"
}
}
}Summary
Each component tells part of the patient's healthcare story. When connected together through their unique codes, they create a complete picture of the patient's journey from arrival to discharge, including all the care, tests, treatments, and outcomes along the way.