@@ -78,6 +78,89 @@ describe('removeRepeatId', () => {
7878 expect ( result . text ) . toBe ( 'Test item text' ) ;
7979 } ) ;
8080
81+ it ( 'should preserve definition from qItem when present' , ( ) => {
82+ const qItem : QuestionnaireItem = {
83+ linkId : 'test-item' ,
84+ type : 'boolean' ,
85+ text : 'Has triple negative breast cancer' ,
86+ definition :
87+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
88+ } ;
89+
90+ const qrItem : QuestionnaireResponseItem = {
91+ linkId : 'test-item' ,
92+ definition :
93+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]' ,
94+ text : 'Has triple negative breast cancer' ,
95+ answer : [ { valueBoolean : true } ]
96+ } ;
97+
98+ const result = removeInternalRepeatIdsRecursive ( qItem , qrItem ) as QuestionnaireResponseItem ;
99+
100+ expect ( result . definition ) . toBe (
101+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
102+ ) ;
103+ } ) ;
104+
105+ it ( 'should preserve definition on nested group and child items' , ( ) => {
106+ const qItem : QuestionnaireItem = {
107+ linkId : '1' ,
108+ type : 'group' ,
109+ text : 'IsTNBCFeature' ,
110+ definition : 'http://example.org/fhir/StructureDefinition/IsTNBCFeature' ,
111+ item : [
112+ {
113+ linkId : '1.1' ,
114+ type : 'boolean' ,
115+ text : 'Has triple negative breast cancer' ,
116+ definition :
117+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
118+ }
119+ ]
120+ } ;
121+
122+ const qrItem : QuestionnaireResponseItem = {
123+ linkId : '1' ,
124+ definition : 'http://example.org/fhir/StructureDefinition/IsTNBCFeature' ,
125+ text : 'IsTNBCFeature' ,
126+ item : [
127+ {
128+ linkId : '1.1' ,
129+ definition :
130+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]' ,
131+ text : 'Has triple negative breast cancer' ,
132+ answer : [ { valueBoolean : true } ]
133+ }
134+ ]
135+ } ;
136+
137+ const result = removeInternalRepeatIdsRecursive ( qItem , qrItem ) as QuestionnaireResponseItem ;
138+
139+ expect ( result . definition ) . toBe (
140+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature'
141+ ) ;
142+ expect ( result . item ! [ 0 ] . definition ) . toBe (
143+ 'http://example.org/fhir/StructureDefinition/IsTNBCFeature#Observation.value[x]'
144+ ) ;
145+ } ) ;
146+
147+ it ( 'should not include definition property when qItem has none' , ( ) => {
148+ const qItem : QuestionnaireItem = {
149+ linkId : 'test-item' ,
150+ type : 'string' ,
151+ text : 'No definition here'
152+ } ;
153+
154+ const qrItem : QuestionnaireResponseItem = {
155+ linkId : 'test-item' ,
156+ answer : [ { valueString : 'answer' } ]
157+ } ;
158+
159+ const result = removeInternalRepeatIdsRecursive ( qItem , qrItem ) as QuestionnaireResponseItem ;
160+
161+ expect ( result ) . not . toHaveProperty ( 'definition' ) ;
162+ } ) ;
163+
81164 it ( 'should handle empty answers correctly' , ( ) => {
82165 const qItem : QuestionnaireItem = {
83166 linkId : 'test-item' ,
0 commit comments