Skip to content

Commit d46e539

Browse files
authored
Merge pull request #321 from tvs-sde/cosd-breast-mappings
Cosd Measurement Mappings
2 parents 53d7d9f + d48313b commit d46e539

File tree

51 files changed

+4233
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+4233
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.Observation;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastFamilialCancerSyndromeIndicator;
6+
7+
[Notes("Notes", DocumentationNotes.ApproximatedDatesWarning)]
8+
internal class CosdV8BreastFamilialCancerSyndromeIndicator : OmopObservation<CosdV8BreastFamilialCancerSyndromeIndicatorRecord>
9+
{
10+
[CopyValue(nameof(Source.NhsNumber))]
11+
public override string? nhs_number { get; set; }
12+
13+
[ConstantValue(44782478, "Hereditary cancer-predisposing syndrome")]
14+
public override int[]? observation_concept_id { get; set; }
15+
16+
[CopyValue(nameof(Source.Date))]
17+
public override DateOnly? observation_date { get; set; }
18+
19+
[CopyValue(nameof(Source.Date))]
20+
public override DateTime? observation_datetime { get; set; }
21+
22+
[ConstantValue(32828, "`EHR episode record`")]
23+
public override int? observation_type_concept_id { get; set; }
24+
25+
[CopyValue(nameof(Source.FamilialCancerSyndromeIndicator))]
26+
public override string? value_as_string { get; set; }
27+
28+
[ConstantValue(2000500005, "Familial Cancer (Indicator)")]
29+
public override int? observation_source_concept_id { get; set; }
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<Query>
2+
<Sql>
3+
with BR as (
4+
select
5+
Record ->> '$.Breast.BreastCore.BreastCoreReferralAndFirstStageOfPatientPathway.DateFirstSeen' as DateFirstSeen,
6+
Record ->> '$.Breast.BreastCore.BreastCoreReferralAndFirstStageOfPatientPathway.DateFirstSeenCancerSpecialist' as SpecialistDateFirstSeen,
7+
Record ->> '$.Breast.BreastCore.BreastCoreLinkageDiagnosticDetails.ClinicalDateCancerDiagnosis' as ClinicalDateCancerDiagnosis,
8+
Record ->> '$.Breast.BreastCore.BreastCoreStaging.IntegratedStageTNMStageGroupingDate' as IntegratedStageTNMStageGroupingDate,
9+
Record ->> '$.Breast.BreastCore.BreastCoreStaging.FinalPreTreatmentTNMStageGroupingDate' as FinalPreTreatmentTNMStageGroupingDate,
10+
coalesce(
11+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment[0].CancerTreatmentStartDate',
12+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment.CancerTreatmentStartDate'
13+
) as CancerTreatmentStartDate,
14+
coalesce(
15+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment[0].BreastCoreSurgery.ProcedureDate',
16+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment.BreastCoreSurgery.ProcedureDate'
17+
) as ProcedureDate,
18+
Record ->> '$.Breast.BreastCore.BreastCoreDiagnosis.FamilialCancerSyndrome.@code' as FamilialCancerSyndromeIndicator,
19+
Record ->> '$.Breast.BreastCore.BreastCoreLinkagePatientId.NHSNumber.@extension' as NhsNumber
20+
from omop_staging.cosd_staging_81
21+
where Type = 'BR'
22+
)
23+
select
24+
distinct
25+
FamilialCancerSyndromeIndicator,
26+
NhsNumber,
27+
least(
28+
cast (DateFirstSeen as date),
29+
cast (SpecialistDateFirstSeen as date),
30+
cast (ClinicalDateCancerDiagnosis as date),
31+
cast (IntegratedStageTNMStageGroupingDate as date),
32+
cast (FinalPreTreatmentTNMStageGroupingDate as date),
33+
cast (CancerTreatmentStartDate as date),
34+
cast (ProcedureDate as date)
35+
) as Date
36+
from BR o
37+
where o.FamilialCancerSyndromeIndicator is not null
38+
and not (
39+
DateFirstSeen is null and
40+
SpecialistDateFirstSeen is null and
41+
ClinicalDateCancerDiagnosis is null and
42+
IntegratedStageTNMStageGroupingDate is null and
43+
FinalPreTreatmentTNMStageGroupingDate is null and
44+
CancerTreatmentStartDate is null and
45+
ProcedureDate is null
46+
);
47+
</Sql>
48+
<Explanations>
49+
<Explanation columnName="FamilialCancerSyndromeIndicator">
50+
<Description>Familial Cancer Syndrome Indicator</Description>
51+
<Origin>FamilialCancerSyndrome</Origin>
52+
</Explanation>
53+
<Explanation columnName="NhsNumber">
54+
<Description>Patient NHS Number</Description>
55+
<Origin>NHS NUMBER</Origin>
56+
</Explanation>
57+
<Explanation columnName="Date">
58+
<Description>Approximated date from earliest available date field (first seen, diagnosis, staging, or treatment dates)</Description>
59+
<Origin>Multiple date sources</Origin>
60+
</Explanation>
61+
</Explanations>
62+
</Query>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using OmopTransformer.Annotations;
2+
3+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastFamilialCancerSyndromeIndicator;
4+
5+
[DataOrigin("COSD")]
6+
[Description("COSD V8 Breast Familial Cancer Syndrome Indicator")]
7+
[SourceQuery("CosdV8BreastFamilialCancerSyndromeIndicator.xml")]
8+
internal class CosdV8BreastFamilialCancerSyndromeIndicatorRecord
9+
{
10+
public string? FamilialCancerSyndromeIndicator { get; set; }
11+
public string? NhsNumber { get; set; }
12+
public DateOnly? Date { get; set; }
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.Observation;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastPersonStatedSexualOrientationCodeAtDiagnosis;
6+
7+
[Notes("Notes", DocumentationNotes.ApproximatedDatesWarning)]
8+
internal class CosdV8BreastPersonStatedSexualOrientationCodeAtDiagnosis : OmopObservation<CosdV8BreastPersonStatedSexualOrientationCodeAtDiagnosisRecord>
9+
{
10+
[CopyValue(nameof(Source.NhsNumber))]
11+
public override string? nhs_number { get; set; }
12+
13+
[ConstantValue(4036080, "Orientation of sexual relationship")]
14+
public override int[]? observation_concept_id { get; set; }
15+
16+
[CopyValue(nameof(Source.Date))]
17+
public override DateOnly? observation_date { get; set; }
18+
19+
[CopyValue(nameof(Source.Date))]
20+
public override DateTime? observation_datetime { get; set; }
21+
22+
[ConstantValue(32828, "`EHR episode record`")]
23+
public override int? observation_type_concept_id { get; set; }
24+
25+
[CopyValue(nameof(Source.PersonStatedSexualOrientationCodeAtDiagnosis))]
26+
public override string? value_as_string { get; set; }
27+
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<Query>
2+
<Sql>
3+
with BR as (
4+
select
5+
Record ->> '$.Breast.BreastCore.BreastCoreDemographics.PersonStatedSexualOrientationCodeAtDiagnosis.@code' as PersonStatedSexualOrientationCodeAtDiagnosis,
6+
Record ->> '$.Breast.BreastCore.BreastCoreLinkageDiagnosticDetails.ClinicalDateCancerDiagnosis' as ClinicalDateCancerDiagnosis,
7+
coalesce(
8+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment[0].BreastCoreSurgery.ProcedureDate',
9+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment.BreastCoreSurgery.ProcedureDate'
10+
) as ProcedureDate,
11+
coalesce(
12+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment[0].CancerTreatmentStartDate',
13+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment.CancerTreatmentStartDate'
14+
) as CancerTreatmentStartDate,
15+
Record ->> '$.Breast.BreastCore.BreastCoreLinkagePatientId.NHSNumber.@extension' as NhsNumber
16+
from omop_staging.cosd_staging_81
17+
where Type = 'BR'
18+
)
19+
select
20+
distinct
21+
PersonStatedSexualOrientationCodeAtDiagnosis,
22+
NhsNumber,
23+
least(
24+
cast (ClinicalDateCancerDiagnosis as date),
25+
cast (ProcedureDate as date),
26+
cast (CancerTreatmentStartDate as date)
27+
) as Date
28+
from BR o
29+
where o.PersonStatedSexualOrientationCodeAtDiagnosis is not null
30+
and not (
31+
ClinicalDateCancerDiagnosis is null and
32+
ProcedureDate is null and
33+
CancerTreatmentStartDate is null
34+
);
35+
</Sql>
36+
<Explanations>
37+
<Explanation columnName="PersonStatedSexualOrientationCodeAtDiagnosis">
38+
<Description>Person Stated Sexual Orientation Code At Diagnosis</Description>
39+
<Origin>PersonStatedSexualOrientationCodeAtDiagnosis</Origin>
40+
</Explanation>
41+
<Explanation columnName="NhsNumber">
42+
<Description>Patient NHS Number</Description>
43+
<Origin>NHS NUMBER</Origin>
44+
</Explanation>
45+
<Explanation columnName="Date">
46+
<Description>Approximated date from earliest available date field (diagnosis, procedure or treatment dates)</Description>
47+
<Origin>Multiple date sources</Origin>
48+
</Explanation>
49+
</Explanations>
50+
</Query>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using OmopTransformer.Annotations;
2+
3+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastPersonStatedSexualOrientationCodeAtDiagnosis;
4+
5+
[DataOrigin("COSD")]
6+
[Description("COSD V8 Breast Person Stated Sexual Orientation Code At Diagnosis")]
7+
[SourceQuery("CosdV8BreastPersonStatedSexualOrientationCodeAtDiagnosis.xml")]
8+
internal class CosdV8BreastPersonStatedSexualOrientationCodeAtDiagnosisRecord
9+
{
10+
public string? PersonStatedSexualOrientationCodeAtDiagnosis { get; set; }
11+
public string? NhsNumber { get; set; }
12+
public DateOnly? Date { get; set; }
13+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.Observation;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastSmokingStatusCode;
6+
7+
[Notes("Notes", DocumentationNotes.ApproximatedDatesWarning)]
8+
internal class CosdV8BreastSmokingStatusCode : OmopObservation<CosdV8BreastSmokingStatusCodeRecord>
9+
{
10+
[CopyValue(nameof(Source.NhsNumber))]
11+
public override string? nhs_number { get; set; }
12+
13+
[ConstantValue(43054909, "Tobacco smoking status")]
14+
public override int[]? observation_concept_id { get; set; }
15+
16+
[CopyValue(nameof(Source.Date))]
17+
public override DateOnly? observation_date { get; set; }
18+
19+
[CopyValue(nameof(Source.Date))]
20+
public override DateTime? observation_datetime { get; set; }
21+
22+
[ConstantValue(32828, "`EHR episode record`")]
23+
public override int? observation_type_concept_id { get; set; }
24+
25+
[Transform(typeof(DoubleParser), nameof(Source.SmokingStatusCode))]
26+
public override double? value_as_number { get; set; }
27+
28+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<Query>
2+
<Sql>
3+
with BR as (
4+
select
5+
Record ->> '$.Breast.BreastCore.BreastCoreReferralAndFirstStageOfPatientPathway.DateFirstSeen' as DateFirstSeen,
6+
Record ->> '$.Breast.BreastCore.BreastCoreReferralAndFirstStageOfPatientPathway.DateFirstSeenCancerSpecialist' as SpecialistDateFirstSeen,
7+
Record ->> '$.Breast.BreastCore.BreastCoreLinkageDiagnosticDetails.ClinicalDateCancerDiagnosis' as ClinicalDateCancerDiagnosis,
8+
Record ->> '$.Breast.BreastCore.BreastCoreStaging.IntegratedStageTNMStageGroupingDate' as IntegratedStageTNMStageGroupingDate,
9+
Record ->> '$.Breast.BreastCore.BreastCoreStaging.FinalPreTreatmentTNMStageGroupingDate' as FinalPreTreatmentTNMStageGroupingDate,
10+
unnest(
11+
[
12+
[Record ->> '$.Breast.BreastCore.BreastCoreTreatment.CancerTreatmentStartDate'],
13+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment[*].CancerTreatmentStartDate'
14+
],
15+
recursive := true
16+
) as CancerTreatmentStartDate,
17+
unnest(
18+
[
19+
[Record ->> '$.Breast.BreastCore.BreastCoreTreatment.BreastCoreSurgery.ProcedureDate'],
20+
Record ->> '$.Breast.BreastCore.BreastCoreTreatment[*].BreastCoreSurgery.ProcedureDate'
21+
],
22+
recursive := true
23+
) as ProcedureDate,
24+
Record ->> '$.Breast.BreastCore.BreastCoreClinicalNurseSpecialistAndRiskFactorAssessments.TobaccoSmokingStatus.@code' as SmokingStatusCode,
25+
Record ->> '$.Breast.BreastCore.BreastCoreLinkagePatientId.NHSNumber.@extension' as NhsNumber
26+
from omop_staging.cosd_staging_81
27+
where Type = 'BR'
28+
)
29+
select
30+
distinct
31+
SmokingStatusCode,
32+
NhsNumber,
33+
least(
34+
cast (DateFirstSeen as date),
35+
cast (SpecialistDateFirstSeen as date),
36+
cast (ClinicalDateCancerDiagnosis as date),
37+
cast (IntegratedStageTNMStageGroupingDate as date),
38+
cast (FinalPreTreatmentTNMStageGroupingDate as date),
39+
cast (CancerTreatmentStartDate as date),
40+
cast (ProcedureDate as date)
41+
) as Date
42+
from BR o
43+
where o.SmokingStatusCode is not null
44+
and not (
45+
DateFirstSeen is null and
46+
SpecialistDateFirstSeen is null and
47+
ClinicalDateCancerDiagnosis is null and
48+
IntegratedStageTNMStageGroupingDate is null and
49+
FinalPreTreatmentTNMStageGroupingDate is null and
50+
CancerTreatmentStartDate is null and
51+
ProcedureDate is null
52+
);
53+
</Sql>
54+
<Explanations>
55+
<Explanation columnName="SmokingStatusCode">
56+
<Description>Smoking Status Code</Description>
57+
<Origin>TobaccoSmokingStatus</Origin>
58+
</Explanation>
59+
<Explanation columnName="NhsNumber">
60+
<Description>Patient NHS Number</Description>
61+
<Origin>NHS NUMBER</Origin>
62+
</Explanation>
63+
<Explanation columnName="Date">
64+
<Description>Approximated date from earliest available date field (first seen, diagnosis, staging, or treatment dates)</Description>
65+
<Origin>Multiple date sources</Origin>
66+
</Explanation>
67+
</Explanations>
68+
</Query>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using OmopTransformer.Annotations;
2+
3+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastSmokingStatusCode;
4+
5+
[DataOrigin("COSD")]
6+
[Description("COSD V8 Breast Smoking Status Code")]
7+
[SourceQuery("CosdV8BreastSmokingStatusCode.xml")]
8+
internal class CosdV8BreastSmokingStatusCodeRecord
9+
{
10+
public string? SmokingStatusCode { get; set; }
11+
public string? NhsNumber { get; set; }
12+
public DateOnly? Date { get; set; }
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.Observation;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.COSD.Breast.Observation.CosdV8BreastSourceOfReferralForOutPatientsNonPrimaryCancerPathway;
6+
7+
[Notes("Notes", DocumentationNotes.ApproximatedDatesWarning)]
8+
internal class CosdV8BreastSourceOfReferralForOutPatientsNonPrimaryCancerPathway : OmopObservation<CosdV8BreastSourceOfReferralForOutPatientsNonPrimaryCancerPathwayRecord>
9+
{
10+
[CopyValue(nameof(Source.NhsNumber))]
11+
public override string? nhs_number { get; set; }
12+
13+
[ConstantValue(4258129, "Referral by")]
14+
public override int[]? observation_concept_id { get; set; }
15+
16+
[CopyValue(nameof(Source.Date))]
17+
public override DateOnly? observation_date { get; set; }
18+
19+
[CopyValue(nameof(Source.Date))]
20+
public override DateTime? observation_datetime { get; set; }
21+
22+
[ConstantValue(32828, "`EHR episode record`")]
23+
public override int? observation_type_concept_id { get; set; }
24+
25+
[CopyValue(nameof(Source.SourceOfReferralOutPatients))]
26+
public override string? value_as_string { get; set; }
27+
28+
}

0 commit comments

Comments
 (0)