Skip to content

Commit bb9ff6e

Browse files
Merge pull request #299 from answerdigital/feature/out-of-domain-mappings
Feature/out of domain mappings
2 parents 4660f29 + 260dfd3 commit bb9ff6e

File tree

44 files changed

+1810
-69
lines changed

Some content is hidden

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

44 files changed

+1810
-69
lines changed

OmopTransformer/OmopTransformer.csproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,9 +545,15 @@
545545
<None Update="SUS\APC\Observation\GestationLengthLabourOnset\SusAPCGestationLengthLabourOnset.xml">
546546
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
547547
</None>
548+
<None Update="SUS\APC\Observation\ICDDiagnosis\SusAPCICDDiagnosis.xml">
549+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
550+
</None>
548551
<None Update="SUS\APC\Observation\NumberOfBabies\SusAPCNumberOfBabies.xml">
549552
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
550553
</None>
554+
<None Update="SUS\APC\Observation\ProcedureObservations\SusAPCProcedureObservations.xml">
555+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
556+
</None>
551557
<None Update="SUS\APC\Observation\TotalPreviousPregnancies\SusAPCTotalPreviousPregnancies.xml">
552558
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
553559
</None>
@@ -599,6 +605,12 @@
599605
<None Update="SUS\OP\Location\SusOPLocation.xml">
600606
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
601607
</None>
608+
<None Update="SUS\OP\Observation\ICDDiagnosis\SusOPICDDiagnosis.xml">
609+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
610+
</None>
611+
<None Update="SUS\OP\Observation\ProcedureObservation\SusOPProcedureObservation.xml">
612+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
613+
</None>
602614
<None Update="SUS\OP\Person\SusOPPerson.xml">
603615
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
604616
</None>

OmopTransformer/SUS/APC/DeviceExposure/SusAPCDeviceExposure.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ where NHSNumber is not null
2525
<Origin>PROCEDURE DATE</Origin>
2626
</Explanation>
2727
<Explanation columnName="PrimaryProcedure">
28-
<Description>OPC4 Procedure code.</Description>
28+
<Description>OPCS-4 Procedure code.</Description>
2929
<Origin>PROCEDURE (OPCS)</Origin>
3030
</Explanation>
3131
</Explanations>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<Query>
2+
<Sql>
3+
select
4+
distinct
5+
d.DiagnosisICD,
6+
apc.GeneratedRecordIdentifier,
7+
apc.NHSNumber,
8+
apc.CDSActivityDate
9+
from omop_staging.sus_ICDDiagnosis d
10+
inner join omop_staging.sus_APC apc
11+
on d.MessageId = apc.MessageId
12+
where apc.NHSNumber is not null
13+
order by
14+
d.DiagnosisICD,
15+
apc.GeneratedRecordIdentifier,
16+
apc.NHSNumber,
17+
apc.CDSActivityDate
18+
</Sql>
19+
<Explanations>
20+
<Explanation columnName="NHSNumber">
21+
<Description>Patient NHS Number</Description>
22+
<Origin>NHS NUMBER</Origin>
23+
</Explanation>
24+
<Explanation columnName="CDSActivityDate">
25+
<Description>Start date of the episode, if exists, else the start date of the spell.</Description>
26+
<Origin>CDS ACTIVITY DATE</Origin>
27+
</Explanation>
28+
<Explanation columnName="GeneratedRecordIdentifier">
29+
<Description>CDS specific identifier that binds multiple CDS messages together.</Description>
30+
<Origin>CDS RECORD IDENTIFIER</Origin>
31+
</Explanation>
32+
<Explanation columnName="DiagnosisICD">
33+
<Description>ICD10 diagnosis code</Description>
34+
<Origin>PRIMARY DIAGNOSIS (ICD)</Origin>
35+
</Explanation>
36+
</Explanations>
37+
</Query>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.Observation;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.SUS.APC.Observation.ICDDiagnosis;
6+
7+
internal class SusAPCSusDiagnosisObservation : OmopObservation<SusAPCSusDiagnosisRecord>
8+
{
9+
[CopyValue(nameof(Source.NHSNumber))]
10+
public override string? nhs_number { get; set; }
11+
12+
[CopyValue(nameof(Source.GeneratedRecordIdentifier))]
13+
public override string? RecordConnectionIdentifier { get; set; }
14+
15+
[Transform(typeof(StandardObservationConceptSelector), useOmopTypeAsSource: true, nameof(observation_source_concept_id))]
16+
public override int[]? observation_concept_id { get; set; }
17+
18+
[Transform(typeof(DateOnlyConverter), nameof(Source.CDSActivityDate))]
19+
public override DateOnly? observation_date { get; set; }
20+
21+
[Transform(typeof(DateConverter), nameof(Source.CDSActivityDate))]
22+
public override DateTime? observation_datetime { get; set; }
23+
24+
[ConstantValue(32818, "EHR administration record")]
25+
public override int? observation_type_concept_id { get; set; }
26+
27+
[Transform(typeof(Icd10StandardNonStandardSelector), nameof(Source.DiagnosisICD))]
28+
public override int? observation_source_concept_id { get; set; }
29+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using OmopTransformer.Annotations;
2+
3+
namespace OmopTransformer.SUS.APC.Observation.ICDDiagnosis;
4+
5+
[DataOrigin("SUS")]
6+
[Description("Sus APC Diagnosis Table")]
7+
[SourceQuery("SusAPCICDDiagnosis.xml")]
8+
internal class SusAPCSusDiagnosisRecord
9+
{
10+
public string? NHSNumber { get; set; }
11+
public string? CDSActivityDate { get; set; }
12+
public string? GeneratedRecordIdentifier { get; set; }
13+
public string? DiagnosisICD { get; set; }
14+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using OmopTransformer.Annotations;
2+
using OmopTransformer.Omop.Observation;
3+
using OmopTransformer.Transformation;
4+
5+
namespace OmopTransformer.SUS.APC.Observation.ProcedureObservations;
6+
7+
internal class SusAPCProcedureObservations : OmopObservation<SusAPCProcedureObservationsRecord>
8+
{
9+
[CopyValue(nameof(Source.NHSNumber))]
10+
public override string? nhs_number { get; set; }
11+
12+
[CopyValue(nameof(Source.GeneratedRecordIdentifier))]
13+
public override string? RecordConnectionIdentifier { get; set; }
14+
15+
[Transform(typeof(StandardObservationConceptSelector), useOmopTypeAsSource: true, nameof(observation_source_concept_id))]
16+
public override int[]? observation_concept_id { get; set; }
17+
18+
[Transform(typeof(DateOnlyConverter), nameof(Source.PrimaryProcedureDate))]
19+
public override DateOnly? observation_date { get; set; }
20+
21+
[Transform(typeof(DateConverter), nameof(Source.PrimaryProcedureDate))]
22+
public override DateTime? observation_datetime { get; set; }
23+
24+
[ConstantValue(32818, "EHR administration record")]
25+
public override int? observation_type_concept_id { get; set; }
26+
27+
[Transform(typeof(Opcs4Selector), nameof(Source.PrimaryProcedure))]
28+
public override int? observation_source_concept_id { get; set; }
29+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<Query>
2+
<Sql>
3+
select
4+
distinct
5+
apc.GeneratedRecordIdentifier,
6+
apc.NHSNumber,
7+
p.ProcedureDateOPCS as PrimaryProcedureDate,
8+
p.ProcedureOPCS as PrimaryProcedure
9+
from omop_staging.sus_APC apc
10+
inner join omop_staging.sus_OPCSProcedure p
11+
on apc.MessageId = p.MessageId
12+
where NHSNumber is not null
13+
order by
14+
apc.GeneratedRecordIdentifier,
15+
apc.NHSNumber,
16+
p.ProcedureDateOPCS,
17+
p.ProcedureOPCS
18+
</Sql>
19+
<Explanations>
20+
<Explanation columnName="GeneratedRecordIdentifier">
21+
<Description>CDS specific identifier that binds multiple CDS messages together.</Description>
22+
<Origin>CDS RECORD IDENTIFIER</Origin>
23+
</Explanation>
24+
<Explanation columnName="NHSNumber">
25+
<Description>Patient NHS Number</Description>
26+
<Origin>NHS NUMBER</Origin>
27+
</Explanation>
28+
<Explanation columnName="PrimaryProcedureDate">
29+
<Description>Procedure Date.</Description>
30+
<Origin>PROCEDURE DATE</Origin>
31+
</Explanation>
32+
<Explanation columnName="PrimaryProcedure">
33+
<Description>OPCS-4 Procedure code.</Description>
34+
<Origin>PROCEDURE (OPCS)</Origin>
35+
</Explanation>
36+
</Explanations>
37+
</Query>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using OmopTransformer.Annotations;
2+
3+
namespace OmopTransformer.SUS.APC.Observation.ProcedureObservations;
4+
5+
[DataOrigin("SUS")]
6+
[Description("SUS APC Procedure Occurrence")]
7+
[SourceQuery("SusAPCProcedureObservations.xml")]
8+
internal class SusAPCProcedureObservationsRecord
9+
{
10+
public string? GeneratedRecordIdentifier { get; set; }
11+
public string? NHSNumber { get; set; }
12+
public string? PrimaryProcedureDate { get; set; }
13+
public string? PrimaryProcedure { get; set; }
14+
}

OmopTransformer/SUS/APC/ProcedureOccurrence/SusAPCProcedureOccurrence.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ order by
3030
<Origin>PROCEDURE DATE</Origin>
3131
</Explanation>
3232
<Explanation columnName="PrimaryProcedure">
33-
<Description>OPC4 Procedure code.</Description>
33+
<Description>OPCS-4 Procedure code.</Description>
3434
<Origin>PROCEDURE (OPCS)</Origin>
3535
</Explanation>
3636
</Explanations>

OmopTransformer/SUS/APC/SusAPCTransformer.cs

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,46 @@
11
using Microsoft.Extensions.Logging;
2+
using OmopTransformer.Omop;
3+
using OmopTransformer.Omop.CareSite;
4+
using OmopTransformer.Omop.ConditionOccurrence;
5+
using OmopTransformer.Omop.Death;
6+
using OmopTransformer.Omop.DeviceExposure;
7+
using OmopTransformer.Omop.Location;
8+
using OmopTransformer.Omop.Measurement;
9+
using OmopTransformer.Omop.Observation;
10+
using OmopTransformer.Omop.Person;
11+
using OmopTransformer.Omop.ProcedureOccurrence;
12+
using OmopTransformer.Omop.Provider;
13+
using OmopTransformer.Omop.VisitDetail;
14+
using OmopTransformer.Omop.VisitOccurrence;
15+
using OmopTransformer.SUS.APC.CareSite;
16+
using OmopTransformer.SUS.APC.ConditionOccurrence;
217
using OmopTransformer.SUS.APC.Death;
18+
using OmopTransformer.SUS.APC.DeviceExposure;
319
using OmopTransformer.SUS.APC.Location;
4-
using OmopTransformer.SUS.APC.ConditionOccurrence;
5-
using OmopTransformer.SUS.APC.ProcedureOccurrence;
620
using OmopTransformer.SUS.APC.Measurements.SusAPCMeasurement;
7-
using OmopTransformer.SUS.APC.VisitOccurrenceWithSpell;
821
using OmopTransformer.SUS.APC.Observation.AnaestheticDuringLabourDelivery;
922
using OmopTransformer.SUS.APC.Observation.AnaestheticGivenPostLabourDelivery;
1023
using OmopTransformer.SUS.APC.Observation.BirthWeight;
1124
using OmopTransformer.SUS.APC.Observation.CarerSupportIndicator;
1225
using OmopTransformer.SUS.APC.Observation.GestationLengthLabourOnset;
26+
using OmopTransformer.SUS.APC.Observation.ICDDiagnosis;
1327
using OmopTransformer.SUS.APC.Observation.NumberOfBabies;
14-
using OmopTransformer.SUS.APC.Observation.TotalPreviousPregnancies;
15-
using OmopTransformer.SUS.APC.Observation.SourceOfReferralForInpatients;
28+
using OmopTransformer.SUS.APC.Observation.ProcedureObservations;
1629
using OmopTransformer.SUS.APC.Observation.ReferralReceivedDateForInpatients;
17-
using OmopTransformer.SUS.APC.VisitDetails;
18-
using OmopTransformer.SUS.APC.CareSite;
30+
using OmopTransformer.SUS.APC.Observation.SourceOfReferralForInpatients;
31+
using OmopTransformer.SUS.APC.Observation.TotalPreviousPregnancies;
32+
using OmopTransformer.SUS.APC.ProcedureOccurrence;
1933
using OmopTransformer.SUS.APC.Provider;
20-
using OmopTransformer.Omop.ConditionOccurrence;
21-
using OmopTransformer.Omop.Measurement;
22-
using OmopTransformer.Omop.Death;
23-
using OmopTransformer.Omop.Location;
24-
using OmopTransformer.Omop.Observation;
25-
using OmopTransformer.Omop.Person;
26-
using OmopTransformer.Omop.ProcedureOccurrence;
27-
using OmopTransformer.Omop.VisitDetail;
28-
using OmopTransformer.Omop.VisitOccurrence;
29-
using OmopTransformer.Omop.CareSite;
30-
using OmopTransformer.Omop.Provider;
31-
using OmopTransformer.Transformation;
32-
using OmopTransformer.Omop;
33-
using OmopTransformer.SUS.CCMDS.VisitDetails;
34-
using OmopTransformer.SUS.CCMDS.ProcedureOccurrence;
35-
using OmopTransformer.SUS.CCMDS.Observation.HighCostDrugs;
36-
using OmopTransformer.SUS.CCMDS.Observation.HighCostDrugs.SusCCMDSHighCostDrugs;
34+
using OmopTransformer.SUS.APC.VisitDetails;
35+
using OmopTransformer.SUS.APC.VisitOccurrenceWithSpell;
36+
using OmopTransformer.SUS.CCMDS.DeviceExposure;
3737
using OmopTransformer.SUS.CCMDS.Measurements.GestationLengthAtDelivery;
3838
using OmopTransformer.SUS.CCMDS.Measurements.PersonWeight;
39-
using OmopTransformer.SUS.CCMDS.DeviceExposure;
40-
using OmopTransformer.Omop.DeviceExposure;
41-
using OmopTransformer.SUS.APC.DeviceExposure;
39+
using OmopTransformer.SUS.CCMDS.Observation.HighCostDrugs;
40+
using OmopTransformer.SUS.CCMDS.Observation.HighCostDrugs.SusCCMDSHighCostDrugs;
41+
using OmopTransformer.SUS.CCMDS.ProcedureOccurrence;
42+
using OmopTransformer.SUS.CCMDS.VisitDetails;
43+
using OmopTransformer.Transformation;
4244
namespace OmopTransformer.SUS.APC;
4345

4446
internal class SusAPCTransformer : Transformer
@@ -116,10 +118,10 @@ await Transform<SusAPCDeathRecord, SusAPCDeath>(
116118
cancellationToken);
117119

118120
await Transform<SusAPCProcedureOccurrenceRecord, SusAPCProcedureOccurrence>(
119-
_procedureOccurrenceRecorder.InsertUpdateProcedureOccurrence,
120-
"SUS APC Procedure Occurrence",
121-
runId,
122-
cancellationToken);
121+
_procedureOccurrenceRecorder.InsertUpdateProcedureOccurrence,
122+
"SUS APC Procedure Occurrence",
123+
runId,
124+
cancellationToken);
123125

124126
await Transform<SusAPCDeviceExposureRecord, SusAPCDeviceExposure>(
125127
_deviceExposureRecorder.InsertUpdateDeviceExposure,
@@ -259,6 +261,18 @@ await Transform<SusAPCReferralReceivedDateForInpatientsRecord, SusAPCReferralRec
259261
runId,
260262
cancellationToken);
261263

264+
await Transform<SusAPCProcedureObservationsRecord, SusAPCProcedureObservations>(
265+
_observationRecorder.InsertUpdateObservations,
266+
"SUS APC Diagnosis Observations",
267+
runId,
268+
cancellationToken);
269+
270+
await Transform<SusAPCSusDiagnosisRecord, SusAPCSusDiagnosisObservation>(
271+
_observationRecorder.InsertUpdateObservations,
272+
"SUS APC sus_OP_OPCSProcedure Observations",
273+
runId,
274+
cancellationToken);
275+
262276
_conceptResolver.PrintErrors();
263277
}
264278
}

0 commit comments

Comments
 (0)