From f96f504920109bf4a9ae8d3989ad4d2eb1f6582e Mon Sep 17 00:00:00 2001 From: Peter Muriuki Date: Wed, 28 Feb 2024 21:12:55 +0300 Subject: [PATCH] Refactor characteristic code system to smartregister (#1334) * Update group-management dependencies * Extract general re-usable productForm * Define a way to dynamically provide vlaidationRules * Make it possible to configure hiddenfilds and validationRUles * Make the whole Group details section configurable * Move current commodity list implementation to DEfault * Add Eusm centric commodity list * Configurable view details section for group list view * Conditionally render list view wrt to project code * Update utils * Install jest-canvas-mock, mocks canvas for antd upload * Create a mock for window.URL.createObjectURL * Create Eusm edit * Fix lint issues * Update snapshot tests * Show error banner if list id is not configured * Replace fallback image with skeleton image * Link material number to the identifier dataindex * Add material number to view details section * Fix test regressions * Wrap commodity edit in rbaccheck * Refactor lexicalities on variable unitOfMeasure * Cleaning up the code * Wrap commodity edit in rbaccheck * Update mock envs to fix test regression * Update snapshot in commodity list view * Fix missing material number * Wait for binary Query to render form view * Fix binary payload generation and append to list * Disable caching on binary query * Update docstring for helper fun toArrayBuffer * Fix bug where attractive item did not have correct value * Refctor characteristic code system to smartregister --- .../CommodityAddEdit/Eusm/index.tsx | 2 +- .../CommodityAddEdit/Eusm/tests/fixtures.ts | 66 +++++++++++-------- .../components/CommodityAddEdit/Eusm/utils.ts | 7 +- .../CommodityList/Eusm/tests/fixtures.ts | 18 ++--- .../src/helpers/utils.ts | 23 +++---- 5 files changed, 64 insertions(+), 52 deletions(-) diff --git a/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/index.tsx b/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/index.tsx index 4b7391d49..d937c7a90 100644 --- a/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/index.tsx +++ b/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/index.tsx @@ -38,7 +38,7 @@ export const CommodityAddEdit = (props: GroupAddEditProps) => { const { groupQuery, binaryQuery } = useGetGroupAndBinary(fhirBaseUrl, resourceId); // TODO - Had to include binaryQuery loading status since the antd form upload widget - // does not update when the component updates initial values. + // does not update when we pass new set of initial values to commodityForm. if ( (!groupQuery.isIdle && groupQuery.isLoading) || (!binaryQuery.isIdle && binaryQuery.isLoading) diff --git a/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/tests/fixtures.ts b/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/tests/fixtures.ts index 24a8c475f..18ec4fa2a 100644 --- a/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/tests/fixtures.ts +++ b/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/tests/fixtures.ts @@ -31,7 +31,7 @@ export const commodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '23435363', display: 'Attractive Item code', }, @@ -43,7 +43,7 @@ export const commodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '34536373', display: 'Is it there code', }, @@ -52,7 +52,7 @@ export const commodity1 = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '34536373-1', display: 'Value entered on the It is there code', }, @@ -64,7 +64,7 @@ export const commodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484', display: 'Is it in good condition? (optional)', }, @@ -73,7 +73,7 @@ export const commodity1 = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484-1', display: 'Value entered on the Is it in good condition? (optional)', }, @@ -85,7 +85,7 @@ export const commodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595', display: 'Is it being used appropriately? (optional)', }, @@ -94,7 +94,7 @@ export const commodity1 = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595-1', display: 'Value entered on the Is it being used appropriately? (optional)', }, @@ -106,7 +106,7 @@ export const commodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '67869606', display: 'Accountability period (in months)', }, @@ -120,7 +120,7 @@ export const commodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '1231415', display: 'Product Image code', }, @@ -151,7 +151,11 @@ export const editedCommodity1 = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '23435363', display: 'Attractive Item code' }, + { + system: 'http://smartregister.org/', + code: '23435363', + display: 'Attractive Item code', + }, ], }, valueBoolean: true, @@ -159,13 +163,13 @@ export const editedCommodity1 = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '34536373', display: 'Is it there code' }, + { system: 'http://smartregister.org/', code: '34536373', display: 'Is it there code' }, ], }, valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '34536373-1', display: 'Value entered on the It is there code', }, @@ -177,7 +181,7 @@ export const editedCommodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484', display: 'Is it in good condition? (optional)', }, @@ -186,7 +190,7 @@ export const editedCommodity1 = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484-1', display: 'Value entered on the Is it in good condition? (optional)', }, @@ -198,7 +202,7 @@ export const editedCommodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595', display: 'Is it being used appropriately? (optional)', }, @@ -207,7 +211,7 @@ export const editedCommodity1 = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595-1', display: 'Value entered on the Is it being used appropriately? (optional)', }, @@ -219,7 +223,7 @@ export const editedCommodity1 = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '67869606', display: 'Accountability period (in months)', }, @@ -230,7 +234,7 @@ export const editedCommodity1 = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '1231415', display: 'Product Image code' }, + { system: 'http://smartregister.org/', code: '1231415', display: 'Product Image code' }, ], }, valueReference: { reference: 'Binary/9b782015-8392-4847-b48c-50c11638656b' }, @@ -267,11 +271,11 @@ export const editedCommodity = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '767524001', display: 'Unit of measure' }, + { system: 'http://smartregister.org/', code: '767524001', display: 'Unit of measure' }, ], }, valueCodeableConcept: { - coding: [{ system: 'http://snomed.info/sct', code: '767525000', display: 'Unit' }], + coding: [{ system: 'http://smartregister.org/', code: '767525000', display: 'Unit' }], text: 'Strips', }, }, @@ -342,7 +346,7 @@ export const createdCommodity = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '67869606', display: 'Accountability period (in months)', }, @@ -354,7 +358,7 @@ export const createdCommodity = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595', display: 'Is it being used appropriately? (optional)', }, @@ -363,7 +367,7 @@ export const createdCommodity = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595-1', display: 'Value entered on the Is it being used appropriately? (optional)', }, @@ -375,7 +379,7 @@ export const createdCommodity = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484', display: 'Is it in good condition? (optional)', }, @@ -384,7 +388,7 @@ export const createdCommodity = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484-1', display: 'Value entered on the Is it in good condition? (optional)', }, @@ -395,13 +399,13 @@ export const createdCommodity = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '34536373', display: 'Is it there code' }, + { system: 'http://smartregister.org/', code: '34536373', display: 'Is it there code' }, ], }, valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '34536373-1', display: 'Value entered on the It is there code', }, @@ -412,7 +416,11 @@ export const createdCommodity = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '23435363', display: 'Attractive Item code' }, + { + system: 'http://smartregister.org/', + code: '23435363', + display: 'Attractive Item code', + }, ], }, valueBoolean: true, @@ -420,7 +428,7 @@ export const createdCommodity = { { code: { coding: [ - { system: 'http://snomed.info/sct', code: '1231415', display: 'Product Image code' }, + { system: 'http://smartregister.org/', code: '1231415', display: 'Product Image code' }, ], }, valueReference: { reference: 'Binary/9b782015-8392-4847-b48c-50c11638656b' }, diff --git a/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/utils.ts b/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/utils.ts index cd40eb293..020c18419 100644 --- a/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/utils.ts +++ b/packages/fhir-group-management/src/components/CommodityAddEdit/Eusm/utils.ts @@ -46,6 +46,7 @@ import { supplyMgSnomedCode, unitOfMeasureCharacteristicCoding, unitOfMeasureCharacteristic, + smartRegisterCodeSystem, } from '../../../helpers/utils'; import { TypeOfGroup } from '../../ProductForm/utils'; import { GroupFormFields } from '../../ProductForm/types'; @@ -350,6 +351,8 @@ export const getGroupFormFields = (obj?: IGroup, binary?: IBinary): EusmGroupFor const val = getValueFromCharacteristic(characteristic); formFieldsFromCharacteristics[unitOfMeasure] = val; } + } + if (codingSystem === smartRegisterCodeSystem) { if (codingCode === accountabilityCharacteristicCode) { const val = getValueFromCharacteristic(characteristic); formFieldsFromCharacteristics[accountabilityPeriod] = val; @@ -492,8 +495,8 @@ export const generateGroupPayload = async ( code: { coding: [ { - system: 'http://snomed.info/sct', - code: '1231415', + system: smartRegisterCodeSystem, + code: photoUploadCharacteristicCode, display: 'Product Image code', }, ], diff --git a/packages/fhir-group-management/src/components/CommodityList/Eusm/tests/fixtures.ts b/packages/fhir-group-management/src/components/CommodityList/Eusm/tests/fixtures.ts index a1cf4e6cc..43ab49703 100644 --- a/packages/fhir-group-management/src/components/CommodityList/Eusm/tests/fixtures.ts +++ b/packages/fhir-group-management/src/components/CommodityList/Eusm/tests/fixtures.ts @@ -52,7 +52,7 @@ export const firstTwentyEusmCommodities = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '23435363', display: 'Attractive Item code', }, @@ -64,7 +64,7 @@ export const firstTwentyEusmCommodities = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '34536373', display: 'Is it there code', }, @@ -73,7 +73,7 @@ export const firstTwentyEusmCommodities = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '34536373-1', display: 'Value entered on the It is there code', }, @@ -85,7 +85,7 @@ export const firstTwentyEusmCommodities = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484', display: 'Is it in good condition? (optional)', }, @@ -94,7 +94,7 @@ export const firstTwentyEusmCommodities = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '45647484-1', display: 'Value entered on the Is it in good condition? (optional)', }, @@ -106,7 +106,7 @@ export const firstTwentyEusmCommodities = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595', display: 'Is it being used appropriately? (optional)', }, @@ -115,7 +115,7 @@ export const firstTwentyEusmCommodities = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '56758595-1', display: 'Value entered on the Is it being used appropriately? (optional)', }, @@ -127,7 +127,7 @@ export const firstTwentyEusmCommodities = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '67869606', display: 'Accountability period (in months)', }, @@ -141,7 +141,7 @@ export const firstTwentyEusmCommodities = { code: { coding: [ { - system: 'http://snomed.info/sct', + system: 'http://smartregister.org/', code: '1231415', display: 'Product Image code', }, diff --git a/packages/fhir-group-management/src/helpers/utils.ts b/packages/fhir-group-management/src/helpers/utils.ts index 2398747aa..1c5f20a88 100644 --- a/packages/fhir-group-management/src/helpers/utils.ts +++ b/packages/fhir-group-management/src/helpers/utils.ts @@ -28,6 +28,7 @@ export const getUnitMeasureCharacteristic = (obj: IGroup) => { // constants export const snomedCodeSystem = 'http://snomed.info/sct'; +export const smartRegisterCodeSystem = 'http://smartregister.org/'; export const supplyMgSnomedCode = '386452003'; export const characteristicUnitMeasureCode = '767524001'; export const photoUploadCharacteristicCode = '1231415'; @@ -38,43 +39,43 @@ export const availabilityCharacteristicCode = '34536373'; export const attractiveCharacteristicCode = '23435363'; export const photoUploadCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: photoUploadCharacteristicCode, display: 'Product Image code', }; export const accountabilityCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: accountabilityCharacteristicCode, display: 'Accountability period (in months)', }; export const appropriateUsageCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: appropriateUsageCharacteristicCode, display: 'Is it being used appropriately? (optional)', }; export const conditionCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: conditionCharacteristicCode, display: 'Is it in good condition? (optional)', }; export const availabilityCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: availabilityCharacteristicCode, display: 'Is it there code', }; export const attractiveCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: attractiveCharacteristicCode, display: 'Attractive Item code', }; export const unitOfMeasureCharacteristicCoding = { - system: 'http://snomed.info/sct', + system: snomedCodeSystem, code: '767524001', display: 'Unit of measure', }; @@ -86,7 +87,7 @@ export const unitOfMeasureCharacteristic = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: snomedCodeSystem, code: '767525000', display: 'Unit', }, @@ -111,7 +112,7 @@ export const appropriateUsageCharacteristic = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: '56758595-1', display: 'Value entered on the Is it being used appropriately? (optional)', }, @@ -127,7 +128,7 @@ export const conditionCharacteristic = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: '45647484-1', display: 'Value entered on the Is it in good condition? (optional)', }, @@ -143,7 +144,7 @@ export const availabilityCharacteristic = { valueCodeableConcept: { coding: [ { - system: 'http://snomed.info/sct', + system: smartRegisterCodeSystem, code: '34536373-1', display: 'Value entered on the It is there code', },