Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 57 additions & 51 deletions src/fhir/models.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,62 @@
import { Document, Schema, model } from 'mongoose';
import { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
import { Schema, model, Document } from 'mongoose';

export interface Requirement {
name: string;
description: string;
questionnaire: Questionnaire | null;
stakeholderType: 'patient' | 'prescriber' | 'pharmacist' | string; // From fhir4.Parameters.parameter.name
createNewCase: boolean;
resourceId: string;
requiredToDispense: boolean;
appContext: string | null;
}

export interface Medication extends Document {
name: string;
codeSystem: string;
code: string;
requirements: any;
requirements: Requirement[];
}

interface MetRequirements extends Document {
export interface MetRequirements extends Document {
completed: boolean;
completedQuestionnaire: any;
completedQuestionnaire: QuestionnaireResponse | null;
requirementName: string;
requirementDescription: string;
drugName: string;
stakeholderId: string;
case_numbers: any;
case_numbers: string[];
metRequirementId: string;
}

interface RemsCase extends Document {
export interface RemsCase extends Document {
case_number: string;
status: string;
drugName: string;
drugCode: string;
patientFirstName: string;
patientLastName: string;
patientDOB: string;
metRequirements: any;
metRequirements: Partial<MetRequirements>[];
}

const medicationCollectionSchema = new Schema<Medication>({
name: { type: 'String' },
codeSystem: { type: 'string' },
code: { type: 'string' },
requirements: {
type: 'array',
items: {
type: 'object',
properties: {
name: { type: 'string' },
description: { type: 'string' },
questionnaire: { type: 'object' },
stakeholderType: { type: 'string' },
createNewCase: { type: 'boolean' },
resourceId: { type: 'string' },
requiredToDispense: { type: 'boolean' },
appContext: { type: 'string' }
}
name: { type: String },
codeSystem: { type: String },
code: { type: String },
requirements: [
{
name: { type: String },
description: { type: String },
questionnaire: { type: Schema.Types.Mixed, default: null },
stakeholderType: { type: String },
createNewCase: { type: Boolean },
resourceId: { type: String },
requiredToDispense: { type: Boolean },
appContext: { type: String, default: null }
}
}
]
});

medicationCollectionSchema.index({ name: 1 }, { unique: true });
Expand All @@ -58,14 +67,15 @@ export const medicationCollection = model<Medication>(
);

const metRequirementsSchema = new Schema<MetRequirements>({
completed: { type: 'boolean' },
completedQuestionnaire: { type: 'object' },
requirementName: { type: 'string' },
requirementDescription: { type: 'string' },
drugName: { type: 'string' },
stakeholderId: { type: 'string' },
case_numbers: { type: 'array', items: { type: 'string' } }
completed: { type: Boolean },
completedQuestionnaire: { type: Schema.Types.Mixed, default: null },
requirementName: { type: String },
requirementDescription: { type: String },
drugName: { type: String },
stakeholderId: { type: String },
case_numbers: [{ type: String }]
});

metRequirementsSchema.index(
{ drugName: 1, requirementName: 1, stakeholderId: 1 },
{ unique: true }
Expand All @@ -77,26 +87,22 @@ export const metRequirementsCollection = model<MetRequirements>(
);

const remsCaseCollectionSchema = new Schema<RemsCase>({
case_number: { type: 'string' },
status: { type: 'string' },
drugName: { type: 'string' },
patientFirstName: { type: 'string' },
patientLastName: { type: 'string' },
patientDOB: { type: 'string' },
drugCode: { type: 'string' },
metRequirements: {
type: 'array',
items: {
type: 'object',
properties: {
metRequirementId: { type: 'number' },
completed: { type: 'boolean' },
stakeholderId: { type: 'string' },
requirementName: { type: 'string' },
requirementDescription: { type: 'string' }
}
case_number: { type: String },
status: { type: String },
drugName: { type: String },
patientFirstName: { type: String },
patientLastName: { type: String },
patientDOB: { type: String },
drugCode: { type: String },
metRequirements: [
{
metRequirementId: { type: String },
completed: { type: Boolean },
stakeholderId: { type: String },
requirementName: { type: String },
requirementDescription: { type: String }
}
}
]
});

export const remsCaseCollection = model<RemsCase>('RemsCaseCollection', remsCaseCollectionSchema);
49 changes: 36 additions & 13 deletions src/fhir/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ export class FhirUtilities {
resourceId: 'TuralioRemsPatientEnrollment',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientEnrollment',
questionnaire: null
},
{
name: 'Prescriber Enrollment',
Expand All @@ -146,7 +147,8 @@ export class FhirUtilities {
resourceId: 'TuralioPrescriberEnrollmentForm',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberEnrollmentForm'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberEnrollmentForm',
questionnaire: null
},
{
name: 'Prescriber Knowledge Assessment',
Expand All @@ -156,15 +158,18 @@ export class FhirUtilities {
resourceId: 'TuralioPrescriberKnowledgeAssessment',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberKnowledgeAssessment'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioPrescriberKnowledgeAssessment',
questionnaire: null
},
{
name: 'Pharmacist Enrollment',
description: 'Submit Pharmacist Enrollment form to the REMS Administrator',
stakeholderType: 'pharmacist',
createNewCase: false,
resourceId: 'TuralioPharmacistEnrollment',
requiredToDispense: true
requiredToDispense: true,
appContext: null,
questionnaire: null
},
{
name: 'Patient Status Update',
Expand All @@ -174,7 +179,8 @@ export class FhirUtilities {
resourceId: 'TuralioRemsPatientStatus',
requiredToDispense: false,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TuralioRemsPatientStatus',
questionnaire: null
}
]
},
Expand All @@ -191,7 +197,8 @@ export class FhirUtilities {
resourceId: 'TIRFRemsPatientEnrollment',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFRemsPatientEnrollment'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFRemsPatientEnrollment',
questionnaire: null
},
{
name: 'Prescriber Enrollment',
Expand All @@ -201,7 +208,8 @@ export class FhirUtilities {
resourceId: 'TIRFPrescriberEnrollmentForm',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFPrescriberEnrollmentForm'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFPrescriberEnrollmentForm',
questionnaire: null
},
{
name: 'Prescriber Knowledge Assessment',
Expand All @@ -211,23 +219,28 @@ export class FhirUtilities {
resourceId: 'TIRFPrescriberKnowledgeAssessment',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFPrescriberKnowledgeAssessment'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/TIRFPrescriberKnowledgeAssessment',
questionnaire: null
},
{
name: 'Pharmacist Enrollment',
description: 'Submit Pharmacist Enrollment form to the REMS Administrator',
stakeholderType: 'pharmacist',
createNewCase: false,
resourceId: 'TIRFPharmacistEnrollmentForm',
requiredToDispense: true
requiredToDispense: true,
appContext: null,
questionnaire: null
},
{
name: 'Pharmacist Knowledge Assessment',
description: 'Submit Pharmacist Knowledge Assessment form to the REMS Administrator',
stakeholderType: 'pharmacist',
createNewCase: false,
resourceId: 'TIRFPharmacistKnowledgeAssessment',
requiredToDispense: true
requiredToDispense: true,
appContext: null,
questionnaire: null
}
]
},
Expand All @@ -244,7 +257,8 @@ export class FhirUtilities {
resourceId: 'IPledgeRemsPatientEnrollment',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPatientEnrollment'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPatientEnrollment',
questionnaire: null
},
{
name: 'Prescriber Enrollment',
Expand All @@ -254,17 +268,26 @@ export class FhirUtilities {
resourceId: 'IPledgeRemsPrescriberEnrollmentForm',
requiredToDispense: true,
appContext:
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPrescriberEnrollmentForm'
'questionnaire=http://localhost:8090/4_0_0/Questionnaire/IPledgeRemsPrescriberEnrollmentForm',
questionnaire: null
},
{
name: 'Pharmacist Enrollment',
description: 'Submit Pharmacist Enrollment form to the REMS Administrator',
stakeholderType: 'pharmacist',
createNewCase: false,
resourceId: 'IPledgeRemsPharmacistEnrollmentForm',
requiredToDispense: true
requiredToDispense: true,
appContext: null,
questionnaire: null
}
]
},
{
name: 'Addyi',
codeSystem: 'http://www.nlm.nih.gov/research/umls/rxnorm',
code: '1666386',
requirements: []
}
];

Expand Down
Loading