KLChildren implementation guide, an implementation of FBU
2.1.0 - Release

This page is part of the KLChildren (v2.1.0: Release) based on FHIR (HL7® FHIR® Standard) R4. This is the current published version in its permanent home (it will always be available at this URL). For a full list of available versions, see the Directory of published versions

Resource Profile: KLGatewayChildrenCitizen

Official URL: http://fhir.kl.dk/children/StructureDefinition/klgateway-children-citizen Version: 2.1.0
Active as of 2024-10-31 Computable Name: KLGatewayChildrenCitizen

Administrative information about a citizen receiving care or care related services.

Scope and usage

KLGatewayChildrenCitizen is used to identify the subject of a delivery report by the personal id number (CPR-nummer), which should go into Patient.identifier. The personal id number must be an official Danish CPR-nummer without hyphen.

The model also identifies the managing organization that acts as the custodian of the reported data. The managing organization is identified by its official SOR code. The SOR codes should be documented in Patient.managingOrganization.identifier.

For most municipalities the SOR code will be the code for the municipality, but if a municipality delivers services in different departments using different record systems (thus having multiple custodians) the SOR codes of the department that acts as custodian is used.

Citizen resources can be used to identify both child and parents. However, the parents should only be includes when and if, they are relevant for the child reporting e.g. when reporting the mental state of the mother. In this case, a relatedPerson resource should also be included and referenced using Patient.link.

Patient.link is a reference to a relatedPerson object. In the context of the childrens database, it is used to link a grown-up citizen with the relatedPerson resource. The relatedPerson resource defines that this grown-up is actually the child's parent. In other words, a citizen object cannot hold information about relationships between citizens, for that we use the relatedPerson resource.

Patient.active is optional and assumed true, if not given. Patient.active = false is used to report entered-in-error. However, this option should only be used, if the patient is fully unknown to the municipality system, and should never have been in the system at all.

Conversions between Danish information model and FHIR-profile

Nedenstående tabel oversætter mellem de attributter, der er defineret i den fælleskommunale informationsmodel (FKI), definerer kort den enkelte attribut på dansk og specificerer, hvilke af FHIR-profilens atributter der skal bruges til specifikation af indholdet.

FKI-attribut Definition FHIR
borgersCpr Officielt cpr-nummer på borgeren Patient.identifier
borgersJournalførendeOrganisation Organisation som ejer journalen med oplysninger Patient.managingOrganization.identifier
borgerErSammePersonSom Reference til et pårørende-objekt, som er samme person som denne borger Patient.link
borgerHarAktivJournal Angiver om borger har en aktiv journal i den journalførende organisation eller ej Patient.active

Usage:

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

This structure is derived from DkCorePatient

NameFlagsCard.TypeDescription & Constraintsdoco
.. Patient DkCorePatient
... identifier 1..1 Identifier [DK] cpr
... Slices for identifier Content/Rules for all slices
.... identifier:cpr 1..1 DkCoreCprIdentifier An identifier intended for computation
.... identifier:x-ecpr 0..0
.... identifier:d-ecpr 0..0
... active 0..1 boolean [DK] harAktivJournal
... Slices for name Content/Rules for all slices
.... name:official 0..0
... telecom 0..0
... gender 0..0
... birthDate 0..0
... deceased[x] 0..0
... address 0..0
... maritalStatus 0..0
... multipleBirth[x] 0..0
... photo 0..0
... contact 0..0
... communication 0..0
... generalPractitioner 0..0
... Slices for generalPractitioner Content/Rules for all slices
.... generalPractitioner:referencedSORUnit 0..0
... managingOrganization 1..1 Reference(Organization) [DK] journalførendeOrganisation
.... reference 0..0
.... type 0..0
.... identifier 1..1 SORIdentifier An identifier intended for computation
.... display 0..0
... link S 0..* BackboneElement [DK] erSammePersonSom
.... other 1..1 Reference(KLGatewayChildrenRelatedParent) {b} The other patient or related person resource that the link refers to
.... type 1..1 code replaced-by | replaces | refer | seealso
Required Pattern: seealso

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraintsdoco
.. Patient C 0..* DkCorePatient Information about an individual or animal receiving health care services
marital-status-unknown-usage: Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... Slices for identifier Σ 1..1 Identifier [DK] cpr
Slice: Unordered, Open by value:system
.... identifier:cpr 1..1 DkCoreCprIdentifier An identifier intended for computation
... managingOrganization Σ 1..1 Reference(Organization) [DK] journalførendeOrganisation
.... identifier 1..1 SORIdentifier An identifier intended for computation
... link ?!SΣ 0..* BackboneElement [DK] erSammePersonSom
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... other Σ 1..1 Reference(KLGatewayChildrenRelatedParent) {b} The other patient or related person resource that the link refers to
.... type Σ 1..1 code replaced-by | replaces | refer | seealso
Binding: LinkType (required): The type of link between this patient resource and another patient resource.


Required Pattern: seealso

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Patient.name:official.userequiredFixed Value: official
http://hl7.org/fhir/ValueSet/name-use|4.0.1
from the FHIR Standard
Patient.address.userequiredAddressUse
http://hl7.org/fhir/ValueSet/address-use|4.0.1
from the FHIR Standard
Patient.communication.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Patient.link.typerequiredPattern: seealso
http://hl7.org/fhir/ValueSet/link-type|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorPatientIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorPatientIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorPatientIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorPatientIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practicePatientA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
marital-status-unknown-usagewarningPatientStatus in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
: maritalStatus.coding.where(code = 'P' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty() or maritalStatus.coding.where(code = 'A' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty()
Marital status is legally unknown in Denmark
NameFlagsCard.TypeDescription & Constraintsdoco
.. Patient C 0..* DkCorePatient Information about an individual or animal receiving health care services
marital-status-unknown-usage: Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... Slices for identifier Σ 1..1 Identifier [DK] cpr
Slice: Unordered, Open by value:system
.... identifier:cpr 1..1 DkCoreCprIdentifier An identifier intended for computation
... active ?!Σ 0..1 boolean [DK] harAktivJournal
... managingOrganization Σ 1..1 Reference(Organization) [DK] journalførendeOrganisation
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... identifier 1..1 SORIdentifier An identifier intended for computation
... link ?!SΣ 0..* BackboneElement [DK] erSammePersonSom
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... other Σ 1..1 Reference(KLGatewayChildrenRelatedParent) {b} The other patient or related person resource that the link refers to
.... type Σ 1..1 code replaced-by | replaces | refer | seealso
Binding: LinkType (required): The type of link between this patient resource and another patient resource.


Required Pattern: seealso

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Patient.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Patient.name:official.userequiredFixed Value: official
http://hl7.org/fhir/ValueSet/name-use|4.0.1
from the FHIR Standard
Patient.address.userequiredAddressUse
http://hl7.org/fhir/ValueSet/address-use|4.0.1
from the FHIR Standard
Patient.address.typerequiredAddressType
http://hl7.org/fhir/ValueSet/address-type|4.0.1
from the FHIR Standard
Patient.contact.relationshipextensibleRelatedPersonRelationshipTypes
http://hl7.dk/fhir/core/ValueSet/dk-core-RelatedPersonRelationshipTypes
Patient.contact.genderrequiredAdministrativeGender
http://hl7.org/fhir/ValueSet/administrative-gender|4.0.1
from the FHIR Standard
Patient.communication.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Patient.generalPractitioner:referencedSORUnit.typeextensibleResourceType
http://hl7.org/fhir/ValueSet/resource-types
from the FHIR Standard
Patient.link.typerequiredPattern: seealso
http://hl7.org/fhir/ValueSet/link-type|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorPatientIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorPatientIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorPatientIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorPatientIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practicePatientA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
marital-status-unknown-usagewarningPatientStatus in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
: maritalStatus.coding.where(code = 'P' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty() or maritalStatus.coding.where(code = 'A' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty()
Marital status is legally unknown in Denmark

This structure is derived from DkCorePatient

Summary

Mandatory: 3 elements
Must-Support: 1 element
Prohibited: 19 elements

Structures

This structure refers to these other structures:

Differential View

This structure is derived from DkCorePatient

NameFlagsCard.TypeDescription & Constraintsdoco
.. Patient DkCorePatient
... identifier 1..1 Identifier [DK] cpr
... Slices for identifier Content/Rules for all slices
.... identifier:cpr 1..1 DkCoreCprIdentifier An identifier intended for computation
.... identifier:x-ecpr 0..0
.... identifier:d-ecpr 0..0
... active 0..1 boolean [DK] harAktivJournal
... Slices for name Content/Rules for all slices
.... name:official 0..0
... telecom 0..0
... gender 0..0
... birthDate 0..0
... deceased[x] 0..0
... address 0..0
... maritalStatus 0..0
... multipleBirth[x] 0..0
... photo 0..0
... contact 0..0
... communication 0..0
... generalPractitioner 0..0
... Slices for generalPractitioner Content/Rules for all slices
.... generalPractitioner:referencedSORUnit 0..0
... managingOrganization 1..1 Reference(Organization) [DK] journalførendeOrganisation
.... reference 0..0
.... type 0..0
.... identifier 1..1 SORIdentifier An identifier intended for computation
.... display 0..0
... link S 0..* BackboneElement [DK] erSammePersonSom
.... other 1..1 Reference(KLGatewayChildrenRelatedParent) {b} The other patient or related person resource that the link refers to
.... type 1..1 code replaced-by | replaces | refer | seealso
Required Pattern: seealso

doco Documentation for this format

Key Elements View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Patient C 0..* DkCorePatient Information about an individual or animal receiving health care services
marital-status-unknown-usage: Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... Slices for identifier Σ 1..1 Identifier [DK] cpr
Slice: Unordered, Open by value:system
.... identifier:cpr 1..1 DkCoreCprIdentifier An identifier intended for computation
... managingOrganization Σ 1..1 Reference(Organization) [DK] journalførendeOrganisation
.... identifier 1..1 SORIdentifier An identifier intended for computation
... link ?!SΣ 0..* BackboneElement [DK] erSammePersonSom
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... other Σ 1..1 Reference(KLGatewayChildrenRelatedParent) {b} The other patient or related person resource that the link refers to
.... type Σ 1..1 code replaced-by | replaces | refer | seealso
Binding: LinkType (required): The type of link between this patient resource and another patient resource.


Required Pattern: seealso

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Patient.name:official.userequiredFixed Value: official
http://hl7.org/fhir/ValueSet/name-use|4.0.1
from the FHIR Standard
Patient.address.userequiredAddressUse
http://hl7.org/fhir/ValueSet/address-use|4.0.1
from the FHIR Standard
Patient.communication.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Patient.link.typerequiredPattern: seealso
http://hl7.org/fhir/ValueSet/link-type|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorPatientIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorPatientIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorPatientIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorPatientIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practicePatientA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
marital-status-unknown-usagewarningPatientStatus in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
: maritalStatus.coding.where(code = 'P' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty() or maritalStatus.coding.where(code = 'A' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty()
Marital status is legally unknown in Denmark

Snapshot View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Patient C 0..* DkCorePatient Information about an individual or animal receiving health care services
marital-status-unknown-usage: Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... Slices for identifier Σ 1..1 Identifier [DK] cpr
Slice: Unordered, Open by value:system
.... identifier:cpr 1..1 DkCoreCprIdentifier An identifier intended for computation
... active ?!Σ 0..1 boolean [DK] harAktivJournal
... managingOrganization Σ 1..1 Reference(Organization) [DK] journalførendeOrganisation
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... identifier 1..1 SORIdentifier An identifier intended for computation
... link ?!SΣ 0..* BackboneElement [DK] erSammePersonSom
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... other Σ 1..1 Reference(KLGatewayChildrenRelatedParent) {b} The other patient or related person resource that the link refers to
.... type Σ 1..1 code replaced-by | replaces | refer | seealso
Binding: LinkType (required): The type of link between this patient resource and another patient resource.


Required Pattern: seealso

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Patient.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Patient.name:official.userequiredFixed Value: official
http://hl7.org/fhir/ValueSet/name-use|4.0.1
from the FHIR Standard
Patient.address.userequiredAddressUse
http://hl7.org/fhir/ValueSet/address-use|4.0.1
from the FHIR Standard
Patient.address.typerequiredAddressType
http://hl7.org/fhir/ValueSet/address-type|4.0.1
from the FHIR Standard
Patient.contact.relationshipextensibleRelatedPersonRelationshipTypes
http://hl7.dk/fhir/core/ValueSet/dk-core-RelatedPersonRelationshipTypes
Patient.contact.genderrequiredAdministrativeGender
http://hl7.org/fhir/ValueSet/administrative-gender|4.0.1
from the FHIR Standard
Patient.communication.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Patient.generalPractitioner:referencedSORUnit.typeextensibleResourceType
http://hl7.org/fhir/ValueSet/resource-types
from the FHIR Standard
Patient.link.typerequiredPattern: seealso
http://hl7.org/fhir/ValueSet/link-type|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorPatientIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorPatientIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorPatientIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorPatientIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practicePatientA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
marital-status-unknown-usagewarningPatientStatus in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/
: maritalStatus.coding.where(code = 'P' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty() or maritalStatus.coding.where(code = 'A' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty()
Marital status is legally unknown in Denmark

This structure is derived from DkCorePatient

Summary

Mandatory: 3 elements
Must-Support: 1 element
Prohibited: 19 elements

Structures

This structure refers to these other structures:

 

Other representations of profile: CSV, Excel, Schematron