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 | Required | Description |
|---|---|---|---|
| code | string | YES | Unique identifier for the patient in the system |
| surname | string | YES | Patient's family name |
| name | string | YES | Patient's given name |
| sex | string | YES | Patient's biological sex |
| birthdate | date | YES | Patient's date of birth |
| phone | string | YES | Patient's contact number |
| nationality | string | YES | Patient's nationality |
| disabilities | array of strings | List of disabilities, if applicable | |
| occupation | string | Patient's job or profession (nullable) | |
| marital_status | string | YES | Patient's marital status (nullable) |
| photos | array of strings | URLs to patient photos (nullable) | |
| address | object | YES | Patient's address information (see Address model) |
| identifications | array of objects | Patient identification documents (see Identification model) | |
| death_date | datetime | Date and time of death, if applicable | |
| spid | string | YES | Patient's Social Protection ID |
| created_at | datetime | YES | Record creation timestamp |
| updated_at | datetime | YES | Record the last update timestamp |
Address Model
Cambodia uses a specific address structure based on NCDD standards:
| Field | Type | Required | Description |
|---|---|---|---|
| province | object | YES | Information about the province |
| province.code | string | YES | Province code from NCDD standard |
| province.name | string | YES | Province's name in Khmer |
| district | object | YES | Information about the district |
| district.code | string | YES | District code from NCDD standard |
| district.name | string | YES | District name in Khmer |
| commune | object | YES | Information about the commune |
| commune.code | string | YES | Commune code from NCDD standard |
| commune.name | string | YES | Commune name in Khmer |
| village | object | YES | Information about the village |
| village.code | string | YES | Village code from NCDD standard |
| village.name | string | YES | Village name in Khmer |
| house_number | string | House number (nullable) | |
| street_number | string | Street number (nullable) | |
| location | string | Additional location details (nullable) |
Identification Model
| Field | Type | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient unique code |
| card_code | string | YES | Identification number |
| card_type | string | YES | Type of identification document |
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": "1234567890",
"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 | Required | Description |
|---|---|---|---|
| health_facility_code | string | YES | Unique identifier for the healthcare facility, issued by NPCA |
| patient_code | string | YES | Reference to the patient's unique code |
| code | string | YES | Unique identifier for the visit |
| admission_type | string | YES | How a patient is admitted to a healthcare facility |
| discharge_type | string | YES | How a patient is discharged from a healthcare facility |
| visit_outcome | string | YES | The patient's condition at the end of the visit |
| visit_type | string | YES | The type or purpose of a patient's visit (IPD or OPD) |
| admitted_at | datetime | YES | Date and time of admission |
| discharged_at | datetime | YES | Date and time of discharge |
| followup_at | datetime | When the patient is scheduled to return for follow-up care | |
| created_at | datetime | YES | Record creation timestamp |
| updated_at | datetime | YES | Record the last update timestamp |
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 | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient's unique code |
| visit_code | string | YES | Reference to visit the unique code |
| encounter_code | string | YES | Reference to encounter a unique code (nullable) |
| code | string | YES | Unique identifier for the triage |
| chief_complaint | text | YES | Primary symptom or problem reported by the patient at the time of the visit |
| height | number | YES | Value of height of the patient in CM |
| weight | number | YES | Value of weight of the patient in KG |
| recorded_at | datetime | YES | Date and time triage was recorded |
| recorded_by | string | YES | Name of the healthcare provider who recorded the triage |
| title | string | Position of the healthcare provider |
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 |
| Pulse (Heart Rate) | 60–100 beats per minute | /mn |
| Respiratory Rate | 12–20 breaths per minute | /mn |
| Blood Pressure | Systolic: 90–120 mmHg, Diastolic: 60–80 mmHg | mmHg |
| Oxygen Saturation (SpO₂) | 95–100% | % |
| Random Glucose Rapid Test | Random: < 140 mg/dL, Fasting: 70–99 mg/dL | mg/dL |
Data Model
| Field | Type | Required | Description |
|---|---|---|---|
| encounter_code | string | YES | Reference to encounter a unique code |
| recorded_at | datetime | YES | Date and time vital signs were recorded |
| recorded_by | string | YES | Name of healthcare provider who recorded the vital signs |
| title | string | YES | Doctor or nurse |
| observations | array of objects | YES | Array of vital sign measurements |
Observation in Vital Sign
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | YES | Name of the vital sign |
| value | numeric | YES | Measured value |
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 | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to the patient unique code |
| visit_code | string | YES | Reference to visit the unique code |
| encounter_code | text | YES | Reference to encounter a unique code |
| name | string | YES | Name of the condition |
| value | array of strings | YES | Array of value in string of the condition |
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 | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient unique code |
| visit_code | string | YES | Reference to visit unique code |
| encounter_code | string | Reference to encounter unique code | |
| name | string | YES | Name for the physical assessment point |
| value | various | YES | Value of the assessment result |
| value_type | string | YES | Type of Value |
| value_unit | string | Measurement unit represent the value |
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 | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient unique code |
| visit_code | string | YES | Reference to visit unique code |
| encounter_code | string | Reference to encounter unique code | |
| request_code | string | YES | Unique code represents the lab request |
| requested_at | datetime | YES | Date and time laboratory were requested |
| requested_by | string | YES | Name of doctor who requested the laboratory |
| title | string | Name of doctor | |
| results | array of objects | YES | Array of laboratory objects |
Result Model
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | YES | The item of lab result |
| category | string | YES | Category that lab result fall under (e.g. biochemistry, hematology) |
| value | various | YES | Measured value |
| value_type | string | YES | Type of value |
| value_unit | string | YES | Unit of measurement |
| reference_range | string | YES | Normal range for the measurement |
| interpretation | string | YES | Interpretation of the result |
| verified_at | datetime | YES | Date and time of doctor who verified |
| verified_by | string | YES | Name of healthcare provider who verified |
| recorded_at | datetime | YES | Date and time of doctor who recorded |
| recorded_by | string | YES | Name of healthcare provider who recorded |
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"
}
]
}
]
}Imageries
Imageries represent medical imaging studies performed on a patient, such as X-rays, ultrasounds, CT scans, and MRIs. These diagnostic tools allow healthcare providers to visualize internal structures of the body to aid in diagnosis and treatment planning.
Data Model
| Field | Type | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient's unique code |
| visit_code | string | YES | Reference to visit the unique code |
| encounter_code | string | Reference to encounter a unique code | |
| request_code | string | YES | Unique code represents the lab request |
| requested_at | datetime | YES | Date and time of the imagery requested |
| requested_by | string | YES | Name of the healthcare provider who requested the imagery |
| title | string | YES | Name of doctor |
| results | array of objects | YES | Array of imagery objects |
Result Model
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | YES | The item of the imaging result |
| category | string | YES | Category that imaging falls under (e.g. radiology, … ) |
| images | array of strings | YES | Measured value |
| result | string | YES | Full result of the imagery |
| conclusion | string | YES | Summary of the result |
| verified_at | datetime | YES | Date and time that the sample was verified |
| verified_by | string | YES | Name of healthcare provider who verified the sample |
| recorded_at | datetime | YES | Date and time results were recorded |
| recorded_by | string | YES | Name of the healthcare provider who recorded the result |
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 | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient unique code |
| visit_code | string | YES | Reference to visit unique code |
| encounter_code | string | Reference to encounter unique code | |
| diagnosis_type | string | YES | Name of diagnosis type as above table |
| diagnosis_code | string | YES | ICD-10 code for the diagnosis |
| diagnosis_name | string | YES | Name of the diagnosis |
| diagnosis_description | string | Detailed description of the diagnosis | |
| diagnosed_at | datetime | YES | Date and time of diagnosis |
| diagnosed_by | string | YES | Name of healthcare provider who made the diagnosis |
| title | string | Position of the healthcare provider (doctor or nurse) |
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"
}
]
}SOAP
SOAP (Subjective, Objective, Assessment, Plan) is a structured documentation method used by healthcare providers to organize clinical notes during patient encounters.
Data Model
| Field | Type | Required | Description |
|---|---|---|---|
| encounter_code | string | YES | Reference to encounter unique code |
| subjective | text | Patient's reported symptoms and feelings | |
| objective | text | Provider's objective | |
| assessment | text | Provider's assessment of the patient situation | |
| evaluation | text | Provider's summary or evaluation regarding the assessment | |
| plan | text | Plan for treatment or next steps | |
| code | string | Unique identifier for the SOAPs | |
| recorded_at | datetime | Date and time SOAPs was written | |
| recorded_by | string | Name of healthcare provider who wrote the SOAPs | |
| title | string | Position of the healthcare provider (doctor or nurse) |
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.
NOTE
- Medication dispensed during hospitalization: Requires
encounter_codelinking to progress_notes, outpatient, inpatient, surgery, or emergency - Medication dispensed for home use: Requires
encounter_codeto benull
Data Model
| Field | Type | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to the patient's unique code |
| visit_code | string | YES | Reference to visit the unique code |
| encounter_code | string | Reference to encounter a unique code | |
| code | string | YES | Unique identifier for the prescription |
| prescribed_at | datetime | YES | Date and time the prescription was written |
| prescribed_by | string | YES | Name of healthcare provider who wrote the prescription |
| title | string | Position, whether doctor or nurse, or else | |
| medications | array of objects | YES | Array of medications is prescribed |
Medication Model
| Field | Type | Required | Description |
|---|---|---|---|
| medicine_code | string | YES | Unique identifier for the medication |
| medicine_name | string | YES | Name of the medicine |
| strength | string | Strength of the medicine | |
| method | string | YES | Method of administration |
| unit | string | YES | Unit of measurement |
| morning | numeric | Morning dose | |
| afternoon | numeric | Afternoon dose | |
| evening | numeric | Evening dose | |
| night | numeric | Night dose | |
| days | integer | YES | Duration of prescription in days |
| interval | string | Interval between doses | |
| note | text | Additional notes or instructions |
NOTE
- If no
intervalis provided,morning,afternoon,evening,nightshould be presented strengthis required if it is not presented inmedicine_name
Dispense Model
| Field | Type | Required | Description |
|---|---|---|---|
| unit | string | YES | Unit of measurement (e.g., "Boxes", "Bottles", "Tablets") |
| quantity | integer | YES | Total amount dispensed to the patient |
NOTE
Dispense: Specifies the total quantity of the drug provided to the patient.
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 | Required | Description |
|---|---|---|---|
| patient_code | string | YES | Reference to patient unique code |
| visit_code | string | YES | Reference to visit unique code |
| encounter_code | string | Reference to encounter unique code | |
| code | string | YES | Invoice identifier |
| payment_type | string | YES | Type of payment |
| invoice_date | datetime | YES | Invoice date |
| total | number | YES | Total amount |
| created_at | datetime | YES | Creation timestamp |
| updated_at | datetime | Update timestamp | |
| cashier | string | YES | Name of cashier |
Service Model
| Field | Type | Required | Description |
|---|---|---|---|
| invoice_code | string | YES | Invoice identifier |
| service_code | string | YES | Code identify the provided service |
| service_name | string | YES | Name of the service provided |
| service_category | string | YES | Category name of the service |
| price | number | YES | Unit price |
| quantity | number | Number of service provided | |
| payment | number | Payment received from patient | |
| paid | boolean | Payment status | |
| discount_type | string | String whether in percentage or amount | |
| discount | number | Discount amount or percentage |
Medication Model
| Field | Type | Required | Description |
|---|---|---|---|
| invoice_code | string | YES | Invoice identifier |
| medicine_code | string | YES | Code identifies the provided service |
| medicine_name | string | YES | Name of the service provided |
| quantity | number | YES | Number of medicines provided |
| price | number | YES | Unit price |
| payment | number | Payment received from patient | |
| paid | boolean | Payment status | |
| discount_type | string | String whether in percentage or amount | |
| discount | number | Discount amount or percentage |
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 the referring facility |
| referred_to | object | Information about the receiving facility |
Detail Model
| Field | Type | Required | Description |
|---|---|---|---|
| code | string | YES | Unique identifier for the referral |
| referral_number | string | YES | Unique reference number for the referral |
| transportation | string | YES | Mode of transportation |
| reason | string | YES | Reason for referral |
| has_called | boolean | Whether the receiving facility was called in advance | |
| caretaker_name | string | Name of the person accompanying the patient | |
| caretaker_phone | string | Contact number for the caretaker | |
| referred_by | string | Name of the referring provider | |
| referred_by_phone | string | Contact number for the referring provider | |
| referred_at | datetime | Date and time of referral | |
| received_by | string | Name of the receiving provider | |
| received_by_phone | string | Contact number for the receiving provider | |
| received_at | datetime | Date and time the patient was received | |
| medications | string | Medications that the patient is taking | |
| health_facility | object | Receiving facility / referring facility |
Health Facility Model
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | YES | Health facility's name |
| code | string | YES | Health facility's code |
| label | string | Health facility's label | |
| type | string | Health facility's type |
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"
}
}
}Consultations
A clinical encounter where a patient interacts with a healthcare provider for assessment, advice, or diagnosis, without necessarily receiving a prescription or procedure.
Data Model
| Field | Type | Required | Description |
|---|---|---|---|
| consultations | array of strings | NO | Assesses, advises, and guides a patient regarding their health condition. |
Example
{
"consultations": [
"Review of normal laboratory results and reassurance.",
"Education on benign nature of tension headaches."
]
}Forms Added in v1.4
Specialized clinical programs and healthcare services often require structured, program-specific records that capture domain-focused assessments, questionnaires, and clinical indicators. The Forms component provides a flexible, standardized structure to record specialized data for programs such as Antenatal Care (ANC), Postnatal Care (PNC), Labor & Delivery, Family Planning & Contraception, Safe Abortion Care, and Child Growth & Physical Examinations.
Each submitted form links directly to its parent visit and encounter via visit_code and encounter_code. The standard form definition is identified by a unique form_code and form_name, while the specific clinical questions, answers, and measurements are encapsulated within the flexible form_data key-value object.
Data Model
| Field | Type | Required | Description |
|---|---|---|---|
| visit_code | string | YES | Reference to the visit's unique code |
| form_code | string | YES | Standard unique identifier for the form definition (e.g., ENTY-000016Z) |
| form_name | string | YES | Descriptive name of the clinical form (e.g., OPD Contraception, Delivery) |
| encounter_code | string | YES | Reference to the encounter's unique code |
| form_data | object | YES | Key-value object containing the specific clinical questions and answers for the form |
Standard Form Types
The EMR system supports standard clinical forms across reproductive, maternal, and pediatric health:
| Form Name | Form Code | Clinical Scope |
|---|---|---|
| OPD Contraception | ENTY-000016Z | Family planning consultations, contraceptive methods chosen/administered, and client history |
| Delivery | ENTY-0000K15 | Labor & delivery summary, obstetrical history, delivery mode, oxytocin administration, and newborn vitality |
| Abortion | ENTY-0000K1B | Safe abortion care, uterine size, clinical procedure method, and post-abortion contraception uptake |
| OPD ANC | ENTY-000H014 | Antenatal care visit, gestational age, uterine fundal height, and fetal heart rate |
| OPD PNC | ENTY-000001B2 | Postnatal care checkup, postpartum days, maternal danger signs, and infant danger signs |
| Child Phy-Exam(0-28 Days) | ENTY-00000A8C | Neonatal physical examination within 28 days of birth, APGAR scores, birth weight, and congenital screening |
| Child Phy-Exam(1M-5Y) | ENTY-00000A9M | Pediatric physical examination (1 month to 5 years), growth tracking, and developmental milestones |
Form Data Fields Reference (form_data)
Each clinical form captures specialized fields within the form_data object:
1. OPD Contraception (ENTY-000016Z)
birth_control_type: Selected contraceptive method or clinical procedure (e.g.,Combined Oral Contraceptive (COC),Injectable Contraceptive,Intrauterine Device (IUD),Contraceptive Implant,Condom,Removal of IUD,Insertion of Contraceptive Implant,Contraceptive Implant Follow-up,Removal of Contraceptive Implant,Counseling)birth_control_customer_type: Client contraceptive usage status (Past User,First-Time User,Continuing User / Current User)
2. Delivery (ENTY-0000K15)
maternal_delivery_status: Maternal clinical status during delivery (e.g.,normal)delivery_number_of_newborn: Total number of newborns delivereddelivery_number_of_pregnant: Total number of pregnancies (Gravida)delivery_number_of_delivery: Total number of viable deliveries (Parity)delivery_number_of_miscarriage: Prior spontaneous miscarriages countdelivery_number_of_abortion: Prior induced abortions countdelivery_pregnancy_in_weeks: Gestational age in completed weeksdelivery_at: Timestamp of delivery (ISO 8601 format)delivery_type: Delivery procedure type (Normal Vaginal Delivery (NVD),Assisted Vaginal Delivery,Cesarean Section (C-Section))delivery_oxytocin_injection: Whether active oxytocin management was administered (Yes/No)delivery_oxytocin_injection_date: Timestamp when oxytocin was administereddelivery_baby_born: Birth outcome status (Live Birth/Stillbirth/Yes)delivery_baby_breathing_in_first_minute: Newborn breathing / vitality observation within first minutedelivery_baby_sex: Biological sex of the infant (Male/Female)delivery_breastfeed_in_first_hour: Whether infant was breastfed within the first hour (Yes/No)delivery_baby_weight: Birth weight in grams (e.g.,2850)
3. Abortion (ENTY-0000K1B)
safe_abortion_children_alive: Count of living childrennumber_of_miscarriage: Number of prior miscarriagesnumber_of_abortion: Number of prior abortionspregnancy_test: Pregnancy test confirmation status (e.g.,Done)problems_upon_arrival: Clinical symptoms or issues upon arrival (e.g.,None)safe_abortion_uterine_size: Sized uterus in weeks of gestationsafe_abortion_method: Clinical procedure method (Medical Abortion,Manual Vacuum Aspiration (MVA),Dilation and Evacuation (D&E),Other Methods)safe_abortion_is_customer_get_method_before_leave: Whether contraceptive method was provided before leaving (Yes/No)type_of_contraceptive_method_received: Contraceptive method received post-abortion (Combined Oral Contraceptive (COC),Injectable Contraceptive,Intrauterine Device (IUD),Contraceptive Implant,Condom,Sterilization)
4. OPD ANC (ENTY-000H014)
pregnancy_number_of_pregnancies: Total number of pregnancies (Gravida)pregnancy_age: Gestational age in weeksuterine_height_cm: Symphysis-fundal uterine height in centimetersfetal_heart_rate: Fetal heart rate (bpm)pregnancy_last_menstrual_period_date: First day of last menstrual period date (YYYY-MM-DD)
5. OPD PNC (ENTY-000001B2)
pnc_days_after_delivery: Number of days elapsed post-deliverypnc_maternal_danger_signs_and_treatment: Observed postpartum maternal danger signs and treatments providedpnc_baby_danger_signs_and_treatment: Observed neonatal danger signs and treatments provided
6. Child Physical Examination (0–28 Days) (ENTY-00000A8C)
pnc_days_after_delivery: Age in days post-deliverychild_growth_born_weight: Birth weight in gramsterm_or_preterm_birth: Term delivery statusbaby_long_labor: Prolonged labor historybaby_maternal_fever_at_birth: Maternal fever at deliverybaby_apgar_one_minute,baby_apgar_five_minutes,baby_apgar_ten_minutes: APGAR assessment valuesbaby_born_with_clubfoot: Congenital clubfoot screening (Yes/No)difficulty_with_breastfeeding: Feeding difficulties notedchild_convulsions: Convulsion/seizure assessmentmeconium_passed_within24Hours: Timely meconium evacuation screening (Yes/No)child_examination_results: Clinical findschild_other_observation_note: Other observation note
7. Child Physical Examination (1M–5Y) (ENTY-00000A9M)
born_weight: Birth weight in gramschild_ever_had_severe_health_problems: History of major childhood illnessesterm_or_preterm_birth: Gestational maturity status at birthchild_difficult_delivery: History of birth complicationschild_feeding_drinking_difficulty: Feeding or drinking difficulties notedchild_convulsions: Seizure historychild_not_toilet_trained_like_peers: Toilet training milestone achieved (Yes/No)difficulty_with_breastfeeding: Breastfeeding issueschild_unable_to_speak_like_peers: Language and speech developmental milestone assessmentchild_unable_to_play_like_peers: Social interaction and play milestone assessmentchild_examination_results: Clinical findschild_other_observation_note: Other observation note
Standard Value Mappings & Terminology
Standard observation values used in form fields map directly to national observation value codes (OBVA-...) and international terminology systems (SNOMED CT and LOINC):
Family Planning & Contraception
| Field (English / Khmer) | Code | Khmer Value | English Value | Int. Code | System | Concept Name |
|---|---|---|---|---|---|---|
| Birth Control Type វិធីពន្យារកំណើត | OBVA-S000099 | ថ្នាំគ្រាប់ស៊ីអូស៊ី | Combined Oral Contraceptive (COC) | 7800008 | SNOMED CT | Oral contraceptive preparation |
OBVA-00D0097 | ថ្នាំចាក់ | Injectable Contraceptive | 772986005 | SNOMED CT | Injectable contraceptive | |
OBVA-00P0096 | កងដាក់ក្នុងស្បូន | Intrauterine Device (IUD) | 78048006 | SNOMED CT | Intrauterine device | |
OBVA-00W009A | កងដាក់ក្រោមស្បែក | Contraceptive Implant | 372756006 | SNOMED CT | Contraceptive implant | |
OBVA-0000C98 | ស្រោមអនាម័យ | Condom | 53650009 | SNOMED CT | Condom | |
OBVA-000159Z | ដោះកងដាក់ក្នុងស្បូន | Removal of IUD | 110476007 | SNOMED CT | Removal of intrauterine device | |
OBVA-00A015B | ការដាក់កងក្នុងដៃ | Insertion of Contraceptive Implant | 226922002 | SNOMED CT | Insertion of contraceptive implant | |
OBVA-000W15C | តាមដានកងដាក់ក្នុងដៃ | Contraceptive Implant Follow-up | 310574005 | SNOMED CT | Contraceptive implant check | |
OBVA-C00015D | ដោះកងដៃចេញ | Removal of Contraceptive Implant | 310576007 | SNOMED CT | Removal of contraceptive implant | |
OBVA-00015VE | ការផ្តល់ប្រឹក្សា | Counseling | 409063005 | SNOMED CT | Counseling | |
| Customer Type ស្ថានភាពនៃការប្រើប្រាស់វិធីពន្យារកំណើត | OBVA-00001H1 | ធ្លាប់ប្រើ | Past User | 269785002 | SNOMED CT | Past user |
OBVA-0000I10 | លើកដំបូង | First-Time User | 255225001 | SNOMED CT | First | |
OBVA-0000I12 | ចាស់ | Continuing User / Current User | 87136001 | SNOMED CT | Current user | |
| Post-Abortion Method តើអតិថិជនបានទទួលមធ្យោបាយពន្យារកំណើតប្រភេទណា? | OBVA-S000099 | ថ្នាំគ្រាប់ស៊ីអូស៊ី | Combined Oral Contraceptive (COC) | 7800008 | SNOMED CT | Oral contraceptive preparation |
OBVA-00D0097 | ថ្នាំចាក់ | Injectable Contraceptive | 772986005 | SNOMED CT | Injectable contraceptive | |
OBVA-00P0096 | កងដាក់ក្នុងស្បូន | Intrauterine Device (IUD) | 78048006 | SNOMED CT | Intrauterine device | |
OBVA-00W009A | កងដាក់ក្រោមស្បែក | Contraceptive Implant | 372756006 | SNOMED CT | Contraceptive implant | |
OBVA-0000C98 | ស្រោមអនាម័យ | Condom | 53650009 | SNOMED CT | Condom | |
OBVA-0000I9B | បញ្ឈប់កំណើត | Sterilization | 69842007 | SNOMED CT | Sterilization |
Labor & Delivery
| Field (English / Khmer) | Code | Khmer Value | English Value | Int. Code | System | Concept Name |
|---|---|---|---|---|---|---|
| Delivery Baby Born ទារកកើត | OBVA-00007ID | កើតរស់ | Live Birth | 281050002 | SNOMED CT | Live birth |
OBVA-00T007C | កើតស្លាប់ | Stillbirth | 237364002 | SNOMED CT | Stillbirth | |
| Delivery Baby Sex ភេទទារក | OBVA-00G007A | ប្រុស | Male | LA2-8 | LOINC | Male |
OBVA-00007GB | ស្រី | Female | LA3-6 | LOINC | Female | |
| Delivery Type ប្រភេទសម្រាលកូន | OBVA-000B153 | សម្រាលធម្មតា | Normal Vaginal Delivery (NVD) | 177228005 | SNOMED CT | Normal delivery |
OBVA-00R0154 | សម្រាលដោយអន្តរាគមន៍ | Assisted Vaginal Delivery | 1385001 | SNOMED CT | Assisted delivery | |
OBVA-X000155 | សម្រាលដោយវះកាត់ | Cesarean Section (C-Section) | 11466000 | SNOMED CT | Cesarean section |
Safe Abortion Methods
| Field (English / Khmer) | Code | Khmer Value | English Value | Int. Code | System | Concept Name |
|---|---|---|---|---|---|---|
| Safe Abortion Method មធ្យោបាយរំលូត / វិធីសាស្ត្ររំលូតកូន | OBVA-00H0156 | រំលូតដោយថ្នាំ | Medical Abortion | 8963000 | SNOMED CT | Medical abortion |
OBVA-000157X | រំលូតដោយបូមសុញ្ញាកាស | Manual Vacuum Aspiration (MVA) | 236886002 | SNOMED CT | Vacuum aspiration of uterus | |
OBVA-0001Z58 | រំលូតដោយពង្រីកមាត់ស្បូន និងយកចេញ | Dilation and Evacuation (D&E) | 236888001 | SNOMED CT | Dilation and evacuation of uterus | |
OBVA-0000159W | វិធីសាស្ត្រផ្សេងទៀត | Other Methods | 74964007 | SNOMED CT | Other contraceptive method |
Example
{
"forms": [
{
"visit_code": "VIS071315",
"form_code": "ENTY-000016Z",
"form_name": "OPD Contraception",
"encounter_code": "MED062210",
"form_data": {
"birth_control_type": "Combined Oral Contraceptive (COC)",
"birth_control_customer_type": "Past User"
}
},
{
"visit_code": "VIS071315",
"form_code": "ENTY-0000K15",
"form_name": "Delivery",
"encounter_code": "MED062210",
"form_data": {
"maternal_delivery_status": "normal",
"delivery_number_of_newborn": 1,
"delivery_number_of_pregnant": 1,
"delivery_number_of_delivery": 1,
"delivery_number_of_miscarriage": 0,
"delivery_number_of_abortion": 0,
"delivery_pregnancy_in_weeks": 23,
"delivery_at": "2025-12-19T18:30:00.000+07:00",
"delivery_type": "Normal Vaginal Delivery (NVD)",
"delivery_oxytocin_injection": "Yes",
"delivery_oxytocin_injection_date": "2025-12-19T18:02:00.000+07:00",
"delivery_baby_born": "Yes",
"delivery_baby_breathing_in_first_minute": "120",
"delivery_baby_sex": "Male",
"delivery_breastfeed_in_first_hour": "Yes",
"delivery_baby_weight": "2850"
}
},
{
"visit_code": "VIS071315",
"form_code": "ENTY-0000K1B",
"form_name": "Abortion",
"encounter_code": "MED062210",
"form_data": {
"safe_abortion_children_alive": 1,
"number_of_miscarriage": 2,
"number_of_abortion": 1,
"pregnancy_test": "Done",
"problems_upon_arrival": "None",
"type_of_contraceptive_method_received": "Contraceptive Implan",
"safe_abortion_is_customer_get_method_before_leave": "Yes",
"safe_abortion_uterine_size": 22,
"safe_abortion_method": "Medical Abortion"
}
},
{
"visit_code": "VIS071315",
"form_code": "ENTY-000H014",
"form_name": "OPD ANC",
"encounter_code": "MED062210",
"form_data": {
"pregnancy_number_of_pregnancies": 14,
"pregnancy_age": 12,
"uterine_height_cm": 34,
"fetal_heart_rate": 120,
"pregnancy_last_menstrual_period_date": "2025-10-02"
}
},
{
"visit_code": "VIS071315",
"form_code": "ENTY-000001B2",
"form_name": "OPD PNC",
"encounter_code": "MED062210",
"form_data": {
"pnc_days_after_delivery": 14,
"pnc_maternal_danger_signs_and_treatment": "None",
"pnc_baby_danger_signs_and_treatment": "None"
}
},
{
"visit_code": "VIS071315",
"form_code": "ENTY-00000A8C",
"form_name": "Child Phy-Exam(0-28 Days)",
"encounter_code": "MED062210",
"form_data": {
"pnc_days_after_delivery": 14,
"child_growth_born_weight": 4300,
"baby_maternal_fever_at_birth": "",
"baby_long_labor": "",
"term_or_preterm_birth": "",
"baby_apgar_one_minute": "113",
"baby_apgar_ten_minutes": "121",
"baby_apgar_five_minutes": "111",
"baby_born_with_clubfoot": "No",
"difficulty_with_breastfeeding": "",
"child_convulsions": "",
"meconium_passed_within24Hours": "No",
"child_examination_results": "",
"child_other_observation_note": ""
}
},
{
"visit_code": "VIS071315",
"form_code": "ENTY-00000A9M",
"form_name": "Child Phy-Exam(1M-5Y)",
"encounter_code": "MED062210",
"form_data": {
"born_weight": 4300,
"child_ever_had_severe_health_problems": "",
"term_or_preterm_birth": "",
"child_difficult_delivery": "",
"child_feeding_drinking_difficulty": "No",
"child_convulsions": "No",
"child_not_toilet_trained_like_peers": "Yes",
"difficulty_with_breastfeeding": "No",
"child_unable_to_speak_like_peers": "",
"child_unable_to_play_like_peers": "",
"child_examination_results": "",
"child_other_observation_note": ""
}
}
]
}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.