Skip to content

Commit f42a938

Browse files
committed
Mosaic fixes for issues/73, /issues/75, issues/269
1 parent 21af9a9 commit f42a938

File tree

4 files changed

+191
-84
lines changed

4 files changed

+191
-84
lines changed

deployment_extracts/mosaic/live/ssd_deployment_individual_files/populate_ssd_data_warehouse.sql

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5848,19 +5848,41 @@ Dependencies:
58485848
cinf_assessment_id,
58495849
cinf_assessment_factors_json
58505850
)
5851-
select
5852-
null cinf_table_id,
5853-
fact.ASSESSMENT_ID cinf_assessment_id,
5854-
fact.FACTOR_VALUE cinf_assessment_factors_json
5855-
from
5856-
dm_cin_assess_factors fact
5857-
inner join dm_workflow_steps stp
5858-
on stp.workflow_step_id = fact.assessment_id
5859-
where
5851+
SELECT
5852+
NULL AS cinf_table_id,
5853+
fact.ASSESSMENT_ID AS cinf_assessment_id,
5854+
N'[' +
5855+
STUFF((
5856+
SELECT N', ' + QUOTENAME(x.FACTOR_VALUE, '"')
5857+
FROM (
5858+
SELECT DISTINCT
5859+
f2.ASSESSMENT_ID,
5860+
NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), '') AS FACTOR_VALUE,
5861+
TRY_CONVERT(int, LEFT(NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), ''), CASE
5862+
WHEN PATINDEX('%[^0-9]%', NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), '')) = 0 THEN LEN(NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), ''))
5863+
ELSE PATINDEX('%[^0-9]%', NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), '')) - 1
5864+
END)) AS num_part,
5865+
CASE
5866+
WHEN PATINDEX('%[^0-9]%', NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), '')) = 0 THEN N''
5867+
ELSE SUBSTRING(NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), ''), PATINDEX('%[^0-9]%', NULLIF(LTRIM(RTRIM(f2.FACTOR_VALUE)), '')), 10)
5868+
END AS alpha_part
5869+
FROM dm_cin_assess_factors f2
5870+
) AS x
5871+
WHERE x.ASSESSMENT_ID = fact.ASSESSMENT_ID
5872+
AND x.FACTOR_VALUE IS NOT NULL
5873+
ORDER BY x.num_part, x.alpha_part, x.FACTOR_VALUE
5874+
FOR XML PATH(''), TYPE
5875+
).value('.', 'NVARCHAR(MAX)'), 1, 2, N'')
5876+
+ N']' AS cinf_assessment_factors_json
5877+
FROM dm_cin_assess_factors fact
5878+
INNER JOIN dm_workflow_steps stp
5879+
ON stp.workflow_step_id = fact.assessment_id
5880+
WHERE
58605881
--CRITERIA: Assessment was ongoing in the period
5861-
coalesce(stp.STARTED_ON, stp.incoming_on) <= @end_date
5862-
and
5863-
dbo.future(stp.completed_on) >= @start_date
5882+
COALESCE(stp.STARTED_ON, stp.incoming_on) <= @end_date
5883+
AND dbo.future(stp.completed_on) >= @start_date
5884+
GROUP BY
5885+
fact.ASSESSMENT_ID
58645886
--
58655887
return 0
58665888
end try
@@ -7249,7 +7271,16 @@ begin
72497271
set nocount on
72507272
--
72517273
--No. or financial years to include, including the current one
7252-
declare @number_of_years_to_include int, @start_date varchar(32), @end_date varchar(32)
7274+
-- declare @number_of_years_to_include int,
7275+
-- @start_date varchar(32),
7276+
-- @end_date varchar(32)
7277+
7278+
-- No. or financial years to include, including the current one
7279+
-- RH [REVIEW] Awaiting LA direct feedback on this. Procs expect datetime..
7280+
DECLARE @number_of_years_to_include INT,
7281+
@start_date DATETIME,
7282+
@end_date DATETIME;
7283+
72537284
--
72547285
set @number_of_years_to_include = @years_to_include - 1
72557286
--
@@ -7263,28 +7294,6 @@ begin
72637294
--
72647295

72657296

7266-
CREATE PROCEDURE ##populate_ssd_main (@years_to_include INT) AS
7267-
BEGIN
7268-
SET NOCOUNT ON;
7269-
7270-
DECLARE @number_of_years_to_include INT,
7271-
@start_date DATETIME,
7272-
@end_date DATETIME;
7273-
7274-
-- RH [REVIEW] Replaced with the above as procs expect datetime?
7275-
-- --No. or financial years to include, including the current one
7276-
-- declare @number_of_years_to_include int, @start_date varchar(32), @end_date varchar(32)
7277-
7278-
SET @number_of_years_to_include = @years_to_include - 1;
7279-
7280-
SELECT
7281-
@start_date = DATEADD(yy, -@number_of_years_to_include, rd.financial_year_start),
7282-
@end_date = rd.curr_day
7283-
FROM report_days rd
7284-
WHERE rd.curr_day = dbo.today();
7285-
7286-
7287-
72887297
-- placeholder tables, incl. Non-core cms or SSDF Other DfE projects (1b, 2(a,b) [REVIEW]
72897298

72907299
exec ##populate_ssd_s251_finance; -- Testing [REVIEW] added RH 290424

deployment_extracts/mosaic/live/ssd_deployment_individual_files/ssd_assessment_factors_base.sql

Lines changed: 63 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
/******DECLARE VARIABLES******/
2-
declare @start_date datetime, @end_date datetime
3-
set @start_date = '1 April 2022'
4-
set @end_date = '31 December 2023'
1+
/* Standalone test harness
2+
3+
-- Ref: orchestrator includes. Re-include here if running script stand-alone
4+
DECLARE @number_of_years_to_include INT = 1,
5+
DECLARE @start_date DATETIME= '20220401';
6+
DECLARE @end_date DATETIME = '20231231';
7+
8+
*/
9+
10+
11+
12+
513
--
614
declare @assessment_workflow_step_types table (
715
workflow_step_type_id numeric(9),
@@ -58,7 +66,7 @@ select
5866
#boolean_answers
5967
from
6068
MO_FORM_BOOLEAN_ANSWERS bool
61-
inner join .MO_QUESTIONS que
69+
inner join dbo.MO_QUESTIONS que
6270
on que.QUESTION_ID = bool.QUESTION_ID
6371
inner join dbo.MO_FORMS frm
6472
on frm.FORM_ID = bool.FORM_ID
@@ -86,29 +94,53 @@ where
8694
--
8795
--
8896
--
89-
select
90-
CONCAT(CAST(sgs.subject_compound_id AS INT), CAST(STP.WORKFLOW_STEP_ID AS INT)) cina_assessment_id,
91-
fct.factor_code cinf_assessment_factors_json
92-
from
93-
MO_WORKFLOW_STEPS stp
94-
inner join MO_SUBGROUP_SUBJECTS sgs
95-
on sgs.subgroup_id = stp.SUBGROUP_ID
96-
and
97-
sgs.SUBJECT_TYPE_CODE = 'PER'
98-
inner join @assessment_workflow_step_types atyp
99-
on atyp.workflow_step_type_id = stp.WORKFLOW_STEP_TYPE_ID
100-
inner join #boolean_answers bool
101-
on bool.assessment_workflow_step_id = stp.workflow_step_id
102-
and
103-
bool.person_id = sgs.subject_compound_id
104-
and
105-
bool.BOOLEAN_ANSWER = 'Y'
106-
inner join @assessment_factor_question_user_codes fct
107-
on fct.question_user_code = bool.QUESTION_USER_CODE
108-
where
109-
--CRITERIA: Assessment was ongoing in the period
110-
dbo.no_time(stp.started_on) <= @end_date
111-
and
112-
dbo.future(dbo.no_time(stp.completed_on)) >= @start_date
113-
and
114-
stp.STEP_STATUS in ('INCOMING', 'STARTED', 'REOPENED', 'COMPLETED')
97+
;WITH RawFactors AS (
98+
SELECT
99+
CONCAT(CAST(sgs.subject_compound_id AS INT), CAST(stp.WORKFLOW_STEP_ID AS INT)) AS cinf_assessment_id,
100+
NULLIF(LTRIM(RTRIM(fct.factor_code)), '') AS factor_code
101+
FROM MO_WORKFLOW_STEPS stp
102+
INNER JOIN MO_SUBGROUP_SUBJECTS sgs
103+
ON sgs.subgroup_id = stp.SUBGROUP_ID
104+
AND sgs.SUBJECT_TYPE_CODE = 'PER'
105+
INNER JOIN @assessment_workflow_step_types atyp
106+
ON atyp.workflow_step_type_id = stp.WORKFLOW_STEP_TYPE_ID
107+
INNER JOIN #boolean_answers bool
108+
ON bool.assessment_workflow_step_id = stp.workflow_step_id
109+
AND bool.person_id = sgs.subject_compound_id
110+
AND bool.BOOLEAN_ANSWER = 'Y'
111+
INNER JOIN @assessment_factor_question_user_codes fct
112+
ON fct.question_user_code = bool.QUESTION_USER_CODE
113+
WHERE
114+
dbo.no_time(stp.started_on) <= @end_date
115+
AND dbo.future(dbo.no_time(stp.completed_on)) >= @start_date
116+
AND stp.STEP_STATUS in ('INCOMING', 'STARTED', 'REOPENED', 'COMPLETED')
117+
),
118+
Parsed AS (
119+
SELECT DISTINCT
120+
r.cinf_assessment_id,
121+
r.factor_code,
122+
TRY_CONVERT(int, LEFT(r.factor_code, CASE
123+
WHEN PATINDEX('%[^0-9]%', r.factor_code) = 0 THEN LEN(r.factor_code)
124+
ELSE PATINDEX('%[^0-9]%', r.factor_code) - 1
125+
END)) AS num_part,
126+
CASE
127+
WHEN PATINDEX('%[^0-9]%', r.factor_code) = 0 THEN ''
128+
ELSE SUBSTRING(r.factor_code, PATINDEX('%[^0-9]%', r.factor_code), 10)
129+
END AS alpha_part
130+
FROM RawFactors r
131+
WHERE r.factor_code IS NOT NULL
132+
)
133+
SELECT
134+
NULL AS cinf_table_id, -- [REVIEW] null here not ideal. Mosaic LA feedback welcomed.
135+
p.cinf_assessment_id,
136+
N'[' +
137+
STUFF((
138+
SELECT N', ' + QUOTENAME(x.factor_code, '"')
139+
FROM Parsed x
140+
WHERE x.cinf_assessment_id = p.cinf_assessment_id
141+
ORDER BY x.num_part, x.alpha_part, x.factor_code
142+
FOR XML PATH(''), TYPE
143+
).value('.', 'NVARCHAR(MAX)'), 1, 2, N'')
144+
+ N']' AS cinf_assessment_factors_json
145+
FROM Parsed p
146+
GROUP BY p.cinf_assessment_id;
Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,50 @@
1-
declare @number_of_years_to_include int
2-
set @number_of_years_to_include = 1
1+
/* Standalone test harness
2+
3+
-- Ref: orchestrator includes. Re-include here if running script stand-alone
4+
DECLARE @number_of_years_to_include INT = 1,
5+
DECLARE @start_date DATETIME= '20220401';
6+
DECLARE @end_date DATETIME = '20231231';
7+
8+
*/
9+
310
--
4-
select
5-
asst.PERSON_ASSESSMENT_ID cinf_assessment_id,
6-
af.ASSESSMENT_FACTOR_CODE cinf_assessment_factors_json
7-
from
8-
SCF.Assessment_Factors af
9-
inner join SCF.Assessments asst
10-
on asst.PERSON_ASSESSMENT_ID = af.PERSON_ASSESSMENT_ID
11-
where
12-
asst.DATE_ASSESSMENT_STARTED <= cast(cast(getdate() as date) as datetime)
13-
and
14-
coalesce(asst.ASSESSMENT_AUTHORISED_DATE,'1 January 2300') >= dateadd(yy,-@number_of_years_to_include,cast(cast(getdate() as date) as datetime))
11+
;WITH Raw AS (
12+
SELECT DISTINCT
13+
asst.PERSON_ASSESSMENT_ID AS cinf_assessment_id,
14+
NULLIF(LTRIM(RTRIM(af.ASSESSMENT_FACTOR_CODE)), '') AS factor_code
15+
FROM SCF.Assessment_Factors af
16+
INNER JOIN SCF.Assessments asst
17+
ON asst.PERSON_ASSESSMENT_ID = af.PERSON_ASSESSMENT_ID
18+
WHERE
19+
asst.DATE_ASSESSMENT_STARTED <= CAST(CAST(GETDATE() AS date) AS datetime)
20+
AND COALESCE(asst.ASSESSMENT_AUTHORISED_DATE, '1 January 2300') >= DATEADD(yy, -@number_of_years_to_include, CAST(CAST(GETDATE() AS date) AS datetime))
21+
),
22+
Parsed AS (
23+
SELECT
24+
r.cinf_assessment_id,
25+
r.factor_code,
26+
TRY_CONVERT(int, LEFT(r.factor_code, CASE
27+
WHEN PATINDEX('%[^0-9]%', r.factor_code) = 0 THEN LEN(r.factor_code)
28+
ELSE PATINDEX('%[^0-9]%', r.factor_code) - 1
29+
END)) AS num_part,
30+
CASE
31+
WHEN PATINDEX('%[^0-9]%', r.factor_code) = 0 THEN ''
32+
ELSE SUBSTRING(r.factor_code, PATINDEX('%[^0-9]%', r.factor_code), 10)
33+
END AS alpha_part
34+
FROM Raw r
35+
WHERE r.factor_code IS NOT NULL
36+
)
37+
SELECT
38+
NULL AS cinf_table_id,
39+
p.cinf_assessment_id,
40+
N'[' +
41+
STUFF((
42+
SELECT N', ' + QUOTENAME(x.factor_code, '"')
43+
FROM Parsed x
44+
WHERE x.cinf_assessment_id = p.cinf_assessment_id
45+
ORDER BY x.num_part, x.alpha_part, x.factor_code
46+
FOR XML PATH(''), TYPE
47+
).value('.', 'NVARCHAR(MAX)'), 1, 2, N'')
48+
+ N']' AS cinf_assessment_factors_json
49+
FROM Parsed p
50+
GROUP BY p.cinf_assessment_id;
Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
1-
select
2-
fact.ASSESSMENT_ID cinf_assessment_id,
3-
fact.FACTOR_VALUE cinf_assessment_factors_json
4-
from
5-
dm_cin_assess_factors fact
1+
;WITH Raw AS (
2+
SELECT DISTINCT
3+
fact.ASSESSMENT_ID AS cinf_assessment_id,
4+
NULLIF(LTRIM(RTRIM(fact.FACTOR_VALUE)), '') AS factor_code
5+
FROM dm_cin_assess_factors fact
6+
),
7+
Parsed AS (
8+
SELECT
9+
r.cinf_assessment_id,
10+
r.factor_code,
11+
TRY_CONVERT(int, LEFT(r.factor_code, CASE
12+
WHEN PATINDEX('%[^0-9]%', r.factor_code) = 0 THEN LEN(r.factor_code)
13+
ELSE PATINDEX('%[^0-9]%', r.factor_code) - 1
14+
END)) AS num_part,
15+
CASE
16+
WHEN PATINDEX('%[^0-9]%', r.factor_code) = 0 THEN ''
17+
ELSE SUBSTRING(r.factor_code, PATINDEX('%[^0-9]%', r.factor_code), 10)
18+
END AS alpha_part
19+
FROM Raw r
20+
WHERE r.factor_code IS NOT NULL
21+
)
22+
SELECT
23+
NULL AS cinf_table_id,
24+
p.cinf_assessment_id,
25+
N'[' +
26+
STUFF((
27+
SELECT N', ' + QUOTENAME(x.factor_code, '"')
28+
FROM Parsed x
29+
WHERE x.cinf_assessment_id = p.cinf_assessment_id
30+
ORDER BY x.num_part, x.alpha_part, x.factor_code
31+
FOR XML PATH(''), TYPE
32+
).value('.', 'NVARCHAR(MAX)'), 1, 2, N'')
33+
+ N']' AS cinf_assessment_factors_json
34+
FROM Parsed p
35+
GROUP BY p.cinf_assessment_id;

0 commit comments

Comments
 (0)