Skip to content

Commit 7d7eb50

Browse files
committed
ssd_person rm INSERT INTO, COV driven additional filter options as commented ref blocks
1 parent fcec2da commit 7d7eb50

File tree

1 file changed

+135
-106
lines changed
  • deployment_extracts/systemc/live/ssd_deployment_proc_files/procs

1 file changed

+135
-106
lines changed

deployment_extracts/systemc/live/ssd_deployment_proc_files/procs/ssd_person.sql

Lines changed: 135 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ ELSE
6868

6969
BEGIN
7070
CREATE TABLE ssd_person (
71-
pers_legacy_id NVARCHAR(48), -- metadata={"item_ref":"PERS014A"}
71+
pers_legacy_id NVARCHAR(48), -- metadata={"item_ref":"PERS014A", "info": "Legacy systems identifier. Common to SystemC"}
7272
pers_person_id NVARCHAR(48) PRIMARY KEY, -- metadata={"item_ref":"PERS001A"}
7373
pers_upn NVARCHAR(13), -- metadata={"item_ref":"PERS006A"}
7474
pers_forename NVARCHAR(100), -- metadata={"item_ref":"PERS015A"}
7575
pers_surname NVARCHAR(255), -- metadata={"item_ref":"PERS016A"}
76-
pers_sex NVARCHAR(20), -- metadata={"item_ref":"PERS002A", "item_status":"P", "info":"If -additional- status to Gender is held, otherwise duplicate pers_gender"}
76+
pers_sex NVARCHAR(20), -- metadata={"item_ref":"PERS002A", "item_status":"P", "info":"If -additional- status to Gender is held, as used in stat-returns, otherwise duplicate pers_gender"}
7777
pers_gender NVARCHAR(10), -- metadata={"item_ref":"PERS003A", "item_status":"R", "expected_data":["unknown",NULL,"F","U","M","I"]}
7878
pers_ethnicity NVARCHAR(48), -- metadata={"item_ref":"PERS004A", "expected_data":[NULL, tbc]}
7979
pers_dob DATETIME, -- metadata={"item_ref":"PERS005A", "info": "SSD dat values render as 2024-12-10 00:00:00.000"}
@@ -87,75 +87,56 @@ BEGIN
8787
);
8888
END
8989

90-
-- CTE to get a no_upn_code
91-
-- (assumption here is that all codes will be the same/current)
90+
-- CTE to get no_upn_code
9291
;WITH f903_data_CTE AS (
9392
SELECT
94-
-- get the most recent no_upn_code if exists
93+
-- get most recent no_upn_code if exists
9594
dim_person_id,
9695
no_upn_code,
9796
ROW_NUMBER() OVER (PARTITION BY dim_person_id ORDER BY no_upn_code DESC) AS rn
9897
FROM
9998
HDM.Child_Social.fact_903_data
10099
WHERE
101-
no_upn_code IS NOT NULL -- sparse data in this field, filter for performance
102-
)
103-
INSERT INTO ssd_person (
104-
pers_legacy_id,
105-
pers_person_id,
106-
pers_upn,
107-
pers_forename,
108-
pers_surname,
109-
pers_sex, -- as used in stat-returns
110-
pers_gender, -- Placeholder for those LAs that store sex and gender independently
111-
pers_ethnicity,
112-
pers_dob,
113-
pers_single_unique_id,
114-
pers_upn_unknown,
115-
pers_send_flag,
116-
pers_expected_dob,
117-
pers_death_date,
118-
pers_is_mother,
119-
pers_nationality
120-
100+
no_upn_code IS NOT NULL -- possible sparse data, filter for performance
121101
)
102+
INSERT INTO ssd_person
122103
SELECT
123-
-- TOP 100 -- Limit returned rows to speed up run-time tests [TESTING|LA DEBUG]
124-
p.LEGACY_ID,
125-
CAST(p.DIM_PERSON_ID AS NVARCHAR(48)), -- Ensure DIM_PERSON_ID is cast to NVARCHAR(48)
126-
LEFT(LTRIM(RTRIM(p.UPN)), 13), -- Coerce data to expected 13+strip, to avoid downstream fallover
127-
p.FORENAME,
128-
p.SURNAME,
129-
p.GENDER_MAIN_CODE AS pers_sex, -- Sex/Gender as used in stat-returns
130-
p.GENDER_MAIN_CODE, -- Placeholder for those LAs that store sex and gender independently
131-
dlde.NAT_ID, -- COV change to align with national ID was LEFT(p.ETHNICITY_MAIN_CODE, 4) [REVIEW]
104+
-- TOP 100 -- [TESTING|LA DEBUG]
105+
p.LEGACY_ID, -- pers_legacy_id -- Common SystemC internal ID
106+
CAST(p.DIM_PERSON_ID AS NVARCHAR(48)), -- pers_person_id -- Ensure DIM_PERSON_ID is cast to NVARCHAR(48)
107+
LEFT(LTRIM(RTRIM(p.UPN)), 13), -- pers_upn -- Coerce data to expected 13+strip, to avoid downstream fallover
108+
p.FORENAME, -- pers_forename
109+
p.SURNAME, -- pers_surname
110+
p.GENDER_MAIN_CODE, -- pers_sex -- Sex/Gender as used in stat-returns
111+
p.GENDER_MAIN_CODE, -- pers_gender -- Placeholder for those LAs that store sex and gender independently
112+
dlde.NAT_ID, -- pers_ethnicity -- COV change to align with national ID was LEFT(p.ETHNICITY_MAIN_CODE, 4) [REVIEW]
132113
CASE WHEN (p.DOB_ESTIMATED) = 'N'
133-
THEN p.BIRTH_DTTM -- Set to BIRTH_DTTM when DOB_ESTIMATED = 'N'
114+
THEN p.BIRTH_DTTM -- pers_dob -- Set to BIRTH_DTTM when DOB_ESTIMATED = 'N'
134115
ELSE NULL -- or NULL
135116
END,
136-
NULL AS pers_single_unique_id, -- Set to NULL as default(dev) / or set to NHS num / or set to Single Unique Identifier(SUI)
137-
f903.NO_UPN_CODE AS pers_upn_unknown, -- Source of upn_unknown likely to vary between LAs [REVIEW]
138-
p.EHM_SEN_FLAG,
117+
NULL AS pers_single_unique_id, -- pers_single_unique_id -- Set to NULL as default(dev) / or set to NHS num / or set to Single Unique Identifier(SUI)
118+
f903.NO_UPN_CODE AS pers_upn_unknown, -- pers_upn_unknown -- Source of upn_unknown likely to vary between LAs [REVIEW]
119+
p.EHM_SEN_FLAG, -- pers_send_flag
139120
CASE WHEN (p.DOB_ESTIMATED) = 'Y'
140-
THEN p.BIRTH_DTTM -- Set to BIRTH_DTTM when DOB_ESTIMATED = 'Y'
121+
THEN p.BIRTH_DTTM -- pers_expected_dob -- Set to BIRTH_DTTM when DOB_ESTIMATED = 'Y'
141122
ELSE NULL -- or NULL
142123
END,
143-
p.DEATH_DTTM,
124+
p.DEATH_DTTM, -- pers_death_date
144125
CASE
145-
WHEN p.GENDER_MAIN_CODE <> 'M' AND -- Assumption that if male is not mother
126+
WHEN p.GENDER_MAIN_CODE <> 'M' AND -- Assumption that if male is not mother
146127
EXISTS (SELECT 1 FROM HDM.Child_Social.FACT_PERSON_RELATION fpr
147128
WHERE fpr.DIM_PERSON_ID = p.DIM_PERSON_ID AND
148-
fpr.DIM_LOOKUP_RELTN_TYPE_CODE = 'CHI') -- check for child relation only
129+
fpr.DIM_LOOKUP_RELTN_TYPE_CODE = 'CHI') -- check for child relation only
149130
THEN 'Y'
150-
ELSE NULL -- No child relation found
151-
END,
152-
p.NATNL_CODE -- [REVIEW] LEFT(p.NATNL_CODE, 2)
131+
ELSE NULL -- or no child relation found
132+
END, -- pers_is_mother
133+
p.NATNL_CODE -- pers_nationality -- [REVIEW] LEFT(p.NATNL_CODE, 2)
153134
FROM
154135
HDM.Child_Social.DIM_PERSON AS p
155136

156137
-- [TESTING] 903 table refresh only in reporting period?
157138
LEFT JOIN (
158-
-- ??other accessible location for NO_UPN data than 903 table?? -- [TESTING|LA DEBUG]
139+
-- [REVIEW|LA DEBUG] - accessible location for NO_UPN data other than 903 table?
159140
SELECT
160141
dim_person_id,
161142
no_upn_code
@@ -171,78 +152,126 @@ LEFT JOIN
171152
-- align with national ID
172153
HDM.Child_Social.DIM_LOOKUP_DFE_ETHNIC dlde
173154
ON p.ETHNICITY_MAIN_CODE = dlde.MAIN_CODE
174-
175-
WHERE
155+
WHERE
176156
/* EXCLUSIONS */
177157

178-
-- p.DIM_PERSON_ID IN (1, 2, 3) AND -- -- hard filter on CMS person ids for LA reduced tiny cohort testing
158+
-- p.DIM_PERSON_ID IN (1, 2, 3) -- hard filter for tiny cohort LA testing [TESTING|DEBUG]
179159

180160
p.DIM_PERSON_ID IS NOT NULL
181161
AND p.DIM_PERSON_ID <> -1
182-
-- AND YEAR(p.BIRTH_DTTM) != 1900 -- Remove admin records hard-filter -- #DtoI-1814
162+
-- AND p.BIRTH_DTTM < DATEADD(Y, -100, GETDATE()) -- hard-filter possible 1900 yr admin records -- #DtoI-1814
183163

184164
/* INCLUSIONS */
165+
166+
-- /* Optional flags (uncomment to enable|disable) */
185167
AND (
186-
p.IS_CLIENT = 'Y'
187-
188-
OR (
189-
-- Contacts in SSD window
190-
EXISTS (
191-
SELECT 1
192-
FROM HDM.Child_Social.FACT_CONTACTS fc
193-
WHERE fc.DIM_PERSON_ID = p.DIM_PERSON_ID
194-
AND fc.CONTACT_DTTM >= @ssd_window_start
195-
-- Optional upper bound, if needing a closed window
196-
-- AND fc.CONTACT_DTTM < DATEADD(day, 1, @ssd_window_end)
197-
)
198-
199-
-- Referrals that touch the SSD window
200-
OR EXISTS (
201-
SELECT 1
202-
FROM HDM.Child_Social.FACT_REFERRALS fr
203-
WHERE fr.DIM_PERSON_ID = p.DIM_PERSON_ID
204-
AND (
205-
fr.REFRL_START_DTTM >= @ssd_window_start
206-
OR fr.REFRL_END_DTTM >= @ssd_window_start
207-
OR fr.REFRL_END_DTTM IS NULL
208-
)
209-
)
210-
211-
-- Care leaver in touch in SSD window
212-
OR EXISTS (
213-
SELECT 1
214-
FROM HDM.Child_Social.FACT_CLA_CARE_LEAVERS fccl
215-
WHERE fccl.DIM_PERSON_ID = p.DIM_PERSON_ID
216-
AND fccl.IN_TOUCH_DTTM >= @ssd_window_start
217-
-- Optional upper bound
218-
-- AND fccl.IN_TOUCH_DTTM < DATEADD(day, 1, @ssd_window_end)
219-
)
220-
221-
-- Eligibility flag
222-
OR EXISTS (
223-
SELECT 1
224-
FROM HDM.Child_Social.DIM_CLA_ELIGIBILITY dce
225-
WHERE dce.DIM_PERSON_ID = p.DIM_PERSON_ID
226-
AND dce.DIM_LOOKUP_ELIGIBILITY_STATUS_DESC IS NOT NULL
227-
)
228-
229-
-- Involvements
230-
OR EXISTS (
231-
SELECT 1
232-
FROM HDM.Child_Social.FACT_INVOLVEMENTS fi
233-
WHERE (fi.DIM_PERSON_ID = p.DIM_PERSON_ID
234-
AND (fi.DIM_LOOKUP_INVOLVEMENT_TYPE_CODE NOT LIKE 'KA%' --Key Agencies (External)
235-
OR fi.DIM_LOOKUP_INVOLVEMENT_TYPE_CODE IS NOT NULL
236-
OR fi.IS_ALLOCATED_CW_FLAG = 'Y')
237-
-- AND START_DTTM > '2009-12-04 00:54:49.947' -- #DtoI-1830 care leavers who were aged 22-25 and may not have had Allocated Case Worker relationship for years+
238-
AND DIM_WORKER_ID <> '-1'
239-
240-
AND (fi.END_DTTM IS NULL OR fi.END_DTTM > @ssd_window_start))
241-
)
168+
p.IS_CLIENT = 'Y' -- Toggle as might not apply to all SystemC LAs [REVIEW]
169+
-- OR p.IS_FOSTER = 'Y'
170+
-- OR p.WAS_FOSTER = 'Y'
171+
-- OR p.IS_ADOPTOR = 'Y'
172+
-- OR p.WAS_ADOPTOR = 'Y'
173+
)
174+
175+
176+
AND (
177+
-- Contacts in SSD window
178+
EXISTS (
179+
SELECT 1
180+
FROM HDM.Child_Social.FACT_CONTACTS fc
181+
WHERE fc.DIM_PERSON_ID = p.DIM_PERSON_ID
182+
AND fc.CONTACT_DTTM >= @ssd_window_start
183+
-- Optional upper bound, if needing a closed window
184+
AND fc.CONTACT_DTTM < DATEADD(day, 1, @ssd_window_end)
185+
)
186+
187+
-- Referrals that touch the SSD window
188+
OR EXISTS (
189+
SELECT 1
190+
FROM HDM.Child_Social.FACT_REFERRALS fr
191+
WHERE fr.DIM_PERSON_ID = p.DIM_PERSON_ID
192+
AND (
193+
fr.REFRL_START_DTTM >= @ssd_window_start
194+
OR fr.REFRL_END_DTTM >= @ssd_window_start
195+
OR fr.REFRL_END_DTTM IS NULL
196+
)
242197
)
198+
199+
-- Care leaver in touch in SSD window
200+
OR EXISTS (
201+
SELECT 1
202+
FROM HDM.Child_Social.FACT_CLA_CARE_LEAVERS fccl
203+
WHERE fccl.DIM_PERSON_ID = p.DIM_PERSON_ID
204+
AND fccl.IN_TOUCH_DTTM >= @ssd_window_start
205+
-- Optional upper bound
206+
-- AND fccl.IN_TOUCH_DTTM < DATEADD(day, 1, @ssd_window_end)
207+
)
208+
209+
-- Eligibility flag
210+
OR EXISTS (
211+
SELECT 1
212+
FROM HDM.Child_Social.DIM_CLA_ELIGIBILITY dce
213+
WHERE dce.DIM_PERSON_ID = p.DIM_PERSON_ID
214+
AND dce.DIM_LOOKUP_ELIGIBILITY_STATUS_DESC IS NOT NULL
215+
)
216+
217+
-- Involvements
218+
OR EXISTS (
219+
SELECT 1
220+
FROM HDM.Child_Social.FACT_INVOLVEMENTS fi
221+
WHERE fi.DIM_PERSON_ID = p.DIM_PERSON_ID
222+
223+
-- exclude Key Agency (KA%) involvements unless allocated CW
224+
AND NOT (
225+
COALESCE(fi.DIM_LOOKUP_INVOLVEMENT_TYPE_CODE, '') LIKE 'KA%'
226+
AND COALESCE(fi.IS_ALLOCATED_CW_FLAG, 'N') <> 'Y'
227+
)
228+
229+
-- AND fi.START_DTTM > '2009-12-04 00:54:49.947' -- #DtoI-1830 care leavers who were aged 22-25 and may not have had Allocated Case Worker relationship for years+
230+
AND fi.DIM_WORKER_ID <> '-1'
231+
AND (fi.END_DTTM IS NULL OR fi.END_DTTM > @ssd_window_start)
232+
)
233+
234+
/* --------------------------------------------------------------------
235+
Potential optional inclusions (comment out by default)
236+
Reference as filters that also apply to such as DfE EA API cohort
237+
238+
IMPORTANT: Tables|data might not exist in some LAs
239+
-------------------------------------------------------------------- */
240+
241+
-- OR EXISTS ( -- [OPTIONAL] Early Help contacts
242+
-- SELECT 1
243+
-- FROM HDM.Child_Social.FACT_EHM_CONTACT ehc
244+
-- WHERE ehc.DIM_PERSON_ID = p.DIM_PERSON_ID
245+
-- AND ehc.CONTACT_DTTM >= @ssd_window_start
246+
-- -- Optional upper bound
247+
-- -- AND ehc.CONTACT_DTTM < DATEADD(day, 1, @ssd_window_end)
248+
-- )
249+
250+
-- OR EXISTS ( -- [OPTIONAL] CAF episodes
251+
-- SELECT 1
252+
-- FROM HDM.Child_Social.FACT_CAF_EPISODE caf
253+
-- WHERE caf.DIM_PERSON_ID = p.DIM_PERSON_ID
254+
-- AND (
255+
-- caf.EPISODE_START_DTTM >= @ssd_window_start
256+
-- OR caf.EPISODE_END_DTTM >= @ssd_window_start
257+
-- OR caf.EPISODE_END_DTTM IS NULL
258+
-- )
259+
-- )
260+
261+
-- OR EXISTS ( -- [OPTIONAL] Workspace
262+
-- SELECT 1
263+
-- FROM HDM.Child_Social.FACT_WORKSPACE fw
264+
-- WHERE fw.DIM_PERSON_ID = p.DIM_PERSON_ID
265+
-- AND (
266+
-- fw.START_DTTM >= @ssd_window_start
267+
-- OR fw.END_DTTM >= @ssd_window_start
268+
-- OR fw.END_DTTM IS NULL
269+
-- )
270+
-- )
243271
);
244272

245273

274+
246275
-- -- META-ELEMENT: {"type": "create_idx"}
247276
-- CREATE NONCLUSTERED INDEX IX_ssd_person_pers_dob ON ssd_person(pers_dob);
248277
-- CREATE NONCLUSTERED INDEX IX_ssd_person_pers_common_child_id ON ssd_person(pers_common_child_id);

0 commit comments

Comments
 (0)