Removing cases when case sharing

(Carina King) #1

Hi,

I am trying to figure out the best way to set up a new project app. All cases will be registered using one form (‘recruitment’) with 20 different data collectors. After this, depending on where the case then goes to seek care, there are two different follow-up forms that can be entered, and by any of the data collectors (not just the one who registered the case) and then two forms that can be used to close the case (same as above).

In order to keep it as simple for the data collectors as possible, I would like the cases to be ‘passed on’ when a new form is entered for the case. I am planning to use case sharing, but was wondering if there was a way to hide all the cases from the case list, so only the ‘active’ cases for that data collector are shown, until someone ‘takes’ a case from them - and then it is removed?

Thanks!
Carina

(Ethan Soergel) #2

Hi Carina,

Case lists can be filtered based on properties of the case:

https://wiki.commcarehq.org/display/commcarepublic/Case+List+and+Case+Detail+Configuration#CaseListandCaseDetailConfiguration-FilteringtheCaseList

One approach here is to have each of these forms set a property on the case indicating that that phase of data collection has been completed. You can then hide cases which have already passed that phase from the case list.

This can get more complicated if the “active” status for a case depends on the user, though you can access custom user data here as well.

  • Ethan
(Mazen AlAli) #3

you will most certainly have to use case sharing.

I’ve recently developed an app where i wanted to restrict access to the cases based on a number of factors, but still wanted to share them across the teams for regular every day tasks such as recording attendance.

I was able to accomplish this through leveraging organizational levels and locations. We assign one of the case types to a location/case sharing group (https://confluence.dimagi.com/display/commcarepublic/Assigning+cases+to+one+of+multiple+groups)

which doesn’t look as nice as using locations, but for my use-case i had to use sharing groups.

then, i used caselist filters to make sure that the user only saw the relevant cases. This allowed me to actually reassign cases using a form in the application.

here’s something that can maybe work for you

cases start with attribute called (current_state) that’s defaulted to “pending_followup_1”.

in a followup form, you update that property to “pending_followup_2”

you then have two separate caselists, one that filters for pending_followup_1 status for that case type, and one that filters for the other one.

if you have user-properties set up, you can hide the forms to show only for users with a specific property.

Alternatively, you can use that same user property “state access” and set that value to the same as the cases “pending_followup_1”, and filter the cases to show only if their state matches the user property.

I guess that’s a really long answer.

short answer: Look at using organizational levels/locations, case filters, display conditions, and last but not least, custom-user-data (found here https://confluence.dimagi.com/display/commcarepublic/Custom+User+Data)

there are a number of combinations using these features to achieve your objective. just, design it on a piece of paper first before you try to deploy. it will make your life a lot easier.

HTH

Mazz

(Carina King) #4

Thanks both! The custom user data approach is definitely what I needed - and I think I’ve now got this working how I want… at least working well enough to go to a field pilot!

Thanks
Carina

(Ethan Soergel) #5

Congrats, that’s good to hear!