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"
models "github.com/fastenhealth/fastenhealth-onprem/backend/pkg/models"
datatypes "gorm.io/datatypes"
"time"
)
type FhirPerson struct {
models . ResourceBase
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A server defined search that may match any of the string fields in the Address , including line , city , district , state , country , postalCode , and / or text
* [ Person ] ( person . html ) : A server defined search that may match any of the string fields in the Address , including line , city , district , state , country , postalCode , and / or text
* [ Practitioner ] ( practitioner . html ) : A server defined search that may match any of the string fields in the Address , including line , city , district , state , country , postalCode , and / or text
* [ RelatedPerson ] ( relatedperson . html ) : A server defined search that may match any of the string fields in the Address , including line , city , district , state , country , postalCode , and / or text
* /
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
Address datatypes . JSON ` gorm:"column:address;type:text;serializer:json" json:"address,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A city specified in an address
* [ Person ] ( person . html ) : A city specified in an address
* [ Practitioner ] ( practitioner . html ) : A city specified in an address
* [ RelatedPerson ] ( relatedperson . html ) : A city specified in an address
* /
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
AddressCity datatypes . JSON ` gorm:"column:addressCity;type:text;serializer:json" json:"addressCity,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A country specified in an address
* [ Person ] ( person . html ) : A country specified in an address
* [ Practitioner ] ( practitioner . html ) : A country specified in an address
* [ RelatedPerson ] ( relatedperson . html ) : A country specified in an address
* /
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
AddressCountry datatypes . JSON ` gorm:"column:addressCountry;type:text;serializer:json" json:"addressCountry,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A postalCode specified in an address
* [ Person ] ( person . html ) : A postal code specified in an address
* [ Practitioner ] ( practitioner . html ) : A postalCode specified in an address
* [ RelatedPerson ] ( relatedperson . html ) : A postal code specified in an address
* /
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
AddressPostalcode datatypes . JSON ` gorm:"column:addressPostalcode;type:text;serializer:json" json:"addressPostalcode,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A state specified in an address
* [ Person ] ( person . html ) : A state specified in an address
* [ Practitioner ] ( practitioner . html ) : A state specified in an address
* [ RelatedPerson ] ( relatedperson . html ) : A state specified in an address
* /
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
AddressState datatypes . JSON ` gorm:"column:addressState;type:text;serializer:json" json:"addressState,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A use code specified in an address
* [ Person ] ( person . html ) : A use code specified in an address
* [ Practitioner ] ( practitioner . html ) : A use code specified in an address
* [ RelatedPerson ] ( relatedperson . html ) : A use code specified in an address
* /
// https://hl7.org/fhir/r4/search.html#token
AddressUse datatypes . JSON ` gorm:"column:addressUse;type:text;serializer:json" json:"addressUse,omitempty" `
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : The patient ' s date of birth
* [ Person ] ( person . html ) : The person ' s date of birth
* [ RelatedPerson ] ( relatedperson . html ) : The Related Person ' s date of birth
* /
// https://hl7.org/fhir/r4/search.html#date
2023-08-01 21:29:35 -06:00
Birthdate * time . Time ` gorm:"column:birthdate;type:datetime" json:"birthdate,omitempty" `
2023-07-08 08:43:30 -06:00
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A value in an email contact
* [ Person ] ( person . html ) : A value in an email contact
* [ Practitioner ] ( practitioner . html ) : A value in an email contact
* [ PractitionerRole ] ( practitionerrole . html ) : A value in an email contact
* [ RelatedPerson ] ( relatedperson . html ) : A value in an email contact
* /
// https://hl7.org/fhir/r4/search.html#token
Email datatypes . JSON ` gorm:"column:email;type:text;serializer:json" json:"email,omitempty" `
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : Gender of the patient
* [ Person ] ( person . html ) : The gender of the person
* [ Practitioner ] ( practitioner . html ) : Gender of the practitioner
* [ RelatedPerson ] ( relatedperson . html ) : Gender of the related person
* /
// https://hl7.org/fhir/r4/search.html#token
Gender datatypes . JSON ` gorm:"column:gender;type:text;serializer:json" json:"gender,omitempty" `
// A person 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
// Any link has this Patient, Person, RelatedPerson or Practitioner reference
// https://hl7.org/fhir/r4/search.html#reference
Link datatypes . JSON ` gorm:"column:link;type:text;serializer:json" json:"link,omitempty" `
// A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
Name datatypes . JSON ` gorm:"column:name;type:text;serializer:json" json:"name,omitempty" `
2023-07-08 08:43:30 -06:00
// The organization at which this person record is being managed
// https://hl7.org/fhir/r4/search.html#reference
Organization datatypes . JSON ` gorm:"column:organization;type:text;serializer:json" json:"organization,omitempty" `
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A value in a phone contact
* [ Person ] ( person . html ) : A value in a phone contact
* [ Practitioner ] ( practitioner . html ) : A value in a phone contact
* [ PractitionerRole ] ( practitionerrole . html ) : A value in a phone contact
* [ RelatedPerson ] ( relatedperson . html ) : A value in a phone contact
* /
// https://hl7.org/fhir/r4/search.html#token
Phone datatypes . JSON ` gorm:"column:phone;type:text;serializer:json" json:"phone,omitempty" `
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : A portion of either family or given name using some kind of phonetic matching algorithm
* [ Person ] ( person . html ) : A portion of name using some kind of phonetic matching algorithm
* [ Practitioner ] ( practitioner . html ) : A portion of either family or given name using some kind of phonetic matching algorithm
* [ RelatedPerson ] ( relatedperson . html ) : A portion of name using some kind of phonetic matching algorithm
* /
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
Phonetic datatypes . JSON ` gorm:"column:phonetic;type:text;serializer:json" json:"phonetic,omitempty" `
2023-07-08 08:43:30 -06:00
// The Person links to this Practitioner
// https://hl7.org/fhir/r4/search.html#reference
Practitioner datatypes . JSON ` gorm:"column:practitioner;type:text;serializer:json" json:"practitioner,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" `
// The Person links to this RelatedPerson
// https://hl7.org/fhir/r4/search.html#reference
Relatedperson datatypes . JSON ` gorm:"column:relatedperson;type:text;serializer:json" json:"relatedperson,omitempty" `
// Identifies where the resource comes from
// https://hl7.org/fhir/r4/search.html#uri
SourceUri string ` gorm:"column:sourceUri;type:text" json:"sourceUri,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" `
/ *
Multiple Resources :
* [ Patient ] ( patient . html ) : The value in any kind of telecom details of the patient
* [ Person ] ( person . html ) : The value in any kind of contact
* [ Practitioner ] ( practitioner . html ) : The value in any kind of contact
* [ PractitionerRole ] ( practitionerrole . html ) : The value in any kind of contact
* [ RelatedPerson ] ( relatedperson . html ) : The value in any kind of contact
* /
// https://hl7.org/fhir/r4/search.html#token
Telecom datatypes . JSON ` gorm:"column:telecom;type:text;serializer:json" json:"telecom,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" `
}
func ( s * FhirPerson ) GetSearchParameters ( ) map [ string ] string {
searchParameters := map [ string ] string {
"address" : "string" ,
"addressCity" : "string" ,
"addressCountry" : "string" ,
"addressPostalcode" : "string" ,
"addressState" : "string" ,
"addressUse" : "token" ,
"birthdate" : "date" ,
"email" : "token" ,
"gender" : "token" ,
"identifier" : "token" ,
"language" : "token" ,
"lastUpdated" : "date" ,
"link" : "reference" ,
"name" : "string" ,
"organization" : "reference" ,
"phone" : "token" ,
"phonetic" : "string" ,
"practitioner" : "reference" ,
"profile" : "reference" ,
"relatedperson" : "reference" ,
"sourceUri" : "uri" ,
"tag" : "token" ,
"telecom" : "token" ,
"text" : "string" ,
"type" : "special" ,
}
return searchParameters
}
func ( s * FhirPerson ) 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 Address
2023-07-30 22:40:25 -06:00
addressResult , err := vm . RunString ( `
AddressResult = window . fhirpath . evaluate ( fhirResource , ' Patient . address | Person . address | Practitioner . address | RelatedPerson . address ' )
AddressProcessed = AddressResult . 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 ( AddressProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( AddressProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && addressResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . Address = [ ] byte ( addressResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting AddressCity
2023-07-30 22:40:25 -06:00
addressCityResult , err := vm . RunString ( `
AddressCityResult = window . fhirpath . evaluate ( fhirResource , ' Patient . address . city | Person . address . city | Practitioner . address . city | RelatedPerson . address . city ' )
AddressCityProcessed = AddressCityResult . 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 ( AddressCityProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( AddressCityProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && addressCityResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . AddressCity = [ ] byte ( addressCityResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting AddressCountry
2023-07-30 22:40:25 -06:00
addressCountryResult , err := vm . RunString ( `
AddressCountryResult = window . fhirpath . evaluate ( fhirResource , ' Patient . address . country | Person . address . country | Practitioner . address . country | RelatedPerson . address . country ' )
AddressCountryProcessed = AddressCountryResult . 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 ( AddressCountryProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( AddressCountryProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && addressCountryResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . AddressCountry = [ ] byte ( addressCountryResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting AddressPostalcode
2023-07-30 22:40:25 -06:00
addressPostalcodeResult , err := vm . RunString ( `
AddressPostalcodeResult = window . fhirpath . evaluate ( fhirResource , ' Patient . address . postalCode | Person . address . postalCode | Practitioner . address . postalCode | RelatedPerson . address . postalCode ' )
AddressPostalcodeProcessed = AddressPostalcodeResult . 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 ( AddressPostalcodeProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( AddressPostalcodeProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && addressPostalcodeResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . AddressPostalcode = [ ] byte ( addressPostalcodeResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting AddressState
2023-07-30 22:40:25 -06:00
addressStateResult , err := vm . RunString ( `
AddressStateResult = window . fhirpath . evaluate ( fhirResource , ' Patient . address . state | Person . address . state | Practitioner . address . state | RelatedPerson . address . state ' )
AddressStateProcessed = AddressStateResult . 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 ( AddressStateProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( AddressStateProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && addressStateResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . AddressState = [ ] byte ( addressStateResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting AddressUse
addressUseResult , err := vm . RunString ( `
AddressUseResult = window . fhirpath . evaluate ( fhirResource , ' Patient . address . use | Person . address . use | Practitioner . address . use | RelatedPerson . address . use ' )
AddressUseProcessed = AddressUseResult . 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 ( AddressUseProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( AddressUseProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && addressUseResult . String ( ) != "undefined" {
s . AddressUse = [ ] byte ( addressUseResult . String ( ) )
}
// extracting Birthdate
birthdateResult , err := vm . RunString ( "window.fhirpath.evaluate(fhirResource, 'Patient.birthDate | Person.birthDate | RelatedPerson.birthDate')[0]" )
if err == nil && birthdateResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , birthdateResult . String ( ) )
if err == nil {
2023-08-01 21:29:35 -06:00
s . Birthdate = & t
} else if err != nil {
d , err := time . Parse ( "2006-01-02" , birthdateResult . String ( ) )
if err == nil {
s . Birthdate = & d
}
2023-07-08 08:43:30 -06:00
}
}
// extracting Email
emailResult , err := vm . RunString ( `
EmailResult = window . fhirpath . evaluate ( fhirResource , ' Patient . telecom . where ( system = ' email ' ) | Person . telecom . where ( system = ' email ' ) | Practitioner . telecom . where ( system = ' email ' ) | PractitionerRole . telecom . where ( system = ' email ' ) | RelatedPerson . telecom . where ( system = ' email ')' )
EmailProcessed = EmailResult . 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 ( EmailProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( EmailProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && emailResult . String ( ) != "undefined" {
s . Email = [ ] byte ( emailResult . String ( ) )
}
// extracting Gender
genderResult , err := vm . RunString ( `
GenderResult = window . fhirpath . evaluate ( fhirResource , ' Patient . gender | Person . gender | Practitioner . gender | RelatedPerson . gender ' )
GenderProcessed = GenderResult . 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 ( GenderProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( GenderProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && genderResult . String ( ) != "undefined" {
s . Gender = [ ] byte ( genderResult . String ( ) )
}
// extracting Identifier
identifierResult , err := vm . RunString ( `
IdentifierResult = window . fhirpath . evaluate ( fhirResource , ' Person . 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 ( `
LanguageResult = window . fhirpath . evaluate ( fhirResource , ' Resource . language ' )
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
lastUpdatedResult , err := vm . RunString ( "window.fhirpath.evaluate(fhirResource, 'Resource.meta.lastUpdated')[0]" )
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 Link
linkResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, 'Person.link.target'))" )
if err == nil && linkResult . String ( ) != "undefined" {
}
// extracting Name
2023-07-30 22:40:25 -06:00
nameResult , err := vm . RunString ( `
NameResult = window . fhirpath . evaluate ( fhirResource , ' Person . name ' )
NameProcessed = NameResult . 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 ( NameProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( NameProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && nameResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . Name = [ ] byte ( nameResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Organization
organizationResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, 'Person.managingOrganization'))" )
if err == nil && organizationResult . String ( ) != "undefined" {
}
// extracting Phone
phoneResult , err := vm . RunString ( `
PhoneResult = window . fhirpath . evaluate ( fhirResource , ' Patient . telecom . where ( system = ' phone ' ) | Person . telecom . where ( system = ' phone ' ) | Practitioner . telecom . where ( system = ' phone ' ) | PractitionerRole . telecom . where ( system = ' phone ' ) | RelatedPerson . telecom . where ( system = ' phone ')' )
PhoneProcessed = PhoneResult . 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 ( PhoneProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( PhoneProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && phoneResult . String ( ) != "undefined" {
s . Phone = [ ] byte ( phoneResult . String ( ) )
}
// extracting Phonetic
2023-07-30 22:40:25 -06:00
phoneticResult , err := vm . RunString ( `
PhoneticResult = window . fhirpath . evaluate ( fhirResource , ' Patient . name | Person . name | Practitioner . name | RelatedPerson . name ' )
PhoneticProcessed = PhoneticResult . 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 ( PhoneticProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( PhoneticProcessed )
}
2023-07-30 22:40:25 -06:00
` )
2023-07-08 08:43:30 -06:00
if err == nil && phoneticResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . Phonetic = [ ] byte ( phoneticResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Practitioner
practitionerResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, 'Person.link.target.where(resolve() is Practitioner)'))" )
if err == nil && practitionerResult . String ( ) != "undefined" {
}
// extracting Profile
profileResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, 'Resource.meta.profile'))" )
if err == nil && profileResult . String ( ) != "undefined" {
}
// extracting Relatedperson
relatedpersonResult , err := vm . RunString ( "JSON.stringify(window.fhirpath.evaluate(fhirResource, 'Person.link.target.where(resolve() is RelatedPerson)'))" )
if err == nil && relatedpersonResult . String ( ) != "undefined" {
}
// extracting SourceUri
sourceUriResult , err := vm . RunString ( "window.fhirpath.evaluate(fhirResource, 'Resource.meta.source')[0]" )
if err == nil && sourceUriResult . String ( ) != "undefined" {
s . SourceUri = sourceUriResult . String ( )
}
// extracting Tag
tagResult , err := vm . RunString ( `
TagResult = window . fhirpath . evaluate ( fhirResource , ' Resource . meta . tag ' )
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 Telecom
telecomResult , err := vm . RunString ( `
TelecomResult = window . fhirpath . evaluate ( fhirResource , ' Patient . telecom | Person . telecom | Practitioner . telecom | PractitionerRole . telecom | RelatedPerson . telecom ' )
TelecomProcessed = TelecomResult . 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 ( TelecomProcessed . length == 0 ) {
"undefined"
}
else {
JSON . stringify ( TelecomProcessed )
}
2023-07-08 08:43:30 -06:00
` )
if err == nil && telecomResult . String ( ) != "undefined" {
s . Telecom = [ ] byte ( telecomResult . String ( ) )
}
return nil
}
// TableName overrides the table name from fhir_observations (pluralized) to `fhir_observation`. https://gorm.io/docs/conventions.html#TableName
func ( s * FhirPerson ) TableName ( ) string {
return "fhir_person"
}