diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt index 41d5c96450..7dc1d0bb83 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt @@ -61,7 +61,7 @@ class QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl( it.value.asStringValue() in listOf( LocationPickerViewHolderFactory.WIDGET_TYPE, - LocationPickerViewHolderFactory.WIDGET_TYPE_ALL + LocationPickerViewHolderFactory.WIDGET_TYPE_ALL, ) } }, diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/CustomQuestItemDataProvider.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/CustomQuestItemDataProvider.kt index e7adef6a88..c095b92416 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/CustomQuestItemDataProvider.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/CustomQuestItemDataProvider.kt @@ -33,7 +33,7 @@ class CustomQuestItemDataProvider constructor( val sharedPreferencesHelper: SharedPreferencesHelper, val fhirEngine: FhirEngine, - val gson: Gson + val gson: Gson, ) { fun fetchCurrentFacilityLocationHierarchies(): List { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/LocationPickerViewHolderFactory.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/LocationPickerViewHolderFactory.kt index c5e8a86ad0..88b5edd9d3 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/LocationPickerViewHolderFactory.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/questionnaire/items/LocationPickerViewHolderFactory.kt @@ -52,7 +52,7 @@ class LocationPickerViewHolderFactory( questionnaireViewItem.questionnaireItem .getExtensionByUrl(WIDGET_EXTENSION) .value - .asStringValue() + .asStringValue(), ) locationPickerView.setOnLocationChanged { value -> context.lifecycleScope.launch { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/SystemConstants.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/SystemConstants.kt index a3847fd37a..b3b6ee9afa 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/SystemConstants.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/SystemConstants.kt @@ -33,6 +33,21 @@ object SystemConstants { const val QUESTIONNAIRE_REFERENCE_SYSTEM = "https://d-tree.org/fhir/procedure-code" const val LOCATION_TAG = "http://smartregister.org/fhir/location-tag" const val LOCATION_HIERARCHY_BINARY = "location-hierarchy" + + fun getIdentifierSystemFromPatientType(patientType: String): String { + return when (patientType) { + "client-already-on-art", + "newly-diagnosed-client", -> { + "https://d-tree.org/fhir/patient-identifier-art" + } + "exposed-infant" -> { + "https://d-tree.org/fhir/patient-identifier-hcc" + } + else -> { + "https://d-tree.org/fhir/patient-identifier-hts" + } + } + } } object ReasonConstants { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/PatientExtension.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/PatientExtension.kt index a6125dd093..e019f91698 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/PatientExtension.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/extension/PatientExtension.kt @@ -39,6 +39,7 @@ import org.smartregister.fhircore.engine.R import org.smartregister.fhircore.engine.data.domain.PregnancyStatus import org.smartregister.fhircore.engine.data.local.DefaultRepository import org.smartregister.fhircore.engine.domain.model.HealthStatus +import org.smartregister.fhircore.engine.util.SystemConstants import timber.log.Timber private const val RISK = "risk" @@ -304,14 +305,27 @@ fun Patient.extractSecondaryIdentifier(): String? { return null } -fun Patient.extractOfficialIdentifier(): String? = - if (this.hasIdentifier()) { - this.identifier - .lastOrNull { it.use == Identifier.IdentifierUse.OFFICIAL && it.system != "WHO-HCID" } - ?.value +fun Patient.extractOfficialIdentifier(): String? { + val patientType = + this.meta.tag + .firstOrNull { it.system == SystemConstants.PATIENT_TYPE_FILTER_TAG_VIA_META_CODINGS_SYSTEM } + ?.code + return if (this.hasIdentifier() && patientType != null) { + val actualId = + this.identifier.lastOrNull { + it.system == SystemConstants.getIdentifierSystemFromPatientType(patientType) + } + if (actualId != null) { + actualId.value + } else { + this.identifier + .lastOrNull { it.use == Identifier.IdentifierUse.OFFICIAL && it.system != "WHO-HCID" } + ?.value + } } else { null } +} fun Coding.toHealthStatus(): HealthStatus { return try {