Skip to content

Commit 90e2bc5

Browse files
author
Amy Chen
committed
bug fixes
1 parent 37064b3 commit 90e2bc5

File tree

9 files changed

+58
-29
lines changed

9 files changed

+58
-29
lines changed

src/db/build/LeafDB.Init.sql

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (-1, N'Dynamic', N'{"fie
88
INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (1, N'Observation', N'{"fields":[{"name":"category","type":"String","phi":false,"mask":false,"required":true},{"name":"code","type":"String","phi":false,"mask":false,"required":true},{"name":"effectiveDate","type":"DateTime","phi":true,"mask":true,"required":true},{"name":"encounterId","type":"String","phi":true,"mask":true,"required":true},{"name":"referenceRangeLow","type":"Numeric","phi":false,"mask":false,"required":false},{"name":"referenceRangeHigh","type":"Numeric","phi":false,"mask":false,"required":false},{"name":"specimenType","type":"String","phi":false,"mask":false,"required":false},{"name":"valueString","type":"String","phi":false,"mask":false,"required":true},{"name":"valueQuantity","type":"Numeric","phi":false,"mask":false,"required":false},{"name":"valueUnit","type":"String","phi":false,"mask":false,"required":false},{"name":"personId","type":"String","phi":true,"mask":true,"required":true}]}')
99
INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (2, N'Encounter', N'{"fields":[{"name":"admitDate","type":"DateTime","phi":true,"mask":true,"required":true},{"name":"admitSource","type":"String","phi":false,"mask":false,"required":false},{"name":"class","type":"String","phi":false,"mask":false,"required":true},{"name":"dischargeDate","type":"DateTime","phi":true,"mask":true,"required":true},{"name":"dischargeDisposition","type":"String","phi":false,"mask":false,"required":false},{"name":"encounterId","type":"String","phi":true,"mask":true,"required":true},{"name":"location","type":"String","phi":false,"mask":false,"required":true},{"name":"status","type":"String","phi":false,"mask":false,"required":false},{"name":"personId","type":"String","phi":true,"mask":true,"required":true}]}')
1010
INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (3, N'Demographic', N'{"fields":[{"name":"addressPostalCode","type":"String","phi":false,"mask":false,"required":true},{"name":"addressState","type":"String","phi":false,"mask":false,"required":true},{"name":"ethnicity","type":"String","phi":false,"mask":false,"required":true},{"name":"gender","type":"String","phi":false,"mask":false,"required":true},
11-
{"name":"sex","type":"Numeric","phi":false,"mask":false,"required":false},{"name":"age","type":"Numeric","phi":false,"mask":false,"required":false},{"name":"language","type":"String","phi":false,"mask":false,"required":true},{"name":"maritalStatus","type":"String","phi":false,"mask":false,"required":true},{"name":"race","type":"String","phi":false,"mask":false,"required":true},{"name":"religion","type":"String","phi":false,"mask":false,"required":true},{"name":"marriedBoolean","type":"Bool","phi":false,"mask":false,"required":true},{"name":"hispanicBoolean","type":"Bool","phi":false,"mask":false,"required":true},{"name":"deceasedBoolean","type":"Bool","phi":false,"mask":false,"required":true},{"name":"birthDate","type":"DateTime","phi":true,"mask":true,"required":false},{"name":"deceasedDateTime","type":"DateTime","phi":true,"mask":true,"required":false},{"name":"name","type":"String","phi":true,"mask":false,"required":false},{"name":"mrn","type":"String","phi":true,"mask":false,"required":false},{"name":"personId","type":"String","phi":true,"mask":true,"required":true}]}')
11+
{"name":"sex","type":"String","phi":false,"mask":false,"required":true},{"name":"age","type":"Numeric","phi":false,"mask":false,"required":true},{"name":"language","type":"String","phi":false,"mask":false,"required":true},{"name":"maritalStatus","type":"String","phi":false,"mask":false,"required":true},{"name":"race","type":"String","phi":false,"mask":false,"required":true},{"name":"religion","type":"String","phi":false,"mask":false,"required":true},{"name":"marriedBoolean","type":"Bool","phi":false,"mask":false,"required":true},{"name":"hispanicBoolean","type":"Bool","phi":false,"mask":false,"required":true},{"name":"deceasedBoolean","type":"Bool","phi":false,"mask":false,"required":true},{"name":"birthDate","type":"DateTime","phi":true,"mask":true,"required":false},{"name":"deceasedDateTime","type":"DateTime","phi":true,"mask":true,"required":false},{"name":"name","type":"String","phi":true,"mask":false,"required":false},{"name":"mrn","type":"String","phi":true,"mask":false,"required":false},{"name":"personId","type":"String","phi":true,"mask":true,"required":true}]}')
1212
INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (4, N'Condition', N'{"fields":[{"name":"abatementDateTime","type":"DateTime","phi":true,"mask":true,"required":false},{"name":"category","type":"String","phi":false,"mask":false,"required":true},{"name":"code","type":"String","phi":false,"mask":false,"required":true},{"name":"coding","type":"String","phi":false,"mask":false,"required":true},{"name":"encounterId","type":"String","phi":true,"mask":true,"required":true},{"name":"onsetDateTime","type":"DateTime","phi":true,"mask":true,"required":true},{"name":"recordedDate","type":"DateTime","phi":true,"mask":true,"required":false},{"name":"text","type":"String","phi":false,"mask":false,"required":true}]}')
1313
INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (5, N'Procedure', N'{"fields":[{"name":"category","type":"String","phi":false,"mask":false,"required":true},{"name":"code","type":"String","phi":false,"mask":false,"required":true},{"name":"coding","type":"String","phi":false,"mask":false,"required":true},{"name":"encounterId","type":"String","phi":true,"mask":true,"required":true},{"name":"performedDateTime","type":"DateTime","phi":true,"mask":true,"required":true},{"name":"text","type":"String","phi":false,"mask":false,"required":true}]}')
1414
INSERT [ref].[Shape] ([Id], [Variant], [Schema]) VALUES (6, N'Immunization', N'{"fields":[{"name":"vaccineCode","type":"String","phi":false,"mask":false,"required":true},{"name":"coding","type":"String","phi":false,"mask":false,"required":true},{"name":"doseQuantity","type":"Numeric","phi":false,"mask":false,"required":false},{"name":"doseUnit","type":"String","phi":false,"mask":false,"required":false},{"name":"encounterId","type":"String","phi":true,"mask":true,"required":true},{"name":"occurrenceDateTime","type":"DateTime","phi":true,"mask":true,"required":true},{"name":"route","type":"String","phi":false,"mask":false,"required":false},{"name":"text","type":"String","phi":false,"mask":false,"required":true}]}')

src/server/Model/Cohort/DatasetRecord.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ public PatientDemographic ToIdentifiedPatientDemographic()
277277
AddressState = AddressState.ValueElseUnknown(),
278278
Ethnicity = Ethnicity.ValueElseUnknown(),
279279
Gender = Gender.ValueElseUnknown(),
280-
Sex = Sex,
280+
Sex = Sex.ValueElseUnknown(),
281281
Age = Age,
282282
Language = Language.ValueElseUnknown(),
283283
MaritalStatus = MaritalStatus.ValueElseUnknown(),

src/server/Model/Cohort/MarshalPlan.cs

+9-9
Original file line numberDiff line numberDiff line change
@@ -662,15 +662,15 @@ public DemographicMarshalPlan(DatasetResultSchema schema) : base(schema)
662662
Mrn = mrn;
663663
}
664664

665-
// if (schema.TryGet(DemographicColumns.Sex, out var sex))
666-
// {
667-
// Sex = sex;
668-
// }
669-
670-
// if (schema.TryGet(DemographicColumns.Age, out var age))
671-
// {
672-
// Age = age;
673-
// }
665+
if (schema.TryGet(DemographicColumns.Sex, out var sex))
666+
{
667+
Sex = sex;
668+
}
669+
670+
if (schema.TryGet(DemographicColumns.Age, out var age))
671+
{
672+
Age = age;
673+
}
674674
}
675675
}
676676
}

src/server/Model/Cohort/PatientDemographic.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ public class PatientDemographic : ShapedDataset
2424
[Field(Name = DemographicColumns.Gender, Type = LeafType.String, Required = true)]
2525
public string Gender { get; set; }
2626

27-
[Field(Name = DemographicColumns.Sex, Type = LeafType.String)]
28-
public int? Sex { get; set; }
27+
[Field(Name = DemographicColumns.Sex, Type = LeafType.String, Required = true)]
28+
public string? Sex { get; set; }
2929

3030
// NOTE(ndobb) this gets calculated after sql runs, so there is no field for this
31-
[Field(Name = DemographicColumns.Age, Type = LeafType.Numeric)]
31+
[Field(Name = DemographicColumns.Age, Type = LeafType.Numeric, Required = true)]
3232
public int? Age { get; set; }
3333

3434
[Field(Name = DemographicColumns.Language, Type = LeafType.String, Required = true)]

src/server/Services/Cohort/DemographicsExecutor.cs

+10-5
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,17 @@ Func<PatientDemographicRecord, PatientDemographic> GetExportConverter(bool anony
132132
return (rec) =>
133133
{
134134
anon.Anonymize(rec);
135-
rec.Age = rec.CalculateAge();
135+
if (!String.IsNullOrEmpty(rec.Age?.ToString())) {
136+
rec.Age = rec.CalculateAge();
137+
}
136138
return rec.ToAnonymousPatientDemographic();
137139
};
138140
}
139141
return (rec) =>
140142
{
141-
rec.Age = rec.CalculateAge();
143+
if (!String.IsNullOrEmpty(rec.Age?.ToString())) {
144+
rec.Age = rec.CalculateAge();
145+
}
142146
return rec.ToIdentifiedPatientDemographic();
143147
};
144148
}
@@ -166,10 +170,11 @@ PatientDemographicRecord GetCohortRecord(ILeafDbDataReader reader)
166170
DeceasedDateTime = reader.GetNullableDateTime(Plan.DeathDate?.Index),
167171
Name = reader.GetNullableString(Plan.Name?.Index),
168172
Mrn = reader.GetNullableString(Plan.Mrn?.Index),
169-
Age = reader.GetNullableString(Plan.Age?.Index)
173+
Age = reader.GetNullableInt(Plan.Age?.Index)
170174
};
171-
172-
rec.Age = rec.CalculateAge();
175+
if (!String.IsNullOrEmpty(rec.Age?.ToString())) {
176+
rec.Age = rec.CalculateAge();
177+
}
173178

174179
return rec;
175180
}

src/server/Services/Extensions/PatientDemographicExtensions.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@ public static class PatientDemographicExtensions
1313
{
1414
public static int? CalculateAge(this PatientDemographic patient)
1515
{
16-
if (patient.Age.HasValue)
17-
{
18-
return patient.Age.Value;
16+
// if (patient.Age.HasValue)
17+
// {
18+
// return patient.Age.Value;
19+
// }
20+
if (!String.IsNullOrEmpty(patient.Age?.ToString())) {
21+
return patient.Age;
1922
}
2023

2124
if (!patient.BirthDate.HasValue)

src/ui-client/src/components/Visualize/AggregateDemographics.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default class AggregateDemographics extends React.PureComponent<Props> {
2828
private delayIncrementMs = 600;
2929

3030
public render() {
31-
const { ageByGenderData, binarySplitData, languageByHeritageData, religionData, nihRaceEthnicityData, genderData, patients } = this.props.cohort.visualization.demographics;
31+
const { ageByGenderData, binarySplitData, languageByHeritageData, religionData, nihRaceEthnicityData, genderData, sexData, patients } = this.props.cohort.visualization.demographics;
3232
const colWidth = this.props.width / 2;
3333
const getDelay = (i: number): number => i * this.delayIncrementMs;
3434
console.log("patients ", patients);
@@ -63,17 +63,17 @@ export default class AggregateDemographics extends React.PureComponent<Props> {
6363
</Col>
6464
</Row>
6565
<Row>
66-
<Col lg={6} md={12} className="visualization-sex-container">
66+
<Col lg={5} md={12} className="visualization-sex-container">
6767
<SectionHeader headerText="Sex at Birth" />
6868
{/* fake data for now to test */}
6969
<Sex
70-
counts={{"female": 20, "male": 15, "intersexed": 2}}
70+
counts={sexData}
7171
delay={getDelay(0)}
7272
height={this.props.height}
7373
width={colWidth}
7474
/>
7575
</Col>
76-
<Col lg={6} md={12} className="visualization-age-container">
76+
<Col lg={7} md={12} className="visualization-age-container">
7777
<SectionHeader headerText="Age" />
7878
<Age
7979
patientData={patients}

src/ui-client/src/components/Visualize/Sex.tsx

+23-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ export class Sex extends React.PureComponent<Props, State> {
6161
data = data.slice(0, this.defaultDataLength);
6262
}
6363

64-
console.log(" sex data ", data);
6564
return (
6665
<div className={`${c}-column`} style={{ height, width: w }}>
6766
{/* Show all toggle */}
@@ -88,8 +87,9 @@ export class Sex extends React.PureComponent<Props, State> {
8887
<BarChart
8988
data={data}
9089
margin={{ top: 30, right: 30, left: 10, bottom: 5 }}
90+
layout={"vertical"}
9191
>
92-
<XAxis dataKey="key" />
92+
{/* <XAxis dataKey="key" />
9393
<YAxis />
9494
<Bar
9595
animationBegin={del}
@@ -104,6 +104,27 @@ export class Sex extends React.PureComponent<Props, State> {
104104
dataKey="value"
105105
formatter={this.formatNumber}
106106
position="top"
107+
/> */}
108+
<XAxis type="number" allowDecimals={false} hide={true}/>
109+
<YAxis dataKey="key" type="category" interval={0} width={150} />
110+
<Bar
111+
animationBegin={del}
112+
barSize={config.barSize}
113+
dataKey="value"
114+
isAnimationActive={true}
115+
>
116+
{data.map((d, i) => (
117+
<Cell key={d.key} fill={this.color(i, config.colors)} />
118+
))}
119+
<LabelList
120+
dataKey="value"
121+
formatter={this.formatNumber}
122+
position="right"
123+
/>
124+
<LabelList
125+
dataKey="key"
126+
127+
position="left"
107128
/>
108129
</Bar>
109130
</BarChart>

src/ui-client/src/config/visualization.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const visualizationConfig = {
4444
"rgb(188, 189, 34)", "rgb(219, 219, 141)", "rgb(23, 190, 207)", "rgb(158, 218, 229)"]
4545
},
4646
sex: {
47-
barSize: 28,
47+
barSize: 32,
4848
colors: ["#00BCD4", '#8bc34a', '#f44336', '#e57373', '#FFA726']
4949
},
5050
age: {

0 commit comments

Comments
 (0)