Projo FHIR Documentation
0.1.0 - ci-build Switzerland flag

Projo FHIR Documentation - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Resource Profile: Projo QuestionnaireResponse ( Experimental )

Official URL: https://projo.evoleen.com/fhir/StructureDefinition/projo-questionnaire-response Version: 0.1.0
Draft as of 2024-01-01 Computable Name: ProjoQuestionnaireResponse

Copyright/Legal: Copyright (c) Projo. Licensed under CC0-1.0 (public domain dedication). FHIR(R) is the registered trademark of HL7 and is used with permission. This IG references WhatsApp(R), a trademark of Meta Platforms, Inc., for descriptive purposes only.

Patient's answers, built conversationally by the sidecar as WhatsApp messages arrive. Created in-progress on the first answer (or pre-populated from initial values), updated per-answer with If-Match optimistic concurrency, and marked completed when the last answer is applied. The CR<->QR link lives on CommunicationRequest.payload[].contentReference — QuestionnaireResponse.basedOn is NOT used because FHIR R4 restricts it to CarePlan ServiceRequest and HAPI rejects others (HAPI-0931).

Documentation-only artifact. Projo's runtime extensions, code systems, identifier systems and search parameter are TypeScript constants and bootstrap-time resources, NOT deployed StructureDefinitions. This StructureDefinition exists to document the contract; the source of truth is src/functions/src/lib/fhir/types.ts and docs/FHIR_EXTENSIONS.md.

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraints    Filter: doco
QuestionnaireResponse 0..* QuestionnaireResponse Conversationally-built patient answers
QuestionnaireResponse.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
QuestionnaireResponse.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
QuestionnaireResponse.questionnaire This element is included in summaries. 1..1 canonical(Questionnaire) Questionnaire canonical URL
QuestionnaireResponse.status This element is a modifier element. This element is included in summaries. 1..1 code in-progress | completed
Binding: QuestionnaireResponseStatus (required): Lifecycle status of the questionnaire response.
QuestionnaireResponse.subject This element is included in summaries. 1..1 Reference(Resource) Patient/Practitioner/RelatedPerson
QuestionnaireResponse.authored This element is included in summaries. 1..1 dateTime Creation timestamp
QuestionnaireResponse.item C 0..* BackboneElement Nested group hierarchy mirroring Questionnaire
Constraints: qrs-1
QuestionnaireResponse.item.modifierExtension This element is a modifier element. This element is included in summaries. 0..* Extension Extensions that cannot be ignored even if unrecognized
QuestionnaireResponse.item.linkId 1..1 string Pointer to specific item from Questionnaire

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
QuestionnaireResponse.​status Base required QuestionnaireResponseStatus 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error QuestionnaireResponse If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error QuestionnaireResponse If 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-4 error QuestionnaireResponse If 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-5 error QuestionnaireResponse If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice QuestionnaireResponse A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
qrs-1 error QuestionnaireResponse.item Nested item can't be beneath both item and answer (answer.exists() and item.exists()).not()

This structure is derived from QuestionnaireResponse

NameFlagsCard.TypeDescription & Constraints    Filter: doco
QuestionnaireResponse 0..* QuestionnaireResponse Conversationally-built patient answers
QuestionnaireResponse.basedOn 0..0 NOT USED — link is on CommunicationRequest.payload
QuestionnaireResponse.questionnaire 1..1 canonical(Questionnaire) Questionnaire canonical URL
QuestionnaireResponse.status 1..1 code in-progress | completed
QuestionnaireResponse.authored 1..1 dateTime Creation timestamp
QuestionnaireResponse.item 0..* BackboneElement Nested group hierarchy mirroring Questionnaire

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraints    Filter: doco
QuestionnaireResponse 0..* QuestionnaireResponse Conversationally-built patient answers
QuestionnaireResponse.id This element is included in summaries. 0..1 id Logical id of this artifact
QuestionnaireResponse.meta This element is included in summaries. 0..1 Meta Metadata about the resource
QuestionnaireResponse.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
QuestionnaireResponse.language 0..1 code Language of the resource content
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding
QuestionnaireResponse.text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
QuestionnaireResponse.contained 0..* Resource Contained, inline Resources
QuestionnaireResponse.extension 0..* Extension Additional content defined by implementations
QuestionnaireResponse.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
QuestionnaireResponse.identifier This element is included in summaries. 0..1 Identifier Unique id for this set of answers
QuestionnaireResponse.partOf This element is included in summaries. 0..* Reference(Observation | Procedure) Part of this action
QuestionnaireResponse.questionnaire This element is included in summaries. 1..1 canonical(Questionnaire) Questionnaire canonical URL
QuestionnaireResponse.status This element is a modifier element. This element is included in summaries. 1..1 code in-progress | completed
Binding: QuestionnaireResponseStatus (required): Lifecycle status of the questionnaire response.
QuestionnaireResponse.subject This element is included in summaries. 1..1 Reference(Resource) Patient/Practitioner/RelatedPerson
QuestionnaireResponse.encounter This element is included in summaries. 0..1 Reference(Encounter) Encounter created as part of
QuestionnaireResponse.authored This element is included in summaries. 1..1 dateTime Creation timestamp
QuestionnaireResponse.author This element is included in summaries. 0..1 Reference(Device | Practitioner | PractitionerRole | Patient | RelatedPerson | Organization) Person who received and recorded the answers
QuestionnaireResponse.source This element is included in summaries. 0..1 Reference(Patient | Practitioner | PractitionerRole | RelatedPerson) The person who answered the questions
QuestionnaireResponse.item C 0..* BackboneElement Nested group hierarchy mirroring Questionnaire
Constraints: qrs-1
QuestionnaireResponse.item.id 0..1 string Unique id for inter-element referencing
QuestionnaireResponse.item.extension 0..* Extension Additional content defined by implementations
QuestionnaireResponse.item.modifierExtension This element is a modifier element. This element is included in summaries. 0..* Extension Extensions that cannot be ignored even if unrecognized
QuestionnaireResponse.item.linkId 1..1 string Pointer to specific item from Questionnaire
QuestionnaireResponse.item.definition 0..1 uri ElementDefinition - details for the item
QuestionnaireResponse.item.text 0..1 string Name for group or question text
QuestionnaireResponse.item.answer 0..* BackboneElement The response(s) to the question
QuestionnaireResponse.item.answer.id 0..1 string Unique id for inter-element referencing
QuestionnaireResponse.item.answer.extension 0..* Extension Additional content defined by implementations
QuestionnaireResponse.item.answer.modifierExtension This element is a modifier element. This element is included in summaries. 0..* Extension Extensions that cannot be ignored even if unrecognized
QuestionnaireResponse.item.answer.value[x] 0..1 Single-valued answer to the question
Binding: QuestionnaireAnswerCodes (example): Code indicating the response provided for a question.
QuestionnaireResponse.item.answer.value[x].valueBoolean boolean
QuestionnaireResponse.item.answer.value[x].valueDecimal decimal
QuestionnaireResponse.item.answer.value[x].valueInteger integer
QuestionnaireResponse.item.answer.value[x].valueDate date
QuestionnaireResponse.item.answer.value[x].valueDateTime dateTime
QuestionnaireResponse.item.answer.value[x].valueTime time
QuestionnaireResponse.item.answer.value[x].valueString string
QuestionnaireResponse.item.answer.value[x].valueUri uri
QuestionnaireResponse.item.answer.value[x].valueAttachment Attachment
QuestionnaireResponse.item.answer.value[x].valueCoding Coding
QuestionnaireResponse.item.answer.value[x].valueQuantity Quantity
QuestionnaireResponse.item.answer.value[x].valueReference Reference(Resource)
QuestionnaireResponse.item.answer.item 0..* See item (QuestionnaireResponse) Nested groups and questions
QuestionnaireResponse.item.item 0..* See item (QuestionnaireResponse) Nested questionnaire response items

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
QuestionnaireResponse.​language Base preferred Common Languages 📍4.0.1 FHIR Std.
QuestionnaireResponse.​status Base required QuestionnaireResponseStatus 📍4.0.1 FHIR Std.
QuestionnaireResponse.​item.answer.value[x] Base example Questionnaire Answer Codes 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error QuestionnaireResponse If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error QuestionnaireResponse If 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-4 error QuestionnaireResponse If 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-5 error QuestionnaireResponse If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice QuestionnaireResponse A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
qrs-1 error QuestionnaireResponse.item Nested item can't be beneath both item and answer (answer.exists() and item.exists()).not()

This structure is derived from QuestionnaireResponse

Summary

Mandatory: 3 elements
Prohibited: 1 element

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
QuestionnaireResponse 0..* QuestionnaireResponse Conversationally-built patient answers
QuestionnaireResponse.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
QuestionnaireResponse.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
QuestionnaireResponse.questionnaire This element is included in summaries. 1..1 canonical(Questionnaire) Questionnaire canonical URL
QuestionnaireResponse.status This element is a modifier element. This element is included in summaries. 1..1 code in-progress | completed
Binding: QuestionnaireResponseStatus (required): Lifecycle status of the questionnaire response.
QuestionnaireResponse.subject This element is included in summaries. 1..1 Reference(Resource) Patient/Practitioner/RelatedPerson
QuestionnaireResponse.authored This element is included in summaries. 1..1 dateTime Creation timestamp
QuestionnaireResponse.item C 0..* BackboneElement Nested group hierarchy mirroring Questionnaire
Constraints: qrs-1
QuestionnaireResponse.item.modifierExtension This element is a modifier element. This element is included in summaries. 0..* Extension Extensions that cannot be ignored even if unrecognized
QuestionnaireResponse.item.linkId 1..1 string Pointer to specific item from Questionnaire

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
QuestionnaireResponse.​status Base required QuestionnaireResponseStatus 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error QuestionnaireResponse If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error QuestionnaireResponse If 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-4 error QuestionnaireResponse If 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-5 error QuestionnaireResponse If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice QuestionnaireResponse A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
qrs-1 error QuestionnaireResponse.item Nested item can't be beneath both item and answer (answer.exists() and item.exists()).not()

Differential View

This structure is derived from QuestionnaireResponse

NameFlagsCard.TypeDescription & Constraints    Filter: doco
QuestionnaireResponse 0..* QuestionnaireResponse Conversationally-built patient answers
QuestionnaireResponse.basedOn 0..0 NOT USED — link is on CommunicationRequest.payload
QuestionnaireResponse.questionnaire 1..1 canonical(Questionnaire) Questionnaire canonical URL
QuestionnaireResponse.status 1..1 code in-progress | completed
QuestionnaireResponse.subject 1..1 Reference(Resource) Patient/Practitioner/RelatedPerson
QuestionnaireResponse.authored 1..1 dateTime Creation timestamp
QuestionnaireResponse.item 0..* BackboneElement Nested group hierarchy mirroring Questionnaire

doco Documentation for this format

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
QuestionnaireResponse 0..* QuestionnaireResponse Conversationally-built patient answers
QuestionnaireResponse.id This element is included in summaries. 0..1 id Logical id of this artifact
QuestionnaireResponse.meta This element is included in summaries. 0..1 Meta Metadata about the resource
QuestionnaireResponse.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
QuestionnaireResponse.language 0..1 code Language of the resource content
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding
QuestionnaireResponse.text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
QuestionnaireResponse.contained 0..* Resource Contained, inline Resources
QuestionnaireResponse.extension 0..* Extension Additional content defined by implementations
QuestionnaireResponse.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
QuestionnaireResponse.identifier This element is included in summaries. 0..1 Identifier Unique id for this set of answers
QuestionnaireResponse.partOf This element is included in summaries. 0..* Reference(Observation | Procedure) Part of this action
QuestionnaireResponse.questionnaire This element is included in summaries. 1..1 canonical(Questionnaire) Questionnaire canonical URL
QuestionnaireResponse.status This element is a modifier element. This element is included in summaries. 1..1 code in-progress | completed
Binding: QuestionnaireResponseStatus (required): Lifecycle status of the questionnaire response.
QuestionnaireResponse.subject This element is included in summaries. 1..1 Reference(Resource) Patient/Practitioner/RelatedPerson
QuestionnaireResponse.encounter This element is included in summaries. 0..1 Reference(Encounter) Encounter created as part of
QuestionnaireResponse.authored This element is included in summaries. 1..1 dateTime Creation timestamp
QuestionnaireResponse.author This element is included in summaries. 0..1 Reference(Device | Practitioner | PractitionerRole | Patient | RelatedPerson | Organization) Person who received and recorded the answers
QuestionnaireResponse.source This element is included in summaries. 0..1 Reference(Patient | Practitioner | PractitionerRole | RelatedPerson) The person who answered the questions
QuestionnaireResponse.item C 0..* BackboneElement Nested group hierarchy mirroring Questionnaire
Constraints: qrs-1
QuestionnaireResponse.item.id 0..1 string Unique id for inter-element referencing
QuestionnaireResponse.item.extension 0..* Extension Additional content defined by implementations
QuestionnaireResponse.item.modifierExtension This element is a modifier element. This element is included in summaries. 0..* Extension Extensions that cannot be ignored even if unrecognized
QuestionnaireResponse.item.linkId 1..1 string Pointer to specific item from Questionnaire
QuestionnaireResponse.item.definition 0..1 uri ElementDefinition - details for the item
QuestionnaireResponse.item.text 0..1 string Name for group or question text
QuestionnaireResponse.item.answer 0..* BackboneElement The response(s) to the question
QuestionnaireResponse.item.answer.id 0..1 string Unique id for inter-element referencing
QuestionnaireResponse.item.answer.extension 0..* Extension Additional content defined by implementations
QuestionnaireResponse.item.answer.modifierExtension This element is a modifier element. This element is included in summaries. 0..* Extension Extensions that cannot be ignored even if unrecognized
QuestionnaireResponse.item.answer.value[x] 0..1 Single-valued answer to the question
Binding: QuestionnaireAnswerCodes (example): Code indicating the response provided for a question.
QuestionnaireResponse.item.answer.value[x].valueBoolean boolean
QuestionnaireResponse.item.answer.value[x].valueDecimal decimal
QuestionnaireResponse.item.answer.value[x].valueInteger integer
QuestionnaireResponse.item.answer.value[x].valueDate date
QuestionnaireResponse.item.answer.value[x].valueDateTime dateTime
QuestionnaireResponse.item.answer.value[x].valueTime time
QuestionnaireResponse.item.answer.value[x].valueString string
QuestionnaireResponse.item.answer.value[x].valueUri uri
QuestionnaireResponse.item.answer.value[x].valueAttachment Attachment
QuestionnaireResponse.item.answer.value[x].valueCoding Coding
QuestionnaireResponse.item.answer.value[x].valueQuantity Quantity
QuestionnaireResponse.item.answer.value[x].valueReference Reference(Resource)
QuestionnaireResponse.item.answer.item 0..* See item (QuestionnaireResponse) Nested groups and questions
QuestionnaireResponse.item.item 0..* See item (QuestionnaireResponse) Nested questionnaire response items

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
QuestionnaireResponse.​language Base preferred Common Languages 📍4.0.1 FHIR Std.
QuestionnaireResponse.​status Base required QuestionnaireResponseStatus 📍4.0.1 FHIR Std.
QuestionnaireResponse.​item.answer.value[x] Base example Questionnaire Answer Codes 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error QuestionnaireResponse If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error QuestionnaireResponse If 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-4 error QuestionnaireResponse If 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-5 error QuestionnaireResponse If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice QuestionnaireResponse A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()
qrs-1 error QuestionnaireResponse.item Nested item can't be beneath both item and answer (answer.exists() and item.exists()).not()

This structure is derived from QuestionnaireResponse

Summary

Mandatory: 3 elements
Prohibited: 1 element

 

Other representations of profile: CSV, Excel, Schematron