Skip to content

Commit

Permalink
adding logic for the immunization data
Browse files Browse the repository at this point in the history
  • Loading branch information
nobert-mumo committed Dec 20, 2024
1 parent 32d0596 commit b7e3fe3
Show file tree
Hide file tree
Showing 18 changed files with 209 additions and 22 deletions.
14 changes: 9 additions & 5 deletions dbt_project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,18 @@ profile: 'palladium_kenya_analytics'
# Configuring models
models:
palladium_kenya_analytics:
base_layer:
staging_layer:
+materialized: table
+schema: staging_base_tables
+schema: staging_layer
dimensional_layer:
+materialized: table
+schema: dimensional_layer
reporting_layer:
intermediate_layer:
+materialized: table
+schema: reporting

+schema: intermediate_layer
universal_semantic_layer:
+materialized: table
+schema: universal_semantic_layer
# Configuring where test failures are saved
tests:
+store_failures: true
Expand All @@ -29,6 +31,8 @@ tests:
# Configuring varibales to be used in the transformations
vars:
years_back: 3
unknown_key: "md5(cast('-1' as varchar))"
date_unknown_key: "md5(cast('1900-01-01' as varchar))"

# These configurations specify where dbt should look for different types of files.
model-paths: ["models"]
Expand Down
8 changes: 0 additions & 8 deletions models/base_layer/staging_base_layer.yml

This file was deleted.

30 changes: 30 additions & 0 deletions models/dimensional_layer/dim_client.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
with data as (
select
distinct clientid,
gender,
birthdate,
maritalstatus,
program,
facilityid
from {{ ref('stg_client_demographics') }}

union

select
'-1' as clientid,
'Unknown' as gender,
cast('1900-01-01' as date) as birthdate,
'Unknown' as maritalstatus,
'Unkonwn' as program,
-999 as facilityid

)
select
{{ dbt_utils.surrogate_key(['clientid']) }} as client_key,
clientid as client_id,
gender,
birthdate,
maritalstatus,
program,
facilityid
from data
9 changes: 5 additions & 4 deletions models/dimensional_layer/dim_date.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ with date_spine as (
),
final_data as (
select
{{ dbt_utils.surrogate_key( ['date_day']) }} as date_key,
cast(date_day as date) as date,
date_part('year', date_day) as Year,
date_part('month', date_day) as Month,
Expand All @@ -17,13 +16,15 @@ final_data as (

union
select
'Unknown' as date_key,
'1900-01-01'::date as date,
-999 as Year,
-999 as Month,
-999 CalendarQuarter
)
select
final_data.*,
cast(current_date as date) as load_date
{{ dbt_utils.surrogate_key( ['date']) }} as date_key,
date,
Year,
Month,
CalendarQuarter
from final_data
23 changes: 23 additions & 0 deletions models/dimensional_layer/dim_facility.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
with data as (
select
distinct facilityid,
facilityname ,
facilitycountry,
facilityregion
from {{ ref('stg_facility') }}

union

select
-1 as facilityid,
'Unknown' as facilityname,
'Unknown' as facilitycountry,
'Unknown' as facilityregion
)
select
{{ dbt_utils.surrogate_key(['facilityid']) }} as facility_key,
facilityid as facility_id,
facilityname as facility_name,
facilitycountry as country,
facilityregion as facility_region
from data
14 changes: 14 additions & 0 deletions models/dimensional_layer/dim_vaccination_status.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
with data as (
select
distinct immunizationstatus
from {{ ref('stg_immunization') }}

union

select
'-1' as immunization_status
)
select
{{ dbt_utils.surrogate_key(['immunizationstatus']) }} as immunization_status_key,
immunizationstatus as immunization_status
from data
20 changes: 20 additions & 0 deletions models/dimensional_layer/dim_vaccine.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
with data as (
select
vaccinecode,
displaylong,
displayshort
from {{ ref('stg_vaccine') }}

union

select
'-1' as vaccinecode,
'Unknown' as displaylong,
'Unknown' as displayshort
)
select
{{ dbt_utils.surrogate_key(['vaccinecode']) }} as vaccine_key,
vaccinecode as vaccine_code,
displaylong,
displayshort
from data
2 changes: 2 additions & 0 deletions models/dimensional_layer/dimensional_layer_schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
version: 2

24 changes: 24 additions & 0 deletions models/dimensional_layer/fct_immunization.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
select
coalesce(facility_key, {{ var('unknown_key') }}) as facility_key,
coalesce(client_key, {{ var('unknown_key') }}) as client_key,
coalesce(vaccine_key, {{ var('unknown_key') }}) as vaccine_key,
coalesce(occurence.date_key, {{ var('date_unknown_key') }}) as occurence_date_key,
coalesce(status.immunization_status_key, {{ var('unknown_key') }}) as immunization_status_key,
dosequantity as dose_quantity,
dosenumber as dose_number,
case
when age(immunization.occurrencedate, client.birthdate) = interval '12 months' then true
else false
end is_12_months_old_at_immunization,
case
when age(immunization.occurrencedate, client.birthdate) = interval '24 months' then true
else false
end is_24_months_old_at_immunization
from {{ ref ('stg_immunization') }} as immunization
left join {{ ref('dim_client') }} as client on client.client_id = immunization.clientid
left join {{ ref('dim_facility') }} as facility on facility.facility_id = immunization.facilityid
left join {{ ref('dim_vaccine') }} as vaccine on vaccine.vaccine_code = immunization.vaccinecode
left join {{ ref('dim_date') }} as occurence on occurence.date = immunization.occurrencedate
left join {{ ref('dim_vaccination_status') }} as status on status.immunization_status = immunization.immunizationstatus


2 changes: 2 additions & 0 deletions models/intermediate_layer/intermediate_layer_schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
version: 2

26 changes: 21 additions & 5 deletions models/sources.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
version: 2
sources:
- name:
database:
schema:
- name: base_layer
database: analytics
schema: base_layer
tables:
- name:
description:
- name: clientdemographics
description: Client demographics
- name: clientrelationship
description: client relationships
- name: encounter
description: encounter viits
- name: facility
description: facility list
- name: immunization
description: immunization encounters
- name: lab
description: lab data
- name: medication
description: medication data
- name: organization
description: organization data
- name: vaccine
description: types of vaccines
25 changes: 25 additions & 0 deletions models/staging_layer/staging_layer_schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
version: 2

models:
- name: stg_client_demographics
description: Data on client demographics where each entry is a single patient
columns:
- name: gender
description: Gender of client
data_tests:
- not_null
- accepted_values:
values: ['FEMALE', 'MALE']
- name: stg_facility
description: Data on facility details
columns:
- name: facilityname
description: facilityname
data_tests:
- unique
- not_null
- name: stg_immunization
description: Data on immunization encounters
columns:
- name: vaccinecode
description: Universal vaccine code associated with a vaccine
3 changes: 3 additions & 0 deletions models/staging_layer/stg_client_demographics.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
select
*
from {{ source('base_layer', 'clientdemographics') }}
3 changes: 3 additions & 0 deletions models/staging_layer/stg_facility.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
select
*
from {{ source('base_layer', 'facility') }}
3 changes: 3 additions & 0 deletions models/staging_layer/stg_immunization.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
select
*
from {{ source('base_layer', 'immunization') }}
3 changes: 3 additions & 0 deletions models/staging_layer/stg_vaccine.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
select
*
from {{ source('base_layer', 'vaccine') }}
21 changes: 21 additions & 0 deletions models/universal_semantic_layer/aggregate_immunization.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
select
facility.facility_name,
client.gender,
vaccine.displaylong as vaccine_name,
status.immunization_status,
dim_date."date" as date_of_immunization,
count(distinct case when immunization_data.is_12_months_old_at_immunization = true then client.client_key end) as no_children_immunized_at_12_months,
count(distinct case when immunization_data.is_24_months_old_at_immunization = true then client.client_key end) as no_children_immunized_at_24_months
from {{ ref('fct_immunization') }} as immunization_data
left join {{ ref('dim_facility') }} as facility on facility.facility_key = immunization_data.facility_key
left join {{ ref('dim_client') }} as client on client.client_key = immunization_data.client_key
left join {{ ref('dim_vaccine') }} as vaccine on vaccine.vaccine_key = immunization_data.vaccine_key
left join {{ ref('dim_vaccination_status') }} as status on status.immunization_status_key = immunization_data.immunization_status_key
left join {{ ref('dim_date') }} as dim_date on dim_date.date_key = immunization_data.occurence_date_key
where status.immunization_status = 'Fully Immunized'
group by
facility.facility_name,
client.gender,
vaccine.displaylong,
status.immunization_status,
dim_date."date"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
version: 2

0 comments on commit b7e3fe3

Please sign in to comment.