Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Repeated Group: Mapping fails when questionaire response is passed as argument. #1900

Closed
nsabale7 opened this issue Mar 7, 2023 · 6 comments · Fixed by #1936
Closed

Repeated Group: Mapping fails when questionaire response is passed as argument. #1900

nsabale7 opened this issue Mar 7, 2023 · 6 comments · Fixed by #1936
Assignees
Labels
effort:small Small effort - 2 days P1 High priority issue

Comments

@nsabale7
Copy link
Collaborator

nsabale7 commented Mar 7, 2023

Describe the bug
If a questionnaire response for repeated group item is passed, the mapping fails. This happens because the implementation currently adds answers to item.answer for repeated groups, and then later createRepeatedGroupResponse takes care of putting answerItemComponents to the repeated groups item.item field. So when questionnaire response is passed it expects repeated group items in item.answer field

Initial UI shows up but when submitted, answers are missing

Component
SDC library

To Reproduce
Steps to reproduce the behavior:
Use following questionnaire and questionnaire response
component_repeated_group.txt
component_repeated_group_response.txt

Screenshots
If applicable, add screenshots to help explain your problem.

repeated-groups-with-response.mp4

@jingtang10

@jingtang10 jingtang10 added P1 High priority issue effort:small Small effort - 2 days labels Mar 7, 2023
@jingtang10
Copy link
Collaborator

jingtang10 commented Mar 24, 2023

@nsabale7 can you double check if my PR fixes the issue for you? thanks!

@nsabale7
Copy link
Collaborator Author

@jingtang10 I tested your PR using component_repeated_group.json from catalog demo app and it crashed when questionnaire response with multiple repeated answers are passed.

Thrown exception was
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.google.android.fhir.catalog, PID: 21750 java.lang.RuntimeException: An exception happened in constructor of class com.google.android.fhir.datacapture.QuestionnaireViewModel at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:132) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54) at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41) at com.google.android.fhir.datacapture.QuestionnaireFragment.getViewModel(QuestionnaireFragment.kt:51) at com.google.android.fhir.datacapture.QuestionnaireFragment.access$getViewModel(QuestionnaireFragment.kt:50) at com.google.android.fhir.datacapture.QuestionnaireFragment$onViewCreated$4.invokeSuspend(QuestionnaireFragment.kt:143) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at androidx.lifecycle.DispatchQueue.drainQueue(DispatchQueue.kt:75) at androidx.lifecycle.DispatchQueue.resume(DispatchQueue.kt:54) at androidx.lifecycle.LifecycleController$observer$1.onStateChanged(LifecycleController.kt:40) at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354) at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265) at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307) at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148) at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134) at androidx.fragment.app.FragmentViewLifecycleOwner.handleLifecycleEvent(FragmentViewLifecycleOwner.java:88) at androidx.fragment.app.Fragment.restoreViewState(Fragment.java:653) at androidx.fragment.app.Fragment.restoreViewState(Fragment.java:3010) at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:3001) at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:580) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:285) at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072) at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:3002) at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:580) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:285) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7884) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@661cb88, Dispatchers.Main.immediate] Caused by: java.lang.IllegalArgumentException: Missing questionnaire item for questionnaire response item 1 E/AndroidRuntime: at com.google.android.fhir.datacapture.validation.QuestionnaireResponseValidator.checkQuestionnaireResponseItems(QuestionnaireResponseValidator.kt:216) at com.google.android.fhir.datacapture.validation.QuestionnaireResponseValidator.checkQuestionnaireResponse(QuestionnaireResponseValidator.kt:202) at com.google.android.fhir.datacapture.QuestionnaireViewModel.<init>(QuestionnaireViewModel.kt:134) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:120) ... 42 more

@jingtang10
Copy link
Collaborator

Hi Nitin - looks like this is the problem:

Dispatchers.Main.immediate] Caused by: java.lang.IllegalArgumentException: Missing questionnaire item for questionnaire response item 1 E/AndroidRuntime:     at com.google.android.fhir.datacapture.validation.QuestionnaireResponseValidator.checkQuestionnaireResponseItems(QuestionnaireResponseValidator.kt:216) at 

But I tested using your questionnaire and your questionnaire response and it worked. See screenshot:

Screenshot_20230327-195925

@nsabale7
Copy link
Collaborator Author

nsabale7 commented Mar 27, 2023

component_repeated_group_response.txt
Try with this one.
Yes you are right QuestionnaireResponseValidator.checkQuestionnaireResponseItems() is the one which fails.

@jingtang10
Copy link
Collaborator

@nsabale7 - I updated the fix and merged it. please check.

if this is not fixed please reopen.

@nsabale7
Copy link
Collaborator Author

Thanks a lot @jingtang10. Will test and let you know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
effort:small Small effort - 2 days P1 High priority issue
Projects
Status: Complete
Development

Successfully merging a pull request may close this issue.

2 participants