2023-07-08 08:43:30 -06:00
// THIS FILE IS GENERATED BY https://github.com/fastenhealth/fasten-onprem/blob/main/backend/pkg/models/database/generate.go
// PLEASE DO NOT EDIT BY HAND
package database
import (
"encoding/json"
"fmt"
goja "github.com/dop251/goja"
2023-08-27 18:09:46 -06:00
models "github.com/fastenhealth/fasten-onprem/backend/pkg/models"
2023-07-08 08:43:30 -06:00
datatypes "gorm.io/datatypes"
"time"
)
type FhirMedicationStatement struct {
models . ResourceBase
// Returns statements of this category of medicationstatement
// https://hl7.org/fhir/r4/search.html#token
Category datatypes . JSON ` gorm:"column:category;type:text;serializer:json" json:"category,omitempty" `
/ *
Multiple Resources :
* [ AllergyIntolerance ] ( allergyintolerance . html ) : Code that identifies the allergy or intolerance
* [ Condition ] ( condition . html ) : Code for the condition
* [ DeviceRequest ] ( devicerequest . html ) : Code for what is being requested / ordered
* [ DiagnosticReport ] ( diagnosticreport . html ) : The code for the report , as opposed to codes for the atomic results , which are the names on the observation resource referred to from the result
* [ FamilyMemberHistory ] ( familymemberhistory . html ) : A search by a condition code
* [ List ] ( list . html ) : What the purpose of this list is
* [ Medication ] ( medication . html ) : Returns medications for a specific code
* [ MedicationAdministration ] ( medicationadministration . html ) : Return administrations of this medication code
* [ MedicationDispense ] ( medicationdispense . html ) : Returns dispenses of this medicine code
* [ MedicationRequest ] ( medicationrequest . html ) : Return prescriptions of this medication code
* [ MedicationStatement ] ( medicationstatement . html ) : Return statements of this medication code
* [ Observation ] ( observation . html ) : The code of the observation type
* [ Procedure ] ( procedure . html ) : A code to identify a procedure
* [ ServiceRequest ] ( servicerequest . html ) : What is being requested / ordered
* /
// https://hl7.org/fhir/r4/search.html#token
Code datatypes . JSON ` gorm:"column:code;type:text;serializer:json" json:"code,omitempty" `
// Returns statements for a specific context (episode or episode of Care).
// https://hl7.org/fhir/r4/search.html#reference
Context datatypes . JSON ` gorm:"column:context;type:text;serializer:json" json:"context,omitempty" `
// Date when patient was taking (or not taking) the medication
// https://hl7.org/fhir/r4/search.html#date
2023-08-01 21:29:35 -06:00
Effective * time . Time ` gorm:"column:effective;type:datetime" json:"effective,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ AllergyIntolerance ] ( allergyintolerance . html ) : External ids for this item
* [ CarePlan ] ( careplan . html ) : External Ids for this plan
* [ CareTeam ] ( careteam . html ) : External Ids for this team
* [ Composition ] ( composition . html ) : Version - independent identifier for the Composition
* [ Condition ] ( condition . html ) : A unique identifier of the condition record
* [ Consent ] ( consent . html ) : Identifier for this record ( external references )
* [ DetectedIssue ] ( detectedissue . html ) : Unique id for the detected issue
* [ DeviceRequest ] ( devicerequest . html ) : Business identifier for request / order
* [ DiagnosticReport ] ( diagnosticreport . html ) : An identifier for the report
* [ DocumentManifest ] ( documentmanifest . html ) : Unique Identifier for the set of documents
* [ DocumentReference ] ( documentreference . html ) : Master Version Specific Identifier
* [ Encounter ] ( encounter . html ) : Identifier ( s ) by which this encounter is known
* [ EpisodeOfCare ] ( episodeofcare . html ) : Business Identifier ( s ) relevant for this EpisodeOfCare
* [ FamilyMemberHistory ] ( familymemberhistory . html ) : A search by a record identifier
* [ Goal ] ( goal . html ) : External Ids for this goal
* [ ImagingStudy ] ( imagingstudy . html ) : Identifiers for the Study , such as DICOM Study Instance UID and Accession number
* [ Immunization ] ( immunization . html ) : Business identifier
* [ List ] ( list . html ) : Business identifier
* [ MedicationAdministration ] ( medicationadministration . html ) : Return administrations with this external identifier
* [ MedicationDispense ] ( medicationdispense . html ) : Returns dispenses with this external identifier
* [ MedicationRequest ] ( medicationrequest . html ) : Return prescriptions with this external identifier
* [ MedicationStatement ] ( medicationstatement . html ) : Return statements with this external identifier
* [ NutritionOrder ] ( nutritionorder . html ) : Return nutrition orders with this external identifier
* [ Observation ] ( observation . html ) : The unique id for a particular observation
* [ Procedure ] ( procedure . html ) : A unique identifier for a procedure
* [ RiskAssessment ] ( riskassessment . html ) : Unique identifier for the assessment
* [ ServiceRequest ] ( servicerequest . html ) : Identifiers assigned to this order
* [ SupplyDelivery ] ( supplydelivery . html ) : External identifier
* [ SupplyRequest ] ( supplyrequest . html ) : Business Identifier for SupplyRequest
* [ VisionPrescription ] ( visionprescription . html ) : Return prescriptions with this external identifier
* /
// https://hl7.org/fhir/r4/search.html#token
Identifier datatypes . JSON ` gorm:"column:identifier;type:text;serializer:json" json:"identifier,omitempty" `
// Language of the resource content
// https://hl7.org/fhir/r4/search.html#token
Language datatypes . JSON ` gorm:"column:language;type:text;serializer:json" json:"language,omitempty" `
/ *
Multiple Resources :
* [ MedicationAdministration ] ( medicationadministration . html ) : Return administrations of this medication resource
* [ MedicationDispense ] ( medicationdispense . html ) : Returns dispenses of this medicine resource
* [ MedicationRequest ] ( medicationrequest . html ) : Return prescriptions for this medication reference
* [ MedicationStatement ] ( medicationstatement . html ) : Return statements of this medication reference
* /
// https://hl7.org/fhir/r4/search.html#reference
Medication datatypes . JSON ` gorm:"column:medication;type:text;serializer:json" json:"medication,omitempty" `
2023-11-19 12:09:23 -07:00
// When the resource version last changed
// https://hl7.org/fhir/r4/search.html#date
MetaLastUpdated * time . Time ` gorm:"column:metaLastUpdated;type:datetime" json:"metaLastUpdated,omitempty" `
// Profiles this resource claims to conform to
// https://hl7.org/fhir/r4/search.html#reference
MetaProfile datatypes . JSON ` gorm:"column:metaProfile;type:text;serializer:json" json:"metaProfile,omitempty" `
// Tags applied to this resource
// https://hl7.org/fhir/r4/search.html#token
MetaTag datatypes . JSON ` gorm:"column:metaTag;type:text;serializer:json" json:"metaTag,omitempty" `
// Tags applied to this resource
// This is a primitive string literal (`keyword` type). It is not a recognized SearchParameter type from https://hl7.org/fhir/r4/search.html, it's Fasten Health-specific
MetaVersionId string ` gorm:"column:metaVersionId;type:text" json:"metaVersionId,omitempty" `
2023-07-08 08:43:30 -06:00
// Returns statements that are part of another event.
// https://hl7.org/fhir/r4/search.html#reference
PartOf datatypes . JSON ` gorm:"column:partOf;type:text;serializer:json" json:"partOf,omitempty" `
// Who or where the information in the statement came from
// https://hl7.org/fhir/r4/search.html#reference
Source datatypes . JSON ` gorm:"column:source;type:text;serializer:json" json:"source,omitempty" `
/ *
Multiple Resources :
* [ MedicationAdministration ] ( medicationadministration . html ) : MedicationAdministration event status ( for example one of active / paused / completed / nullified )
* [ MedicationDispense ] ( medicationdispense . html ) : Returns dispenses with a specified dispense status
* [ MedicationRequest ] ( medicationrequest . html ) : Status of the prescription
* [ MedicationStatement ] ( medicationstatement . html ) : Return statements that match the given status
* /
// https://hl7.org/fhir/r4/search.html#token
Status datatypes . JSON ` gorm:"column:status;type:text;serializer:json" json:"status,omitempty" `
// The identity of a patient, animal or group to list statements for
// https://hl7.org/fhir/r4/search.html#reference
Subject datatypes . JSON ` gorm:"column:subject;type:text;serializer:json" json:"subject,omitempty" `
// Text search against the narrative
2023-11-19 12:09:23 -07:00
// This is a primitive string literal (`keyword` type). It is not a recognized SearchParameter type from https://hl7.org/fhir/r4/search.html, it's Fasten Health-specific
Text string ` gorm:"column:text;type:text" json:"text,omitempty" `
2023-07-08 08:43:30 -06:00
// A resource type filter
// https://hl7.org/fhir/r4/search.html#special
Type datatypes . JSON ` gorm:"column:type;type:text;serializer:json" json:"type,omitempty" `
}
func ( s * FhirMedicationStatement ) GetSearchParameters ( ) map [ string ] string {
searchParameters := map [ string ] string {
2023-08-23 13:24:08 -06:00
"category" : "token" ,
"code" : "token" ,
"context" : "reference" ,
"effective" : "date" ,
"id" : "keyword" ,
"identifier" : "token" ,
"language" : "token" ,
"medication" : "reference" ,
2023-11-19 12:09:23 -07:00
"metaLastUpdated" : "date" ,
"metaProfile" : "reference" ,
"metaTag" : "token" ,
"metaVersionId" : "keyword" ,
2023-08-23 13:24:08 -06:00
"partOf" : "reference" ,
2023-10-01 20:15:24 -06:00
"sort_date" : "date" ,
2023-08-23 13:24:08 -06:00
"source" : "reference" ,
"source_id" : "keyword" ,
"source_resource_id" : "keyword" ,
"source_resource_type" : "keyword" ,
"source_uri" : "keyword" ,
"status" : "token" ,
"subject" : "reference" ,
2023-11-19 12:09:23 -07:00
"text" : "keyword" ,
2023-08-23 13:24:08 -06:00
"type" : "special" ,
2023-07-08 08:43:30 -06:00
}
return searchParameters
}
func ( s * FhirMedicationStatement ) PopulateAndExtractSearchParameters ( resourceRaw json . RawMessage ) error {
s . ResourceRaw = datatypes . JSON ( resourceRaw )
// unmarshal the raw resource (bytes) into a map
var resourceRawMap map [ string ] interface { }
err := json . Unmarshal ( resourceRaw , & resourceRawMap )
if err != nil {
return err
}
if len ( fhirPathJs ) == 0 {
return fmt . Errorf ( "fhirPathJs script is empty" )
}
vm := goja . New ( )
// setup the global window object
vm . Set ( "window" , vm . NewObject ( ) )
// set the global FHIR Resource object
vm . Set ( "fhirResource" , resourceRawMap )
// compile the fhirpath library
fhirPathJsProgram , err := goja . Compile ( "fhirpath.min.js" , fhirPathJs , true )
if err != nil {
return err
}
2023-11-19 12:09:23 -07:00
// compile the searchParametersExtractor library
searchParametersExtractorJsProgram , err := goja . Compile ( "searchParameterExtractor.js" , searchParameterExtractorJs , true )
if err != nil {
return err
}
2023-07-08 08:43:30 -06:00
// add the fhirpath library in the goja vm
_ , err = vm . RunProgram ( fhirPathJsProgram )
if err != nil {
return err
}
2023-11-19 12:09:23 -07:00
// add the searchParametersExtractor library in the goja vm
_ , err = vm . RunProgram ( searchParametersExtractorJsProgram )
if err != nil {
return err
}
2023-07-08 08:43:30 -06:00
// execute the fhirpath expression for each search parameter
// extracting Category
2023-11-19 12:09:23 -07:00
categoryResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'MedicationStatement.category')" )
2023-07-08 08:43:30 -06:00
if err == nil && categoryResult . String ( ) != "undefined" {
s . Category = [ ] byte ( categoryResult . String ( ) )
}
// extracting Code
2023-11-19 12:09:23 -07:00
codeResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | (DeviceRequest.codeCodeableConcept) | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | (MedicationAdministration.medicationCodeableConcept) | (MedicationDispense.medicationCodeableConcept) | (MedicationRequest.medicationCodeableConcept) | (MedicationStatement.medicationCodeableConcept) | Observation.code | Procedure.code | ServiceRequest.code')" )
2023-07-08 08:43:30 -06:00
if err == nil && codeResult . String ( ) != "undefined" {
s . Code = [ ] byte ( codeResult . String ( ) )
}
// extracting Context
2023-11-19 12:09:23 -07:00
contextResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'MedicationStatement.context')" )
2023-07-08 08:43:30 -06:00
if err == nil && contextResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Context = [ ] byte ( contextResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Effective
2023-11-19 12:09:23 -07:00
effectiveResult , err := vm . RunString ( "extractDateSearchParameters(fhirResource, 'MedicationStatement.effectiveDateTime | MedicationStatement.effectivePeriod')" )
2023-07-08 08:43:30 -06:00
if err == nil && effectiveResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , effectiveResult . String ( ) )
if err == nil {
2023-08-01 21:29:35 -06:00
s . Effective = & t
} else if err != nil {
d , err := time . Parse ( "2006-01-02" , effectiveResult . String ( ) )
if err == nil {
s . Effective = & d
}
2023-07-08 08:43:30 -06:00
}
}
// extracting Identifier
2023-11-19 12:09:23 -07:00
identifierResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier')" )
2023-07-08 08:43:30 -06:00
if err == nil && identifierResult . String ( ) != "undefined" {
s . Identifier = [ ] byte ( identifierResult . String ( ) )
}
// extracting Language
2023-11-19 12:09:23 -07:00
languageResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'language')" )
2023-07-08 08:43:30 -06:00
if err == nil && languageResult . String ( ) != "undefined" {
s . Language = [ ] byte ( languageResult . String ( ) )
}
2023-11-19 12:09:23 -07:00
// extracting Medication
medicationResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, '(MedicationAdministration.medicationReference) | (MedicationDispense.medicationReference) | (MedicationRequest.medicationReference) | (MedicationStatement.medicationReference)')" )
if err == nil && medicationResult . String ( ) != "undefined" {
s . Medication = [ ] byte ( medicationResult . String ( ) )
}
// extracting MetaLastUpdated
metaLastUpdatedResult , err := vm . RunString ( "extractDateSearchParameters(fhirResource, 'meta.lastUpdated')" )
if err == nil && metaLastUpdatedResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , metaLastUpdatedResult . String ( ) )
2023-07-08 08:43:30 -06:00
if err == nil {
2023-11-19 12:09:23 -07:00
s . MetaLastUpdated = & t
2023-08-01 21:29:35 -06:00
} else if err != nil {
2023-11-19 12:09:23 -07:00
d , err := time . Parse ( "2006-01-02" , metaLastUpdatedResult . String ( ) )
2023-08-01 21:29:35 -06:00
if err == nil {
2023-11-19 12:09:23 -07:00
s . MetaLastUpdated = & d
2023-08-01 21:29:35 -06:00
}
2023-07-08 08:43:30 -06:00
}
}
2023-11-19 12:09:23 -07:00
// extracting MetaProfile
metaProfileResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'meta.profile')" )
if err == nil && metaProfileResult . String ( ) != "undefined" {
s . MetaProfile = [ ] byte ( metaProfileResult . String ( ) )
}
// extracting MetaTag
metaTagResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'meta.tag')" )
if err == nil && metaTagResult . String ( ) != "undefined" {
s . MetaTag = [ ] byte ( metaTagResult . String ( ) )
}
// extracting MetaVersionId
metaVersionIdResult , err := vm . RunString ( "extractSimpleSearchParameters(fhirResource, 'meta.versionId')" )
if err == nil && metaVersionIdResult . String ( ) != "undefined" {
s . MetaVersionId = metaVersionIdResult . String ( )
2023-07-08 08:43:30 -06:00
}
// extracting PartOf
2023-11-19 12:09:23 -07:00
partOfResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'MedicationStatement.partOf')" )
2023-07-08 08:43:30 -06:00
if err == nil && partOfResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . PartOf = [ ] byte ( partOfResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Source
2023-11-19 12:09:23 -07:00
sourceResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'MedicationStatement.informationSource')" )
2023-07-08 08:43:30 -06:00
if err == nil && sourceResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Source = [ ] byte ( sourceResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Status
2023-11-19 12:09:23 -07:00
statusResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'MedicationAdministration.status | MedicationDispense.status | MedicationRequest.status | MedicationStatement.status')" )
2023-07-08 08:43:30 -06:00
if err == nil && statusResult . String ( ) != "undefined" {
s . Status = [ ] byte ( statusResult . String ( ) )
}
// extracting Subject
2023-11-19 12:09:23 -07:00
subjectResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'MedicationStatement.subject')" )
2023-07-08 08:43:30 -06:00
if err == nil && subjectResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Subject = [ ] byte ( subjectResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
2023-11-19 12:09:23 -07:00
// extracting Text
textResult , err := vm . RunString ( "extractSimpleSearchParameters(fhirResource, 'text')" )
if err == nil && textResult . String ( ) != "undefined" {
s . Text = textResult . String ( )
2023-07-08 08:43:30 -06:00
}
return nil
}
// TableName overrides the table name from fhir_observations (pluralized) to `fhir_observation`. https://gorm.io/docs/conventions.html#TableName
func ( s * FhirMedicationStatement ) TableName ( ) string {
return "fhir_medication_statement"
}