Skip to content

Commit 7595d56

Browse files
authored
BN-70 | Add. Mark Diagnosis As Condition (#35)
* BN-70 | Refactor. Rename DiagnosesForm As ConditionsAndDiagnoses * BN-70 | Add. ConditionsAndDiagnoses Store * BN-70 | Add. Link To Mark As Condition In SelectedDiagnosisItem * BN-70 | Fix. Validate Conditions And Diagnoses Together * BN-70 | Add. SelectedConditionItem Component * BN-70 | Add. Condition Support To ConditionsAndDiagnoses Form * BN-70 | Add. OnsetDate Calculator Util * BN-70 | Add. createEncounterConditionResource To ConditionResource Service * BN-70 | Add. createConditionsBundleEntries Function * BN-70 | Add. SelectedConditions To ConsultationBundle On Save * BN-70 | Fix. Default Condition Count To 100 * BN-70 | Fix. Type Duplication In Conditions Replaced Custom FHIR Types with Standard Types * BN-70 | Fix. Separation of Concerns In useConditions Hook * BN-70 | Fix. Remove Recorded Date From Conditions Table * BN-70 | Add. Show OnsetDate Based On Date Distance * BN-70 | Fix. i18n Translation Keys For Conditions Table * BN-70 | Refactor. Improve i18n Key Translation
1 parent 62d2c82 commit 7595d56

File tree

52 files changed

+8843
-2015
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+8843
-2015
lines changed

public/locales/locale_en.json

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,42 @@
2121
"ALLERGY_TYPE_DRUG": "Drug",
2222
"CERTAINITY_CONFIRMED": "Confirmed",
2323
"CERTAINITY_PROVISIONAL": "Provisional",
24-
"CLINICAL_DAYS_TRANSLATION_KEY": "days",
25-
"CLINICAL_MONTHS_TRANSLATION_KEY": "months",
26-
"CLINICAL_YEARS_TRANSLATION_KEY": "years",
24+
"CLINICAL_DAYS_TRANSLATION_KEY_one": "day",
25+
"CLINICAL_DAYS_TRANSLATION_KEY_other": "days",
26+
"CLINICAL_MONTHS_TRANSLATION_KEY_one": "month",
27+
"CLINICAL_MONTHS_TRANSLATION_KEY_other": "months",
28+
"CLINICAL_YEARS_TRANSLATION_KEY_one": "year",
29+
"CLINICAL_YEARS_TRANSLATION_KEY_other": "years",
2730
"CONDITION_LIST_ACTIVE": "Active",
2831
"CONDITION_LIST_CONDITION": "Condition",
2932
"CONDITION_LIST_DATE": "Date",
3033
"CONDITION_LIST_DISPLAY_CONTROL_TITLE": "Conditions",
3134
"CONDITION_LIST_INACTIVE": "Inactive",
32-
"CONDITION_LIST_NO_CONDITIONS": "No conditions found",
35+
"CONDITION_LIST_NO_CONDITIONS": "No conditions recorded",
3336
"CONDITION_LIST_STATUS": "Status",
3437
"CONDITION_TABLE_NOT_AVAILABLE": "Not available",
35-
"CONDITION_TABLE_ONSET_DATE": "Onset Date",
36-
"CONDITION_TABLE_PROVIDER": "Provider",
38+
"CONDITION_TABLE_DURATION": "Duration",
39+
"CONDITION_TABLE_RECORDED_BY": "Recorded By",
3740
"CONDITION_TABLE_RECORDED_DATE": "Recorded Date",
41+
"CONDITION_ONSET_SINCE_FORMAT": "Since {{timeAgo}}",
42+
"CONDITIONS_ADD_AS_CONDITION": "Add to condition",
43+
"CONDITIONS_ALREADY_EXISTS": "Condition already exists",
44+
"CONDITIONS_DURATION_DAYS": "Days",
45+
"CONDITIONS_DURATION_MONTHS": "Months",
46+
"CONDITIONS_DURATION_UNIT_LABEL": "Unit",
47+
"CONDITIONS_DURATION_UNIT_REQUIRED": "Duration unit is required",
48+
"CONDITIONS_DURATION_VALUE_LABEL": "Duration",
49+
"CONDITIONS_DURATION_VALUE_PLACEHOLDER": "Enter duration",
50+
"CONDITIONS_DURATION_VALUE_REQUIRED": "Duration value is required",
51+
"CONDITIONS_DURATION_YEARS": "Years",
52+
"CONDITIONS_SECTION_TITLE": "Added Conditions",
53+
"CONDITIONS_SUCCESS_ADDED": "Condition added successfully",
3854
"CONFIG_ERROR_NOT_FOUND": "Configuration not found",
3955
"CONFIG_ERROR_SCHEMA_VALIDATION_FAILED": "Configuration does not match required schema",
4056
"CONFIG_ERROR_VALIDATION_FAILED": "Configuration validation failed",
4157
"CONSULTATION_ERROR_GENERIC": "Error creating consultation bundle",
58+
"CONSULTATION_ERROR_INVALID_ALLERGY_PARAMS": "Invalid or missing allergy parameters",
59+
"CONSULTATION_ERROR_INVALID_CONDITION_PARAMS": "Invalid or missing condition parameters",
4260
"CONSULTATION_ERROR_INVALID_DIAGNOSIS_PARAMS": "Invalid or missing diagnosis parameters",
4361
"CONSULTATION_ERROR_INVALID_ENCOUNTER_REFERENCE": "Invalid or missing encounter reference",
4462
"CONSULTATION_ERROR_INVALID_ENCOUNTER_SUBJECT": "Invalid or missing encounter subject",
@@ -58,7 +76,7 @@
5876
"DIAGNOSES_ADDED_DIAGNOSES": "Added Diagnoses",
5977
"DIAGNOSES_CERTAINTY_ARIA_LABEL": "Diagnoses Certainty",
6078
"DIAGNOSES_DISPLAY_CONTROL_HEADING": "Diagnoses",
61-
"DIAGNOSES_FORM_TITLE": "Diagnoses",
79+
"CONDITIONS_AND_DIAGNOSES_FORM_TITLE": "Conditions and Diagnoses",
6280
"DIAGNOSES_SEARCH_ARIA_LABEL": "Search for diagnoses",
6381
"DIAGNOSES_SEARCH_PLACEHOLDER": "Search to add new diagnosis",
6482
"DIAGNOSES_SELECT_CERTAINTY": "Select Certainty",

public/locales/locale_es.json

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,42 @@
2121
"ALLERGY_TYPE_DRUG": "Droga",
2222
"CERTAINITY_CONFIRMED": "Confirmado",
2323
"CERTAINITY_PROVISIONAL": "Provisorio",
24-
"CLINICAL_DAYS_TRANSLATION_KEY": "días",
25-
"CLINICAL_MONTHS_TRANSLATION_KEY": "meses",
26-
"CLINICAL_YEARS_TRANSLATION_KEY": "años",
24+
"CLINICAL_DAYS_TRANSLATION_KEY_one": "día",
25+
"CLINICAL_DAYS_TRANSLATION_KEY_other": "días",
26+
"CLINICAL_MONTHS_TRANSLATION_KEY_one": "mes",
27+
"CLINICAL_MONTHS_TRANSLATION_KEY_other": "meses",
28+
"CLINICAL_YEARS_TRANSLATION_KEY_one": "año",
29+
"CLINICAL_YEARS_TRANSLATION_KEY_other": "años",
2730
"CONDITION_LIST_ACTIVE": "Activo",
2831
"CONDITION_LIST_CONDITION": "Condición",
2932
"CONDITION_LIST_DATE": "Fecha",
3033
"CONDITION_LIST_DISPLAY_CONTROL_TITLE": "Condiciones",
3134
"CONDITION_LIST_INACTIVE": "Inactivo",
32-
"CONDITION_LIST_NO_CONDITIONS": "No hay Condiciones disponibles",
35+
"CONDITION_LIST_NO_CONDITIONS": "No hay Condiciones registradas",
3336
"CONDITION_LIST_STATUS": "Estado",
3437
"CONDITION_TABLE_NOT_AVAILABLE": "No disponible",
35-
"CONDITION_TABLE_ONSET_DATE": "Fecha de inicio",
36-
"CONDITION_TABLE_PROVIDER": "Proveedor",
38+
"CONDITION_TABLE_DURATION": "Duración",
39+
"CONDITION_TABLE_RECORDED_BY": "Grabado por",
3740
"CONDITION_TABLE_RECORDED_DATE": "Fecha de grabación",
41+
"CONDITION_ONSET_SINCE_FORMAT": "Hace {{timeAgo}}",
42+
"CONDITIONS_ADD_AS_CONDITION": "Agregar como Condición",
43+
"CONDITIONS_ALREADY_EXISTS": "La condición ya existe",
44+
"CONDITIONS_DURATION_DAYS": "Días",
45+
"CONDITIONS_DURATION_MONTHS": "Meses",
46+
"CONDITIONS_DURATION_UNIT_LABEL": "Unidad",
47+
"CONDITIONS_DURATION_UNIT_REQUIRED": "Se requiere la unidad de duración",
48+
"CONDITIONS_DURATION_VALUE_LABEL": "Duración",
49+
"CONDITIONS_DURATION_VALUE_PLACEHOLDER": "Ingrese la duración",
50+
"CONDITIONS_DURATION_VALUE_REQUIRED": "Se requiere el valor de duración",
51+
"CONDITIONS_DURATION_YEARS": "Años",
52+
"CONDITIONS_SECTION_TITLE": "Condiciones Agregadas",
53+
"CONDITIONS_SUCCESS_ADDED": "Condición agregada exitosamente",
3854
"CONFIG_ERROR_NOT_FOUND": "Configuración no encontrada",
3955
"CONFIG_ERROR_SCHEMA_VALIDATION_FAILED": "La configuración no coincide con el esquema requerido",
4056
"CONFIG_ERROR_VALIDATION_FAILED": "La validación de la configuración falló",
4157
"CONSULTATION_ERROR_GENERIC": "Error al crear el paquete de consulta",
58+
"CONSULTATION_ERROR_INVALID_ALLERGY_PARAMS": "Parámetros de alergia inválidos o faltantes",
59+
"CONSULTATION_ERROR_INVALID_CONDITION_PARAMS": "Parámetros de condición inválidos o faltantes",
4260
"CONSULTATION_ERROR_INVALID_DIAGNOSIS_PARAMS": "Parámetros de diagnóstico inválidos o faltantes",
4361
"CONSULTATION_ERROR_INVALID_ENCOUNTER_REFERENCE": "Referencia de encuentro inválida o faltante",
4462
"CONSULTATION_ERROR_INVALID_ENCOUNTER_SUBJECT": "Sujeto de encuentro inválido o faltante",
@@ -58,7 +76,7 @@
5876
"DIAGNOSES_ADDED_DIAGNOSES": "Diagnósticos Agregados",
5977
"DIAGNOSES_CERTAINTY_ARIA_LABEL": "Certeza del Diagnóstico",
6078
"DIAGNOSES_DISPLAY_CONTROL_HEADING": "Diagnósticos",
61-
"DIAGNOSES_FORM_TITLE": "Diagnósticos",
79+
"CONDITIONS_AND_DIAGNOSES_FORM_TITLE": "Condiciones y Diagnósticos",
6280
"DIAGNOSES_SEARCH_ARIA_LABEL": "Buscar diagnósticos",
6381
"DIAGNOSES_SEARCH_PLACEHOLDER": "Buscar para agregar un diagnóstico",
6482
"DIAGNOSES_SELECT_CERTAINTY": "Seleccionar Certeza",

src/__mocks__/conditionMocks.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
import {
2-
FhirCondition,
3-
FhirConditionBundle,
4-
ConditionStatus,
5-
FormattedCondition,
6-
} from '../types/condition';
1+
import { Condition, Bundle } from 'fhir/r4';
2+
import { ConditionStatus, FormattedCondition } from '@types/condition';
73

84
export const mockPatientUUID = '02f47490-d657-48ee-98e7-4c9133ea168b';
9-
export const mockCondition: FhirCondition = {
5+
export const mockCondition: Condition = {
106
resourceType: 'Condition',
117
id: '21fc9270-5e82-4073-9468-0bc3c1a105a5',
128
meta: {
@@ -54,7 +50,7 @@ export const mockCondition: FhirCondition = {
5450
},
5551
};
5652

57-
export const mockConditions: FhirCondition[] = [mockCondition];
53+
export const mockConditions: Condition[] = [mockCondition];
5854

5955
export const mockFormattedConditions: FormattedCondition[] = [
6056
{
@@ -94,7 +90,7 @@ export const mockFormattedConditionsWithNotes: FormattedCondition[] = [
9490
note: ['Patient reports pain in the upper right quadrant'],
9591
},
9692
];
97-
export const mockConditionBundle: FhirConditionBundle = {
93+
export const mockConditionBundle: Bundle = {
9894
resourceType: 'Bundle',
9995
id: '8c9cde77-2ae9-4c05-b149-964b4cf3e8f5',
10096
meta: {
@@ -117,7 +113,7 @@ export const mockConditionBundle: FhirConditionBundle = {
117113
],
118114
};
119115

120-
export const mockEmptyConditionBundle: FhirConditionBundle = {
116+
export const mockEmptyConditionBundle: Bundle = {
121117
resourceType: 'Bundle',
122118
id: 'empty-bundle',
123119
meta: {
@@ -154,7 +150,7 @@ export const mockMalformedBundle = {
154150
],
155151
};
156152

157-
export const mockConditionWithoutOptionalFields: FhirCondition = {
153+
export const mockConditionWithoutOptionalFields: Condition = {
158154
resourceType: 'Condition',
159155
id: 'condition-without-optionals',
160156
meta: {
@@ -177,7 +173,7 @@ export const mockConditionWithoutOptionalFields: FhirCondition = {
177173
},
178174
};
179175

180-
export const mockConditionBundleWithoutOptionals: FhirConditionBundle = {
176+
export const mockConditionBundleWithoutOptionals: Bundle = {
181177
resourceType: 'Bundle',
182178
id: 'bundle-without-optionals',
183179
meta: {

src/components/clinical/consultationPad/ConsultationPad.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import React, { useEffect } from 'react';
22
import { useTranslation } from 'react-i18next';
33
import ActionArea from '@components/common/actionArea/ActionArea';
44
import { Column, Grid, MenuItemDivider } from '@carbon/react';
5-
import BasicForm from '@/components/clinical/forms/encounterDetails/EncounterDetails';
6-
import DiagnosesForm from '@components/clinical/forms/diagnoses/DiagnosesForm';
5+
import BasicForm from '@components/clinical/forms/encounterDetails/EncounterDetails';
6+
import DiagnosesForm from '@components/clinical/forms/conditionsAndDiagnoses/ConditionsAndDiagnoses';
77
import AllergiesForm from '@components/clinical/forms/allergies/AllergiesForm';
88
import { ConsultationBundle } from '@types/consultationBundle';
99
import {
1010
postConsultationBundle,
1111
createDiagnosisBundleEntries,
1212
createAllergiesBundleEntries,
13+
createConditionsBundleEntries,
1314
} from '@services/consultationBundleService';
1415
import useNotification from '@hooks/useNotification';
1516
import { createEncounterResource } from '@utils/fhir/encounterResourceCreator';
@@ -18,7 +19,7 @@ import {
1819
createConsultationBundle,
1920
} from '@utils/fhir/consultationBundleCreator';
2021
import { ERROR_TITLES } from '@constants/errors';
21-
import { useDiagnosisStore } from '@stores/diagnosisStore';
22+
import { useConditionsAndDiagnosesStore } from '@stores/conditionsAndDiagnosesStore';
2223
import useAllergyStore from '@stores/allergyStore';
2324
import { useEncounterDetailsStore } from '@stores/encounterDetailsStore';
2425
import * as styles from './styles/ConsultationPad.module.scss';
@@ -36,9 +37,10 @@ const ConsultationPad: React.FC<ConsultationPadProps> = ({ onClose }) => {
3637
// Use the diagnosis store
3738
const {
3839
selectedDiagnoses,
39-
validateAllDiagnoses,
40+
selectedConditions,
41+
validate,
4042
reset: resetDiagnoses,
41-
} = useDiagnosisStore();
43+
} = useConditionsAndDiagnosesStore();
4244
// Use the allergy store
4345
const {
4446
selectedAllergies,
@@ -115,20 +117,29 @@ const ConsultationPad: React.FC<ConsultationPadProps> = ({ onClose }) => {
115117
practitionerUUID: user!.uuid,
116118
});
117119

120+
const conditionEntries = createConditionsBundleEntries({
121+
selectedConditions,
122+
encounterSubject: encounterResource.subject!,
123+
encounterReference: enconterResourceURL,
124+
practitionerUUID: user!.uuid,
125+
consultationDate,
126+
});
127+
118128
const consultationBundle = createConsultationBundle([
119129
encounterBundleEntry,
120130
...diagnosisEntries,
121131
...allergyEntries,
132+
...conditionEntries,
122133
]);
123134

124135
return postConsultationBundle<ConsultationBundle>(consultationBundle);
125136
};
126137

127138
const handleOnPrimaryButtonClick = async () => {
128139
if (!isSubmitting && canSubmitConsultation) {
129-
const isDiagnosesValid = validateAllDiagnoses();
140+
const isConditionsAndDiagnosesValid = validate();
130141
const isAllergiesValid = validateAllAllergies();
131-
if (!isDiagnosesValid || !isAllergiesValid) {
142+
if (!isConditionsAndDiagnosesValid || !isAllergiesValid) {
132143
return;
133144
}
134145

0 commit comments

Comments
 (0)