diff --git a/src/modules/nestedMenu/components/nestedSubMenu/item.component.tsx b/src/modules/nestedMenu/components/nestedSubMenu/item.component.tsx index 9456bde..4108644 100644 --- a/src/modules/nestedMenu/components/nestedSubMenu/item.component.tsx +++ b/src/modules/nestedMenu/components/nestedSubMenu/item.component.tsx @@ -1,6 +1,6 @@ import React from "react"; import {randomInteger} from "../../services/randomInteger"; -import {checkStyle, createStyleElement} from "../../services/createStyleElement"; +import {parseStyle, createStyleElement} from "../../services/createStyleElement"; const styles = { root: { @@ -10,7 +10,7 @@ const styles = { export function Item({name, selected, children}:{name:string, selected:boolean, children:any}){ let id = `nestedMenuItem_${randomInteger()}` - createStyleElement(id,checkStyle(name)) + createStyleElement(id,parseStyle(name)) return
{children}
diff --git a/src/modules/nestedMenu/components/nestedSubMenu/nestedSubMenu2.component.tsx b/src/modules/nestedMenu/components/nestedSubMenu/nestedSubMenu2.component.tsx index 2635ef1..477bb27 100644 --- a/src/modules/nestedMenu/components/nestedSubMenu/nestedSubMenu2.component.tsx +++ b/src/modules/nestedMenu/components/nestedSubMenu/nestedSubMenu2.component.tsx @@ -3,6 +3,7 @@ import {NestedMenuContent} from "../../../shared/services/content.service"; import {Item} from "./item.component"; import {AnalyticsLink} from "./analyticsLink.component"; import {SubCategory} from "./subCategory.component"; +import {parseStyle} from "../../services/createStyleElement"; const styles = { root: { @@ -69,14 +70,21 @@ export function NestedSubMenu2({menuJson, order}:{menuJson:NestedMenuContent,ord setFocus(order); } + let windowCss; + const isStyleOnly = name=>/^\{.+\}$/.test(name) + let first:string = Object.keys(menuJson)[0]; + if (isStyleOnly(first)) windowCss = parseStyle(first); + let id = `subMenu_${Math.floor(Math.random()*1e7)}` return <> -
0?'appear':''}`}> - {Object.keys(menuJson).map((category,index)=> +
0?'appear':''}`}> + {Object.keys(menuJson).filter((category)=>!isStyleOnly(category)).map((category,index)=> {typeof menuJson[category] === 'string' ? :onSetCategory(category)} name={category} />} )}
+ {windowCss&&} + {windowCss&&
{`#${id}{${windowCss}}`}
} {selectedKey&&} } \ No newline at end of file diff --git a/src/modules/nestedMenu/services/createStyleElement.tsx b/src/modules/nestedMenu/services/createStyleElement.tsx index 3715b63..21f5461 100644 --- a/src/modules/nestedMenu/services/createStyleElement.tsx +++ b/src/modules/nestedMenu/services/createStyleElement.tsx @@ -10,7 +10,7 @@ export function removeStyle(category:string):string{ return category.replace(/\{.+\}/, '') } -export function checkStyle(category:string):string|null{ +export function parseStyle(category:string):string|null{ if (!/\{.+\}/.test(category)) return null; let r = category.match(/\{.+\}/); return r&&r[0] diff --git a/src/test/nestedMenu/06.nestedMemuCss.test.tsx b/src/test/nestedMenu/06.nestedMemuCss.test.tsx index 8b7cec4..ca87cbf 100644 --- a/src/test/nestedMenu/06.nestedMemuCss.test.tsx +++ b/src/test/nestedMenu/06.nestedMemuCss.test.tsx @@ -15,5 +15,5 @@ test('5 > Nested menu',async ()=>{ mockContent(widgetContent); await setUpComponent(, ['Results','Targets']); expect(getComputedStyle(document.querySelector('[id*="nestedMenu"]') as HTMLElement).height).toEqual('200px') - expect(getComputedStyle(screen.getByText('Results').parentElement as HTMLElement)['font-weight']).toEqual('500') + expect(getComputedStyle(screen.getByText('Results').parentElement as HTMLElement)['font-weight']).toEqual('700') }) \ No newline at end of file diff --git a/src/test/nestedMenu/08.nestedSubMenuStyle.test.tsx b/src/test/nestedMenu/08.nestedSubMenuStyle.test.tsx new file mode 100644 index 0000000..4038b07 --- /dev/null +++ b/src/test/nestedMenu/08.nestedSubMenuStyle.test.tsx @@ -0,0 +1,23 @@ +import {initServerSettings, mockContent, setUpComponent} from "../shared.testServices"; +import {readFileSync} from "fs"; +import {screen} from "@testing-library/react"; +import {Index} from "../../modules/main/components/index.component"; +import {debug} from "@pepfar-react-lib/testwrap"; +import {clickByText} from "@pepfar-react-lib/testwrap/jsbuild"; + +let widgetContent:string = readFileSync(`${__dirname}/serverResponseSubMenuCss.html`).toString(); + +const checkStyle = (selector:string,property:string,value:string)=>expect(getComputedStyle(document.querySelector(selector) as HTMLElement)[property]).toEqual(value) + +test('7 > Nested sub-menu style',async ()=>{ + initServerSettings({ + superUserOnly: false, + isSuperAdmin: true, + onEditPage: false, + }) + mockContent(widgetContent); + await setUpComponent(, ['Results','Targets']); + checkStyle('.subMenu_0','font-weight','700') + clickByText('Results') + checkStyle('.subMenu_1','color','red') +}) \ No newline at end of file diff --git a/src/test/nestedMenu/22.parentStyle.test.ts b/src/test/nestedMenu/22.rootStyle.test.ts similarity index 100% rename from src/test/nestedMenu/22.parentStyle.test.ts rename to src/test/nestedMenu/22.rootStyle.test.ts diff --git a/src/test/nestedMenu/23.childStyle.test.ts b/src/test/nestedMenu/23.childStyle.test.ts index 2284c8c..4e18866 100644 --- a/src/test/nestedMenu/23.childStyle.test.ts +++ b/src/test/nestedMenu/23.childStyle.test.ts @@ -1,4 +1,4 @@ -import {checkStyle} from "../../modules/nestedMenu/services/createStyleElement"; +import {parseStyle} from "../../modules/nestedMenu/services/createStyleElement"; type TestCase = { input:string; @@ -23,5 +23,5 @@ const testCases:TestCase[] = [{ }] testCases.forEach(({input,output})=>test(`23 > child style > ${input}`,()=>{ - expect(checkStyle(input)).toBe(output) + expect(parseStyle(input)).toBe(output) })) \ No newline at end of file diff --git a/src/test/nestedMenu/serverResponseCss.html b/src/test/nestedMenu/serverResponseCss.html index 74e33c6..f02545f 100644 --- a/src/test/nestedMenu/serverResponseCss.html +++ b/src/test/nestedMenu/serverResponseCss.html @@ -1,4 +1,4 @@ -
Results {font-weight: 500}:
+
Results {font-weight: 700}:
   Prevention:
     VMMC_CIRC:
       Age/sex {background-color: #b7db8f}:
diff --git a/src/test/nestedMenu/serverResponseSubMenuCss.html b/src/test/nestedMenu/serverResponseSubMenuCss.html
new file mode 100644
index 0000000..0130874
--- /dev/null
+++ b/src/test/nestedMenu/serverResponseSubMenuCss.html
@@ -0,0 +1,1589 @@
+
{font-weight:700}:
+Results {font-weight:500}:
+  {color: red}:
+  Prevention:
+    VMMC_CIRC:
+      Age/sex {background-color: #b7db8f}:
+        fy2021q4: ejNtpN4WWZR
+        fy2021q3: UoLR2HjERir
+        fy2021q2: H79KkC9DxFb
+        fy2021q1: sbPMI0DMFzS
+        fy2020q4: kKPtPSo2uKs
+        fy2020q3: Ghf7bi98F99
+        fy2020q2: uMq251ZgMCx
+        fy2020q1: ursClPRqWuB
+        fy2019q4: zj9E73ZJuwI
+        fy2019q3: izzQUaa2Jbn
+        fy2019q2: hawBOLqrE9E
+        fy2019q1: NXopoetrUuk
+      Age/Sex/HIVstatus:
+        fy2021q4: HejxzdAvACx
+        fy2021q3: UylPMmXTft9
+        fy2021q2: KEkppHLjN7r
+        fy2021q1: TnR6fyehAPl
+        fy2020q4: cHRiWYDc5PD
+        fy2020q3: JFf69xmnrRP
+        fy2020q2: mZaKmPNSETa
+        fy2020q1: UkR5SrRNggf
+        fy2019q4: eVUge8dmPl0
+        fy2019q3: xx6RSllsdp4
+        fy2019q2: oNFJVYnenkQ
+        fy2019q1: PTy54Oactf4
+      Technique/sex:
+        fy2021q4: pE99VwvlgeK
+        fy2021q3: gDX7kut4784
+        fy2021q2: hUJ6NNE7G2b
+        fy2021q1: Qw02yNyUG0t
+        fy2020q4: WofyU1rQolo
+        fy2020q3: VaKyTICj9p1
+        fy2020q2: AKBvEl6ZYJh
+        fy2020q1: Y3aMYWrwDtB
+        fy2019q4: FJV7d1bTkNX
+        fy2019q3: GmBbZz9tuRw
+        fy2019q2: xFAmaFSXqzx
+        fy2019q1: MqaxcWHyZjy
+    AGYW_PREV:
+      Age/Sex/Time/Completeness:
+        fy2021q4: HSyxsguuxVa
+        fy2021q2: CPF8gu5qKVj
+        fy2020q4: zy3VDRDP9zq
+        fy2020q2: hKh9RAN9p7v
+        fy2019q4: m8WtEJMclmv
+        fy2019q2: ZhhEV4dOO4c
+      EducationSupport:
+        fy2021q4: iIKNiyYvTBO
+        fy2021q2: Hmrc7jP3Uy9
+        fy2020q4: BzCa1WoENAL
+        fy2020q2: RLD3h6UW6fQ
+      ViolencePrevention:
+        fy2021q4: aPBEFIWv1MZ
+        fy2021q2: mzfQIChkHdF
+        fy2020q4: siuXdnLl3hN
+        fy2020q2: sLkRIDdTI7u
+    PrEP_NEW:
+      Age/sex:
+        fy2021q4: EeAl3JX7K4Q
+        fy2021q3: bmalGLN8P0K
+        fy2021q2: nBAs8qSZagy
+        fy2021q1: O2sgyaQZAWO
+        fy2020q4: v4TTl0JyOKe
+        fy2020q2: rgm4lES5Lam
+        fy2019q4: TcQAgM8RSIC
+        fy2019q2: YdbnroC6wcL
+      Keypop:
+        fy2021q4: fHZPl79EFXj
+        fy2021q3: eGiX1szM02C
+        fy2021q2: rWLG0MS4tZ2
+        fy2021q1: EpnjNA9CiNX
+        fy2020q4: LPrEHllKUII
+        fy2020q2: owUPVWelYKk
+        fy2019q4: TUXmAaRcA7H
+        fy2019q2: Hjd6quAUM5H
+    PrEP_CURR:
+      Age/sex:
+        fy2021q4: Vo6w0MpIGbx
+        fy2021q3: CKOmKXGglm1
+        fy2021q2: RO2G4gH4oNw
+        fy2021q1: gC9Fd5WYM1L
+        fy2020q4: XZ9c2ASJgKP
+        fy2020q2: V7mgkK0Ptcw
+        fy2019q4: Sr7kNBIGlTM
+        fy2019q2: llP4RXStX79
+      Keypop:
+        fy2021q4: zHg8Wj2NGq1
+        fy2021q3: ih7fSEglJBG
+        fy2021q2: SVjeENKMmTW
+        fy2021q1: CthXCrUZbsf
+        fy2020q4: DLzUB11viGl
+        fy2020q2: Pvx4gNQeo0f
+        fy2019q4: oVDP6w9XEK9
+        fy2019q2: Jo2tAHhT088
+      ThreeMonthTestresult:
+        fy2021q4: tkZcjpkqjGQ
+        fy2021q3: ETQ971xZ7bj
+        fy2021q2: vSKO0XwvAQA
+        fy2021q1: CPkQzVJZufQ
+        fy2020q4: lHKrizz94DU
+        fy2020q2: QFoNk6Xv2vE
+        fy2019q4: j1depkrFncx
+        fy2019q2: oPFlOIEjGxj
+    KP_PREV:
+      Keypop:
+        fy2021q4: drI4VUIbxSI
+        fy2021q2: ANeis8X8DGa
+        fy2020q4: oT0rmbqe1EE
+        fy2020q2: tzmGsLUxEWm
+        fy2019q4: t0qYgEo5yiv
+        fy2019q2: X6a5nx3NQY2
+      KeyPop/status:
+        fy2021q4: p7qiugG4u6g
+        fy2021q2: hMDoCRR8Rkc
+        fy2020q4: gv2QZV1nlj2
+        fy2020q2: FGYkFuEeUE5
+        fy2019q4: ed106um7Ts8
+        fy2019q2: Q3bkkoW9Yz3
+    PP_PREV:
+      Age/sex:
+        fy2021q4: fp2C31SFEFn
+        fy2021q2: BrGVI6biSEW
+        fy2020q4: tVE2tZyzEQm
+        fy2020q2: wNqXlQydAEO
+        fy2019q4: aoJE9t4efs9
+        fy2019q2: tCVXzYH8tgN
+      status:
+        fy2021q4: zKqqrjgjeqk
+        fy2021q2: fDoa3poE191
+        fy2020q4: aEjkSabOJKG
+        fy2020q2: ycgWOPXZYLu
+        fy2019q4: gPgFU5XEeXt
+        fy2019q2: h72iHxw0pSi
+      PopPrioritytype:
+        fy2021q4: QfRa1ebh7KH
+        fy2021q2: eMX32pnAAhP
+        fy2020q4: jDkNGvPbGlh
+        fy2020q2: J6vSKIXJC1x
+        fy2019q4: oT4H5Tg39h8
+        fy2019q2: sSLyzXdlOuG
+    OVC_SERV:
+      Age/Sex/Programstatus:
+        fy2021q4: p3Q5pY86Sr1
+        fy2021q2: W0Lcg8Iz61U
+        fy2020q4: kvwQIqFzPaf
+        fy2020q2: FlrRdeXA3b1
+        fy2019q4: V8ajzKXmUdK
+        fy2019q2: IC73t8xgx5e
+      TransferExit:
+        fy2021q4: GXbnySimz4O
+        fy2021q2: mWobCCk6iqC
+        fy2020q4: mHc7S4YZNMk
+        fy2020q2: je6phMbWOht
+        fy2019q4: nTyljSLXNCX
+        fy2019q2: MEzjsV98APt
+      Caregivers:
+        fy2021q4: ROBjtsJwKKa
+        fy2021q2: QWeTSzxF73i
+      DREAMS:
+        fy2021q4: bwUTFVVyRdQ
+        fy2021q2: fWGmWGIhBbw
+      Preventive:
+        fy2021q4: en3GSh6kugA
+        fy2021q2: ss75gF2c6qi
+    TB_PREV (Numerator):
+      Age/TherapyType/Art/status:
+        fy2021q4: kL3Y6QcEz5A
+        fy2021q2: QRJEv7cWOvk
+        fy2020q4: xRbAVV5CYVK
+        fy2020q2: EyLfwdGaNPB
+        fy2019q4: jzziKkCsAFz
+        fy2019q2: wyTwMBEoLdO
+    TB_PREV (Denominator):
+      Age/TherapyType/Art/status:
+        fy2021q4: VedsS7jGkAY
+        fy2021q2: QEqFrTLI26D
+        fy2020q4: xeNopJpxl5R
+        fy2020q2: fffdQBZqt57
+        fy2019q4: WdMHQYqpBV4
+        fy2019q2: CI5hKukQnSV
+    KP_MAT:
+      sex:
+        fy2021q4: cY4FyhrXv0Q
+        fy2020q4: zk0zm1mTQJU
+        fy2019q4: mWhKaodgqkU
+    GEND_GBV:
+      Age/Sex/Violencetype:
+        fy2021q4: FMsrAi8hYDF
+        fy2021q2: Z97eJB8Ro8i
+        fy2020q4: CKAMfCAZQV6
+        fy2019q4: pyz3vdqGejW
+      Age/Sex/PEP:
+        fy2021q4: zmQBgwJ2RSW
+        fy2021q2: hQ0qhqCmDca
+        fy2020q4: mbWfl0mossU
+        fy2019q4: n07XUc50uyr
+    FPINT_SITE:
+      ServDelPoint:
+        fy2021q4: HoAb1aicC5u
+        fy2020q4: iZ0hSHvoirn
+        fy2019q4: w7fgDdYESY6
+  Testing:
+    HTS_TST Topline Numerator:
+      All Modalities:
+        fy2021q4: ktTWwjAdDDA
+        fy2021q3: vKhnEoEZGzH
+        fy2021q2: UTbdQvc0GWB
+        fy2021q1: wqx744at6IB
+        fy2020q4: M18oiYIlwYN
+        fy2020q3: Tm2ZC5no9yt
+        fy2020q2: UwY7d12okPu
+        fy2020q1: hGFchSBaRgt
+        fy2019q4: NT27oR0iF4k
+        fy2019q3: uSeo6x162I4
+        fy2019q2: QozClglFCMJ
+        fy2019q1: Gv97H22dIwv
+    HTS_TST:
+      KeyPop Facility:
+        fy2021q4: rpbGVAwtqxs
+        fy2021q3: sydHfRgpBwk
+        fy2021q2: rSLzhDTnlYI
+        fy2021q1: Y8cPORqonBK
+        fy2020q4: H7OkbGab6WY
+        fy2020q3: NaWXBmxZBjm
+        fy2020q2: HRDRPEMcloq
+        fy2020q1: K1jyiQLBWR0
+        fy2019q4: bbo41bk7Xo9
+        fy2019q3: UZmjXsWbwFi
+        fy2019q2: x3fTr7XiViY
+        fy2019q1: HgR1BHnjEO5
+      KeyPop Community:
+        fy2021q4: phdeKRHOdcd
+        fy2021q3: dzmLcPPbiy5
+        fy2021q2: C9L6FAap1Sy
+        fy2021q1: GPzy5rpgHNW
+        fy2020q4: BWh9hhQeCWV
+        fy2020q3: rj4sYb2m7Xh
+        fy2020q2: rLox8SeVhJ0
+        fy2020q1: uUEa0590Aut
+        fy2019q4: InOVu1z5btr
+        fy2019q3: skhJKNlZHjI
+        fy2019q2: cgchqCwzqUi
+        fy2019q1: eQNlnaUiOCL
+  Testing - Facility Based Modalities:
+    Index:
+      Age/Sex/result:
+        fy2021q4: k2ntLQA79lG
+        fy2021q3: xUTEnJgID6u
+        fy2021q2: q6UoSyt1Yhy
+        fy2021q1: OeRiMfR3925
+        fy2020q4: iocaSt0is2k
+        fy2020q3: M8t0I6Gu6pv
+        fy2020q2: PoHU7Y74O5j
+        fy2020q1: HaMF5VqA3gS
+        fy2019q4: yZR7ELnqJzc
+        fy2019q3: SfGKF354xiV
+        fy2019q2: c0z8ijQcKAy
+        fy2019q1: hfEQCeW9DnU
+    Inpatient:
+      Age/Sex/result:
+        fy2021q4: BrIGpskp1UO
+        fy2021q3: NTU0lX7H7GW
+        fy2021q2: TlnpN4GI6Jw
+        fy2021q1: VqbWFoAiyT1
+        fy2020q4: NDCYFGYmN2H
+        fy2020q3: ujuetffOMuF
+        fy2020q2: B58grLrCb6V
+        fy2020q1: y9LjMu271SV
+        fy2019q4: vpxeHxF4RrP
+        fy2019q3: sQO42NaCaAv
+        fy2019q2: q16FvFEc040
+        fy2019q1: LNirDXhu87K
+    Pediatric:
+      Age/Sex/result:
+        fy2021q4: CmQBtgoZK1R
+        fy2021q3: nYyfYOypqXg
+        fy2021q2: bCaqMM2lp5S
+        fy2021q1: D60mlTHmffv
+        fy2020q4: Y1kVHKr9sTK
+        fy2020q3: BJ4rE5GJCk1
+        fy2020q2: Ej6JMDLsWRc
+        fy2020q1: r35NIeII6q0
+        fy2019q4: bd7YsdwXglP
+        fy2019q3: ZY8zDyRUbmO
+        fy2019q2: L69sxrzO2Nz
+        fy2019q1: zlHEVZ7ZNyB
+    Malnutrition:
+      Age/Sex/result:
+        fy2021q4: ZiLlkN4QrNa
+        fy2021q3: WLUVZ6kssYR
+        fy2021q2: mwuJ7RmGimL
+        fy2021q1: xqC4Xn5T3DE
+        fy2020q4: qicQR0gYJAK
+        fy2020q3: L5p2qu1cdoW
+        fy2020q2: mG6mriVa1Su
+        fy2020q1: iGRLUIEQb2u
+        fy2019q4: iX6StnzF7pQ
+        fy2019q3: iLrd41vYXK9
+        fy2019q2: yPwkRcF0y3y
+        fy2019q1: YfGrugYhfeY
+    TB Clinic:
+      Age/Sex/result:
+        fy2021q4: FY1ooCZs4ug
+        fy2021q3: MgWc4gJsn14
+        fy2021q2: ZWf2P0LaPab
+        fy2021q1: MiirzJmBztt
+        fy2020q4: PjEiWcDjX1a
+        fy2020q3: kYxVmL7xxSw
+        fy2020q2: rhLwpZxKdcq
+        fy2020q1: ptHW69keRb6
+        fy2019q4: k0Z4XOcdyoN
+        fy2019q3: mZS5QRyYw7X
+        fy2019q2: YGgTVZaJb29
+        fy2019q1: WZe9FBtP1hP
+    ANC1:
+      Age/Sex/result:
+        fy2021q4: Lhit6c8Zlyk
+        fy2021q3: YUrNKIeohwJ
+        fy2021q2: Wlw06HwqXKb
+        fy2021q1: n4srrdFw9sa
+        fy2020q4: VIPBnpjGU7c
+        fy2020q3: tshq7XFQxNB
+        fy2020q2: gDUW82acNvJ
+        fy2020q1: XGSxL6Iadov
+        fy2019q4: XcwaAwkW1qp
+        fy2019q3: IUIpq2mAKMc
+        fy2019q2: Dw7ZlIprzed
+        fy2019q1: kK51NzLRYn8
+    Post ANC1:
+      Age/Sex/result:
+        fy2021q4: JrmHyu7HkMd
+        fy2021q3: aii78txd9dJ
+        fy2021q2: oGCoe3FP4PZ
+        fy2021q1: fZDKmlYkxYe
+        fy2020q4: mOEB03zUXTs
+        fy2020q3: O4PXtgltqfq
+        fy2020q2: WyZ9sUa9X2x
+        fy2020q1: UGPH0C3vjbs
+        fy2019q4: vnoG2InKc4C
+        fy2019q3: SD8UXhjNnMo
+        fy2019q2: JW0kIBF7ccF
+        fy2019q1: HbtFumJL0zU
+    VMMC:
+      Age/Sex/result:
+        fy2021q4: AsZLX9o8FiF
+        fy2021q3: qwP45xzsBdM
+        fy2021q2: nF8CAoKNBPO
+        fy2021q1: KdaPu00B8fM
+        fy2020q4: x4PoEZYOLoA
+        fy2020q3: jtYgRx9a7ta
+        fy2020q2: v56k194431U
+        fy2020q1: HURwPqypLEq
+        fy2019q4: uXcsaHOHoZY
+        fy2019q3: KBvszt1SwkF
+        fy2019q2: JaTkXRwTSiZ
+        fy2019q1: bpL7V3qChsd
+    STI Clinic:
+      Age/Sex/result:
+        fy2021q4: VTMLriGa7dr
+        fy2021q3: XPc8GYtR4mc
+        fy2021q2: LAsCBUFWoMx
+        fy2021q1: jaQX8WpTNJx
+        fy2020q4: DvYxQPaYzeC
+        fy2020q3: EtkW0UN8dul
+        fy2020q2: f04UaTodYie
+        fy2020q1: ueKouUzihuJ
+        fy2019q4: wgi0KH547M2
+        fy2019q3: MDQq85DvExN
+        fy2019q2: enXn7SpIagi
+        fy2019q1: Uiv0bmw28l7
+    Emergency Ward:
+      Age/Sex/result:
+        fy2021q4: TJNhUB3jgIE
+        fy2021q3: RxTLeOUNwn3
+        fy2021q2: z1YTFiH42Zy
+        fy2021q1: pBgXCP266iB
+        fy2020q4: ZDj3y2vThHT
+        fy2020q3: XleEPWWvlRP
+        fy2020q2: Y2ZxP5THcdS
+        fy2020q1: pHDcXkYkSk4
+        fy2019q4: E6RgTqozgBx
+        fy2019q3: ppCgI7AUryB
+        fy2019q2: ihdN6ylJpnq
+        fy2019q1: xYEKjB5LVXD
+    Other PITC:
+      Age/Sex/result:
+        fy2021q4: xBjrHBoNqo8
+        fy2021q3: sKDNZOWDx1z
+        fy2021q2: HpkFLGAQwxH
+        fy2021q1: YyPe5bLnVPk
+        fy2020q4: gOpWmQQ9pc4
+        fy2020q3: Mn16egFsRJS
+        fy2020q2: YbUozRcwumA
+        fy2020q1: IE9oOyv7i2e
+        fy2019q4: sPFv6JEbYp1
+        fy2019q3: wANVZeza6l3
+        fy2019q2: gqZ7IR10ROh
+        fy2019q1: VKO3sMLftdf
+    VCT:
+      Age/Sex/result:
+        fy2021q4: HTmzUcdrIvh
+        fy2021q3: YQCGTm0di7Q
+        fy2021q2: JTjTOuGGBvp
+        fy2021q1: A3rcnO8v4QV
+        fy2020q4: gGPJjeWAhbG
+        fy2020q3: xmM4cFo3RS6
+        fy2020q2: EviStBSS8Iy
+        fy2020q1: Dl8I00utO8N
+        fy2019q4: xD8nlEfUsNx
+        fy2019q3: OsNln3veSh4
+        fy2019q2: ByBJv81lHen
+        fy2019q1: nwNcD23MWau
+  Testing - Community Based Modalities:
+    Index:
+      Age/Sex/result:
+        fy2021q4: wHM7wiJixX4
+        fy2021q3: r8einT2lqMo
+        fy2021q2: y9YqtXl4iNc
+        fy2021q1: v3a7KZEQ7u5
+        fy2020q4: rDCKH6Xscgz
+        fy2020q3: hP0rYo5uQg5
+        fy2020q2: e7qoEp1Ec6C
+        fy2020q1: tY2wvexv8rb
+        fy2019q4: LWljaxxK1OE
+        fy2019q3: Rvm91s9F3eW
+        fy2019q2: ivBrureKRMM
+        fy2019q1: P59s4e2Bn0C
+    Mobile:
+      Age/Sex/result:
+        fy2021q4: qcn8wMgqgrq
+        fy2021q3: u5uClsJtJOM
+        fy2021q2: OxSjzlsqY1x
+        fy2021q1: VG6VMzKu3ND
+        fy2020q4: jzgRJW2fAbs
+        fy2020q3: cQQRhdvpJXg
+        fy2020q2: mSonxYGo84t
+        fy2020q1: gqJWKBzKQmi
+        fy2019q4: inX8MQxiWyG
+        fy2019q3: w4SOTuoaUW7
+        fy2019q2: FWgAnz5pIBH
+        fy2019q1: AxL0mKFMH5G
+    VCT:
+      Age/Sex/result:
+        fy2021q4: cFEEUHkveHt
+        fy2021q3: cIFVkYOkVcF
+        fy2021q2: akHxdMLWoMV
+        fy2021q1: ayMo5gevABw
+        fy2020q4: c6zmeRyqTg7
+        fy2020q3: ps9UVGnltlG
+        fy2020q2: spijVYFHu8x
+        fy2020q1: peZpisnR0wJ
+        fy2019q4: RXnk4uPCVaP
+        fy2019q3: qOdlp1jtOzf
+        fy2019q2: Uo9xQD2Q4mP
+        fy2019q1: u7CqmEWCDKC
+    Other:
+      Age/Sex/result:
+        fy2021q4: woYGnYse147
+        fy2021q3: cxXxdS85iEn
+        fy2021q2: mndgOdixruV
+        fy2021q1: SOWfc10h552
+        fy2020q4: nZG3HN05Wnc
+        fy2020q3: AgCbmAOIoSR
+        fy2020q2: SI0BrtkNwq3
+        fy2020q1: w3UI0GAiTAd
+        fy2019q4: MpS7zP3PW1X
+        fy2019q3: QvZO2a4vYh6
+        fy2019q2: v0cGvSTQ99t
+        fy2019q1: ZRLFeTytxAE
+  Recency Testing:
+    HTS_RECENT (Numerator):
+      Age/Sex/indication:
+        fy2021q4: bwWol5uJUtr
+        fy2021q3: xT3hlsGMsTd
+        fy2021q2: Y9okGHkY3Sl
+        fy2021q1: RN0tEnlB9eH
+        fy2020q4: YFapDIUZz0V
+        fy2020q3: I1xmFJCixBJ
+        fy2020q2: FzMrvEIDmGS
+        fy2020q1: NMHPcVjeUN6
+        fy2019q4: KM7hvoJxHAP
+        fy2019q3: fv7BJdf5Age
+        fy2019q2: KPFTWAzzkeW
+        fy2019q1: PeVqrAc75pw
+      Preg/indication:
+        fy2019q4: dDqFgJr3NuG
+        fy2019q3: Rh5AklSVl3V
+        fy2019q2: ccFmWVbHNaQ
+        fy2019q1: L177Z3GcCSH
+      Keypop:
+        fy2021q4: pJwTlgzbTTH
+        fy2021q3: smoNMdbC74G
+        fy2021q2: oYnJFFBW57O
+        fy2021q1: VPRpS01muR3
+        fy2020q4: lbpkerhBIdj
+        fy2020q3: O3ukqq0gsJK
+        fy2020q2: F7PomXaJT9N
+        fy2020q1: cA4S948PkKG
+        fy2019q4: pAn6Xzd2yZx
+        fy2019q3: ikY0GL0iwvG
+        fy2019q2: zYLO71Ux20t
+        fy2019q1: hqusKh9UZK3
+    HTS_RECENT Confirmatory:
+      Confirmatory/Age/Sex/HIVstatus:
+        fy2021q4: W2gFuFSQMXu
+        fy2021q3: r4R3ANHLCnn
+        fy2021q2: KVF63aVc40T
+        fy2021q1: LxdFultKcEe
+        fy2020q4: CcR9C5yc6IV
+        fy2020q3: YrK8qFDeBIU
+        fy2020q2: WSFAaZwh0Ob
+        fy2020q1: o0B7azegS1T
+      Keypop:
+        fy2021q4: q7SSqL8xoZk
+        fy2021q3: DjWpVwWnpsJ
+        fy2021q2: i9smCcweeBp
+        fy2021q1: LxH7Rj6csXx
+        fy2020q4: zrIRLLbcPUu
+        fy2020q3: icG44KP03yp
+        fy2020q2: Ltlbl2RqtxP
+        fy2020q1: M0SN09kj5MQ
+    HTS_RECENT (Denominator):
+      Age/Sex/indication:
+        fy2019q4: DqcUIpfKrTT
+        fy2019q3: Mlg5ubYpvNp
+        fy2019q2: hkt5jE53XUM
+        fy2019q1: wM1X4Qvi2bF
+      Preg/indication:
+        fy2019q4: oD87tR6Lud3
+        fy2019q3: ooMXoTeptSM
+        fy2019q2: jQNCePikxvc
+        fy2019q1: B6wDcolM3s3
+      Keypop:
+        fy2019q4: HhIxkRJUhxY
+        fy2019q3: JH6O4OXqwk9
+        fy2019q2: q2ZbzfObXpf
+        fy2019q1: XJ7XAl3mcLt
+  Recency Testing - Facility Based Modalities:
+    Index:
+      Age/Sex/rtri:
+        fy2021q4: WmHBXtkyLCp
+        fy2021q3: tQUl3kZKEuj
+        fy2021q2: A5iYuGiCu64
+        fy2021q1: eKiyBCsxgn0
+        fy2020q4: L9aXkpxLoH3
+        fy2020q3: JFYRQu8tAK0
+        fy2020q2: w5lTtF2KaF5
+        fy2020q1: c1a1htaHdPo
+    Inpatient:
+      Age/Sex/rtri:
+        fy2021q4: uaPoNCMxOOZ
+        fy2021q3: R6MNVb9bmSS
+        fy2021q2: QhD9mq4qQuH
+        fy2021q1: h6Ro2utlje3
+        fy2020q4: GKNOwIr2Anr
+        fy2020q3: DI5WmWaZfWh
+        fy2020q2: u7aMSL8bsPR
+        fy2020q1: hcRhV1YuJHr
+    TB Clinic:
+      Age/Sex/rtri:
+        fy2021q4: ZT64FDaYCEX
+        fy2021q3: nKTtJvtCVNO
+        fy2021q2: jNurRZz0JB8
+        fy2021q1: Nh3l8QNgwfi
+        fy2020q4: KZcE9RASeCb
+        fy2020q3: MHjwTDogSqS
+        fy2020q2: c6jynccBXNW
+        fy2020q1: bZvPQmUlR0N
+    ANC1:
+      Age/Sex/rtri:
+        fy2021q4: qKfGMaRyXfw
+        fy2021q3: r37GuLpDgEc
+        fy2021q2: h8IpndLKmmt
+        fy2021q1: HjyjFIkrJab
+        fy2020q4: R2Dd1qs2guR
+        fy2020q3: RnCLPr7N3bx
+        fy2020q2: QugLTo8FhwV
+        fy2020q1: VLCMH1mQTkT
+    Post ANC1:
+      Age/Sex/rtri:
+        fy2021q4: YWvHskHj61S
+        fy2021q3: GD9qiGgFTwp
+        fy2021q2: zU0yae3SRLB
+        fy2021q1: BzOGhSvIF3r
+        fy2020q4: oS82dKqlj00
+        fy2020q3: VTFzMhVzJbx
+        fy2020q2: kGu2jP6ZnAu
+        fy2020q1: itJrDmkOmQ5
+    VMMC:
+      Age/Sex/rtri:
+        fy2021q4: IPIuT8RDmfE
+        fy2021q3: R2ej8sLnwSI
+        fy2021q2: w3z9VjoQtrP
+        fy2021q1: pu8mg3TA6N6
+        fy2020q4: IVxKFXDDVT0
+        fy2020q3: P65cmosFdtm
+        fy2020q2: aAHmxVhU0fI
+        fy2020q1: AOlnP3xGLSU
+    STI Clinic:
+      Age/Sex/rtri:
+        fy2021q4: yZXpPdDTBOR
+        fy2021q3: clVzauUyLat
+        fy2021q2: dC75Dt7hf1s
+        fy2021q1: gKXtxHLRQYN
+        fy2020q4: TU0JsiFGfbv
+        fy2020q3: kegq23xUSXk
+        fy2020q2: tw5aa3NtEWs
+        fy2020q1: gO3RapNjK6b
+    Emergency Ward:
+      Age/Sex/rtri:
+        fy2021q4: h2eCRNhHBe1
+        fy2021q3: xXqARik2OZe
+        fy2021q2: UibTwhtwp1R
+        fy2021q1: aqK2mK3hKn8
+        fy2020q4: QiiT9zAwEWb
+        fy2020q3: beZYmQ1EkeB
+        fy2020q2: gdCvh62SyOd
+        fy2020q1: oKdtp2U8BfN
+    Other PITC:
+      Age/Sex/rtri:
+        fy2021q4: ASvD68GfnYY
+        fy2021q3: l1N9YKGrK6W
+        fy2021q2: NprZZ2wOatv
+        fy2021q1: kTkgUjFj0EX
+        fy2020q4: o8kGVSbBhv2
+        fy2020q3: LeBBVlbMLpC
+        fy2020q2: fGM9mgSovqp
+        fy2020q1: t3CQpJJ9zGK
+    VCT:
+      Age/Sex/rtri:
+        fy2021q4: bRLgkLxFODX
+        fy2021q3: G3YIbYc5qRz
+        fy2021q2: NfUOEL4WeOU
+        fy2021q1: KUelF169vJ7
+        fy2020q4: q7s40Y1jmJ1
+        fy2020q3: RTlY7FOLQGp
+        fy2020q2: FBQiXfzyaXs
+        fy2020q1: ojX8EapKoan
+  Recency Testing - Community Based Modalities:
+    Index:
+      Age/Sex/rtri:
+        fy2021q4: S0Rh3RO3cWj
+        fy2021q3: JorBdkR4fg1
+        fy2021q2: VYMiVrRGoMu
+        fy2021q1: KUaYZMzp1zA
+        fy2020q4: gC3TlKUc7qi
+        fy2020q3: JAbqQNO1Xze
+        fy2020q2: UY7LMUBY5Is
+        fy2020q1: jlTCVkO0GTH
+    Mobile:
+      Age/Sex/rtri:
+        fy2021q4: R88AyQsAeLC
+        fy2021q3: j8II71G4qOj
+        fy2021q2: YeXbOV5xjuA
+        fy2021q1: MyD97JmO2oO
+        fy2020q4: aImaxHCwg7i
+        fy2020q3: KFw0J1a5URK
+        fy2020q2: KZJQDytiXWy
+        fy2020q1: HXpvT2O82ab
+    VCT:
+      Age/Sex/rtri:
+        fy2021q4: yWzL4xHS5eo
+        fy2021q3: xRt0pIPLZv8
+        fy2021q2: zhXsmj40cjp
+        fy2021q1: OW3cxClZvzq
+        fy2020q4: nvKMW86ywey
+        fy2020q3: PjLMfrfQi3V
+        fy2020q2: xr2pkj2sph9
+        fy2020q1: ABQPJPyTZGk
+    Other:
+      Age/Sex/rtri:
+        fy2021q4: D7IDtaxOrMw
+        fy2021q3: d19HMDgjkG1
+        fy2021q2: NoNKwQeaDNH
+        fy2021q1: sRHO8BwxfXw
+        fy2020q4: jG2fJarmdfk
+        fy2020q3: y7ClWD50Vi7
+        fy2020q2: kw22rHEntoB
+        fy2020q1: L24squPhQSc
+  Index Testing - Facility Based:
+    HTS_INDEX:
+      Age/Sex/IndexOffered:
+        fy2021q4: ahzjhCeex29
+        fy2021q3: MIk2iGj0qbU
+        fy2021q2: I16gzeOtFec
+        fy2021q1: Z7s5yfmLbx3
+        fy2020q4: gcKlBqRuqFA
+        fy2020q3: AXEKGZ5xTMi
+        fy2020q2: oW8bu8IwtIL
+        fy2020q1: i8Xwi0XDVzq
+        fy2019q4: yZpqqws4N91
+        fy2019q3: uc64bEWlCUJ
+        fy2019q2: ZaHsXEq7dzn
+        fy2019q1: mziifNaAb6u
+      Age/Sex/IndexAccepted:
+        fy2021q4: dsrMZPZT2yj
+        fy2021q3: GnUdw6tdpdv
+        fy2021q2: qAuCP5CwfBc
+        fy2021q1: lZyvTt9M9xn
+        fy2020q4: OpTJmVBcf3r
+        fy2020q3: rInTgA1ygBA
+        fy2020q2: dAUeBOjTj1d
+        fy2020q1: UzTVpfH1V6t
+        fy2019q4: R2IiOPmNm2v
+        fy2019q3: jsLhj26WNlO
+        fy2019q2: kQsQN5jDFzg
+        fy2019q1: p9aGlWxP02V
+      AgeAgg/Sex/Contacts:
+        fy2021q4: MNxkhoBpJl4
+        fy2021q3: nuPUTbiygMl
+        fy2021q2: D0E36wW2S1C
+        fy2021q1: bTDOEzvXFsA
+        fy2020q4: FpmOsQ59bS3
+        fy2020q3: okJo20wvSxa
+        fy2020q2: UZKiqEJWAJl
+        fy2020q1: ekaAMnFaAbI
+        fy2019q4: T9oQEkgZSIQ
+        fy2019q3: PsuMFZ5jgjL
+        fy2019q2: zpW0b1OjWX9
+        fy2019q1: yJ8HQzL3J2F
+      Age/Sex/result:
+        fy2021q4: AyAJ0OlenWl
+        fy2021q3: gToR8Bv13cJ
+        fy2021q2: Jqrie4ivJMd
+        fy2021q1: Uqk4MN3L0gL
+        fy2020q4: o18E1yVzN0m
+        fy2020q3: SlOdwzspjYV
+        fy2020q2: IISyqFewSZF
+        fy2020q1: dO4dkCpxfdv
+        fy2019q4: qGSMndHu5eA
+        fy2019q3: bGLJ93fkPro
+        fy2019q2: gZbDVKybG9w
+        fy2019q1: vGtq6PZQhBU
+  Index Testing - Community Based:
+    HTS_INDEX:
+      Age/Sex/IndexOffered:
+        fy2021q4: oBTZnBe3JRC
+        fy2021q3: BzMEfdmsgvg
+        fy2021q2: E9PKtZycYxf
+        fy2021q1: VpyjhaOkg8r
+        fy2020q4: MwlM8WWHtai
+        fy2020q3: x0E7XFbNwky
+        fy2020q2: waH2dVjuIDE
+        fy2020q1: GiQVNivLRcW
+        fy2019q4: EULdufmyaCh
+        fy2019q3: y2AbjP6LYeb
+        fy2019q2: amw8KOs7joA
+        fy2019q1: tEbli0J4F7A
+      Age/Sex/IndexAccepted:
+        fy2021q4: fk6UAodklkV
+        fy2021q3: rchpT3TF8MQ
+        fy2021q2: c9tBd3okc6B
+        fy2021q1: q8niPH4ZyZS
+        fy2020q4: j1IWnjtw2rL
+        fy2020q3: wJhzTqwg6Jo
+        fy2020q2: d1cu7WG3tD3
+        fy2020q1: l5Q0wJawIqg
+        fy2019q4: sPT9r5OmCP4
+        fy2019q3: StsfbniujuI
+        fy2019q2: qSUBmQlKWjS
+        fy2019q1: dH3wJ0mEEWf
+      AgeAgg/Sex/Contacts:
+        fy2021q4: wuyAMZ3xqZw
+        fy2021q3: kXEPL7TBSYH
+        fy2021q2: xKNCn6QRixk
+        fy2021q1: GOa2FNQKXvI
+        fy2020q4: DAABCHE5YZV
+        fy2020q3: Gz7UkrpJYX3
+        fy2020q2: aYApojhlfF3
+        fy2020q1: DJUjZOFGym5
+        fy2019q4: bF0LFRDcx7D
+        fy2019q3: YLAS2pjm8dy
+        fy2019q2: vQgx8WZybx7
+        fy2019q1: NoBFH6nJ4Dd
+      Age/Sex/result:
+        fy2021q4: R8Z2GhuE9gl
+        fy2021q3: Q1aZeutvs6C
+        fy2021q2: XxHectyobKT
+        fy2021q1: GsTdEon159H
+        fy2020q4: jKI9xgYPJoB
+        fy2020q3: qy7gPshPePM
+        fy2020q2: BtFMi51YiTB
+        fy2020q1: HDy15Lq63w2
+        fy2019q4: l6e3dBeR0SO
+        fy2019q3: L4vkqPpEhi7
+        fy2019q2: f15z2wHKUoo
+        fy2019q1: iug5ed9xmAR
+  Testing - All Others:
+    HTS_SELF:
+      Age/Sex/HIVSelfTest/Assistance:
+        fy2021q4: SiueWOuSmam
+        fy2021q3: ezsy56hS7ag
+        fy2021q2: XzuivoqWVXT
+        fy2021q1: QJYCYcorWM9
+        fy2020q4: bjaxg8zQfv1
+        fy2020q3: OSb3oQy28dp
+        fy2020q2: N7zGkT3Wn0g
+        fy2020q1: Gpc3SmQJ6RP
+        fy2019q4: Nvt76RO5Q9k
+        fy2019q3: EPgPpXASqXU
+        fy2019q2: ncSExJWP8Or
+        fy2019q1: LxMIxLcNsoD
+      KeyPop/HIVSelfTest:
+        fy2021q4: zaqE3zalmuX
+        fy2021q3: xXxj8h0zyjI
+        fy2021q2: bezKLlczkzC
+        fy2021q1: OCKEZV05Uqi
+        fy2020q4: LDCDgomllae
+        fy2020q3: mAgZ19CnXd5
+        fy2020q2: FsY9j9a0jNg
+        fy2020q1: o4kKOdjQVH2
+        fy2019q4: xSuSgDueCY3
+        fy2019q3: BcHv1ebGgJE
+        fy2019q2: YyCDucbPPCF
+        fy2019q1: VdzgvrGVaYm
+      HIV Self Test User:
+        fy2021q4: BWKNqu0hj3j
+        fy2021q3: TKkaGA3d2zD
+        fy2021q2: V4dqbfpvJU6
+        fy2021q1: mqM4jdrvAc9
+        fy2020q4: jDm1CtPJFO1
+        fy2020q3: hqoDm9IqP3R
+        fy2020q2: b4JJS7Rkgc2
+        fy2020q1: U3wMcK25QYK
+        fy2019q4: n8lf5dvfwOB
+        fy2019q3: OCGtFeb8Zec
+        fy2019q2: BSChD2iZE1y
+        fy2019q1: hfjYRCwQhxA
+    PMTCT_STAT (Numerator):
+      Age/Sex/KnownNewresult:
+        fy2021q4: Y4F2SFQnBB8
+        fy2021q3: WWT7zlRjk5C
+        fy2021q2: wlwVQjjmEYq
+        fy2021q1: eQjy2JbY9re
+        fy2020q4: e3EUljpNrXV
+        fy2020q3: TImve2aRern
+        fy2020q2: zvjkQ1K0s3c
+        fy2020q1: wPd4fypY7EU
+        fy2019q4: zR4dBlEd3J0
+        fy2019q3: VAqFTod9ujO
+        fy2019q2: Y26tNUvTzFi
+        fy2019q1: TvdSWmLbxaW
+    PMTCT_STAT (Denominator):
+      Age/sex:
+        fy2021q4: jkiPdSwehyx
+        fy2021q3: ZF5tRkFlAlq
+        fy2021q2: s9Tambz6U06
+        fy2021q1: T6PlhSKu1QY
+        fy2020q4: n1QAWHqkN34
+        fy2020q3: zq6nepWtaoD
+        fy2020q2: Pbm9ytxyOj0
+        fy2020q1: WIyUUfpFcsE
+        fy2019q4: cDcPKIOnBwz
+        fy2019q3: jypZhAsCqAg
+        fy2019q2: AhtNQMwiuCa
+        fy2019q1: n1gBQnemqpY
+    PMTCT_EID:
+      Age:
+        fy2021q4: xVbygoic2WD
+        fy2021q3: D0z2JCcocOS
+        fy2021q2: kXF672jKfwt
+        fy2021q1: yis0gksdEJY
+        fy2020q4: MsNgNpPJNLh
+        fy2020q3: IdBbKfEA5qs
+        fy2020q2: vT7U940aZqw
+        fy2020q1: FyDbeIjCenL
+        fy2019q4: UNLRdvWFZfG
+        fy2019q3: mRrl6Ou5aEV
+        fy2019q2: cwFSQKh3cxR
+        fy2019q1: bLLhn4UbgfX
+    PMTCT_HEI_POS:
+      Age/HIVstatus:
+        fy2021q4: j1Ny3AplIR7
+        fy2021q3: tyK1j8arf3C
+        fy2021q2: hmJHFVYbrws
+        fy2021q1: jWkSPHIxOXD
+        fy2020q4: NyG9ACpxbdh
+        fy2020q3: B2QbpcudoTb
+        fy2020q2: Lb63jxtZcaM
+        fy2020q1: ZGzQBXofGro
+        fy2019q4: kjeK7yBTsbe
+        fy2019q3: Y4Qjbzd1dEQ
+        fy2019q2: vaG5Tpqkw03
+        fy2019q1: MbneWnArMf6
+      Age/HIVStatus/ART:
+        fy2021q4: MEmLUoMixjH
+        fy2021q3: JWaVL10023S
+        fy2021q2: nIow4xFyvtp
+        fy2021q1: DCI8o5PtjWm
+        fy2020q4: ayIXZ27XFqk
+        fy2020q3: WfLaJKb5ilA
+        fy2020q2: InxUhJH2Uwz
+        fy2020q1: rvn07oFlslL
+        fy2019q4: pjOLr0qlX4P
+        fy2019q3: OvR9PAdyrZy
+        fy2019q2: ya3c92e6gIQ
+        fy2019q1: t5f6ADwaE5d
+    TB_STAT (Numerator):
+      Age/Sex/KnownNewPosNeg:
+        fy2021q4: aaVZmTVyUUy
+        fy2021q3: Nw3oxniS5Nf
+        fy2021q2: FBnIfUQyV1B
+        fy2021q1: bEWqGKN6Wxi
+        fy2020q4: GuKgZBG6OMh
+        fy2020q3: rRePhEVapJu
+        fy2020q2: s8Kwca44Ril
+        fy2020q1: JomFZ00hbxS
+        fy2019q4: kxq58vex0kj
+        fy2019q3: NUWkaB0jSh1
+        fy2019q2: UhYQv04vcOM
+        fy2019q1: yhnnjFsclfj
+    TB_STAT (Denominator):
+      Age/sex:
+        fy2021q4: cNDsNu3ajus
+        fy2021q3: DTtT3ObJEvS
+        fy2021q2: WtdvR9CuRUd
+        fy2021q1: Sw0BbmMqfy8
+        fy2020q4: WVQIeCTPRyT
+        fy2020q3: onNTANEND3X
+        fy2020q2: OKM8blZbtqj
+        fy2020q1: YelzYpc0QgW
+        fy2019q4: trMm0JeEy8l
+        fy2019q3: AAlJoOHPHQf
+        fy2019q2: TpaNWnBZpVq
+        fy2019q1: xgrRkkUwEK3
+    CXCA_SCRN (Numerator):
+      Age/Sex/Status/ScreenResult/ScreenVisit:
+        fy2021q4: afJAXO4LdOJ
+        fy2021q2: jhvNA97D2Bh
+        fy2020q4: sx87bV2AxPJ
+        fy2020q2: cuqXA7tXWf1
+        fy2019q4: M8gjnnbxXHE
+        fy2019q2: J8WcQQffUya
+    PMTCT_FO (Numerator):
+      Outcome:
+        fy2021q4: bQnFn1c9ISY
+        fy2020q4: q8VJnXQy7FW
+        fy2019q4: APT3Lcsbg12
+    PMTCT_FO (Denominator):
+      Denominator:
+        fy2021q4: kYYiOlwCGgb
+        fy2020q4: WVhZd0fiduA
+        fy2019q4: ZLij5TGfjWO
+  Treatment:
+    TX_NEW:
+      Age/sex:
+        fy2021q4: MdJqTUtnGg6
+        fy2021q3: uF7hM5siIyz
+        fy2021q2: J9BErMZJO8G
+        fy2021q1: g1A4KDKr52F
+        fy2020q4: dKB0DyR9jIz
+        fy2020q3: NPWlWXaZ9tn
+        fy2020q2: ZBxr09MbibT
+        fy2020q1: kIWMrkyP6hp
+        fy2019q4: m6S6DSmaTG9
+        fy2019q3: P4CXcIzSeTY
+        fy2019q2: MC0wodxhYfi
+        fy2019q1: xy79krFuUix
+      Breast Feeding:
+        fy2021q4: sTFBr2dmxP5
+        fy2021q3: jH9CPS0w4yW
+        fy2021q2: q1AEPs0wbyd
+        fy2021q1: HJvjxol0ePZ
+        fy2020q4: olgBDGSbwa5
+        fy2020q3: GcJmelLRUDZ
+        fy2020q2: Y6GgY9UUrSH
+        fy2020q1: beuAqtsZEQY
+        fy2019q4: Y0RwX5w6J0o
+        fy2019q3: tBpnC22iTwV
+        fy2019q2: PpiCuCDmSCr
+        fy2019q1: LDwaCidBCeZ
+      Keypop:
+        fy2021q4: QyUrR122IxJ
+        fy2021q3: euEpvpHows4
+        fy2021q2: xgNx4GSM0q2
+        fy2021q1: ZZ5WAMe5OYs
+        fy2020q4: UpRPkZakqKF
+        fy2020q3: jOELYsGds9R
+        fy2020q2: pBYDFJChZRk
+        fy2020q1: fsneEGAHYrW
+        fy2019q4: TA7yhD3KbCO
+        fy2019q3: DgpGiBV0TeA
+        fy2019q2: yerqCHUi39j
+        fy2019q1: x47ZjtReZBx
+    TX_CURR:
+      Age/sex:
+        fy2021q4: wua5igMBSse
+        fy2021q3: AiSfRHRcrzj
+        fy2021q2: SVLYHmK0XiW
+        fy2021q1: Xi5ZPv2qqW8
+        fy2020q4: mybPL041czO
+        fy2020q3: dizIN6Tymfy
+        fy2020q2: Rmrw8Rkwf4x
+        fy2020q1: x4lQN7sUubk
+        fy2019q4: xCElVieRWYa
+        fy2019q3: wgfVs3OsqfH
+        fy2019q2: SFjlKMFmVP2
+        fy2019q1: on22gPaktZm
+      ARV/Dispense:
+        fy2021q4: LVZmgmtF1ng
+        fy2021q3: MdJ3m7zuXmO
+        fy2021q2: VEI1CD6eXXy
+        fy2021q1: g71wXixsdZX
+        fy2020q4: K1DpwffhF3R
+        fy2020q3: HNCZmVbfx1W
+        fy2020q2: e899IboN9Wz
+        fy2020q1: cKsVps1ORJs
+      Keypop:
+        fy2021q4: eIFUVeEzJBx
+        fy2021q3: AQOUDjqzTaC
+        fy2021q2: j7TcLFf3g33
+        fy2021q1: rNv17cmDtyb
+        fy2020q4: lbzpOckT2NF
+        fy2020q3: CGXhi502rXC
+        fy2020q2: jm12Tiu9IlW
+        fy2020q1: gAtCzSCKJTk
+    TX_RTT:
+      Age/Sex/HIVstatus:
+        fy2021q4: NUsiSHuNfdQ
+        fy2021q3: p3nW49GOSkh
+        fy2021q2: YznggnkOyHv
+        fy2021q1: edO5eBHXkhv
+        fy2020q4: oPZL3MyPLtY
+        fy2020q3: yW8NHayGZxC
+        fy2020q2: AIaP25qH3I3
+        fy2020q1: StBCD9HylzI
+      Keypop:
+        fy2021q4: GglhCMMInqI
+        fy2021q3: aBYtqRlZfKR
+        fy2021q2: qW26Fwut9fm
+        fy2021q1: ZdCGARXA4oq
+        fy2020q4: CdaAk4M3OT2
+        fy2020q3: sGTXKAWCEeN
+        fy2020q2: wfIkgSFrTAl
+        fy2020q1: scf79Yg5u7q
+    PMTCT_ART:
+      Age/ART/Sex/status:
+        fy2021q4: z6G5qp5nwtO
+        fy2021q3: A1ZQIcjjWnH
+        fy2021q2: r9YzsPncKr2
+        fy2021q1: MRTH9m0ceCE
+        fy2020q4: p0OFwVp4hWx
+        fy2020q3: XrBagxfXY2A
+        fy2020q2: N3lKQc8YqVx
+        fy2020q1: SIemYzeUDUy
+        fy2019q4: XkMBkcNQEKp
+        fy2019q3: p1WolaONrkM
+        fy2019q2: mwux2309MGE
+        fy2019q1: Si3bpncNuXx
+    TB_ART:
+      Age/Sex/ART:
+        fy2021q4: fL23VIt3pO9
+        fy2021q3: PUe37sT1dyX
+        fy2021q2: hElocsMBwjo
+        fy2021q1: OUoz2CJbFkn
+        fy2020q4: R4Xd9ZV6zXW
+        fy2020q3: eR90SMQnane
+        fy2020q2: OMdh5WYKTwW
+        fy2020q1: A1Z16w6c37k
+        fy2019q4: svULsN2Vk86
+        fy2019q3: Zofs6X0TWIc
+        fy2019q2: Wkc0ft6o17y
+        fy2019q1: FUoCgmf40mp
+    OVC_HIVSTAT:
+      Reportedstatus:
+        fy2021q4: Iya4lDLplkJ
+        fy2021q2: VyTuNkp35TD
+        fy2020q4: tbI17FHXTCk
+        fy2020q2: mB2hDEtUWB5
+        fy2019q4: gA5gYLZM9G6
+        fy2019q2: Q6vIBIGNyvG
+    TX_TB (Numeartor):
+      Age/Sex/ART:
+        fy2021q4: ylW2N0JZVJ6
+        fy2021q2: TlMnAjITcIW
+        fy2020q4: TJael1wbIVX
+        fy2020q2: Kfw1cjIeCRz
+        fy2019q4: vfmRpn7NgFl
+        fy2019q2: OXbK9GylPpI
+      TestType/status:
+        fy2019q4: v8AVY0nwZWu
+        fy2019q2: bhFe6rZC7K8
+    TX_TB (Denominator):
+      Age/Sex/TBScreen/ART/status:
+        fy2021q4: TFxTIK1SEu0
+        fy2021q2: OZ3W3Nug6Iv
+        fy2020q4: i6Nx9jhwaLP
+        fy2020q2: fxKzB5EQSFo
+        fy2019q4: NVQwRV50VC6
+        fy2019q2: HsR2Z6D3fWd
+      SpecimenSent/status:
+        fy2021q4: LaNPf8CQiK6
+        fy2021q2: XAnsOBgN4cc
+        fy2020q4: FgiDpHbGM42
+        fy2020q2: RN7R7uN7PLP
+        fy2019q4: nsg8tnFjpD4
+        fy2019q2: rJYJyQ6cxxu
+      SpecimenReturn/status:
+        fy2021q4: L9QIFjrHWjS
+        fy2021q2: l3FhYQ2ANZi
+        fy2020q4: HSZpXJAjKDl
+        fy2020q2: JRZwSecb4Zh
+        fy2019q4: XZnAqYbZ4Sh
+        fy2019q2: bevXMiDgaXO
+      TestType/status:
+        fy2021q4: axqb1sIfCcn
+        fy2021q2: a1ncPwLtVEF
+        fy2020q4: dCiVuZ19Vko
+        fy2020q2: kqe24cMehFL
+    TX_ML:
+      Age/Sex/ART:
+        fy2021q4: u4LI8g18yWv
+        fy2021q3: NFEMDem7yiK
+        fy2021q2: edlC0I8KltC
+        fy2021q1: bQP6LveFsBA
+        fy2020q4: fqrSKzaW4kg
+        fy2020q3: d91FoQWyjke
+        fy2020q2: JhkgsTa0wLu
+        fy2020q1: m64f7cRcsWW
+        fy2019q4: bZCbEtjc0LD
+        fy2019q2: XotiddXKTjM
+      Age/Sex/ARTCauseofDeath/HIVstatus:
+        fy2021q4: PfsK4JsMkzv
+        fy2021q3: B8dJ4SKXvOs
+        fy2021q2: hGgz3JdaObE
+        fy2021q1: XCoCAuqh8HZ
+        fy2020q4: apmBymJ8NLE
+        fy2020q3: RhDmGxyIPQD
+        fy2020q2: zxYqh6WH9nt
+        fy2020q1: ktPDhHHmoUE
+    CXCA_TX:
+      Age/Sex/Status/TreatmentType/ScreenVisittype:
+        fy2021q4: uVWaCyK0hPp
+        fy2021q2: r7tXIYoEBnz
+        fy2020q4: haT5TttVgbu
+        fy2020q2: MqmEJOKdAjc
+        fy2019q4: tzppAweoLav
+        fy2019q2: xTKxtGxMGDa
+  Viral Suppression:
+    TX_PVLS (Numerator):
+      Age/Sex/indication:
+        fy2021q4: gIl09wnA9IL
+        fy2021q3: d6ByyT1in7S
+        fy2021q2: lcuFmG6pIZb
+        fy2021q1: zxEG34sUML6
+        fy2020q4: cIjL2fkWyiD
+        fy2020q3: c0j861mdqnG
+        fy2020q2: A7Tu9pjU7Hq
+        fy2020q1: R05S3PeolNK
+        fy2019q4: SNkaCmvAyWy
+        fy2019q3: jyLHuhqyBVw
+        fy2019q2: kbrx2rzQq8c
+        fy2019q1: fu1HXKSSw7c
+      KeyPop/indication:
+        fy2021q4: GLANKTBFqHl
+        fy2021q3: Wy4EckyGBcW
+        fy2021q2: qB2XsKY5Nnb
+        fy2021q1: ZGXrD8Fh6y7
+        fy2020q4: Vdoxq6L6866
+        fy2020q3: jpNqDguo2M0
+        fy2020q2: GZF8s1Tx9ZB
+        fy2020q1: FSfisgmr5Hr
+      PregBF/indication:
+        fy2021q4: ylVKt4IEl0Y
+        fy2021q3: t5ts3bJTgkr
+        fy2021q2: odNmbIYwqGn
+        fy2021q1: fXEUutQ9h1B
+        fy2020q4: jrtGHUYlRyZ
+        fy2020q3: trOsX2PEYT5
+        fy2020q2: EgEzbRODoX6
+        fy2020q1: PI9jfLUXxag
+        fy2019q4: BlvtwNXNkzQ
+        fy2019q3: jmsrnHlu3wL
+        fy2019q2: rtHNUEPtqCC
+        fy2019q1: x5WY1PrwDj3
+    TX_PVLS (Denominator):
+      Age/Sex/indication:
+        fy2021q4: LhyXQ7jp7pw
+        fy2021q3: eRYC6CI0zyQ
+        fy2021q2: ALIyndhVs6G
+        fy2021q1: UpPsgTemoRS
+        fy2020q4: dcwO00yiErn
+        fy2020q3: HRAeGDB3bqC
+        fy2020q2: ZGTrpk8ke8p
+        fy2020q1: VXB0xApI0lZ
+        fy2019q4: Zq2lGz82Uv8
+        fy2019q3: ezXw3jfQN77
+        fy2019q2: PYnzgSm0IC3
+        fy2019q1: t3dVeOuxUUx
+      KeyPop/indication:
+        fy2021q4: EZY5Ga11vEN
+        fy2021q3: J5XhKPQDlPk
+        fy2021q2: wUcuO5BEF2L
+        fy2021q1: nt1EnmKbkzJ
+        fy2020q4: jEaua9hbZGN
+        fy2020q3: T3q7xjT4m5S
+        fy2020q2: uh2fNoHmpjQ
+        fy2020q1: DbUYLlSnQaK
+      PregBF/indication:
+        fy2021q4: frcfprQxEuK
+        fy2021q3: Q62ksIi4xND
+        fy2021q2: fVf6dfjeBvR
+        fy2021q1: r1NpDpKqjDy
+        fy2020q4: GPAGyzaZ96a
+        fy2020q3: oDnUeN2komH
+        fy2020q2: tnKfjxg43aS
+        fy2020q1: dKNbPEmGrpM
+        fy2019q4: kYk3hMf6t3r
+        fy2019q3: funPmahNrUH
+        fy2019q2: jisvG21Q2T5
+        fy2019q1: s16TRl9yOMs
+  Health Systems:
+    SC_ARVDISP:
+      DispensedARVBottles:
+        fy2021q4: bw9b26HN2zU
+        fy2021q2: Res2f6EHnzz
+        fy2020q4: TPDINHYL9RQ
+        fy2020q2: tfxjz9cilQs
+    SC_CURR:
+      CurrentARVBottles:
+        fy2021q4: kk9An0XFU34
+        fy2021q2: LwMWyIJaDC1
+        fy2020q4: Lr8y88yEnd3
+        fy2020q2: UHahapdFg3l
+    HRH_CURR:
+      DedupedStaff/Cadre:
+        fy2020q4: VJthzlRq52L
+        fy2019q4: wXFcFw5z1g5
+      Staff/Cadre/Supporttype:
+        fy2020q4: MliwnWgbpvt
+        fy2019q4: feb3aDHQgm9
+      Exp/Cadre/Supporttype:
+        fy2019q4: bDxeRh2G9LC
+    HRH_PRE:
+      Grad/Cadre:
+        fy2021q4: QNEBzHLx7QA
+        fy2020q4: bajVHFceV6c
+        fy2019q4: qOauxcBZ268
+    EMR_SITE:
+      ServiceDeliveryArea:
+        fy2021q4: VHBrJ2IkduU
+        fy2020q4: c67Yeq1bsEH
+        fy2019q4: cgJJL383lJ7
+    LAB_PTCQI (Lab Based):
+      Lab/CQI:
+        fy2021q4: s1g01QFPs5J
+        fy2020q4: oegxL38on9y
+        fy2019q4: eDiGZ8Aavii
+      Lab/PT:
+        fy2021q4: hiDPeYHHnYv
+        fy2020q4: RHU4BVPhcrd
+        fy2019q4: WHrJRDXdTgt
+      Lab/TestVolume:
+        fy2021q4: I9yIXDAs2x1
+        fy2020q4: KJVsYsnD0gR
+        fy2019q4: vfpZPMWtTES
+    LAB_PTCQI (POCT Based):
+      POCT/CQI:
+        fy2021q4: rRX0s07JRO1
+        fy2020q4: LGwTKr7ltZA
+        fy2019q4: q66NOLL4Z4x
+      POCT/PT:
+        fy2021q4: GSLiskXVP8f
+        fy2020q4: qvldPv6jUgd
+        fy2019q4: jK62gsysnJ9
+      POCT/TestVolume:
+        fy2021q4: GSUZOofwWSP
+        fy2020q4: sZFjm8AvlQk
+        fy2019q4: H2YvY7E2px4
+  National Level Indicators:
+    KP_MAT_NAT:
+      Sex:
+        fy2021q4: OpIfXz7oIBm
+    TX_CURR_NAT:
+      Age/Sex/HIVStatus:
+        fy2021q4: CjVLi0GuOQn
+Targets {font-weight: 500}:
+  Prevention:
+    VMMC_CIRC:
+      Age/Sex:
+        fy2021q2: Iz4okIAu8Jz
+      Age/Sex/HIVStatus:
+        fy2021q4: u2qn3yNE9Mk
+        fy2021q3: MdFa6YpAiI2
+        fy2021q2: uKGYE74SqK4
+    PrEP_NEW:
+      Age/Sex:
+        fy2021q4: HzLYkJOTdVN
+        fy2021q3: qBZoBqDQhfM
+        fy2021q2: x5MMem2Kp2w
+      KeyPop:
+        fy2021q4: Xrx7tf6qQPC
+        fy2021q3: n9TO2dfQHF2
+        fy2021q2: c6qObjxgRGC
+    PrEP_CURR:
+      Age/Sex:
+        fy2021q4: K29CRVyhD1U
+        fy2021q3: FPDTXoMam06
+        fy2021q2: BvXp3kanmtH
+      KeyPop:
+        fy2021q4: BpVuaoMsJHJ
+        fy2021q3: PSO9ShSsFT9
+        fy2021q2: szFjDmEj2kk
+    KP_PREV (Numerator):
+      KeyPop:
+        fy2021q4: Kt35ZsMnzka
+        fy2021q3: z6dSNW8iCvh
+        fy2021q2: vF2ucRAPfbm
+    PP_PREV:
+      Age/Sex:
+        fy2021q4: MGCa24yOvAv
+        fy2021q3: YKOhEjSxbm3
+        fy2021q2: V05pKYqt3DD
+    TB_PREV (Numerator):
+      Age/Therapy/NewExArt/HIV:
+        fy2021q4: ezQdost8d7F
+        fy2021q3: t5fgZEqMKKi
+        fy2021q2: KM7ziO87ZMT
+    TB_PREV (Denominator):
+      Age/Therapy/NewExArt/HIV:
+        fy2021q4: ZqQB43WzjkV
+        fy2021q3: rFdWeCVr0N1
+        fy2021q2: rHUxZUVlO4g
+    OVC_SERV:
+      Age/Sex/ProgramStatus:
+        fy2021q4: Yj0lNR9jCQA
+        fy2021q3: DLHyxBHI3EQ
+        fy2021q2: fqbocuFy5gE
+      CareGivers:
+        fy2021q4: YzNln31WlGQ
+      DREAMS:
+        fy2021q4: fKAa7FiS8kF
+      Preventive:
+        fy2021q4: rTea8RgBV1N
+    GEND_GBV:
+      ViolenceServiceType:
+        fy2021q4: RaAKQfVzBSu
+        fy2021q3: vlaJnvlcUCh
+        fy2021q2: zH3s2eskSVT
+    KP_MAT:
+      Sex:
+        fy2021q4: C4hEe5jOObJ
+        fy2021q3: hr5vwbENi6T
+        fy2021q2: nfAud3pF70A
+  Testing:
+    HTS_TST:
+      Total Numerator:
+        fy2021q4: mFPo7tm7WRP
+        fy2021q3: tBZFhd8vVoE
+        fy2021q2: target=_blank"
+      KeyPop:
+        fy2021q4: blDNwnX1Vnl
+        fy2021q3: ChOds8d14FI
+        fy2021q2: ljWujNanuza
+  Testing - Facility Based Modalities:
+    Inpatient:
+      Inpat/Age/Sex/Result:
+        fy2021q4: Bov3F21B9Ml
+        fy2021q3: m9D9p501knA
+        fy2021q2: CTYK6Hup46z
+    Pediatric Services:
+      Pediatric/Age/Sex/Result:
+        fy2021q4: j9jxPQXTDVq
+        fy2021q3: Qs2W8lpbStU
+        fy2021q2: Gq4WJmTYvBG
+    Malnutrition Clinics:
+      MN/Age/Sex/Result:
+        fy2021q4: iM57Pp3u7X8
+        fy2021q3: eSwCgVrJrwe
+        fy2021q2: Y1iCUpa3ZIO
+    PMTCT (Post ANC1):
+      PMTCT P/Age/Sex/Result:
+        fy2021q4: eJMW2LCRXC3
+        fy2021q3: L21LvegKzS6
+        fy2021q2: sES4bs2n6e6
+    STI Clinics:
+      STI/Age/Sex/Result:
+        fy2021q4: Re8kTvk2zsL
+        fy2021q3: bT3DFFmXcmu
+        fy2021q2: ELBen8qW3XM
+    Emergency Ward:
+      EW/Age/Sex/Result:
+        fy2021q4: F2mWNsF7DqW
+        fy2021q3: nD5lgUBxb2W
+        fy2021q2: vfinQRhP5Aa
+    Other PITC:
+      OtPITC/Age/Sex/Result:
+        fy2021q4: lHlXDqJ2OZG
+        fy2021q3: UP16Ywk5jS6
+        fy2021q2: IdPGzcVbe05
+    VCT:
+      VCT/Age/Sex/Result:
+        fy2021q4: N5s3Jy9KQMG
+        fy2021q3: p6imfjh793v
+        fy2021q2: SDeUe8M0smt
+  Testing - Community Based Modalities:
+    Mobile Service:
+      MbMod/Age/Sex/Result:
+        fy2021q4: MyVveAAEcuT
+        fy2021q3: YQ37rUDWzXq
+        fy2021q2: pyjWJjZ1kcr
+    VCT Service:
+      VCTMod/Age/Sex/Result:
+        fy2021q2: CER4b4176QD
+    Other Service:
+      OtrMod/Age/Sex/Result:
+        fy2021q4: ACDwT0smQCu
+        fy2021q3: uuc4Fthj7Nv
+        fy2021q2: CAnXXuq1w4h
+  Recency Testing:
+    HTS_RECENT (Denominator):
+      Age/Sex/HIV Ind:
+        fy2021q2: jGjUGhsAvl8
+      KeyPop/HIVStatus:
+        fy2021q2: iN7VeJEhIn4
+      Sex/Preg/HIV/Indicate:
+        fy2021q2: imhErVHrBby
+    HTS_RECENT (Numerator):
+      KeyPop/HIVStatus:
+        fy2021q4: RxEhSzHLqsu
+        fy2021q3: Q5i815H4bLQ
+  Recency Testing - Facility Based Modalities:
+    Index:
+      Index/Age/Sex/Result:
+        fy2021q4: PiIzvR8b1KN
+        fy2021q3: mJ6Zmewzlwu
+    Inpatient:
+      Inpat/Age/Sex/Result:
+        fy2021q4: TgUio9rk5sr
+        fy2021q3: Fr2KbZpsNUN
+    PMTCT (ANC1):
+      PMTCT 1/Age/Sex/Result:
+        fy2021q4: M2eNLKDH8jT
+        fy2021q3: A8lQi3l7hOY
+    PMTCT (Post ANC1):
+      PMTCT P/Age/Sex/Result:
+        fy2021q4: CR9lahv5B3k
+        fy2021q3: jiqj6YGHU20
+    STI Clinics:
+      STI/Age/Sex/Result:
+        fy2021q4: JxfiAYoAzBp
+        fy2021q3: pRzRaUvHXBQ
+    Emergency Ward:
+      EW/Age/Sex/Result:
+        fy2021q4: cSFTpnEfuvO
+        fy2021q3: Y9sXUzRpEse
+    Other PITC:
+      OtPITC/Age/Sex/Result:
+        fy2021q4: WSFtaLibS9v
+        fy2021q3: dXLqNqu5pFe
+    TB:
+      TB/Age/Sex/Result:
+        fy2021q4: ZDlMR4rU36C
+        fy2021q3: N8lWz0aYG0F
+    VCT:
+      VCT/Age/Sex/Result:
+        fy2021q4: brsPqcfxYlJ
+        fy2021q3: AFZBjnLfSpq
+    VMMC:
+      VMMC/Age/Sex/Result:
+        fy2021q4: TwyRXu5hOFn
+        fy2021q3: KUnTQR8kpOD
+  Recency Testing - Community Based Modalities:
+    Mobile Service:
+      MbMod/Age/Sex/Result:
+        fy2021q4: OmzoMVbNiHm
+        fy2021q3: qm9popJ3WxY
+    Other Service:
+      OtrMod/Age/Sex/Result:
+        fy2021q4: zMKc6mLymQj
+        fy2021q3: FDpXyqwgvw0
+    Index Service:
+      IndexMod/Age/Sex/Result:
+        fy2021q4: VqH5i5Oc8Yy
+        fy2021q3: N8ptJ29JGyp
+  Index Testing:
+    HTS_INDEX (Faility):
+      Age/Sex/Result:
+        fy2021q4: TwYqhIxb0hs
+        fy2021q3: r5zkglTTEwF
+        fy2021q2: MQi1rn9NiHU
+    HTS_INDEX (Community):
+      Age/Sex/Result:
+        fy2021q4: JOC7bEntm4x
+        fy2021q3: lD6l7KotVuC
+        fy2021q2: As0SLSgOKlS
+  Testing - All Others:
+    HTS SELF:
+      Age/Sex/HIVSelfTest:
+        fy2021q4: MzO7objj1M4
+        fy2021q3: OowYFLC1uJa
+        fy2021q2: t1Tw1MXWbM8
+      KeyPop:
+        fy2021q4: Id11LaGdxX9
+        fy2021q3: llv4yZggBh7
+    PMTCT_STAT (Numerator):
+      Age/Sex/KnownNewResult:
+        fy2021q4: ccqWcdixOMg
+        fy2021q3: QoKadaW0kPC
+        fy2021q2: iwFYIv3K22v
+    PMTCT_STAT (Denomintor):
+      Age/Sex:
+        fy2021q4: lEVspO4LvDp
+        fy2021q3: fcwL4uOBmsd
+        fy2021q2: JclrTijEjUm
+    PMTCT_EID:
+      Age:
+        fy2021q4: qN8Srj6UTWI
+        fy2021q3: pbAsBPM7uqd
+        fy2021q2: jCG0Fy0RV0p
+    TB_STAT (Numerator):
+      Age/Sex/KnownNewPosNeg:
+        fy2021q4: f2UdzMkZsqB
+        fy2021q3: fTzalNSPHxD
+        fy2021q2: TKFS7ok1ySn
+    TB_STAT (Denominator):
+      Age/Sex:
+        fy2021q4: gBSXYBIVSBa
+        fy2021q3: MutMaplNKbQ
+        fy2021q2: g2gCXIbaiL8
+    CXCA_SCRN:
+      Age/Sex/HIVStatus:
+        fy2021q4: tN7WTfDWLQu
+        fy2021q3: ftPDrnlJozJ
+        fy2021q2: vc43tKxiopi
+    OVC_HIVSTAT:
+      No Disagg:
+        fy2021q4: rh7VGcHC46j
+        fy2021q3: HjoQCnG7Sq7
+        fy2021q2: HOmrXIgJlXl
+  Treatment:
+    TX_NEW:
+      Age/Sex/HIVStatus:
+        fy2021q4: cdP6wEtVclL
+        fy2021q3: mIrDN7uy8ZW
+        fy2021q2: cihNomegtpS
+      KeyPop/HIVStatus:
+        fy2021q4: ykGlUHdWWfq
+        fy2021q3: YXFjLgSj1lP
+        fy2021q2: WhCyhegVrS7
+    TX_CURR:
+      Age/Sex/HIVStaus:
+        fy2021q4: Zl94CLDmlaK
+        fy2021q3: O0q2xooqDXQ
+        fy2021q2: E1ELaubJaRx
+      KeyPop:
+        fy2021q4: FZROAH4m3eb
+        fy2021q3: GfuDpCz3jAD
+    PMTCT_ART:
+      Age/NewExistArt/Sex/HIV:
+        fy2021q4: eVrcw368Oio
+        fy2021q3: s2hroqRhbKd
+        fy2021q2: Mb71iwZQhkg
+    TB_ART (Numerator):
+      Age Agg/Sex/HIVStatus:
+        fy2021q4: ThXEss1PplQ
+        fy2021q3: ZF6K4VSj3xW
+        fy2021q2: yoQAyHhaRsn
+    TX_TB (Denominator):
+      Age/Sex/TBScreen/ART/HIV:
+        fy2021q4: tEKS6q5MeVM
+        fy2021q3: K0WUznHtbKO
+        fy2021q2: bWT08ThT45b
+  Viral Suppression:
+    TX_PVLS (Numerator):
+      Age/Sex/Ind/HIV:
+        fy2021q4: M6IW0tl8X7W
+        fy2021q3: ve9yojOh29s
+      KeyPop:
+        fy2021q4: Cd9mWxKvpSM
+        fy2021q3: QWBfaIQjTvh
+    TX_PVLS (Denominator):
+      Age/Sex/Ind/HIV:
+        fy2021q4: rutLtjm4k9V
+        fy2021q3: YpEnVn7JoJ5
+        fy2021q2: Oe0D2p18Hdg
+      KeyPop:
+        fy2021q4: FMYTydYhun6
+        fy2021q3: usgSMsf1Hc5
+      PregBF/Indication/HIV:
+        fy2021q3: wOVYHKpBmgY
+        fy2021q2: i8223F3JA8Z
+
\ No newline at end of file