Skip to content

Commit 167389d

Browse files
authored
Merge pull request #294 from answerdigital/feature/new-cosd-mappings
New COSD mappings
2 parents 8f9e58c + 67165c4 commit 167389d

File tree

42 files changed

+2642
-9
lines changed

Some content is hidden

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

42 files changed

+2642
-9
lines changed

OmopTransformer/COSD/Colorectal/Observation/CosdV8PersonStatedSexualOrientationCodeAtDiagnosis/CosdV8PersonStatedSexualOrientationCodeAtDiagnosis.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ where o.PersonStatedSexualOrientationCodeAtDiagnosis is not null
2626
ProcedureDate is null and
2727
CancerTreatmentStartDate is null
2828
)
29-
--tested
29+
3030
</Sql>
3131
<Explanations>
3232
<Explanation columnName="NHSNumber">

OmopTransformer/COSD/CosdTransformer.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,18 @@
112112
using OmopTransformer.COSD.Lung.Observation.CosdV9LungSourceOfReferralForOutpatients;
113113
using OmopTransformer.COSD.Lung.Observation.CosdV9LungTobaccoSmokingCessation;
114114
using OmopTransformer.COSD.Lung.Observation.CosdV9LungTobaccoSmokingStatus;
115+
using OmopTransformer.COSD.Lung.Observation.CosdV8LungSurgicalAccessType;
116+
using OmopTransformer.COSD.Lung.Observation.CosdV9LungSurgicalAccessType;
115117
using OmopTransformer.COSD.Colorectal.ProcedureOccurrence.CosdV8ProcedureOccurrencePrimaryProcedureOpcs;
116118
using OmopTransformer.COSD.Colorectal.ProcedureOccurrence.CosdV8ProcedureOccurrenceProcedureOpcs;
117119
using OmopTransformer.COSD.Colorectal.ProcedureOccurrence.CosdV9ProcedureOccurrencePrimaryProcedureOpcs;
118120
using OmopTransformer.COSD.Colorectal.ProcedureOccurrence.CosdV9ProcedureOccurrenceProcedureOpcs;
119121
using OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV8LungProcedureOccurrencePrimaryProcedureOpcs;
120122
using OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV8LungProcedureOccurrenceProcedureOpcs;
123+
using OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV8LungProcedureOccurrenceRelapseMethodOfDetection;
121124
using OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV9LungProcedureOccurrencePrimaryProcedureOpcs;
122125
using OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV9LungProcedureOccurrenceProcedureOpcs;
126+
using OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV9LungProcedureOccurrenceRelapseMethodOfDetection;
123127
using OmopTransformer.Omop;
124128
using OmopTransformer.Omop.ConditionOccurrence;
125129
using OmopTransformer.Omop.Death;
@@ -339,6 +343,18 @@ await Transform<CosdV9LungProcedureOccurrenceProcedureOpcsRecord, CosdV9LungProc
339343
runId,
340344
cancellationToken);
341345

346+
await Transform<CosdV8LungProcedureOccurrenceRelapseMethodOfDetectionRecord, CosdV8LungProcedureOccurrenceRelapseMethodOfDetection>(
347+
_procedureOccurrenceRecorder.InsertUpdateProcedureOccurrence,
348+
"Cosd V8 Lung Procedure Occurrence Relapse Method Of Detection",
349+
runId,
350+
cancellationToken);
351+
352+
await Transform<CosdV9LungProcedureOccurrenceRelapseMethodOfDetectionRecord, CosdV9LungProcedureOccurrenceRelapseMethodOfDetection>(
353+
_procedureOccurrenceRecorder.InsertUpdateProcedureOccurrence,
354+
"Cosd V9 Lung Procedure Occurrence Relapse Method Of Detection",
355+
runId,
356+
cancellationToken);
357+
342358
await Transform<CosdV9TobaccoSmokingStatusRecord, CosdV9TobaccoSmokingStatus>(
343359
_observationRecorder.InsertUpdateObservations,
344360
"Cosd CosdV9TobaccoSmokingStatus",
@@ -561,6 +577,18 @@ await Transform<CosdV9LungTobaccoSmokingStatusRecord, CosdV9LungTobaccoSmokingSt
561577
runId,
562578
cancellationToken);
563579

580+
await Transform<CosdV8LungSurgicalAccessTypeRecord, CosdV8LungSurgicalAccessType>(
581+
_observationRecorder.InsertUpdateObservations,
582+
"Cosd V8 Lung Surgical Access Type",
583+
runId,
584+
cancellationToken);
585+
586+
await Transform<CosdV9LungSurgicalAccessTypeRecord, CosdV9LungSurgicalAccessType>(
587+
_observationRecorder.InsertUpdateObservations,
588+
"Cosd V9 Lung Surgical Access Type",
589+
runId,
590+
cancellationToken);
591+
564592
await Transform<CosdV9AdultComorbidityEvaluationRecord, CosdV9AdultComorbidityEvaluation>(
565593
_observationRecorder.InsertUpdateObservations,
566594
"Cosd CosdV9AdultComorbidityEvaluation",
Lines changed: 30 additions & 0 deletions
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.Lung.Observation.CosdV8LungSurgicalAccessType;
6+
7+
[Notes("Notes", DocumentationNotes.ApproximatedDatesWarning)]
8+
internal class CosdV8LungSurgicalAccessType : OmopObservation<CosdV8LungSurgicalAccessTypeRecord>
9+
{
10+
[CopyValue(nameof(Source.NhsNumber))]
11+
public override string? nhs_number { get; set; }
12+
13+
[ConstantValue(4301351, "Surgical access")]
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(SurgicalAccessTypeLungLookup), nameof(Source.SurgicalAccessType))]
26+
public override int? qualifier_concept_id { get; set; }
27+
28+
[CopyValue(nameof(Source.SurgicalAccessType))]
29+
public override string? qualifier_source_value { get; set; }
30+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<Query>
2+
<Sql>
3+
with LU as (
4+
select
5+
Record ->> '$.Lung.LungCore.LungCoreReferralAndFirstStageOfPatientPathway.DateFirstSeen' as DateFirstSeen,
6+
Record ->> '$.Lung.LungCore.LungCoreReferralAndFirstStageOfPatientPathway.SpecialistDateFirstSeen' as SpecialistDateFirstSeen,
7+
Record ->> '$.Lung.LungCore.LungCoreLinkageDiagnosticDetails.ClinicalDateCancerDiagnosis' as ClinicalDateCancerDiagnosis,
8+
Record ->> '$.Lung.LungCore.LungCoreStaging.IntegratedStageTNMStageGroupingDate' as IntegratedStageTNMStageGroupingDate,
9+
Record ->> '$.Lung.LungCore.LungCoreStaging.FinalPreTreatmentTNMStageGroupingDate' as FinalPreTreatmentTNMStageGroupingDate,
10+
unnest ([[Record ->> '$.Lung.LungCore.LungCoreTreatment.CancerTreatmentStartDate'], Record ->> '$.Lung.LungCore.LungCoreTreatment[*].CancerTreatmentStartDate'], recursive := true) as CancerTreatmentStartDate,
11+
Record ->> '$.Lung.LungCore.LungCoreTreatment.LungCoreSurgeryAndOtherProcedures.ProcedureDate' as ProcedureDate,
12+
Record ->> '$.Lung.LungCore.LungCoreTreatment.LungCoreSurgeryAndOtherProcedures.SurgicalAccessType.@code' as SurgicalAccessType,
13+
Record ->> '$.Lung.LungCore.LungCoreLinkagePatientId.NHSNumber.@extension' as NhsNumber
14+
from omop_staging.cosd_staging_81
15+
where Type = 'LU'
16+
)
17+
select
18+
distinct
19+
SurgicalAccessType,
20+
NhsNumber,
21+
least(
22+
cast (DateFirstSeen as date),
23+
cast (SpecialistDateFirstSeen as date),
24+
cast (ClinicalDateCancerDiagnosis as date),
25+
cast (IntegratedStageTNMStageGroupingDate as date),
26+
cast (FinalPreTreatmentTNMStageGroupingDate as date),
27+
cast (CancerTreatmentStartDate as date),
28+
cast (ProcedureDate as date)
29+
) as Date
30+
from LU o
31+
where o.SurgicalAccessType is not null
32+
and not (
33+
DateFirstSeen is null and
34+
SpecialistDateFirstSeen is null and
35+
ClinicalDateCancerDiagnosis is null and
36+
IntegratedStageTNMStageGroupingDate is null and
37+
FinalPreTreatmentTNMStageGroupingDate is null and
38+
CancerTreatmentStartDate is null and
39+
ProcedureDate is null
40+
)
41+
</Sql>
42+
<Explanations>
43+
<Explanation columnName="NhsNumber">
44+
<Description>Patient NHS Number</Description>
45+
<Origin>NHS NUMBER</Origin>
46+
</Explanation>
47+
<Explanation columnName="SurgicalAccessType">
48+
<Description>A code representing the surgical access type used during a procedure.</Description>
49+
<Origin>SURGICAL ACCESS TYPE</Origin>
50+
</Explanation>
51+
<Explanation columnName="Date" >
52+
<Description>Observation date</Description>
53+
<Origin>DATE FIRST SEEN</Origin>
54+
<Origin>DATE FIRST SEEN (CANCER SPECIALIST)</Origin>
55+
<Origin>DIAGNOSIS DATE</Origin>
56+
<Origin>TNM STAGE GROUPING DATE (INTEGRATED)</Origin>
57+
<Origin>TNM STAGE GROUPING DATE (FINAL PRETREATMENT)</Origin>
58+
<Origin>TREATMENT START DATE (CANCER)</Origin>
59+
<Origin>PROCEDURE DATE</Origin>
60+
</Explanation>
61+
</Explanations>
62+
</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.Lung.Observation.CosdV8LungSurgicalAccessType;
4+
5+
[DataOrigin("COSD")]
6+
[Description("CosdV8LungSurgicalAccessType")]
7+
[SourceQuery("CosdV8LungSurgicalAccessType.xml")]
8+
internal class CosdV8LungSurgicalAccessTypeRecord
9+
{
10+
public string? NhsNumber { get; set; }
11+
public DateOnly? Date { get; set; }
12+
public string? SurgicalAccessType { get; set; }
13+
}
Lines changed: 30 additions & 0 deletions
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.Lung.Observation.CosdV9LungSurgicalAccessType;
6+
7+
[Notes("Notes", DocumentationNotes.ApproximatedDatesWarning)]
8+
internal class CosdV9LungSurgicalAccessType : OmopObservation<CosdV9LungSurgicalAccessTypeRecord>
9+
{
10+
[CopyValue(nameof(Source.NhsNumber))]
11+
public override string? nhs_number { get; set; }
12+
13+
[ConstantValue(4301351, "Surgical access")]
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(SurgicalAccessTypeLungLookup), nameof(Source.SurgicalAccessType))]
26+
public override int? qualifier_concept_id { get; set; }
27+
28+
[CopyValue(nameof(Source.SurgicalAccessType))]
29+
public override string? qualifier_source_value { get; set; }
30+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<Query>
2+
<Sql>
3+
with LU as (
4+
select
5+
Record ->> '$.PrimaryPathway.ReferralAndFirstStageOfPatientPathway.DateFirstSeen' as DateFirstSeen,
6+
Record ->> '$.PrimaryPathway.ReferralAndFirstStageOfPatientPathway.DateFirstSeenCancerSpecialist' as DateFirstSeenCancerSpecialist,
7+
Record ->> '$.PrimaryPathway.LinkageDiagnosticDetails.DateOfPrimaryDiagnosisClinicallyAgreed' as DateOfPrimaryDiagnosisClinicallyAgreed,
8+
Record ->> '$.PrimaryPathway.Staging.StageDateFinalPretreatmentStage' as StageDateFinalPretreatmentStage,
9+
Record ->> '$.PrimaryPathway.Staging.StageDateIntegratedStage' as StageDateIntegratedStage,
10+
Record ->> '$.Treatment.TreatmentStartDateCancer' as TreatmentStartDateCancer,
11+
Record ->> '$.Treatment.Surgery.ProcedureDate' as ProcedureDate,
12+
Record ->> '$.Treatment.Surgery.SurgicalAccessType.@code' as SurgicalAccessType,
13+
Record ->> '$.LinkagePatientId.NhsNumber.@extension' as NhsNumber
14+
from omop_staging.cosd_staging_901
15+
where type = 'LU'
16+
)
17+
select
18+
distinct
19+
SurgicalAccessType,
20+
NhsNumber,
21+
least(
22+
cast(DateFirstSeen as date),
23+
cast(DateFirstSeenCancerSpecialist as date),
24+
cast(DateOfPrimaryDiagnosisClinicallyAgreed as date),
25+
cast(StageDateFinalPretreatmentStage as date),
26+
cast(StageDateIntegratedStage as date),
27+
cast(TreatmentStartDateCancer as date),
28+
cast(ProcedureDate as date)
29+
) as Date
30+
from LU o
31+
where o.SurgicalAccessType is not null
32+
and not (
33+
DateFirstSeen is null and
34+
DateFirstSeenCancerSpecialist is null and
35+
DateOfPrimaryDiagnosisClinicallyAgreed is null and
36+
StageDateFinalPretreatmentStage is null and
37+
StageDateIntegratedStage is null and
38+
TreatmentStartDateCancer is null and
39+
ProcedureDate is null
40+
)
41+
</Sql>
42+
<Explanations>
43+
<Explanation columnName="NhsNumber">
44+
<Description>Patient NHS Number</Description>
45+
<Origin>NHS NUMBER</Origin>
46+
</Explanation>
47+
<Explanation columnName="SurgicalAccessType">
48+
<Description>A code representing the surgical access type used during a procedure.</Description>
49+
<Origin>SURGICAL ACCESS TYPE</Origin>
50+
</Explanation>
51+
<Explanation columnName="Date" >
52+
<Description>Observation date</Description>
53+
<Origin>DATE FIRST SEEN</Origin>
54+
<Origin>DATE FIRST SEEN (CANCER SPECIALIST)</Origin>
55+
<Origin>DIAGNOSIS DATE (CLINICALLY AGREED)</Origin>
56+
<Origin>STAGE DATE (FINAL PRETREATMENT STAGE)</Origin>
57+
<Origin>STAGE DATE (INTEGRATED STAGE)</Origin>
58+
<Origin>TREATMENT START DATE (CANCER)</Origin>
59+
<Origin>PROCEDURE DATE</Origin>
60+
</Explanation>
61+
</Explanations>
62+
</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.Lung.Observation.CosdV9LungSurgicalAccessType;
4+
5+
[DataOrigin("COSD")]
6+
[Description("CosdV9LungSurgicalAccessType")]
7+
[SourceQuery("CosdV9LungSurgicalAccessType.xml")]
8+
internal class CosdV9LungSurgicalAccessTypeRecord
9+
{
10+
public string? NhsNumber { get; set; }
11+
public DateOnly? Date { get; set; }
12+
public string? SurgicalAccessType { get; set; }
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.ProcedureOccurrence;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.COSD.Lung.ProcedureOccurrence.CosdV8LungProcedureOccurrenceRelapseMethodOfDetection;
6+
7+
internal class CosdV8LungProcedureOccurrenceRelapseMethodOfDetection : OmopProcedureOccurrence<CosdV8LungProcedureOccurrenceRelapseMethodOfDetectionRecord>
8+
{
9+
[CopyValue(nameof(Source.NhsNumber))]
10+
public override string? nhs_number { get; set; }
11+
12+
[Transform(typeof(RelapseMethodOfDetectionLungLookup), nameof(Source.RelapseMethodDetectionType))]
13+
public override int[]? procedure_concept_id { get; set; }
14+
15+
[CopyValue(nameof(Source.Date))]
16+
public override DateTime? procedure_date { get; set; }
17+
18+
[CopyValue(nameof(Source.Date))]
19+
public override DateTime? procedure_datetime { get; set; }
20+
21+
[ConstantValue(32828, "`EHR episode record`")]
22+
public override int? procedure_type_concept_id { get; set; }
23+
24+
[CopyValue(nameof(Source.RelapseMethodDetectionType))]
25+
public override string? procedure_source_value { get; set; }
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<Query>
2+
<Sql>
3+
with LU as (
4+
select
5+
Record ->> '$.Lung.LungCore.LungCoreReferralAndFirstStageOfPatientPathway.DateFirstSeen' as DateFirstSeen,
6+
Record ->> '$.Lung.LungCore.LungCoreReferralAndFirstStageOfPatientPathway.SpecialistDateFirstSeen' as SpecialistDateFirstSeen,
7+
Record ->> '$.Lung.LungCore.LungCoreLinkageDiagnosticDetails.ClinicalDateCancerDiagnosis' as ClinicalDateCancerDiagnosis,
8+
Record ->> '$.Lung.LungCore.LungCoreStaging.IntegratedStageTNMStageGroupingDate' as IntegratedStageTNMStageGroupingDate,
9+
Record ->> '$.Lung.LungCore.LungCoreStaging.FinalPreTreatmentTNMStageGroupingDate' as FinalPreTreatmentTNMStageGroupingDate,
10+
unnest ([[Record ->> '$.Lung.LungCore.LungCoreTreatment.CancerTreatmentStartDate'], Record ->> '$.Lung.LungCore.LungCoreTreatment[*].CancerTreatmentStartDate'], recursive := true) as CancerTreatmentStartDate,
11+
Record ->> '$.Lung.LungCore.LungCoreTreatment.LungCoreSurgeryAndOtherProcedures.ProcedureDate' as ProcedureDate,
12+
Record ->> '$.Lung.LungCore.LungCoreNonPrimaryCancerPathwayALLAMLAndMPAL.RelapseMethodDetectionType.@code' as RelapseMethodDetectionType,
13+
Record ->> '$.Lung.LungCore.LungCoreLinkagePatientId.NHSNumber.@extension' as NhsNumber
14+
from omop_staging.cosd_staging_81
15+
where Type = 'LU'
16+
)
17+
select
18+
distinct
19+
RelapseMethodDetectionType,
20+
NhsNumber,
21+
least(
22+
cast (DateFirstSeen as date),
23+
cast (SpecialistDateFirstSeen as date),
24+
cast (ClinicalDateCancerDiagnosis as date),
25+
cast (IntegratedStageTNMStageGroupingDate as date),
26+
cast (FinalPreTreatmentTNMStageGroupingDate as date),
27+
cast (CancerTreatmentStartDate as date),
28+
cast (ProcedureDate as date)
29+
) as Date
30+
from LU o
31+
where o.RelapseMethodDetectionType is not null
32+
and not (
33+
DateFirstSeen is null and
34+
SpecialistDateFirstSeen is null and
35+
ClinicalDateCancerDiagnosis is null and
36+
IntegratedStageTNMStageGroupingDate is null and
37+
FinalPreTreatmentTNMStageGroupingDate is null and
38+
CancerTreatmentStartDate is null and
39+
ProcedureDate is null
40+
)
41+
</Sql>
42+
<Explanations>
43+
<Explanation columnName="NhsNumber">
44+
<Description>Patient NHS Number</Description>
45+
<Origin>NHS NUMBER</Origin>
46+
</Explanation>
47+
<Explanation columnName="RelapseMethodDetectionType">
48+
<Description>A code representing the method used to detect a relapse or recurrence.</Description>
49+
<Origin>RELAPSE - METHOD OF DETECTION</Origin>
50+
</Explanation>
51+
<Explanation columnName="Date" >
52+
<Description>Procedure date</Description>
53+
<Origin>DATE FIRST SEEN</Origin>
54+
<Origin>DATE FIRST SEEN (CANCER SPECIALIST)</Origin>
55+
<Origin>DIAGNOSIS DATE</Origin>
56+
<Origin>TNM STAGE GROUPING DATE (INTEGRATED)</Origin>
57+
<Origin>TNM STAGE GROUPING DATE (FINAL PRETREATMENT)</Origin>
58+
<Origin>TREATMENT START DATE (CANCER)</Origin>
59+
<Origin>PROCEDURE DATE</Origin>
60+
</Explanation>
61+
</Explanations>
62+
</Query>

0 commit comments

Comments
 (0)