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 FhirDevice struct {
models . ResourceBase
// A server defined search that may match any of the string fields in Device.deviceName or Device.type.
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
DeviceName datatypes . JSON ` gorm:"column:deviceName;type:text;serializer:json" json:"deviceName,omitempty" `
2023-07-08 08:43:30 -06:00
// Instance id from manufacturer, owner, and others
// 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" `
// A location, where the resource is found
// https://hl7.org/fhir/r4/search.html#reference
Location datatypes . JSON ` gorm:"column:location;type:text;serializer:json" json:"location,omitempty" `
// The manufacturer of the device
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
Manufacturer datatypes . JSON ` gorm:"column:manufacturer;type:text;serializer:json" json:"manufacturer,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
// The model of the device
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
Model datatypes . JSON ` gorm:"column:model;type:text;serializer:json" json:"model,omitempty" `
2023-07-08 08:43:30 -06:00
// The organization responsible for the device
// https://hl7.org/fhir/r4/search.html#reference
Organization datatypes . JSON ` gorm:"column:organization;type:text;serializer:json" json:"organization,omitempty" `
// active | inactive | entered-in-error | unknown
// https://hl7.org/fhir/r4/search.html#token
Status datatypes . JSON ` gorm:"column:status;type:text;serializer:json" json:"status,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" `
// UDI Barcode (RFID or other technology) string in *HRF* format.
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
UdiCarrier datatypes . JSON ` gorm:"column:udiCarrier;type:text;serializer:json" json:"udiCarrier,omitempty" `
2023-07-08 08:43:30 -06:00
// The udi Device Identifier (DI)
// https://hl7.org/fhir/r4/search.html#string
2023-07-30 22:40:25 -06:00
UdiDi datatypes . JSON ` gorm:"column:udiDi;type:text;serializer:json" json:"udiDi,omitempty" `
2023-07-08 08:43:30 -06:00
// Network address to contact device
// https://hl7.org/fhir/r4/search.html#uri
Url string ` gorm:"column:url;type:text" json:"url,omitempty" `
}
func ( s * FhirDevice ) GetSearchParameters ( ) map [ string ] string {
searchParameters := map [ string ] string {
2023-08-23 13:24:08 -06:00
"deviceName" : "string" ,
"id" : "keyword" ,
"identifier" : "token" ,
"language" : "token" ,
"location" : "reference" ,
"manufacturer" : "string" ,
2023-11-19 12:09:23 -07:00
"metaLastUpdated" : "date" ,
"metaProfile" : "reference" ,
"metaTag" : "token" ,
"metaVersionId" : "keyword" ,
2023-08-23 13:24:08 -06:00
"model" : "string" ,
"organization" : "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" ,
"status" : "token" ,
2023-11-19 12:09:23 -07:00
"text" : "keyword" ,
2023-08-23 13:24:08 -06:00
"type" : "special" ,
"udiCarrier" : "string" ,
"udiDi" : "string" ,
"url" : "uri" ,
2023-07-08 08:43:30 -06:00
}
return searchParameters
}
func ( s * FhirDevice ) 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 DeviceName
2023-11-19 12:09:23 -07:00
deviceNameResult , err := vm . RunString ( "extractStringSearchParameters(fhirResource, 'Device.deviceName.name | Device.type.coding.display | Device.type.text')" )
2023-07-08 08:43:30 -06:00
if err == nil && deviceNameResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . DeviceName = [ ] byte ( deviceNameResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Identifier
2023-11-19 12:09:23 -07:00
identifierResult , err := vm . RunString ( "extractTokenSearchParameters(fhirResource, 'Device.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 ( ) )
}
// extracting Location
2023-11-19 12:09:23 -07:00
locationResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'Device.location')" )
2023-07-08 08:43:30 -06:00
if err == nil && locationResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Location = [ ] byte ( locationResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Manufacturer
2023-11-19 12:09:23 -07:00
manufacturerResult , err := vm . RunString ( "extractStringSearchParameters(fhirResource, 'Device.manufacturer')" )
2023-07-08 08:43:30 -06:00
if err == nil && manufacturerResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . Manufacturer = [ ] byte ( manufacturerResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
2023-11-19 12:09:23 -07:00
// extracting MetaLastUpdated
metaLastUpdatedResult , err := vm . RunString ( "extractDateSearchParameters(fhirResource, 'meta.lastUpdated')" )
if err == nil && metaLastUpdatedResult . String ( ) != "undefined" {
t , err := time . Parse ( time . RFC3339 , metaLastUpdatedResult . String ( ) )
if err == nil {
s . MetaLastUpdated = & t
} else if err != nil {
d , err := time . Parse ( "2006-01-02" , metaLastUpdatedResult . String ( ) )
if err == nil {
s . MetaLastUpdated = & d
}
}
}
// 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 Model
2023-11-19 12:09:23 -07:00
modelResult , err := vm . RunString ( "extractStringSearchParameters(fhirResource, 'Device.modelNumber')" )
2023-07-08 08:43:30 -06:00
if err == nil && modelResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . Model = [ ] byte ( modelResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Organization
2023-11-19 12:09:23 -07:00
organizationResult , err := vm . RunString ( "extractReferenceSearchParameters(fhirResource, 'Device.owner')" )
2023-07-08 08:43:30 -06:00
if err == nil && organizationResult . String ( ) != "undefined" {
2023-08-13 15:28:03 -06:00
s . Organization = [ ] byte ( organizationResult . 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, 'Device.status')" )
2023-07-08 08:43:30 -06:00
if err == nil && statusResult . String ( ) != "undefined" {
s . Status = [ ] byte ( statusResult . String ( ) )
}
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
}
// extracting UdiCarrier
2023-11-19 12:09:23 -07:00
udiCarrierResult , err := vm . RunString ( "extractStringSearchParameters(fhirResource, 'Device.udiCarrier.carrierHRF')" )
2023-07-08 08:43:30 -06:00
if err == nil && udiCarrierResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . UdiCarrier = [ ] byte ( udiCarrierResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting UdiDi
2023-11-19 12:09:23 -07:00
udiDiResult , err := vm . RunString ( "extractStringSearchParameters(fhirResource, 'Device.udiCarrier.deviceIdentifier')" )
2023-07-08 08:43:30 -06:00
if err == nil && udiDiResult . String ( ) != "undefined" {
2023-07-30 22:40:25 -06:00
s . UdiDi = [ ] byte ( udiDiResult . String ( ) )
2023-07-08 08:43:30 -06:00
}
// extracting Url
2023-11-19 12:09:23 -07:00
urlResult , err := vm . RunString ( "extractSimpleSearchParameters(fhirResource, 'Device.url')" )
2023-07-08 08:43:30 -06:00
if err == nil && urlResult . String ( ) != "undefined" {
s . Url = urlResult . String ( )
}
return nil
}
// TableName overrides the table name from fhir_observations (pluralized) to `fhir_observation`. https://gorm.io/docs/conventions.html#TableName
func ( s * FhirDevice ) TableName ( ) string {
return "fhir_device"
}