Skip to content
Partner Developer Portal

Changes in iPCV V2

1.Enhancements / Changes to Existing Columns

Section titled “1.Enhancements / Changes to Existing Columns”

a. Maintain Organisation of Merged Patients

Section titled “a. Maintain Organisation of Merged Patients”

For merged patients, patient_organisation_guid is resolved through the patient-organisation relationship and preserves the original organisation GUID. This keeps identifiers stable for downstream consumers and supports consistent tracking of records linked to that patient across merges.

Why?

Patient merges can otherwise change organisational context and create inconsistent identifiers across records. Preserving the original patient_organisation_guid maintains continuity and supports reliable joins.

Customer benefit

Stable patient organisation identifiers before and after merge events More reliable cross-model joins and lineage for merged patient records Reduced risk of duplicate or fragmented reporting caused by ID drift

Customer action

Continue joining on patient_organisation_guid for organisation-level reporting involving merged patients

Code changes are now better represented and processed in the observation, allergy, and immunisation models. This includes both source record updates and classification updates (for example, Allergy or Immunisation) after an MKB update.

Why?

Clinical coding and code classifications can change over time at source or after code-list updates. This ensures those changes are consistently reflected across the affected models.

Customer benefit

  • More accurate and up-to-date code and classification values
  • Consistent behaviour across observation, allergy, and immunisation outputs
  • Reduced risk of mismatched coding between related care record models

Customer action

  • No action needed

The problem-observation data has been improved to include the first problem across all episodes (Associated and Episode Follow On). This ensures that clinically significant problem relationships are captured even when problems are recorded on follow-on episodes.

The prioritisation logic has also been updated to sequence records by effective_datetime, then availability_datetime, and finally observation_id. This ensures deterministic ordering when effective_datetime is missing or when multiple records share the same effective_datetime and availability_datetime.

Why?

The problem-observation data is now better represented and ensures the relevant problems are surfaced.

Customer benefit

  • More complete problem data when analysing observation-problem relationships
  • Reduced risk of missing clinically significant problem links

Customer action

  • No action needed

Uncoded observations are now included, as some parent/child observations are uncoded. These are included in observation, problem and referral models. Any observation without a code id will have original_term, associated_text and qualifiers columns set to NULL as they may contain sensitive data.

Why?

Ensures completeness of the dataset, including cases where clinicians record data without a formal code.

Customer benefit

  • More complete records, including previously missing uncoded entries which were excluded and failed to link some parent/child observations when parent or child records were uncoded.

  • The is_template_header/is_parent column against a parent observation and the parent observation details against a child observation is now better represented in observation, allergy and immunisation models. The is_template_header/is_parent columns will always be set to True/False values and will never be NULL.

  • The consultation link is taken from the parent observation if it doesn’t exist against the child. Including uncoded ones, the consultation details are now better represented in observation, allergy and immunisation models.

  • The confidentiality flag is derived from parent observations if it doesn’t exist against the child. Adopting confidentiality flag of the uncoded parent/child observations, confidentiality is now better represented for records that doesn’t have a linear relationship.

Customer action

  • Update any processes that assume all records will have a clinical code to handle records where code fields may be null.

  • If only coded observations are required, it can be filtered out using the code_id column.

b. Addition of text values for maximum and minimum range values

Section titled “b. Addition of text values for maximum and minimum range values”

range_maximum_text and range_minimum_text have been added to capture non-numeric range values in the observation, allergy, and immunisation models.

Why?

Some clinical ranges are recorded as text rather than numeric values. These columns preserve those values so range information is retained in full.

Customer benefit

  • More complete range representation, including textual limits
  • Better clinical interpretation where numeric-only fields are not sufficient
  • Reduced information loss in reporting and downstream analytics

Customer action

  • Update range-related queries and extracts to use range_minimum_text and range_maximum_text

c. Addition of numeric measurements and range details

Section titled “c. Addition of numeric measurements and range details”

Numeric operators, values, units, and range boundary fields have been added to the allergy and immunisation models. These columns are provided in the Addition of new columns section.

Why?

Allergy and immunisation records can include quantitative clinical measurements. Adding structured numeric and range fields standardises how those measurements are captured and interpreted.

Customer benefit

  • More consistent representation of numeric measurements across models
  • Improved clinical interpretation through explicit operators, units, and range boundaries
  • Better comparability and quality of analytics using quantitative values

Customer action

  • Update relevant queries and extracts to include numeric measurements and range boundary fields where needed

New columns have been added to enhance auditability, relationships, and clinical measurements. The models now include the below columns:

User Tracking Columns:

Column NameObservationAllergyImmunisationProblemReferralDiaryFamily History
entered_by_user_in_role_id✓✓✓✓✓✓x
entered_by_user_in_role_uuid✓✓✓✓✓✓x
authorising_user_in_role_id✓✓✓✓✓✓x
authorising_user_in_role_uuid✓✓✓✓✓✓x
last_review_user_in_role_idxxx✓xxx
last_review_user_in_role_uuidxxx✓xxx

Relationship Columns:

Column NameObservationAllergyImmunisationProblemReferralDiaryFamily History
observation_id✓✓✓✓xx✓
observation_guid✓✓✓✓xx✓
observation_uuid✓✓✓✓xx✓
patient_id✓✓✓✓✓✓✓
patient_guid✓✓✓✓✓✓✓
patient_uuid✓✓✓✓✓✓✓
consultation_id✓✓✓✓✓✓x
consultation_guid✓✓✓✓✓✓x
consultation_uuid✓✓✓✓✓✓x
consultation_section_id✓✓✓✓✓✓x
consultation_section_uuid✓✓✓✓✓✓x
problem_observation_id✓✓✓x✓xx
problem_observation_guid✓✓✓x✓xx
problem_observation_uuid✓✓✓x✓xx
observation_organisation_id✓✓✓✓✓x✓
observation_organisation_guid✓✓✓✓✓x✓
observation_organisation_uuid✓✓✓✓✓x✓
patient_organisation_id✓✓✓✓✓✓✓
patient_organisation_guid✓✓✓✓✓✓✓
patient_organisation_uuid✓✓✓✓✓✓✓
is_parent✓✓✓xxxx
parent_observation_id✓✓✓xxxx
parent_observation_guid✓✓✓xxxx
parent_observation_uuid✓✓✓xxxx
parent_problem_idxxx✓xxx
parent_problem_guidxxx✓xxx
parent_problem_uuidxxx✓xxx
referral_observation_idxxxx✓xx
referral_observation_guidxxxx✓xx
referral_observation_uuidxxxx✓xx
target_organisation_idxxxx✓xx
target_organisation_guidxxxx✓xx
target_organisation_uuidxxxx✓xx
diary_idxxxxx✓x
diary_guidxxxxx✓x
diary_uuidxxxxx✓x
diary_organisation_idxxxxx✓x
diary_organisation_guidxxxxx✓x
diary_organisation_uuidxxxxx✓x

Code Related Columns:

Column NameObservationAllergyImmunisationProblemReferralDiaryFamily History
emis_code_category_id✓xxxxx✓
observation_code_category_id✓xxxxx✓
observation_type_id✓xxxxx✓
consultation_source_original_term✓✓✓✓✓xx
code_categoryx✓xxxxx
qualifiers✓✓✓xxxx
associated_text✓✓✓xx✓x

Numeric and Range Measurement Columns:

Column NameObservationAllergyImmunisation
numeric_operator✓✓✓
numeric_value✓✓✓
numeric_unit✓✓✓
ucum_code✓✓✓
unit_of_measure✓✓✓
is_abnormal✓✓✓
range_minimum_operator✓✓✓
range_minimum✓✓✓
range_minimum_text✓✓✓
range_maximum_operator✓✓✓
range_maximum✓✓✓
range_maximum_text✓✓✓
range_units✓✓✓
range_qualifier_id✓✓✓
range_qualifier_description✓✓✓

Mapping Columns:

Column NameObservationAllergyImmunisationProblemReferralDiary
episodicity✓✓✓xxx
episodicity_description✓✓✓xxx
problem_significance_idxxx✓xx
problem_status_idxxx✓xx
parent_problem_relationship_idxxx✓xx
location_type_idxxxxx✓
referral_mode_idxxxx✓x
service_type_idxxxx✓x
urgencyxxxx✓x
urgency_descriptionxxxx✓x

Family History Columns:

Column Name
member_key
family_member_is_deleted

Why?

These columns have been added to enhance the data model:

  • User tracking columns: Enable auditing and lineage tracking by providing standardized foreign keys to the user_in_role_v2 table, replacing the previously nullable GUID columns

  • Relationship columns: Support hierarchical structures, link to other models like consultations and problems, and provide clear organisational context

  • Code Related columns: Support with more details on the code category and description

  • Numeric and Range measurement columns: Standardize how numeric values are represented with operators (e.g., <, >, =) and units of measure and provide comprehensive support for reference ranges and contextual information about measurements

  • Mapping columns: Standardize lookup identifiers for coded state and relationship attributes (for example, problem significance/status, parent-problem relationship, referral mode, and location type), so the ids can be used instead of relying on text descriptions

  • Family History Columns: These additions make the family-history model easier to use directly by giving customers a more stable row structure for linking family history information.

Customer benefit

  • Improved data consistency through standardized foreign key relationships with user_in_role_v2
  • Enhanced ability to track hierarchies and relationships (parent observations, linked problems)
  • Better support for temporal analysis and consultation-based reporting
  • Standardized representation of numeric values with operators and units
  • Comprehensive reference range information for clinical decision support
  • More flexible filtering and reporting on context and relationships
  • Multiple family members recorded against the same observation can be distinguished more reliably using member_key
  • Family-member level deletions can be identified separately from the parent observation using family_member_is_deleted

Customer action

Leverage the new columns to enhance reporting and analytics:

  • Join entered_by_user_in_role_id with user_in_role_v2 to retrieve the relevant emis_enteredby_userinrole_guid for audit trails
  • Join authorising_user_in_role_id with user_in_role_v2 to retrieve the relevant emis_authorising_userinrole_guid for authorization tracking
  • Use the relationship id columns like:
    • parent_observation_id to build hierarchical observation structures and understand observation relationships
    • consultation_id to link observations to specific consultations for temporal and encounter-based analysis
    • problem_observation_id and problem_observation_uuid to identify observations linked to specific problems
  • If required, mapping identifiers (problem_significance_id, problem_status_id, parent_problem_relationship_id, referral_mode_id, location_type_id) can be used for reference/lookup datasets.
  • Incorporate numeric_operator and unit_of_measure when analysing numeric observations to ensure correct interpretation
  • Utilize range columns (range_minimum_operator, range_maximum_operator, etc.) for clinical decision support and flagging abnormal values
  • Use member_key to distinguish separate family-member entries under the same observation
  • Use family_member_is_deleted where member-level deletion handling is needed

Across observation-derived models, shared structural and operational additions also include columns such as observation_type_id, load_datetime, and transform_datetime where applicable.

Several columns as detailed below have been renamed in the care record models.

Renamed ColumnColumn Name in v2Comment
deletedis_deletedRenamed to make it consistent with all models
execution_date_execution_date_Renamed to make it consistent with all models
idobservation_guidRenamed to make it consistent with all models
organisation_guidpatient_organisation_guidRenamed to differentiate the organisation set against the patient and the care record.

Why?

Column names were renamed to improve consistency and clarity across care record models and flavour outputs.

Customer benefit

  • More consistent naming patterns across models, reducing ambiguity in joins and transformations
  • Lower risk of mapping errors during migration from v1 naming conventions

Customer action

  • Review any processes or integrations that relied on the renamed columns
  • Ensure that any necessary mappings or transformations are adjusted accordingly

Several columns as detailed below have been decommissioned in the care record models.

Decommissioned ColumnRelevant ID / ColumnReason / Extended Data Model to be Referred
other_codecode_idcodeable_concept_v2
other_code_systemcode_idcodeable_concept_v2
other_displaycode_idcodeable_concept_v2
readv2_codecode_idcodeable_concept_v2
snomed_concept_idcode_idcodeable_concept_v2
snomed_description_idcode_idcodeable_concept_v2
familymember_other_codefamilymember_emis_code_idcodeable_concept_v2
familymember_other_code_systemfamilymember_emis_code_idcodeable_concept_v2
familymember_other_displayfamilymember_emis_code_idcodeable_concept_v2
familymember_readv2_codefamilymember_emis_code_idcodeable_concept_v2
familymember_snomed_concept_idfamilymember_emis_code_idcodeable_concept_v2
familymember_snomed_description_idfamilymember_emis_code_idcodeable_concept_v2
observation_other_codeobservation_emis_code_idcodeable_concept_v2
observation_other_code_systemobservation_emis_code_idcodeable_concept_v2
observation_other_displayobservation_emis_code_idcodeable_concept_v2
observation_readv2_codeobservation_emis_code_idcodeable_concept_v2
observation_snomed_concept_idobservation_emis_code_idcodeable_concept_v2
observation_snomed_description_idobservation_emis_code_idcodeable_concept_v2
confidential_patient_flagpatient_idpatient_v2
dummy_patient_flagpatient_idpatient_v2
non_regular_and_current_active_flagpatient_idpatient_v2
opt_out_93c1_flagpatient_idpatient_v2
opt_out_9nd19nu09nu4_flagpatient_idpatient_v2
opt_out_9nd19nu0_flagpatient_idpatient_v2
opt_out_9nu0_flagpatient_idpatient_v2
regular_and_current_active_flagpatient_idpatient_v2
regular_current_active_and_inactive_flagpatient_idpatient_v2
regular_patient_flagpatient_idpatient_v2
sensitive_patient_flagpatient_idpatient_v2
value_pq_2No longer available in v2
user_selectedNo longer available in v2
action_dateNo longer available in v2
referral_source_organisation_guidNo longer available in v2
data_filterNo longer available in v2
_record_versionNo longer available in v2
_update_dateNo longer available in v2 as changes are tracked differently
_update_hourNo longer available in v2 as changes are tracked differently

Why?

These columns have been removed to streamline the data model and maintain a single source of truth for reference data:

  • MKB reference columns: No longer included to reduce complexity and avoid duplication, as this data is now available through dedicated reference tables
  • Patient filter columns: Removed as these flags are maintained in the patient table, providing a single source of truth
  • Numeric measurement columns: Removed as these columns doesn’t provide any data currently and is not available in source
  • GUID columns: Removed as this data is now provided with a different column name

Customer benefit

  • Single source of truth for patient flags through the patient dimension table
  • Reduced risk of data inconsistencies and synchronization issues
  • Improved data lineage tracking with centralized reference tables

Customer action

  • Review and update any processes or integrations that relied on the removed columns
  • Use dedicated MKB reference tables for code mappings instead of inline columns
  • Query the patient dimension table for patient flags and status information
  • Ensure that any necessary mappings or transformations are adjusted accordingly

Several columns in the observation table now consistently return NULL values and have been retained for backward compatibility.

These include:

Deprecated ColumnReplacement ID / ColumnReason / Extended Data Model to be Referred
emis_enteredby_userinrole_guidentered_by_user_in_role_iduser_in_role_v2
emis_authorising_userinrole_guidauthorising_user_in_role_iduser_in_role_v2
clinician_user_in_role_guidauthorising_user_in_role_iduser_in_role_v2
practitioner_idauthorising_user_in_role_iduser_in_role_v2
emis_last_review_userinrole_guidlast_review_user_in_role_iduser_in_role_v2
last_review_user_in_role_guidlast_review_user_in_role_iduser_in_role_v2
received_datereferral_made_datetimereferral_v2 (referral_made_datetime column is populated only in inbound referrals)
comparatornumeric_operatorReplacement column exists in the model itself
deletedis_deletedReplacement column exists in the model itself
registration_ods_codeods_codeorganisation_v2
document_guidAlways NULL as it is deprecated in v2
processing_idAlways NULL as it is deprecated in v2
fhir_episodicityAlways NULL as it is deprecated in v2
fhir_interpretation_codeAlways NULL as it is deprecated in v2
fhir_categoryAlways NULL as it is deprecated in v2
fhir_statusAlways NULL as it is deprecated in v2
statusAlways NULL as it is deprecated in v2

These decommissioned NULL value columns will be removed in a future iPCV release; plan migrations accordingly.

Why?

These columns are retained to maintain backward compatibility while returning NULL values to ensure consistent behavior in downstream processes.

Customer benefit

  • User in role information is now standardized through entered_by_user_in_role_id and authorising_user_in_role_id foreign keys joined with user_in_role_v2
  • Enhanced clinical measurement representation through improved numeric operators and qualifier mapping
  • Reduced risk of unexpected behavior in downstream processes
  • Clear distinction between deprecated columns and new standardized relationships

Customer action

  • Identify any queries or reports that use the deprecated columns
  • Update processes to use entered_by_user_in_role_id and authorising_user_in_role_id, joining with user_in_role_v2 to retrieve user in role details
  • Replace usage of deprecated comparator with the new numeric_operator column for enhanced clinical decision support
  • Replace usage of deprecated received_date with the new referral_made_datetime column for inbound referral made datetime
  • Use episodicity instead of fhir_episodicity for standardized episodicity representation
  • Use code_category instead of fhir_category for code category representation representation

Family History Model - NULL value for columns available in observation model

Section titled “Family History Model - NULL value for columns available in observation model”

Several columns previously available both in family-history model and observation model in v1 return NULL values in the family history model in v2. These remain available for backward compatibility but will be removed in a future release.

Why?

These columns have been removed to streamline the family-history model and maintain a clearer separation of responsibilities:

Deprecated ColumnReplacement ID / ColumnReason / Extended Data Model to be Referred
emis_enteredby_userinrole_guidentered_by_user_in_role_idAvailable in observation_v2 model. Use it to fetch the guid from user_in_role_v2 model.
emis_authorising_userinrole_guidauthorising_user_in_role_idAvailable in observation_v2 model. Use it to fetch the guid from user_in_role_v2 model.user_in_role_v2
emis_encounter_guidemis_encounter_guidAvailable in observation_v2 model.
exa_encounter_guidexa_encounter_guidAvailable in observation_v2 model.
end_dateend_dateAvailable in observation_v2 model.
emis_episodicityemis_episodicityAvailable in observation_v2 model.
emis_episodicity_descriptionemis_episodicity_descriptionAvailable in observation_v2 model.
fhir_episodicityAlways NULL as it is deprecated in v2
abnormalabnormalAvailable in observation_v2 model.
qualifiersqualifiersAvailable in observation_v2 model.
hestia_event_typeobservation_type_descriptionAvailable in observation_fh_v2 model itself

These decommissioned NULL value columns will be removed in a future iPCV release; plan migrations accordingly.

Why?

These columns are retained to avoid breaking downstream consumers immediately, while signalling that they are deprecated and should no longer be relied on for new development.

Customer benefit

  • Backward compatibility is preserved while consumers transition away from deprecated fields
  • User-in-role relationships are clearer when using ID-based joins
  • Deprecated columns are easier to identify and phase out safely

Customer action

  • Update downstream logic to avoid depending on columns that now return NULL
  • Use entered_by_user_in_role_id and authorising_user_in_role_id with user_in_role_v2 where user attribution is required
  • Treat the remaining NULL-only columns as deprecated and plan to remove them from customer-owned logic over time