it-swarm.dev

sintassi dell'istanza per cercare tutti i casi figlio di un genitore in CommCare

Ho un'app che utilizza un caso genitore "familiare" e un caso figlio "membro". Nel modulo di visita "membro" desidero poter cercare il numero di altri casi figlio indicizzati a quel genitore che soddisfano un determinato criterio:

In inglese: quanti altri casi figlio sono indicizzati a questo paziente con la proprietà mm_is_in_tb_treatment = 'yes'?

Percorso dell'istanza:

instance('casedb')/casedb/case[@case_type='household']/ ... 

e quindi non sono sicuro di come specificare la 'famiglia' del caso 'membro', quindi filtrare i casi figlio di questa famiglia, quindi filtrare per

/mm_is_in_tb_treatment = 'yes'

Una volta che la sintassi dell'istanza è corretta, qual è l'output? Ho bisogno del totale # casi che soddisfano tali criteri.

1
Ali F

Suppongo in questo caso che tu abbia caricato un caso member nel tuo modulo e che tu possa caricare l'ID ID caso membro in

/data/member_id

Quello che vuoi ottenere è:

Il conteggio di tutti i casi member che sono figli del genitore di questo caso, per i quali il caso membro ha la proprietà mm_is_in_tb_treatment = 'yes'

Per ora possiamo creare un nuovo valore nascosto per memorizzare l'ID del caso della casa madre, poiché renderà più semplice la comprensione dell'intera query di seguito.

Nuovo valore nascosto: /data/parent_id:

instance('casedb')/casedb/case[@case_id = /data/member_id]/index/parent

Tutti i casi che sono figli di quel genitore sarebbero indicati come:

instance('casedb')/casedb/case[index/parent = /data/parent_id]

Ora puoi aggiungere il tuo nuovo filtro direttamente alla fine di quell'istruzione e introdurre il conteggio

count(instance('casedb')/casedb/case[index/parent = /data/parent_id][mm_is_in_tb_treatment = 'yes']

Se lo si desidera, è possibile specificare ulteriormente che (per motivi di sicurezza) si desidera includere solo i bambini che sono member casi e che sono aperti. Puoi anche comprimere il riferimento ID genitore se desideri un'espressione di una riga:

count(instance('casedb')/casedb/case[@case_type='member'][@status='open'][index/parent = instance('casedb')/casedb/case[@case_id = /data/member_id]/index/parent][mm_is_in_tb_treatment = 'yes']
4
Clayton Sims