Skip to content

Commit 6a8b8c5

Browse files
committed
Added extra filters
1 parent 69b52eb commit 6a8b8c5

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed

src/app/(dashboard)/stats/actions.ts

+50-6
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export async function fetchData(formData: FormData) {
3636
const temp: Record<string, string> = {};
3737

3838
if (filter.template == "_tag_location") {
39-
console.log(filter);
4039
const template = `http://smartregister.org/fhir/location-tag|${
4140
filter.params[0].value ?? ""
4241
}`;
@@ -91,12 +90,14 @@ export async function fetchData(formData: FormData) {
9190
createQuestionnaireResponseFilters(
9291
"exposed-infant-milestone-hiv-test",
9392
rawDate,
94-
baseFilter
93+
baseFilter,
94+
false
9595
),
9696
createQuestionnaireResponseFilters(
9797
"art-client-viral-load-collection",
9898
rawDate,
99-
baseFilter
99+
baseFilter,
100+
false
100101
),
101102
]);
102103
const summary: string[] = [
@@ -107,9 +108,32 @@ export async function fetchData(formData: FormData) {
107108
"Milestone answered",
108109
"VL collected answered",
109110
];
110-
console.log(JSON.stringify(bundle));
111111

112-
return { summaries: getResults(bundle, summary), date: rawDate };
112+
return {
113+
summaries: getResults(bundle, summary, [
114+
{
115+
index: 4,
116+
filter: (resource) => {
117+
return (
118+
resource?.item?.[0]?.item?.find(
119+
(e) => e.linkId == "able-to-conduct-test"
120+
)?.answer?.[0]?.valueBoolean ?? false
121+
);
122+
},
123+
},
124+
{
125+
index: 5,
126+
filter: (resource) => {
127+
return (
128+
(resource?.item ?? [])?.find(
129+
(e) => e.linkId == "viral-load-collection-confirmation"
130+
)?.answer?.[0]?.valueBoolean ?? false
131+
);
132+
},
133+
},
134+
]),
135+
date: rawDate,
136+
};
113137
}
114138

115139
const getLocationData = (bundle: fhirR4.Bundle | undefined): LocationData[] => {
@@ -128,13 +152,33 @@ const getLocationData = (bundle: fhirR4.Bundle | undefined): LocationData[] => {
128152

129153
const getResults = (
130154
bundle: fhirR4.Bundle | undefined,
131-
summary: string[]
155+
summary: string[],
156+
filters: {
157+
index: number;
158+
filter: (resource?: fhirR4.QuestionnaireResponse) => boolean;
159+
}[]
132160
): SummaryItem[] => {
133161
if (bundle == undefined) {
134162
return [];
135163
}
136164
return (
137165
bundle.entry?.map((entry, idx) => {
166+
const filter = filters.find((e) => e.index == idx)?.filter;
167+
if (filter) {
168+
const items = (entry.resource as fhirR4.Bundle)?.entry ?? [];
169+
const unique = [
170+
...new Map(
171+
items.map((v) => [
172+
(v.resource as fhirR4.QuestionnaireResponse).subject?.reference,
173+
v.resource as fhirR4.QuestionnaireResponse,
174+
])
175+
).values(),
176+
];
177+
return {
178+
name: summary[idx],
179+
value: unique?.filter(filter).length ?? 0,
180+
};
181+
}
138182
return {
139183
name: summary[idx],
140184
value: (entry.resource as fhirR4.Bundle)?.total ?? 0,

src/app/(dashboard)/stats/filters.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { fhirR4 } from "@smile-cdr/fhirts";
12
import { QueryParam, fixDate } from "./model";
23
import { format } from "date-fns";
34

@@ -10,7 +11,7 @@ export const createQuestionnaireResponseFilters = (
1011
questionnaire: string,
1112
date: string | string[] | null,
1213
baseFilter: Record<string, string>[],
13-
hasCount = true
14+
hasCount = true,
1415
) => {
1516
const query = new QueryParam({
1617
questionnaire: questionnaire,

0 commit comments

Comments
 (0)