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 FhirObservation struct {
models . ResourceBase
// Reference to the service request.
// https://hl7.org/fhir/r4/search.html#reference
BasedOn datatypes . JSON ` gorm:"column:basedOn;type:text;serializer:json" json:"basedOn,omitempty" `
// The classification of the type of observation
// 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" `
// The code of the observation type or component type
// https://hl7.org/fhir/r4/search.html#token
ComboCode datatypes . JSON ` gorm:"column:comboCode;type:text;serializer:json" json:"comboCode,omitempty" `
// The reason why the expected value in the element Observation.value[x] or Observation.component.value[x] is missing.
// https://hl7.org/fhir/r4/search.html#token
ComboDataAbsentReason datatypes . JSON ` gorm:"column:comboDataAbsentReason;type:text;serializer:json" json:"comboDataAbsentReason,omitempty" `
// The value or component value of the observation, if the value is a CodeableConcept
// https://hl7.org/fhir/r4/search.html#token
ComboValueConcept datatypes . JSON ` gorm:"column:comboValueConcept;type:text;serializer:json" json:"comboValueConcept,omitempty" `
// The value or component value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)
// https://hl7.org/fhir/r4/search.html#quantity
ComboValueQuantity datatypes . JSON ` gorm:"column:comboValueQuantity;type:text;serializer:json" json:"comboValueQuantity,omitempty" `
// The component code of the observation type
// https://hl7.org/fhir/r4/search.html#token
ComponentCode datatypes . JSON ` gorm:"column:componentCode;type:text;serializer:json" json:"componentCode,omitempty" `
// The reason why the expected value in the element Observation.component.value[x] is missing.
// https://hl7.org/fhir/r4/search.html#token
ComponentDataAbsentReason datatypes . JSON ` gorm:"column:componentDataAbsentReason;type:text;serializer:json" json:"componentDataAbsentReason,omitempty" `
// The value of the component observation, if the value is a CodeableConcept
// https://hl7.org/fhir/r4/search.html#token
ComponentValueConcept datatypes . JSON ` gorm:"column:componentValueConcept;type:text;serializer:json" json:"componentValueConcept,omitempty" `
// The value of the component observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)
// https://hl7.org/fhir/r4/search.html#quantity
ComponentValueQuantity datatypes . JSON ` gorm:"column:componentValueQuantity;type:text;serializer:json" json:"componentValueQuantity,omitempty" `
// The reason why the expected value in the element Observation.value[x] is missing.
// https://hl7.org/fhir/r4/search.html#token
DataAbsentReason datatypes . JSON ` gorm:"column:dataAbsentReason;type:text;serializer:json" json:"dataAbsentReason,omitempty" `
/ *
Multiple Resources :
* [ AllergyIntolerance ] ( allergyintolerance . html ) : Date first version of the resource instance was recorded
* [ CarePlan ] ( careplan . html ) : Time period plan covers
* [ CareTeam ] ( careteam . html ) : Time period team covers
* [ ClinicalImpression ] ( clinicalimpression . html ) : When the assessment was documented
* [ Composition ] ( composition . html ) : Composition editing time
* [ Consent ] ( consent . html ) : When this Consent was created or indexed
* [ DiagnosticReport ] ( diagnosticreport . html ) : The clinically relevant time of the report
* [ Encounter ] ( encounter . html ) : A date within the period the Encounter lasted
* [ EpisodeOfCare ] ( episodeofcare . html ) : The provided date search value falls within the episode of care ' s period
* [ FamilyMemberHistory ] ( familymemberhistory . html ) : When history was recorded or last updated
* [ Flag ] ( flag . html ) : Time period when flag is active
* [ Immunization ] ( immunization . html ) : Vaccination ( non ) - Administration Date
* [ List ] ( list . html ) : When the list was prepared
* [ Observation ] ( observation . html ) : Obtained date / time . If the obtained element is a period , a date that falls in the period
* [ Procedure ] ( procedure . html ) : When the procedure was performed
* [ RiskAssessment ] ( riskassessment . html ) : When was assessment made ?
* [ SupplyRequest ] ( supplyrequest . html ) : When the request was made
* /
// https://hl7.org/fhir/r4/search.html#date
2023-08-01 21:29:35 -06:00
Date * time . Time ` gorm:"column:date;type:datetime" json:"date,omitempty" `
2023-07-08 08:43:30 -06:00
// Related measurements the observation is made from
// https://hl7.org/fhir/r4/search.html#reference
DerivedFrom datatypes . JSON ` gorm:"column:derivedFrom;type:text;serializer:json" json:"derivedFrom,omitempty" `
// The Device that generated the observation data.
// https://hl7.org/fhir/r4/search.html#reference
Device datatypes . JSON ` gorm:"column:device;type:text;serializer:json" json:"device,omitempty" `
/ *
Multiple Resources :
* [ Composition ] ( composition . html ) : Context of the Composition
* [ DeviceRequest ] ( devicerequest . html ) : Encounter during which request was created
* [ DiagnosticReport ] ( diagnosticreport . html ) : The Encounter when the order was made
* [ DocumentReference ] ( documentreference . html ) : Context of the document content
* [ Flag ] ( flag . html ) : Alert relevant during encounter
* [ List ] ( list . html ) : Context in which list created
* [ NutritionOrder ] ( nutritionorder . html ) : Return nutrition orders with this encounter identifier
* [ Observation ] ( observation . html ) : Encounter related to the observation
* [ Procedure ] ( procedure . html ) : Encounter created as part of
* [ RiskAssessment ] ( riskassessment . html ) : Where was assessment performed ?
* [ ServiceRequest ] ( servicerequest . html ) : An encounter in which this request is made
* [ VisionPrescription ] ( visionprescription . html ) : Return prescriptions with this encounter identifier
* /
// https://hl7.org/fhir/r4/search.html#reference
Encounter datatypes . JSON ` gorm:"column:encounter;type:text;serializer:json" json:"encounter,omitempty" `
// The focus of an observation when the focus is not the patient of record.
// https://hl7.org/fhir/r4/search.html#reference
Focus datatypes . JSON ` gorm:"column:focus;type:text;serializer:json" json:"focus,omitempty" `
// Related resource that belongs to the Observation group
// https://hl7.org/fhir/r4/search.html#reference
HasMember datatypes . JSON ` gorm:"column:hasMember;type:text;serializer:json" json:"hasMember,omitempty" `
/ *
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" `
// When the resource version last changed
// https://hl7.org/fhir/r4/search.html#date
2023-08-01 21:29:35 -06:00
LastUpdated * time . Time ` gorm:"column:lastUpdated;type:datetime" json:"lastUpdated,omitempty" `
2023-07-08 08:43:30 -06:00
// The method used for the observation
// https://hl7.org/fhir/r4/search.html#token
Method datatypes . JSON ` gorm:"column:method;type:text;serializer:json" json:"method,omitempty" `
// Part of referenced event
// https://hl7.org/fhir/r4/search.html#reference
PartOf datatypes . JSON ` gorm:"column:partOf;type:text;serializer:json" json:"partOf,omitempty" `
// Who performed the observation
// https://hl7.org/fhir/r4/search.html#reference
Performer datatypes . JSON ` gorm:"column:performer;type:text;serializer:json" json:"performer,omitempty" `
// Profiles this resource claims to conform to
// https://hl7.org/fhir/r4/search.html#reference
Profile datatypes . JSON ` gorm:"column:profile;type:text;serializer:json" json:"profile,omitempty" `
// Specimen used for this observation
// https://hl7.org/fhir/r4/search.html#reference
Specimen datatypes . JSON ` gorm:"column:specimen;type:text;serializer:json" json:"specimen,omitempty" `
// The status of the observation
// https://hl7.org/fhir/r4/search.html#token
Status datatypes . JSON ` gorm:"column:status;type:text;serializer:json" json:"status,omitempty" `
// The subject that the observation is about
// https://hl7.org/fhir/r4/search.html#reference
Subject datatypes . JSON ` gorm:"column:subject;type:text;serializer:json" json:"subject,omitempty" `
// Tags applied to this resource
// https://hl7.org/fhir/r4/search.html#token
Tag datatypes . JSON ` gorm:"column:tag;type:text;serializer:json" json:"tag,omitempty" `
// Text search against the narrative
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
Text datatypes . JSON ` gorm:"column:text;type:text;serializer:json" 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" `
// The value of the observation, if the value is a CodeableConcept
// https://hl7.org/fhir/r4/search.html#token
ValueConcept datatypes . JSON ` gorm:"column:valueConcept;type:text;serializer:json" json:"valueConcept,omitempty" `
// The value of the observation, if the value is a date or period of time
// https://hl7.org/fhir/r4/search.html#date
2023-08-01 21:29:35 -06:00
ValueDate * time . Time ` gorm:"column:valueDate;type:datetime" json:"valueDate,omitempty" `
2023-07-08 08:43:30 -06:00
// The value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)
// https://hl7.org/fhir/r4/search.html#quantity
ValueQuantity datatypes . JSON ` gorm:"column:valueQuantity;type:text;serializer:json" json:"valueQuantity,omitempty" `
// The value of the observation, if the value is a string, and also searches in CodeableConcept.text
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
ValueString datatypes . JSON ` gorm:"column:valueString;type:text;serializer:json" json:"valueString,omitempty" `
2023-07-08 08:43:30 -06:00
}
func ( s * FhirObservation ) GetSearchParameters ( ) map [ string ] string {
searchParameters := map [ string ] string {
"basedOn" : "reference" ,
"category" : "token" ,
"code" : "token" ,
"comboCode" : "token" ,
"comboDataAbsentReason" : "token" ,
"comboValueConcept" : "token" ,
"comboValueQuantity" : "quantity" ,
"componentCode" : "token" ,
"componentDataAbsentReason" : "token" ,
"componentValueConcept" : "token" ,
"componentValueQuantity" : "quantity" ,
"dataAbsentReason" : "token" ,
"date" : "date" ,
"derivedFrom" : "reference" ,
"device" : "reference" ,
"encounter" : "reference" ,
"focus" : "reference" ,
"hasMember" : "reference" ,
2023-08-23 13:24:08 -06:00
"id" : "keyword" ,
2023-07-08 08:43:30 -06:00
"identifier" : "token" ,
"language" : "token" ,
"lastUpdated" : "date" ,
"method" : "token" ,
"partOf" : "reference" ,
"performer" : "reference" ,
"profile" : "reference" ,
2023-10-01 20:15:24 -06:00
"sort_date" : "date" ,
2023-08-23 13:24:08 -06:00
"source_id" : "keyword" ,
"source_resource_id" : "keyword" ,
"source_resource_type" : "keyword" ,
"source_uri" : "keyword" ,
2023-07-08 08:43:30 -06:00
"specimen" : "reference" ,
"status" : "token" ,
"subject" : "reference" ,
"tag" : "token" ,
"text" : "string" ,
"type" : "special" ,
"valueConcept" : "token" ,
"valueDate" : "date" ,
"valueQuantity" : "quantity" ,
"valueString" : "string" ,
}
return searchParameters
}
func ( s * FhirObservation ) 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
}
// add the fhirpath library in the goja vm
_ , err = vm . RunProgram ( fhirPathJsProgram )
if err != nil {
return err
}
// execute the fhirpath expression for each search parameter
// extracting BasedOn
2023-08-13 15:28:03 -06:00
basedOnResult , err := vm . RunString ( `
BasedOnResult = window . fhirpath . evaluate ( fhirResource , ' Observation . basedOn ' )
if ( BasedOnResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( BasedOnResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && basedOnResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . BasedOn = [ ] byte ( basedOnResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Category
categoryResult , err := vm . RunString ( `
CategoryResult = window . fhirpath . evaluate ( fhirResource , ' Observation . category ' )
CategoryProcessed = CategoryResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( CategoryProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( CategoryProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && categoryResult . String ( ) != "undefined" {
s . Category = [ ] byte ( categoryResult . String ( ) )
}
// extracting Code
codeResult , err := vm . RunString ( `
CodeResult = window . fhirpath . evaluate ( 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 ' )
CodeProcessed = CodeResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( CodeProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( CodeProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && codeResult . String ( ) != "undefined" {
s . Code = [ ] byte ( codeResult . String ( ) )
}
// extracting ComboCode
comboCodeResult , err := vm . RunString ( `
ComboCodeResult = window . fhirpath . evaluate ( fhirResource , ' Observation . code | Observation . component . code ' )
ComboCodeProcessed = ComboCodeResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ComboCodeProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ComboCodeProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && comboCodeResult . String ( ) != "undefined" {
s . ComboCode = [ ] byte ( comboCodeResult . String ( ) )
}
// extracting ComboDataAbsentReason
comboDataAbsentReasonResult , err := vm . RunString ( `
ComboDataAbsentReasonResult = window . fhirpath . evaluate ( fhirResource , ' Observation . dataAbsentReason | Observation . component . dataAbsentReason ' )
ComboDataAbsentReasonProcessed = ComboDataAbsentReasonResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ComboDataAbsentReasonProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ComboDataAbsentReasonProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && comboDataAbsentReasonResult . String ( ) != "undefined" {
s . ComboDataAbsentReason = [ ] byte ( comboDataAbsentReasonResult . String ( ) )
}
// extracting ComboValueConcept
comboValueConceptResult , err := vm . RunString ( `
ComboValueConceptResult = window . fhirpath . evaluate ( fhirResource , ' ( Observation . valueCodeableConcept ) | ( Observation . component . valueCodeableConcept ) ' )
ComboValueConceptProcessed = ComboValueConceptResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ComboValueConceptProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ComboValueConceptProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && comboValueConceptResult . String ( ) != "undefined" {
s . ComboValueConcept = [ ] byte ( comboValueConceptResult . String ( ) )
}
// extracting ComboValueQuantity
comboValueQuantityResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, '(Observation.valueQuantity) | (Observation.valueSampledData) | (Observation.component.valueQuantity) | (Observation.component.valueSampledData)'))" )
if err == nil && comboValueQuantityResult . String ( ) != "undefined" {
s . ComboValueQuantity = [ ] byte ( comboValueQuantityResult . String ( ) )
}
// extracting ComponentCode
componentCodeResult , err := vm . RunString ( `
ComponentCodeResult = window . fhirpath . evaluate ( fhirResource , ' Observation . component . code ' )
ComponentCodeProcessed = ComponentCodeResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ComponentCodeProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ComponentCodeProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && componentCodeResult . String ( ) != "undefined" {
s . ComponentCode = [ ] byte ( componentCodeResult . String ( ) )
}
// extracting ComponentDataAbsentReason
componentDataAbsentReasonResult , err := vm . RunString ( `
ComponentDataAbsentReasonResult = window . fhirpath . evaluate ( fhirResource , ' Observation . component . dataAbsentReason ' )
ComponentDataAbsentReasonProcessed = ComponentDataAbsentReasonResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ComponentDataAbsentReasonProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ComponentDataAbsentReasonProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && componentDataAbsentReasonResult . String ( ) != "undefined" {
s . ComponentDataAbsentReason = [ ] byte ( componentDataAbsentReasonResult . String ( ) )
}
// extracting ComponentValueConcept
componentValueConceptResult , err := vm . RunString ( `
ComponentValueConceptResult = window . fhirpath . evaluate ( fhirResource , ' ( Observation . component . valueCodeableConcept ) ' )
ComponentValueConceptProcessed = ComponentValueConceptResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ComponentValueConceptProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ComponentValueConceptProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && componentValueConceptResult . String ( ) != "undefined" {
s . ComponentValueConcept = [ ] byte ( componentValueConceptResult . String ( ) )
}
// extracting ComponentValueQuantity
componentValueQuantityResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, '(Observation.component.valueQuantity) | (Observation.component.valueSampledData)'))" )
if err == nil && componentValueQuantityResult . String ( ) != "undefined" {
s . ComponentValueQuantity = [ ] byte ( componentValueQuantityResult . String ( ) )
}
// extracting DataAbsentReason
dataAbsentReasonResult , err := vm . RunString ( `
DataAbsentReasonResult = window . fhirpath . evaluate ( fhirResource , ' Observation . dataAbsentReason ' )
DataAbsentReasonProcessed = DataAbsentReasonResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( DataAbsentReasonProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( DataAbsentReasonProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && dataAbsentReasonResult . String ( ) != "undefined" {
s . DataAbsentReason = [ ] byte ( dataAbsentReasonResult . String ( ) )
}
// extracting Date
dateResult , err := vm . RunString ( "window.fhirpath.evaluate(fhirResource, 'AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrenceDateTime) | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrenceDateTime) | SupplyRequest.authoredOn')[0]" )
if err == nil && dateResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , dateResult . String ( ) )
if err == nil {
2023-08-01 21:29:35 -06:00
s . Date = & t
} else if err != nil {
d , err := time . Parse ( "2006-01-02" , dateResult . String ( ) )
if err == nil {
s . Date = & d
}
2023-07-08 08:43:30 -06:00
}
}
// extracting DerivedFrom
2023-08-13 15:28:03 -06:00
derivedFromResult , err := vm . RunString ( `
DerivedFromResult = window . fhirpath . evaluate ( fhirResource , ' Observation . derivedFrom ' )
if ( DerivedFromResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( DerivedFromResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && derivedFromResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . DerivedFrom = [ ] byte ( derivedFromResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Device
2023-08-13 15:28:03 -06:00
deviceResult , err := vm . RunString ( `
DeviceResult = window . fhirpath . evaluate ( fhirResource , ' Observation . device ' )
if ( DeviceResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( DeviceResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && deviceResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Device = [ ] byte ( deviceResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Encounter
2023-08-13 15:28:03 -06:00
encounterResult , err := vm . RunString ( `
EncounterResult = window . fhirpath . evaluate ( fhirResource , ' Composition . encounter | DeviceRequest . encounter | DiagnosticReport . encounter | DocumentReference . context . encounter . where ( resolve ( ) is Encounter ) | Flag . encounter | List . encounter | NutritionOrder . encounter | Observation . encounter | Procedure . encounter | RiskAssessment . encounter | ServiceRequest . encounter | VisionPrescription . encounter ' )
if ( EncounterResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( EncounterResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && encounterResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Encounter = [ ] byte ( encounterResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Focus
2023-08-13 15:28:03 -06:00
focusResult , err := vm . RunString ( `
FocusResult = window . fhirpath . evaluate ( fhirResource , ' Observation . focus ' )
if ( FocusResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( FocusResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && focusResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Focus = [ ] byte ( focusResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting HasMember
2023-08-13 15:28:03 -06:00
hasMemberResult , err := vm . RunString ( `
HasMemberResult = window . fhirpath . evaluate ( fhirResource , ' Observation . hasMember ' )
if ( HasMemberResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( HasMemberResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && hasMemberResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . HasMember = [ ] byte ( hasMemberResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Identifier
identifierResult , err := vm . RunString ( `
IdentifierResult = window . fhirpath . evaluate ( 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 ' )
IdentifierProcessed = IdentifierResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( IdentifierProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( IdentifierProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && identifierResult . String ( ) != "undefined" {
s . Identifier = [ ] byte ( identifierResult . String ( ) )
}
// extracting Language
languageResult , err := vm . RunString ( `
2023-08-13 12:30:39 -06:00
LanguageResult = window . fhirpath . evaluate ( fhirResource , ' language ' )
2023-07-08 08:43:30 -06:00
LanguageProcessed = LanguageResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( LanguageProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( LanguageProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && languageResult . String ( ) != "undefined" {
s . Language = [ ] byte ( languageResult . String ( ) )
}
// extracting LastUpdated
2023-08-13 12:30:39 -06:00
lastUpdatedResult , err := vm . RunString ( "window.fhirpath.evaluate(fhirResource, 'meta.lastUpdated')[0]" )
2023-07-08 08:43:30 -06:00
if err == nil && lastUpdatedResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , lastUpdatedResult . String ( ) )
if err == nil {
2023-08-01 21:29:35 -06:00
s . LastUpdated = & t
} else if err != nil {
d , err := time . Parse ( "2006-01-02" , lastUpdatedResult . String ( ) )
if err == nil {
s . LastUpdated = & d
}
2023-07-08 08:43:30 -06:00
}
}
// extracting Method
methodResult , err := vm . RunString ( `
MethodResult = window . fhirpath . evaluate ( fhirResource , ' Observation . method ' )
MethodProcessed = MethodResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( MethodProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( MethodProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && methodResult . String ( ) != "undefined" {
s . Method = [ ] byte ( methodResult . String ( ) )
}
// extracting PartOf
2023-08-13 15:28:03 -06:00
partOfResult , err := vm . RunString ( `
PartOfResult = window . fhirpath . evaluate ( fhirResource , ' Observation . partOf ' )
if ( PartOfResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( PartOfResult )
}
` )
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 Performer
2023-08-13 15:28:03 -06:00
performerResult , err := vm . RunString ( `
PerformerResult = window . fhirpath . evaluate ( fhirResource , ' Observation . performer ' )
if ( PerformerResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( PerformerResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && performerResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Performer = [ ] byte ( performerResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Profile
2023-08-13 15:28:03 -06:00
profileResult , err := vm . RunString ( `
ProfileResult = window . fhirpath . evaluate ( fhirResource , ' meta . profile ' )
if ( ProfileResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ProfileResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && profileResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Profile = [ ] byte ( profileResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Specimen
2023-08-13 15:28:03 -06:00
specimenResult , err := vm . RunString ( `
SpecimenResult = window . fhirpath . evaluate ( fhirResource , ' Observation . specimen ' )
if ( SpecimenResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( SpecimenResult )
}
` )
2023-07-08 08:43:30 -06:00
if err == nil && specimenResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Specimen = [ ] byte ( specimenResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Status
statusResult , err := vm . RunString ( `
StatusResult = window . fhirpath . evaluate ( fhirResource , ' Observation . status ' )
StatusProcessed = StatusResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( StatusProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( StatusProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && statusResult . String ( ) != "undefined" {
s . Status = [ ] byte ( statusResult . String ( ) )
}
// extracting Subject
2023-08-13 15:28:03 -06:00
subjectResult , err := vm . RunString ( `
SubjectResult = window . fhirpath . evaluate ( fhirResource , ' Observation . subject ' )
if ( SubjectResult . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( SubjectResult )
}
` )
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
}
// extracting Tag
tagResult , err := vm . RunString ( `
2023-08-13 12:30:39 -06:00
TagResult = window . fhirpath . evaluate ( fhirResource , ' meta . tag ' )
2023-07-08 08:43:30 -06:00
TagProcessed = TagResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( TagProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( TagProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && tagResult . String ( ) != "undefined" {
s . Tag = [ ] byte ( tagResult . String ( ) )
}
// extracting ValueConcept
valueConceptResult , err := vm . RunString ( `
ValueConceptResult = window . fhirpath . evaluate ( fhirResource , ' ( Observation . valueCodeableConcept ) ' )
ValueConceptProcessed = ValueConceptResult . reduce ( ( accumulator , currentValue ) = > {
if ( currentValue . coding ) {
//CodeableConcept
currentValue . coding . map ( ( coding ) = > {
accumulator . push ( {
"code" : coding . code ,
"system" : coding . system ,
"text" : currentValue . text
} )
} )
} else if ( currentValue . value ) {
//ContactPoint, Identifier
accumulator . push ( {
"code" : currentValue . value ,
"system" : currentValue . system ,
"text" : currentValue . type ? . text
} )
} else if ( currentValue . code ) {
//Coding
accumulator . push ( {
"code" : currentValue . code ,
"system" : currentValue . system ,
"text" : currentValue . display
} )
} else if ( ( typeof currentValue == = ' string ' ) || ( typeof currentValue == = ' boolean ' ) ) {
//string, boolean
accumulator . push ( {
"code" : currentValue ,
} )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ValueConceptProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ValueConceptProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && valueConceptResult . String ( ) != "undefined" {
s . ValueConcept = [ ] byte ( valueConceptResult . String ( ) )
}
// extracting ValueDate
valueDateResult , err := vm . RunString ( "window.fhirpath.evaluate(fhirResource, '(Observation.valueDateTime) | (Observation.valuePeriod)')[0]" )
if err == nil && valueDateResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , valueDateResult . String ( ) )
if err == nil {
2023-08-01 21:29:35 -06:00
s . ValueDate = & t
} else if err != nil {
d , err := time . Parse ( "2006-01-02" , valueDateResult . String ( ) )
if err == nil {
s . ValueDate = & d
}
2023-07-08 08:43:30 -06:00
}
}
// extracting ValueQuantity
valueQuantityResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, '(Observation.valueQuantity) | (Observation.valueSampledData)'))" )
if err == nil && valueQuantityResult . String ( ) != "undefined" {
s . ValueQuantity = [ ] byte ( valueQuantityResult . String ( ) )
}
// extracting ValueString
2023-07-30 22:40:25 -06:00
valueStringResult , err := vm . RunString ( `
ValueStringResult = window . fhirpath . evaluate ( fhirResource , ' ( Observation . valueString ) | ( Observation . valueCodeableConcept ) . text ' )
ValueStringProcessed = ValueStringResult . reduce ( ( accumulator , currentValue ) = > {
if ( typeof currentValue == = ' string ' ) {
//basic string
accumulator . push ( currentValue )
} else if ( currentValue . family || currentValue . given ) {
//HumanName http://hl7.org/fhir/R4/datatypes.html#HumanName
var humanNameParts = [ ]
if ( currentValue . prefix ) {
humanNameParts = humanNameParts . concat ( currentValue . prefix )
}
if ( currentValue . given ) {
humanNameParts = humanNameParts . concat ( currentValue . given )
}
if ( currentValue . family ) {
humanNameParts . push ( currentValue . family )
}
if ( currentValue . suffix ) {
humanNameParts = humanNameParts . concat ( currentValue . suffix )
}
accumulator . push ( humanNameParts . join ( " " ) )
} else if ( currentValue . city || currentValue . state || currentValue . country || currentValue . postalCode ) {
//Address http://hl7.org/fhir/R4/datatypes.html#Address
var addressParts = [ ]
if ( currentValue . line ) {
addressParts = addressParts . concat ( currentValue . line )
}
if ( currentValue . city ) {
addressParts . push ( currentValue . city )
}
if ( currentValue . state ) {
addressParts . push ( currentValue . state )
}
if ( currentValue . postalCode ) {
addressParts . push ( currentValue . postalCode )
}
if ( currentValue . country ) {
addressParts . push ( currentValue . country )
}
accumulator . push ( addressParts . join ( " " ) )
} else {
//string, boolean
accumulator . push ( currentValue )
}
return accumulator
} , [ ] )
2023-08-01 21:29:35 -06:00
if ( ValueStringProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( ValueStringProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && valueStringResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . ValueString = [ ] byte ( valueStringResult . 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 * FhirObservation ) TableName ( ) string {
return "fhir_observation"
}