SIS-MA DHIS2 Software Requirement Specification
Steps to extract SISMA_DHIS2_EPI Coverage Data.doc
Get percentages from the COBERTURAS PAV (Mensal) report
This is the first report that was outlined by Timoteo:
- The coverage report “PAV Coberturas (Mensal)” utilizes the DHIS Web Reporting module in DHIS2 (https://docs.dhis2.org/2.28/en/user/html/using_reporting_standard_reports.html)
- It doesn’t look like we can get the report directly because it uses JasperReports to execute a number of underlying queries.
Items to hard code:
- Mozambique Organization Unit: ou=LJX5GuypkKy
This report has two subqueries of the analytics API:
- Query 1: Get the annual population estimates so you can calculate the Gr.Alvo columns for each immunization type (BCG, Polio Primario, Polio 1a Dose, etc)
- Sample GET for the headers:
- https://www.dhis2.org.mz/prod/api/analytics?dimension=dx:qGeMdrJaqK6;vr04MSOBMjC;uFfnh49uAZ0;uhAcJkYENXE;sTIec6HXB8U;D1HgqDPmaow;qXnAuJL2TMs&dimension=ou:L6z1mqFYii6;eCer1W6aTne;cai3Uyc1ngZ;coEbHyby9NV;p9UiH23JS15;f5F6xAskA05;pPGhROE8IIC;wqmPoqfG93D;IvsKEydqOUT;UN0aH8CjbZJ;sIPZ84RBqMM;LJX5GuypkKy&filter=pe:2017&displayProperty=NAME&tableLayout=true&columns=dx&rows=ou
- We get the annual period (pe:2017) because the population estimates are loaded in at that level
- There are no estimates for pe:2018
- The dimensions are predefined based on the custom report. We do not need to change these.
This returns the following code block:
When mapped, these values look something like this for the Niassa Province:
Organisation unit description | Organisation unit ID | Value from Niassa Province row | Divided by 12 to get the monthly estimate |
---|---|---|---|
POP - 17.1 perc População Consultas 0-4 Anos | qGeMdrJaqK6 | 305,939 | 25,495 |
POP - 13.1 perc População Consultas 1-4 Anos | vr04MSOBMjC | 234,373 | 19,531 |
POP - 24.9 perc População VAT MIF/ P. Familiar | uFfnh49uAZ0 | 445,493 | 37,124 |
POP - 3.9 perc População Polio/DPT/HepB/VAS/CCV/PVC10 | uhAcJkYENXE | 69,779 | 5,815 ← this is the calc for Gr. Alvo 3.9% for all other immunizations for Niassa in the report and it's the denominator for the Cobertura calculation |
POP - 4 perc População BCG/Polio primario/consultas 0-11 meses | sTIec6HXB8U | 71,564 | 5,964 ← this is the calc for Gr. Alvo 4% for BCG for Niassa in the report and it's the denominator for the Cobertura calculation |
POP - 4.5 perc População Partos /C.Post-Parto | D1HgqDPmaow | 80,511 | 6,709 |
POP - 5 perc População VAT Mgrav. /C.Pré-Natal | qXnAuJL2TMs | 89,456 | 7,455 |
We need to store this in the postgres database for future reference. Note that these are values for the year 2017 and we would need to also store values for 2018 when they are available.
Query 2: Get the raw values for the Realizado column
- The Realizado column is the "actual" number of immunizations given. This is calculated by summing a number of lower level indicators from DHIS2
- Sample GET request:
- https://www.dhis2.org.mz/prod/api/analytics?dimension=dx:i7VbzJ0W5qT.AZq6AqCYSfD;i7VbzJ0W5qT.UYnV8StRNy3;i7VbzJ0W5qT.qaZHEHPHk6R;i7VbzJ0W5qT.mVw0xixOoBU;ytweIW4mUYf.AZq6AqCYSfD;ytweIW4mUYf.UYnV8StRNy3;ytweIW4mUYf.qaZHEHPHk6R;ytweIW4mUYf.mVw0xixOoBU;RBKSa3oUTg2.AZq6AqCYSfD;RBKSa3oUTg2.UYnV8StRNy3;RBKSa3oUTg2.qaZHEHPHk6R;RBKSa3oUTg2.mVw0xixOoBU;rLHCtgEQdnq.AZq6AqCYSfD;rLHCtgEQdnq.UYnV8StRNy3;rLHCtgEQdnq.qaZHEHPHk6R;rLHCtgEQdnq.mVw0xixOoBU;xw1x5f1HfOd.AZq6AqCYSfD;xw1x5f1HfOd.UYnV8StRNy3;xw1x5f1HfOd.qaZHEHPHk6R;xw1x5f1HfOd.mVw0xixOoBU;BPghXJ1HK64.AZq6AqCYSfD;BPghXJ1HK64.UYnV8StRNy3;BPghXJ1HK64.qaZHEHPHk6R;BPghXJ1HK64.mVw0xixOoBU;FeeXwOEJcGz.AZq6AqCYSfD;FeeXwOEJcGz.UYnV8StRNy3;FeeXwOEJcGz.qaZHEHPHk6R;FeeXwOEJcGz.mVw0xixOoBU;S3ReXW7kbv3.AZq6AqCYSfD;S3ReXW7kbv3.UYnV8StRNy3;S3ReXW7kbv3.qaZHEHPHk6R;S3ReXW7kbv3.mVw0xixOoBU;RtYn2iXsvPM.AZq6AqCYSfD;RtYn2iXsvPM.UYnV8StRNy3;RtYn2iXsvPM.qaZHEHPHk6R;RtYn2iXsvPM.mVw0xixOoBU;BMRTt5gbU85.AZq6AqCYSfD;BMRTt5gbU85.UYnV8StRNy3;BMRTt5gbU85.qaZHEHPHk6R;BMRTt5gbU85.mVw0xixOoBU;hLvZXyEZUIc.AZq6AqCYSfD;hLvZXyEZUIc.UYnV8StRNy3;hLvZXyEZUIc.qaZHEHPHk6R;hLvZXyEZUIc.mVw0xixOoBU;EckOKVrmvEX.AZq6AqCYSfD;EckOKVrmvEX.UYnV8StRNy3;EckOKVrmvEX.qaZHEHPHk6R;EckOKVrmvEX.mVw0xixOoBU;x2nuUb4JmDs.AZq6AqCYSfD;x2nuUb4JmDs.UYnV8StRNy3;x2nuUb4JmDs.qaZHEHPHk6R;x2nuUb4JmDs.mVw0xixOoBU;KWqwoZZXT99.AZq6AqCYSfD;KWqwoZZXT99.UYnV8StRNy3;KWqwoZZXT99.qaZHEHPHk6R;KWqwoZZXT99.mVw0xixOoBU;KAT4V8gyIIo.AZq6AqCYSfD;KAT4V8gyIIo.UYnV8StRNy3;KAT4V8gyIIo.qaZHEHPHk6R;KAT4V8gyIIo.mVw0xixOoBU;E99RDvLYuvZ.cBMku288XIu;E99RDvLYuvZ.Jp1mSZfd94e;E99RDvLYuvZ.dXjAUcOo5Ms;E99RDvLYuvZ.i7oAiY0OoKb;wZEOgPMvciS.An0ixEtkvD0;wZEOgPMvciS.Vl5SozUWrQB;wZEOgPMvciS.wtVP85udKGT;wZEOgPMvciS.ZHITxfjkOUz;RBKSa3oUTg2;xw1x5f1HfOd;FeeXwOEJcGz;RtYn2iXsvPM;BMRTt5gbU85;EckOKVrmvEX;x2nuUb4JmDs;KWqwoZZXT99&dimension=ou:L6z1mqFYii6;eCer1W6aTne;cai3Uyc1ngZ;coEbHyby9NV;p9UiH23JS15;f5F6xAskA05;pPGhROE8IIC;wqmPoqfG93D;IvsKEydqOUT;UN0aH8CjbZJ;sIPZ84RBqMM;LJX5GuypkKy&filter=pe:201712&displayProperty=NAME&tableLayout=true&columns=dx&rows=ou
- Again, the dimensions are hard coded in the report and we do not need to change these
The filter=pe:201712 is what needs to change. This is the period which has the combination YYYYMM The analytics endpoint will calculate this for each month and return raw JSON if we change this value to be something like 201701 for January 2017
This is also a lot of information that needs to be formatted for each province in Mozambique. We will need to adjust the JSON to make more sense of it before we store it in the database. Ultimately, the JSON looks something like this for the Niassa Province. In this table, we sum all of the IDs that have the same value before the dot. So, to get the BCG Realizado value, we add the highlighted cells to get 8566. We then get the coverage percentage by dividing that number by the monthly population estimate for Gr. Alvo 4% from the other query (8566/5964)*100=144%
Indicator Description | ID | Niassa value |
---|---|---|
PAV - BCG 0 - 11 meses, Brigada Móvel, FEMININO | i7VbzJ0W5qT.AZq6AqCYSfD | 150 |
PAV - BCG 0 - 11 meses, Brigada Móvel, MASCULINO | i7VbzJ0W5qT.UYnV8StRNy3 | 170 |
PAV - BCG 0 - 11 meses, Posto Fixo, FEMININO | i7VbzJ0W5qT.qaZHEHPHk6R | 4199 |
PAV - BCG 0 - 11 meses, Posto Fixo, MASCULINO | i7VbzJ0W5qT.mVw0xixOoBU | 4047 |
PAV - Polio primario 0 - 11 meses, Brigada Móvel, FEMININO | ytweIW4mUYf.AZq6AqCYSfD | 134 |
PAV - Polio primario 0 - 11 meses, Brigada Móvel, MASCULINO | ytweIW4mUYf.UYnV8StRNy3 | 151 |
PAV - Polio primario 0 - 11 meses, Posto Fixo, FEMININO | ytweIW4mUYf.qaZHEHPHk6R | 3984 |
PAV - Polio primario 0 - 11 meses, Posto Fixo, MASCULINO | ytweIW4mUYf.mVw0xixOoBU | 3796 |
PAV - Polio 1ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | RBKSa3oUTg2.AZq6AqCYSfD | 359 |
PAV - Polio 1ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | RBKSa3oUTg2.UYnV8StRNy3 | 379 |
PAV - Polio 1ª Dose 0 - 11 meses, Posto Fixo, FEMININO | RBKSa3oUTg2.qaZHEHPHk6R | 3222 |
PAV - Polio 1ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | RBKSa3oUTg2.mVw0xixOoBU | 3040 |
PAV - Polio 2ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | rLHCtgEQdnq.AZq6AqCYSfD | 346 |
PAV - Polio 2ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | rLHCtgEQdnq.UYnV8StRNy3 | 299 |
PAV - Polio 2ª Dose 0 - 11 meses, Posto Fixo, FEMININO | rLHCtgEQdnq.qaZHEHPHk6R | 2813 |
PAV - Polio 2ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | rLHCtgEQdnq.mVw0xixOoBU | 2799 |
PAV - Polio 3ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | xw1x5f1HfOd.AZq6AqCYSfD | 495 |
PAV - Polio 3ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | xw1x5f1HfOd.UYnV8StRNy3 | 543 |
PAV - Polio 3ª Dose 0 - 11 meses, Posto Fixo, FEMININO | xw1x5f1HfOd.qaZHEHPHk6R | 2617 |
PAV - Polio 3ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | xw1x5f1HfOd.mVw0xixOoBU | 2633 |
PAV - IPV 0 - 11 meses, Brigada Móvel, FEMININO | BPghXJ1HK64.AZq6AqCYSfD | 329 |
PAV - IPV 0 - 11 meses, Brigada Móvel, MASCULINO | BPghXJ1HK64.UYnV8StRNy3 | 363 |
PAV - IPV 0 - 11 meses, Posto Fixo, FEMININO | BPghXJ1HK64.qaZHEHPHk6R | 2154 |
PAV - IPV 0 - 11 meses, Posto Fixo, MASCULINO | BPghXJ1HK64.mVw0xixOoBU | 2208 |
PAV - DPT-HepB+Hib 1ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | FeeXwOEJcGz.AZq6AqCYSfD | 341 |
PAV - DPT-HepB+Hib 1ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | FeeXwOEJcGz.UYnV8StRNy3 | 361 |
PAV - DPT-HepB+Hib 1ª Dose 0 - 11 meses, Posto Fixo, FEMININO | FeeXwOEJcGz.qaZHEHPHk6R | 3228 |
PAV - DPT-HepB+Hib 1ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | FeeXwOEJcGz.mVw0xixOoBU | 3078 |
PAV - DPT-HepB+Hib 2ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | S3ReXW7kbv3.AZq6AqCYSfD | 639 |
PAV - DPT-HepB+Hib 2ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | S3ReXW7kbv3.UYnV8StRNy3 | 295 |
PAV - DPT-HepB+Hib 2ª Dose 0 - 11 meses, Posto Fixo, FEMININO | S3ReXW7kbv3.qaZHEHPHk6R | 2866 |
PAV - DPT-HepB+Hib 2ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | S3ReXW7kbv3.mVw0xixOoBU | 2839 |
PAV - DPT-HepB+Hib 3ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | RtYn2iXsvPM.AZq6AqCYSfD | 495 |
PAV - DPT-HepB+Hib 3ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | RtYn2iXsvPM.UYnV8StRNy3 | 535 |
PAV - DPT-HepB+Hib 3ª Dose 0 - 11 meses, Posto Fixo, FEMININO | RtYn2iXsvPM.qaZHEHPHk6R | 2664 |
PAV - DPT-HepB+Hib 3ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | RtYn2iXsvPM.mVw0xixOoBU | 2670 |
PAV - PCV 1ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | BMRTt5gbU85.AZq6AqCYSfD | 341 |
PAV - PCV 1ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | BMRTt5gbU85.UYnV8StRNy3 | 362 |
PAV - PCV 1ª Dose 0 - 11 meses, Posto Fixo, FEMININO | BMRTt5gbU85.qaZHEHPHk6R | 3227 |
PAV - PCV 1ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | BMRTt5gbU85.mVw0xixOoBU | 3057 |
PAV - PCV 2ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | hLvZXyEZUIc.AZq6AqCYSfD | 343 |
PAV - PCV 2ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | hLvZXyEZUIc.UYnV8StRNy3 | 295 |
PAV - PCV 2ª Dose 0 - 11 meses, Posto Fixo, FEMININO | hLvZXyEZUIc.qaZHEHPHk6R | 2846 |
PAV - PCV 2ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | hLvZXyEZUIc.mVw0xixOoBU | 2819 |
PAV - PCV 3ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | EckOKVrmvEX.AZq6AqCYSfD | 487 |
PAV - PCV 3ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | EckOKVrmvEX.UYnV8StRNy3 | 535 |
PAV - PCV 3ª Dose 0 - 11 meses, Posto Fixo, FEMININO | EckOKVrmvEX.qaZHEHPHk6R | 2647 |
PAV - PCV 3ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | EckOKVrmvEX.mVw0xixOoBU | 2663 |
PAV - RV 1ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | x2nuUb4JmDs.AZq6AqCYSfD | 325 |
PAV - RV 1ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | x2nuUb4JmDs.UYnV8StRNy3 | 336 |
PAV - RV 1ª Dose 0 - 11 meses, Posto Fixo, FEMININO | x2nuUb4JmDs.qaZHEHPHk6R | 3207 |
PAV - RV 1ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | x2nuUb4JmDs.mVw0xixOoBU | 3038 |
PAV - RV 2ª Dose 0 - 11 meses, Brigada Móvel, FEMININO | KWqwoZZXT99.AZq6AqCYSfD | 331 |
PAV - RV 2ª Dose 0 - 11 meses, Brigada Móvel, MASCULINO | KWqwoZZXT99.UYnV8StRNy3 | 280 |
PAV - RV 2ª Dose 0 - 11 meses, Posto Fixo, FEMININO | KWqwoZZXT99.qaZHEHPHk6R | 2787 |
PAV - RV 2ª Dose 0 - 11 meses, Posto Fixo, MASCULINO | KWqwoZZXT99.mVw0xixOoBU | 2768 |
PAV - Sarampo 0 - 11 meses, Brigada Móvel, FEMININO | KAT4V8gyIIo.AZq6AqCYSfD | 994 |
PAV - Sarampo 0 - 11 meses, Brigada Móvel, MASCULINO | KAT4V8gyIIo.UYnV8StRNy3 | 794 |
PAV - Sarampo 0 - 11 meses, Posto Fixo, FEMININO | KAT4V8gyIIo.qaZHEHPHk6R | 2709 |
PAV - Sarampo 0 - 11 meses, Posto Fixo, MASCULINO | KAT4V8gyIIo.mVw0xixOoBU | 2665 |
PAV - Sarampo-Rubéola 18-23 meses, Brigada Móvel, FEMININO | E99RDvLYuvZ.cBMku288XIu | 349 |
PAV - Sarampo-Rubéola 18-23 meses, Brigada Móvel, MASCULINO | E99RDvLYuvZ.Jp1mSZfd94e | 365 |
PAV - Sarampo-Rubéola 18-23 meses, Posto Fixo, FEMININO | E99RDvLYuvZ.dXjAUcOo5Ms | 1363 |
PAV - Sarampo-Rubéola 18-23 meses, Posto Fixo, MASCULINO | E99RDvLYuvZ.i7oAiY0OoKb | 1391 |
PAV - Crianças Completamente Vacinadas Brigada Móvel, FEMININO | wZEOgPMvciS.An0ixEtkvD0 | 951 |
PAV - Crianças Completamente Vacinadas Brigada Móvel, MASCULINO | wZEOgPMvciS.Vl5SozUWrQB | 774 |
PAV - Crianças Completamente Vacinadas Posto Fixo, FEMININO | wZEOgPMvciS.wtVP85udKGT | 2655 |
PAV - Crianças Completamente Vacinadas Posto Fixo, MASCULINO | wZEOgPMvciS.ZHITxfjkOUz | 2574 |
PAV - Polio 1ª Dose | RBKSa3oUTg2 | 7003 |
PAV - Polio 3ª Dose | xw1x5f1HfOd | 6297 |
PAV - DPT-HepB+Hib 1ª Dose | FeeXwOEJcGz | 7010 |
PAV - DPT-HepB+Hib 3ª Dose | RtYn2iXsvPM | 6379 |
PAV - PCV 1ª Dose | BMRTt5gbU85 | 6989 |
PAV - PCV 3ª Dose | EckOKVrmvEX | 6353 |
PAV - RV 1ª Dose | x2nuUb4JmDs | 6906 |
PAV - RV 2ª Dose | KWqwoZZXT99 | 6169 |
In order to get these values, we will need to modify the JSON so it's easier to store in the database table. I don't know if we want to do the calculations in Nifi, the database or Superset.
Note: I have not yet figured out the "Indíce de Quebra Vacinal" Vaccine breakage index
The DHIS-2 API expects individual districts to be identified by the codes contained within Districts Codes.xlsx.