Skip to content

Changelog ​

Version 1.4 (Current Development) ​

In Development

Version Status

This version is currently in development and features may change before release.

What's New in v1.4 ​

  • Dedicated Clinical Forms Component (forms):
    • Introduced standard forms structure within the visit payload to capture specialized public health and clinical program data.
    • Supports Antenatal Care (OPD ANC), Postnatal Care (OPD PNC), Labor & Delivery, Contraception & Family Planning, Safe Abortion Care, and Neonatal / Pediatric Physical Examinations (0–28 Days & 1M–5Y).
  • Standard Reference Data & Categorical Lookups:
    • Expanded standard lookup tables across Patient demographics (Sex, Marital Status, NCDD Address), Visits (Admission Types, Visit Types, Discharge Types, Outcomes), Invoices (Payment Types including HEF and NSSF schemes), and Diagnoses (Differential, In, Out, Primary, Secondary).
  • Standardized Form Value Sets:
    • Established standardized observation codes (OBVA-...) aligned with international terminology systems (SNOMED CT and LOINC) for birth control methods, birth outcomes, delivery types, and examination findings.
  • Standardized Clinical Concepts:
    • Required Vital Signs: Standardized definitions, unit requirements, and translations for core physiological measurements.
    • Recommended Physical Examinations: Defined core anatomical and systemic examination categories (General Appearance, ENT, Cardiovascular, Respiratory, Gastro-Intestinal, CNS, Skin, GCS, Urogenital, Mental Status).
    • Recommended Medical Histories: Standardized 9 clinical history categories with clear guidelines for null/empty values.

Version 1.3 ​

Production

High Impact Changes ​

Breaking Change

The dispense object inside the prescription medication model is now required. Automatic calculation fallback is removed.

  • dispense Object is Required: Each medication item under prescriptions.medications must include an explicit dispense object with quantity and unit.
  • No Default Calculation Provided: Previously, the system calculated quantity using the fallback formula (morning + afternoon + evening + night) × days. Starting in v1.3, no calculation is provided by default. Prescriptions submitted without a dispense object will fail validation.
Prescriptions Dispense Example Structure
json
{
  "prescriptions": [
    {
      "patient_code": "P420650",
      "visit_code": "V420650",
      "encounter_code": "E317000",
      "code": "RX-2026-001",
      "prescribed_at": "2026-03-25T09:45:00.000+07:00",
      "prescribed_by": "Dr. Sok Chanmaly",
      "title": "Doctor",
      "medications": [
        {
          "medicine_code": "MED-00123",
          "medicine_name": "Amoxicillin 500mg",
          "strength": "500mg",
          "method": "Oral",
          "unit": "Capsule",
          "morning": 1,
          "afternoon": 0,
          "evening": 1,
          "night": 0,
          "days": 7,
          "dispense": {
            "unit": "Capsule",
            "quantity": 14
          }
        }
      ]
    }
  ]
}

Version 1.2 ​

Production 2026-03-24

Data Quality Enhancements ​

High Impact Changes

The following changes are marked as high impact and may require significant updates to your EMR integration.

New Features ​

Surgeries - Required fields (high impact):

  • theater_name
  • service_type
  • started_at
  • ended_at
  • reason
  • procedure_notes
  • surgeon_name

Surgeries - New attributes:

  • pre_operative_diagnosis - The clinical diagnosis made BEFORE surgery, based on symptoms, physical examination, and investigations.
  • post_operative_diagnosis - The final diagnosis confirmed AFTER the surgery, based on what the surgeon actually found during the operation.
  • surgeries.details.position - how the patient lies during surgery
surgeries Example Structure
json
 "surgeries": [
        {
          "visit_code": "00V00332",
          "encounter_code": "00E00333",
          "code": "00C00322",
          "symptoms": ["Swelling of the abdomen", "Red skin"], //optional
          "theater_name": "Operating Theater 2",
          "service_type": "Laparoscopic Cholecystectomy",
          "started_at": "2026-01-17T10:45:00.000+07:00",
          "ended_at": "2026-01-17T13:15:00.000+07:00",
          "reason": "Symptomatic gallstones with recurrent biliary colic",
          "anesthesia_type": "General Endotracheal",
          "procedure_notes": "Patient positioned supine. Pneumoperitoneum established with Veress needle. Four ports were placed. Gallbladder dissected from liver bed with hook cautery. Cystic duct and artery identified, clipped and divided. Gallbladder removed through umbilical port. Hemostasis confirmed. No bile leak. Ports removed under direct visualization. Wounds closed with 3-0 Vicryl and 4-0 Monocryl. Patient tolerated procedure well.",
          "complications": [
            "Mild bleeding from liver bed, controlled with electrocautery"
          ],
          "specimens": [
            "Gallbladder with multiple stones",
            "Cystic fluid sample"
          ],
          "pre_operative_diagnosis": "Ancienne Sign nail du fémur gauche avec plaie infecté (3ans)",
          "post_operative_diagnosis": "Ancienne Sign nail du fémur gauche avec plaie infecté (3ans)",
          "details": {
            "position": "Décubitus dorsale"
          },

          "blood_loss": "5cl",
          "surgeon_name": "Dr. Sok Chanmaly",
          "anesthetist_name": "Dr. Chea Sokunthea",
          "assistant_names": ["Dr. Chhan Sokun", "Nurse Van Chea"],
          "created_at": "2026-01-17T10:45:00.000+07:00",
          "updated_at": "2026-01-17T13:15:00.000+07:00"
        }
      ]

Version 1.1 ​

New Features ​

Data Integrity Improvements ​

Introduced Submission Block Rules to enhance data integrity:

RuleDescription
Duplication SubmissionPrevents patient admission at the same time with different codes
Abnormal SubmissionBlocks attempts to update previous submission data

Data Quality Enhancements ​

High Impact Changes

The following changes are marked as high impact and may require significant updates to your EMR integration.

Triage - Required fields (high impact):

  • Height
  • Weight

Vital Signs - Required fields (high impact):

  • Systolic Blood Pressure
  • Diastolic Blood Pressure
  • Heart Rate
  • Respiratory Rate
  • Temperature
  • Blood Oxygen

SOAP Notes - New attributes:

  • code - Unique identifier
  • recorded_at - Timestamp
  • recorded_by - Healthcare provider name
  • title - Provider title/role
SOAP Example Structure
json
"SOAPS": [
  {
    "encounter_code": "EN123",
    "code": "EN123-SP1",
    "subjective": "Descriptive Subject",
    "objective": "Descriptive Object",
    "assessment": "Descriptive assessment",
    "plan": "Treatment plan details",
    "evaluation": "Evaluation could be diagnosis or more",
    "recorded_at": "2026-01-01T00:00:00+07:00",
    "recorded_by": "John Doe",
    "title": "Doctor"
  }
]

Prescriptions - Required fields (high impact):

  • medication.days
  • medication.code - Refer to drug code, must be unique (no duplicate drug codes)

Invoice - Required fields:

  • payment_type - use NPCA standard for payment type, can be code or name

Clinical Encounters (Progress Notes, Outpatient, Inpatient, Emergency, Surgery):

  • Added optional symptoms array property
  • Added optional is_new boolean field to distinguish new cases from follow-ups

Changed Features ​

Migration Guide

These changes may require updates to your existing integration. See migration notes below.

Triage

  • Must have only one item per visit
  • If patient is triaged multiple times during wait, use the latest one before admission or consultation

Vital Signs

  • Must link to another encounter:
    • At least one link to a Triage encounter (triage.code = vital_sign.encounter_code)
    • Remaining vital signs must link to Progress Notes encounters (progress_notes.code = vital_signs.encounter_code)

Migration Note

If your EMR records daily vital signs but submits them as Triage data, convert those to Progress Notes (except the first one). Progress Notes don't require chief_complaint, height, or weight fields, making this conversion easier.

Progress Notes

  • For IPD visits:
    • Must have at least one Progress Note
    • Should have at least one SOAPS reference linked to the Progress Note

SOAPS Notes

  • OPD visits: Should have 1 SOAPS per encounter (soap.encounter_code links to outpatient.code)
  • IPD visits: Should have multiple SOAPS based on length of stay (soap.encounter_code links to inpatient.code or progress_note.code)

Referrals

  • Introduced health_facility object structure:
Referrals Structure Example
json
"referrals": {
  "referred_from": null,
  "referred_to": {
    "code": "",
    "referral_number": "",
    "transportation": "",
    "health_facility": {
      "name": "",        // required
      "code": "",        // required
      "label": "string", // optional
      "type": "string"   // optional
    },
    "reason": "",
    "has_called": true,
    "caretaker_name": "",
    "caretaker_phone": "",
    "referred_by": "",
    "referred_by_phone": null,
    "referred_at": null,
    "received_by": null,
    "received_at": null,
    "medications": ""
  }
}

Bug Fixes ​

Fixed Issues

  • Fixed issue where vital sign notes could not be created under core encounters
  • Resolved duplicate SOAP notes creation under IPD visits
  • Corrected edge cases in encounter transitions that bypassed validation rules

Deprecated ​

Deprecated Features

The following features are deprecated and will be removed in future versions:

  • Allowing multiple triage notes
  • Allowing multiple SOAP notes without strict visit-type validation

Important Clarifications ​

Prescriptions

Prescriptions serve as containers for all medications with the following characteristics:

  • Medication dispenses during hospitalization: Require encounter_code linking to progress_notes, out.patient, inpatient, surgery, or emergency
  • Medication dispensed for home use: Require encounter_code to be null
  • Validation: Medications submitted without encounter_code are treated as home medications and may be rejected
Diagnosis

The standard supports detailed diagnosis tracking per encounter:

  • Requirements:
    • At least 1 diagnosis_in required
    • At least 1 diagnosis_out required (type "primary" treated as diagnosis_out)
  • Behavior:
    • Diagnosis with encounter_code saved as submitted
    • Single diagnosis submissions saved as both diagnosis_in and diagnosis_out