Extended Data
Last updated
Last updated
The SanteDB CDR requires that any data provided to it by callers conform to the logical information either in XML, JSON or ViewModel formats.
If you need to store data which cannot be captured in the primary information model you can add it with either an extension or a tag.
Extensions are versioned pieces of information which semantically change or modify the data structure, or capture complex data which changes over time. Extensions:
Must have a registered extension type (a valid extension type UUID)
Have effective/obsolete dates which means that they are subject to versioning and may need pruning
Store the extension valid as a serialized BLOB
SanteDB provides several built-in serializers for handling extension data which are used based on the type of data you'll be storing. SanteDB extension data types included within the solution are:
You can create additional extension data types by implementing the IExtensionHandler
interface in a .NET plugin.
SanteDB provides built extension types which are enumerated below.
All extensions are in the http://santedb.org/extensions URL base.
You can register your own extensions by using the HDSI interface and POSTing a new ExtensionType resource.
Tags are another extension point which can be used to attach metadata to an object during processing, disclosure, or to control some operational process. Tags are not versioned and live throughout the lifetime of the object. Tags can be removed and updated, however the history of these changes are not tracked.
Tags require no formal definition of the tag type, and represent a simple key/value pair on the object.
Tag keys starting with $ are transient, meaning they aren't persisted to the database and are intended to control operational processes within the CDR and its plugins/business rules.
SanteDB's core plugins affix tags to objects based on the plugins enabled and the status of the object. These tags are described below.
Data Type
Handler
Description
Binary
BinaryExtensionHandler
Stores a variable length byte array as a blob
Boolean
BooleanExtensionHandler
Stores a 1 byte representation of a binary value
Date
DateExtensionHandler
64-bit (8 byte) ticks from UTC of the time stored
Decimal
DecimalExtensionHandler
128-bit (16 byte) decimal number
Dynamic
DictionaryExtensionHandler
A JSON structure of any data object
Reference
ReferenceExtensionHandler
A 128-bit UUID pointer to an Entity, Act or Concept
String
StringExtensionHandler
A variable length string stored in the database
Uuid
UuidExtensionHandler
A 128-bit byte array representing a UUID
URL
Type
Use
/core/jpegPhoto
Binary
Stores a JPG photograph of an entity/act
/core/originalDate
Date
Stores the original or amended date an action was supposed to occur.
/core/contactRole
Dictionary
/core/detectedIssue
Dictionary
A structured list of business rules/data quality issues that were detected with an object.
/stock/contrib/gs1/estimatedDeliveryDate
Date
The original time (from the sender of a GS1 message) of estimated delivery date of an object.
/stock/contrib/gs1/shipmentDate
Date
The original shipment date of an action
/stock/contrib/gs1/packgingType
String
The type of packaging (crate, box, etc.) from the GS1 sender
Tag
Values
Use
$mdm.type
M = Master
L = Local
T = Record of Truth
O = Orphan
The MDM service uses the type tagging to convey the type of master data record being provided. It is also used by
callers to instruct the MDM record to perform certain behaviors. For example, sending an update with $mdm.type
of T would instruct the MDM layer that the resource being
pushed is a designated record of truth.
$mdm.processed
True | False
Indicates that the MDM layer has already processed the
object. This prevents duplicate processing of records.
$mdm.resource
Patient | Place ..
Indicates the original type of resource the MDM record is
conveying. This is because MDM Masters are generic Entity
or Act resources with no clearly identified type. The $mdm.resource tag allows callers to understand the original
type of data the master is representing
$generated
True | False
When retrieving data that was synthesized from other data
records this flag will be TRUE. This indicates that the result
is not an *actual* record, rather it is combined from multiple
local records.
$alt.keys
UUID List
A list of other keys which the resource references may use.
Deprecated.
$pep.masked
True | False
When present in a resource, informs the caller that the
PolicyEnforcementService or PrivacyEnforcementService
has masked/redacted or removed sensitive data from the resource returned. This is an indicator to the caller that they
may need to perform an elevation to unlock all the data.
Note: If the PEP is set to HIDE sensitive data then the resource is not returned in any disclosures, and the $pep.masked flag will not appear.
$pep.method
hash | hide | redact
When present in a resource, informs the caller that the policy
enforcement service took destructive action on the resource
using the specified privacy enforcement method.
Note: The $pep.method of hide on a resource indicates that part of the resource was hidden (usually identifiers)
if the entire resource is hidden, then the tag wouldn't appear
on a resource tag.
$bre.error
String
Used by the BRE engine to convey non-fatal errors to
callers. This is used for diagnosing / logging and catching
upstream errors in business rules.
$sys.reclass
True | False
Used by the persistence layer to determine whether an object is being re-classified (having its type changed).
Normally this would cause an error in the persistence layer
however setting $sys.reclass=true instructs the persistence
layer to change the object's class. This is how, for example,
a Person may be re-classified as a Patient.
$match.score
0.0 .. 1.0
When the resource being conveyed is in the context of another (for example: a sub-resource or link resource) the match score will be added to indicate the strength of the relationship of the resource to the container.