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: ProjoOrganization - Detailed Descriptions

Draft as of 2024-01-01

Definitions for the projo-organization resource profile.

Guidance on how to interpret the contents of this table can be foundhere

0. Organization
Definition

A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, payer/insurer, etc.

ShortCustomer/tenant; maps to one WhatsApp phone numberA grouping of people or organizations with a common purpose
Control0..*
Is Modifierfalse
Summaryfalse
Invariantsdom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources (contained.contained.empty())
dom-3: 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: 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: If a resource is contained in another resource, it SHALL NOT have a security label (contained.meta.security.empty())
dom-6: A resource should have narrative for robust management (text.`div`.exists())
org-1: The organization SHALL at least have a name or an identifier, and possibly more than one ((identifier.count() + name.count()) > 0)
org-1: The organization SHALL at least have a name or an identifier, and possibly more than one ((identifier.count() + name.count()) > 0)
2. Organization.implicitRules
Definition

A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.

ShortA set of rules under which this content was created
Comments

Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.

Control0..1
Typeuri
Is Modifiertrue because This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
4. Organization.extension
Definition

An Extension


May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.

ShortExtensionAdditional content defined by implementations
Comments

There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

Control0..*
TypeExtension
Is Modifierfalse
Summaryfalse
Alternate Namesextensions, user content
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
SlicingThis element introduces a set of slices on Organization.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
  • value @ url
  • 6. Organization.extension:planSlot
    Slice NameplanSlot
    Definition

    Each slot binds a plan kind (onboarding, default, re-engagement, onboarding-routing) to a versioned PlanDefinition canonical. Set by operators via migration/seeding scripts (setOrganizationPlanSlot). Projo runtime never writes plan-slot — only reads it. Read by the orchestrator's applyTriggeredPlanIfNeeded to select which PlanDefinition to $apply: selectPlanKind picks the lifecycle kind (onboarding for new patients, re-engagement for returning, default otherwise), then resolvePlanCanonicalForKind looks up the slot. For onboarding only, falls back to legacy default-plan (ADR 0003). The onboarding-routing slot is read separately by clinical routing after onboarding completion.

    ShortRepeating plan-slot binding (ADR 0002, ADR 0007)
    Control0..*
    This element is affected by the following invariants: ele-1
    TypeExtension(Plan Slot) (Complex Extension)
    Is Modifierfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    8. Organization.extension:defaultPlan
    Slice NamedefaultPlan
    Definition

    Retired. Set by operators before plan-slot migration. Retained as a read-fallback for onboarding during the plan-slot transition (ADR 0003). Migration script migrate:plan-slots removes in Phase 2.

    ShortLegacy single-plan pointer (retired read-fallback)
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(Default Plan (Legacy)) (Extension Type: canonical)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    10. Organization.extension:waPhoneNumberId
    Slice NamewaPhoneNumberId
    Definition

    Set by two writers: (1) the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path (from the reverse CR's inbound-business-phone-id); (2) the sidecar's ensureWhatsAppPhoneNumberId on the first outbound dispatch (queries Meta Graph API GET /{WABA-ID}/phone_numbers, matches by normalized digits, caches back). Read by the sidecar on every outbound dispatch to skip the Graph API lookup. No active refresh — if the cached value becomes stale, WhatsApp sends fail and an operator must clear the extension.

    ShortCached Meta Phone Number ID
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(WhatsApp Phone Number ID) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    12. Organization.extension:wabaAccountId
    Slice NamewabaAccountId
    Definition

    Set by operators for manually-created Organizations, or by the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path. Read by the sidecar to resolve per-WABA credentials from Key Vault (whatsapp-{wabaId}-access-token, whatsapp-{wabaId}-app-secret). No silent fallback — a missing WABA ID causes the sidecar to defer the CR for retry.

    ShortWABA account ID (multi-WABA, issue #238)
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(WABA Account ID) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    14. Organization.extension:wabaTemplateInvitation
    Slice NamewabaTemplateInvitation
    Definition

    Set by operators. Overrides WHATSAPP_INVITATION_TEMPLATE_NAME for this Organization. Read by the sidecar when sending the invitation template.

    ShortPer-org invitation template override
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(WABA Invitation Template Override) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    16. Organization.extension:wabaTemplateReminder
    Slice NamewabaTemplateReminder
    Definition

    Set by operators. Overrides WHATSAPP_REMINDER_TEMPLATE_NAME. Read by the sidecar when sending reminder templates.

    ShortPer-org reminder template override
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(WABA Reminder Template Override) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    18. Organization.extension:wabaTemplateWebInvitation
    Slice NamewabaTemplateWebInvitation
    Definition

    Set by operators. Overrides WHATSAPP_WEB_INVITATION_TEMPLATE_NAME (ADR 0011). Read by the sidecar when sending web-channel invitation templates.

    ShortPer-org web invitation template override
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(WABA Web Invitation Template Override) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    20. Organization.extension:wabaTemplateWebReminder
    Slice NamewabaTemplateWebReminder
    Definition

    Set by operators. Overrides WHATSAPP_WEB_REMINDER_TEMPLATE_NAME (ADR 0011). Read by the sidecar when sending web-channel reminder templates.

    ShortPer-org web reminder template override
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(WABA Web Reminder Template Override) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    22. Organization.extension:preferredLanguage
    Slice NamepreferredLanguage
    Definition

    Set by operators at Organization creation time. Projo never writes this extension — only reads it. Read by buildPatient during identity resolution: getOrganizationPreferredLanguage reads the extension and stamps it onto Patient.communication[0].language.coding[0].code with preferred=true. If absent, the Patient is created without communication preferences and the sidecar's resolvePatientLanguage falls back to 'en'. The patient can later change their language via the dermacare-language-selection Questionnaire, which uses extraction-writeback to update Patient.communication.language.

    ShortISO 639-1 default language for onboarded patients
    Control0..1
    This element is affected by the following invariants: ele-1
    TypeExtension(Preferred Language) (Extension Type: string)
    Is Modifierfalse
    Summaryfalse
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    24. Organization.modifierExtension
    Definition

    May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

    Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

    ShortExtensions that cannot be ignored
    Comments

    There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

    Control0..*
    TypeExtension
    Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them
    Summaryfalse
    Requirements

    Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

    Alternate Namesextensions, user content
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
    26. Organization.identifier
    Definition

    At least one identifier is required. System: https://projo.evoleen.com/fhir/organization. Set by operators at creation time.


    Identifier for the organization that is used to identify the organization across multiple disparate systems.

    ShortOperator-chosen tenant identifierIdentifies this organization across multiple systems
    NoteThis is a business identifier, not a resource identifier (see discussion)
    Control10..*
    This element is affected by the following invariants: org-1
    TypeIdentifier
    Is Modifierfalse
    Summarytrue
    Requirements

    Organizations are known by a variety of ids. Some institutions maintain several, and most collect identifiers for exchange with other organizations concerning the organization.

    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    28. Organization.active
    Definition

    Whether the organization's record is still in active use.

    ShortWhether the organization's record is still in active use
    Comments

    This active flag is not intended to be used to mark an organization as temporarily closed or under construction. Instead the Location(s) within the Organization should have the suspended status. If further details of the reason for the suspension are required, then an extension on this element should be used.

    This element is labeled as a modifier because it may be used to mark that the resource was created in error.

    Control0..1
    Typeboolean
    Is Modifiertrue because This element is labelled as a modifier because it is a status element that can indicate that a record should not be treated as valid
    Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
    Summarytrue
    Requirements

    Need a flag to indicate a record is no longer to be used and should generally be hidden for the user in the UI.

    Meaning if MissingThis resource is generally assumed to be active if no value is provided for the active element
    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    30. Organization.telecom
    Definition

    At least one phone number is required. This is the WhatsApp Business number patients message. Set by operators at creation time, or by the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path.


    A contact detail for the organization.

    ShortE.164 WhatsApp phone numbersA contact detail for the organization
    Comments

    The use code 'home' is not to be used. Note that these contacts are not the contact details of people who are employed by or represent the organization, but official contacts for the organization itself.

    Control10..*
    This element is affected by the following invariants: org-3
    TypeContactPoint
    Is Modifierfalse
    Summaryfalse
    Requirements

    Human contact for the organization.

    Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
    org-3: The telecom of an organization can never be of use 'home' (where(use = 'home').empty())
    org-3: The telecom of an organization can never be of use 'home' (where(use = 'home').empty())
    SlicingThis element introduces a set of slices on Organization.telecom. The slices areUnordered and Open, and can be differentiated using the following discriminators:
    • value @ system
    • 32. Organization.telecom:whatsappPhone
      Slice NamewhatsappPhone
      Definition

      The WhatsApp Business phone number in E.164 format. Patients send messages to this number. Set by operators or stub-upserted by the orchestrator from the reverse CR's inbound-business-phone extension.


      A contact detail for the organization.

      ShortWhatsApp phone number (E.164)A contact detail for the organization
      Comments

      The use code 'home' is not to be used. Note that these contacts are not the contact details of people who are employed by or represent the organization, but official contacts for the organization itself.

      Control10..1*
      This element is affected by the following invariants: org-3
      TypeContactPoint
      Is Modifierfalse
      Summaryfalse
      Requirements

      Human contact for the organization.

      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
      org-3: The telecom of an organization can never be of use 'home' (where(use = 'home').empty())
      org-3: The telecom of an organization can never be of use 'home' (where(use = 'home').empty())
      34. Organization.telecom:whatsappPhone.system
      Definition

      Telecommunications form for contact point - what communications system is required to make use of the contact.

      Shortphone | fax | email | pager | url | sms | other
      Control10..1
      This element is affected by the following invariants: cpt-2
      BindingThe codes SHALL be taken from ContactPointSystemhttp://hl7.org/fhir/ValueSet/contact-point-system|4.0.1
      (required to http://hl7.org/fhir/ValueSet/contact-point-system|4.0.1)

      Telecommunications form for contact point.

      Typecode
      Is Modifierfalse
      Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
      Summarytrue
      Fixed Valuephone
      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
      36. Organization.telecom:whatsappPhone.value
      Definition

      The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).

      ShortThe actual contact point details
      Comments

      Additional text data such as phone extension numbers, or notes about use of the contact are sometimes included in the value.

      Control10..1
      Typestring
      Is Modifierfalse
      Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
      Summarytrue
      Requirements

      Need to support legacy numbers that are not in a tightly controlled format.

      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
      38. Organization.telecom:whatsappPhone.use
      Definition

      Identifies the purpose for the contact point.

      Shorthome | work | temp | old | mobile - purpose of this contact point
      Comments

      Applications can assume that a contact is current unless it explicitly says that it is temporary or old.

      Control0..1
      BindingThe codes SHALL be taken from ContactPointUsehttp://hl7.org/fhir/ValueSet/contact-point-use|4.0.1
      (required to http://hl7.org/fhir/ValueSet/contact-point-use|4.0.1)

      Use of contact point.

      Typecode
      Is Modifiertrue because This is labeled as "Is Modifier" because applications should not mistake a temporary or old contact etc.for a current/permanent one
      Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
      Summarytrue
      Requirements

      Need to track the way a person uses this contact, so a user can choose which is appropriate for their purpose.

      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
      40. Organization.partOf
      Definition

      References the root Organization. Set by operators. Customer Organizations are partOf the root; the root Organization has no partOf.


      The organization of which this organization forms a part.

      ShortRoot Organization (multi-tenant hierarchy)The organization of which this organization forms a part
      Control0..1
      TypeReference(Organization)
      Is Modifierfalse
      Summarytrue
      Requirements

      Need to be able to track the hierarchy of organizations within an organization.

      Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))

      Guidance on how to interpret the contents of this table can be foundhere

      0. Organization
      ShortCustomer/tenant; maps to one WhatsApp phone number
      2. Organization.extension
      SlicingThis element introduces a set of slices on Organization.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
      • value @ url
      • 4. Organization.extension:planSlot
        Slice NameplanSlot
        Definition

        Each slot binds a plan kind (onboarding, default, re-engagement, onboarding-routing) to a versioned PlanDefinition canonical. Set by operators via migration/seeding scripts (setOrganizationPlanSlot). Projo runtime never writes plan-slot — only reads it. Read by the orchestrator's applyTriggeredPlanIfNeeded to select which PlanDefinition to $apply: selectPlanKind picks the lifecycle kind (onboarding for new patients, re-engagement for returning, default otherwise), then resolvePlanCanonicalForKind looks up the slot. For onboarding only, falls back to legacy default-plan (ADR 0003). The onboarding-routing slot is read separately by clinical routing after onboarding completion.

        ShortRepeating plan-slot binding (ADR 0002, ADR 0007)
        Control0..*
        TypeExtension(Plan Slot) (Complex Extension)
        6. Organization.extension:defaultPlan
        Slice NamedefaultPlan
        Definition

        Retired. Set by operators before plan-slot migration. Retained as a read-fallback for onboarding during the plan-slot transition (ADR 0003). Migration script migrate:plan-slots removes in Phase 2.

        ShortLegacy single-plan pointer (retired read-fallback)
        Control0..1
        TypeExtension(Default Plan (Legacy)) (Extension Type: canonical)
        8. Organization.extension:waPhoneNumberId
        Slice NamewaPhoneNumberId
        Definition

        Set by two writers: (1) the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path (from the reverse CR's inbound-business-phone-id); (2) the sidecar's ensureWhatsAppPhoneNumberId on the first outbound dispatch (queries Meta Graph API GET /{WABA-ID}/phone_numbers, matches by normalized digits, caches back). Read by the sidecar on every outbound dispatch to skip the Graph API lookup. No active refresh — if the cached value becomes stale, WhatsApp sends fail and an operator must clear the extension.

        ShortCached Meta Phone Number ID
        Control0..1
        TypeExtension(WhatsApp Phone Number ID) (Extension Type: string)
        10. Organization.extension:wabaAccountId
        Slice NamewabaAccountId
        Definition

        Set by operators for manually-created Organizations, or by the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path. Read by the sidecar to resolve per-WABA credentials from Key Vault (whatsapp-{wabaId}-access-token, whatsapp-{wabaId}-app-secret). No silent fallback — a missing WABA ID causes the sidecar to defer the CR for retry.

        ShortWABA account ID (multi-WABA, issue #238)
        Control0..1
        TypeExtension(WABA Account ID) (Extension Type: string)
        12. Organization.extension:wabaTemplateInvitation
        Slice NamewabaTemplateInvitation
        Definition

        Set by operators. Overrides WHATSAPP_INVITATION_TEMPLATE_NAME for this Organization. Read by the sidecar when sending the invitation template.

        ShortPer-org invitation template override
        Control0..1
        TypeExtension(WABA Invitation Template Override) (Extension Type: string)
        14. Organization.extension:wabaTemplateReminder
        Slice NamewabaTemplateReminder
        Definition

        Set by operators. Overrides WHATSAPP_REMINDER_TEMPLATE_NAME. Read by the sidecar when sending reminder templates.

        ShortPer-org reminder template override
        Control0..1
        TypeExtension(WABA Reminder Template Override) (Extension Type: string)
        16. Organization.extension:wabaTemplateWebInvitation
        Slice NamewabaTemplateWebInvitation
        Definition

        Set by operators. Overrides WHATSAPP_WEB_INVITATION_TEMPLATE_NAME (ADR 0011). Read by the sidecar when sending web-channel invitation templates.

        ShortPer-org web invitation template override
        Control0..1
        TypeExtension(WABA Web Invitation Template Override) (Extension Type: string)
        18. Organization.extension:wabaTemplateWebReminder
        Slice NamewabaTemplateWebReminder
        Definition

        Set by operators. Overrides WHATSAPP_WEB_REMINDER_TEMPLATE_NAME (ADR 0011). Read by the sidecar when sending web-channel reminder templates.

        ShortPer-org web reminder template override
        Control0..1
        TypeExtension(WABA Web Reminder Template Override) (Extension Type: string)
        20. Organization.extension:preferredLanguage
        Slice NamepreferredLanguage
        Definition

        Set by operators at Organization creation time. Projo never writes this extension — only reads it. Read by buildPatient during identity resolution: getOrganizationPreferredLanguage reads the extension and stamps it onto Patient.communication[0].language.coding[0].code with preferred=true. If absent, the Patient is created without communication preferences and the sidecar's resolvePatientLanguage falls back to 'en'. The patient can later change their language via the dermacare-language-selection Questionnaire, which uses extraction-writeback to update Patient.communication.language.

        ShortISO 639-1 default language for onboarded patients
        Control0..1
        TypeExtension(Preferred Language) (Extension Type: string)
        22. Organization.identifier
        Definition

        At least one identifier is required. System: https://projo.evoleen.com/fhir/organization. Set by operators at creation time.

        ShortOperator-chosen tenant identifier
        NoteThis is a business identifier, not a resource identifier (see discussion)
        Control1..?
        24. Organization.telecom
        Definition

        At least one phone number is required. This is the WhatsApp Business number patients message. Set by operators at creation time, or by the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path.

        ShortE.164 WhatsApp phone numbers
        Control1..?
        SlicingThis element introduces a set of slices on Organization.telecom. The slices areUnordered and Open, and can be differentiated using the following discriminators:
        • value @ system
        • 26. Organization.telecom:whatsappPhone
          Slice NamewhatsappPhone
          Definition

          The WhatsApp Business phone number in E.164 format. Patients send messages to this number. Set by operators or stub-upserted by the orchestrator from the reverse CR's inbound-business-phone extension.

          ShortWhatsApp phone number (E.164)
          Control1..1
          28. Organization.telecom:whatsappPhone.system
          Control1..?
          Fixed Valuephone
          30. Organization.telecom:whatsappPhone.value
          Control1..?
          32. Organization.partOf
          Definition

          References the root Organization. Set by operators. Customer Organizations are partOf the root; the root Organization has no partOf.

          ShortRoot Organization (multi-tenant hierarchy)

          Guidance on how to interpret the contents of this table can be foundhere

          0. Organization
          Definition

          A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, payer/insurer, etc.

          ShortCustomer/tenant; maps to one WhatsApp phone number
          Control0..*
          Is Modifierfalse
          Summaryfalse
          Invariantsdom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources (contained.contained.empty())
          dom-3: 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: 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: If a resource is contained in another resource, it SHALL NOT have a security label (contained.meta.security.empty())
          dom-6: A resource should have narrative for robust management (text.`div`.exists())
          org-1: The organization SHALL at least have a name or an identifier, and possibly more than one ((identifier.count() + name.count()) > 0)
          2. Organization.id
          Definition

          The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.

          ShortLogical id of this artifact
          Comments

          The only time that a resource does not have an id is when it is being submitted to the server using a create operation.

          Control0..1
          Typeid
          Is Modifierfalse
          Summarytrue
          4. Organization.meta
          Definition

          The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.

          ShortMetadata about the resource
          Control0..1
          TypeMeta
          Is Modifierfalse
          Summarytrue
          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
          6. Organization.implicitRules
          Definition

          A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.

          ShortA set of rules under which this content was created
          Comments

          Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.

          Control0..1
          Typeuri
          Is Modifiertrue because This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation
          Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
          Summarytrue
          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
          8. Organization.language
          Definition

          The base language in which the resource is written.

          ShortLanguage of the resource content
          Comments

          Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource. Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute).

          Control0..1
          BindingThe codes SHOULD be taken from CommonLanguages
          (preferred to http://hl7.org/fhir/ValueSet/languages|4.0.1)

          A human language.

          Additional BindingsPurpose
          AllLanguagesMax Binding
          Typecode
          Is Modifierfalse
          Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
          Summaryfalse
          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
          10. Organization.text
          Definition

          A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.

          ShortText summary of the resource, for human interpretation
          Comments

          Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied). This may be necessary for data from legacy systems where information is captured as a "text blob" or where text is additionally entered raw or narrated and encoded information is added later.

          Control0..1
          TypeNarrative
          Is Modifierfalse
          Summaryfalse
          Alternate Namesnarrative, html, xhtml, display
          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
          12. Organization.contained
          Definition

          These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.

          ShortContained, inline Resources
          Comments

          This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. Contained resources may have profiles and tags In their meta elements, but SHALL NOT have security labels.

          Control0..*
          TypeResource
          Is Modifierfalse
          Summaryfalse
          Alternate Namesinline resources, anonymous resources, contained resources
          14. Organization.extension
          Definition

          An Extension

          ShortExtension
          Control0..*
          TypeExtension
          Is Modifierfalse
          Summaryfalse
          Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
          ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
          SlicingThis element introduces a set of slices on Organization.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
          • value @ url
          • 16. Organization.extension:planSlot
            Slice NameplanSlot
            Definition

            Each slot binds a plan kind (onboarding, default, re-engagement, onboarding-routing) to a versioned PlanDefinition canonical. Set by operators via migration/seeding scripts (setOrganizationPlanSlot). Projo runtime never writes plan-slot — only reads it. Read by the orchestrator's applyTriggeredPlanIfNeeded to select which PlanDefinition to $apply: selectPlanKind picks the lifecycle kind (onboarding for new patients, re-engagement for returning, default otherwise), then resolvePlanCanonicalForKind looks up the slot. For onboarding only, falls back to legacy default-plan (ADR 0003). The onboarding-routing slot is read separately by clinical routing after onboarding completion.

            ShortRepeating plan-slot binding (ADR 0002, ADR 0007)
            Control0..*
            This element is affected by the following invariants: ele-1
            TypeExtension(Plan Slot) (Complex Extension)
            Is Modifierfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            18. Organization.extension:defaultPlan
            Slice NamedefaultPlan
            Definition

            Retired. Set by operators before plan-slot migration. Retained as a read-fallback for onboarding during the plan-slot transition (ADR 0003). Migration script migrate:plan-slots removes in Phase 2.

            ShortLegacy single-plan pointer (retired read-fallback)
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(Default Plan (Legacy)) (Extension Type: canonical)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            20. Organization.extension:waPhoneNumberId
            Slice NamewaPhoneNumberId
            Definition

            Set by two writers: (1) the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path (from the reverse CR's inbound-business-phone-id); (2) the sidecar's ensureWhatsAppPhoneNumberId on the first outbound dispatch (queries Meta Graph API GET /{WABA-ID}/phone_numbers, matches by normalized digits, caches back). Read by the sidecar on every outbound dispatch to skip the Graph API lookup. No active refresh — if the cached value becomes stale, WhatsApp sends fail and an operator must clear the extension.

            ShortCached Meta Phone Number ID
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(WhatsApp Phone Number ID) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            22. Organization.extension:wabaAccountId
            Slice NamewabaAccountId
            Definition

            Set by operators for manually-created Organizations, or by the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path. Read by the sidecar to resolve per-WABA credentials from Key Vault (whatsapp-{wabaId}-access-token, whatsapp-{wabaId}-app-secret). No silent fallback — a missing WABA ID causes the sidecar to defer the CR for retry.

            ShortWABA account ID (multi-WABA, issue #238)
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(WABA Account ID) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            24. Organization.extension:wabaTemplateInvitation
            Slice NamewabaTemplateInvitation
            Definition

            Set by operators. Overrides WHATSAPP_INVITATION_TEMPLATE_NAME for this Organization. Read by the sidecar when sending the invitation template.

            ShortPer-org invitation template override
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(WABA Invitation Template Override) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            26. Organization.extension:wabaTemplateReminder
            Slice NamewabaTemplateReminder
            Definition

            Set by operators. Overrides WHATSAPP_REMINDER_TEMPLATE_NAME. Read by the sidecar when sending reminder templates.

            ShortPer-org reminder template override
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(WABA Reminder Template Override) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            28. Organization.extension:wabaTemplateWebInvitation
            Slice NamewabaTemplateWebInvitation
            Definition

            Set by operators. Overrides WHATSAPP_WEB_INVITATION_TEMPLATE_NAME (ADR 0011). Read by the sidecar when sending web-channel invitation templates.

            ShortPer-org web invitation template override
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(WABA Web Invitation Template Override) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            30. Organization.extension:wabaTemplateWebReminder
            Slice NamewabaTemplateWebReminder
            Definition

            Set by operators. Overrides WHATSAPP_WEB_REMINDER_TEMPLATE_NAME (ADR 0011). Read by the sidecar when sending web-channel reminder templates.

            ShortPer-org web reminder template override
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(WABA Web Reminder Template Override) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            32. Organization.extension:preferredLanguage
            Slice NamepreferredLanguage
            Definition

            Set by operators at Organization creation time. Projo never writes this extension — only reads it. Read by buildPatient during identity resolution: getOrganizationPreferredLanguage reads the extension and stamps it onto Patient.communication[0].language.coding[0].code with preferred=true. If absent, the Patient is created without communication preferences and the sidecar's resolvePatientLanguage falls back to 'en'. The patient can later change their language via the dermacare-language-selection Questionnaire, which uses extraction-writeback to update Patient.communication.language.

            ShortISO 639-1 default language for onboarded patients
            Control0..1
            This element is affected by the following invariants: ele-1
            TypeExtension(Preferred Language) (Extension Type: string)
            Is Modifierfalse
            Summaryfalse
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            34. Organization.modifierExtension
            Definition

            May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

            Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

            ShortExtensions that cannot be ignored
            Comments

            There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

            Control0..*
            TypeExtension
            Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them
            Summaryfalse
            Requirements

            Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

            Alternate Namesextensions, user content
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
            36. Organization.identifier
            Definition

            At least one identifier is required. System: https://projo.evoleen.com/fhir/organization. Set by operators at creation time.

            ShortOperator-chosen tenant identifier
            NoteThis is a business identifier, not a resource identifier (see discussion)
            Control1..*
            This element is affected by the following invariants: org-1
            TypeIdentifier
            Is Modifierfalse
            Summarytrue
            Requirements

            Organizations are known by a variety of ids. Some institutions maintain several, and most collect identifiers for exchange with other organizations concerning the organization.

            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            38. Organization.active
            Definition

            Whether the organization's record is still in active use.

            ShortWhether the organization's record is still in active use
            Comments

            This active flag is not intended to be used to mark an organization as temporarily closed or under construction. Instead the Location(s) within the Organization should have the suspended status. If further details of the reason for the suspension are required, then an extension on this element should be used.

            This element is labeled as a modifier because it may be used to mark that the resource was created in error.

            Control0..1
            Typeboolean
            Is Modifiertrue because This element is labelled as a modifier because it is a status element that can indicate that a record should not be treated as valid
            Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
            Summarytrue
            Requirements

            Need a flag to indicate a record is no longer to be used and should generally be hidden for the user in the UI.

            Meaning if MissingThis resource is generally assumed to be active if no value is provided for the active element
            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            40. Organization.type
            Definition

            The kind(s) of organization that this is.

            ShortKind of organization
            Comments

            Organizations can be corporations, wards, sections, clinical teams, government departments, etc. Note that code is generally a classifier of the type of organization; in many applications, codes are used to identity a particular organization (say, ward) as opposed to another of the same type - these are identifiers, not codes

            When considering if multiple types are appropriate, you should evaluate if child organizations would be a more appropriate use of the concept, as different types likely are in different sub-areas of the organization. This is most likely to be used where type values have orthogonal values, such as a religious, academic and medical center.

            We expect that some jurisdictions will profile this optionality to be a single cardinality.

            Control0..*
            BindingFor example codes, see OrganizationType
            (example to http://hl7.org/fhir/ValueSet/organization-type|4.0.1)

            Used to categorize the organization.

            TypeCodeableConcept
            Is Modifierfalse
            Summarytrue
            Requirements

            Need to be able to track the kind of organization that this is - different organization types have different uses.

            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            42. Organization.name
            Definition

            A name associated with the organization.

            ShortName used for the organization
            Comments

            If the name of an organization changes, consider putting the old name in the alias column so that it can still be located through searches.

            Control0..1
            This element is affected by the following invariants: org-1
            Typestring
            Is Modifierfalse
            Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
            Summarytrue
            Requirements

            Need to use the name as the label of the organization.

            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            44. Organization.alias
            Definition

            A list of alternate names that the organization is known as, or was known as in the past.

            ShortA list of alternate names that the organization is known as, or was known as in the past
            Comments

            There are no dates associated with the alias/historic names, as this is not intended to track when names were used, but to assist in searching so that older names can still result in identifying the organization.

            Control0..*
            Typestring
            Is Modifierfalse
            Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
            Summaryfalse
            Requirements

            Over time locations and organizations go through many changes and can be known by different names.

            For searching knowing previous names that the organization was known by can be very useful.

            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            46. Organization.telecom
            Definition

            At least one phone number is required. This is the WhatsApp Business number patients message. Set by operators at creation time, or by the orchestrator's upsertOrganizationFromInboundBusinessPhone on the unresolved-receiver path.

            ShortE.164 WhatsApp phone numbers
            Comments

            The use code 'home' is not to be used. Note that these contacts are not the contact details of people who are employed by or represent the organization, but official contacts for the organization itself.

            Control1..*
            This element is affected by the following invariants: org-3
            TypeContactPoint
            Is Modifierfalse
            Summaryfalse
            Requirements

            Human contact for the organization.

            Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
            org-3: The telecom of an organization can never be of use 'home' (where(use = 'home').empty())
            SlicingThis element introduces a set of slices on Organization.telecom. The slices areUnordered and Open, and can be differentiated using the following discriminators:
            • value @ system
            • 48. Organization.telecom:whatsappPhone
              Slice NamewhatsappPhone
              Definition

              The WhatsApp Business phone number in E.164 format. Patients send messages to this number. Set by operators or stub-upserted by the orchestrator from the reverse CR's inbound-business-phone extension.

              ShortWhatsApp phone number (E.164)
              Comments

              The use code 'home' is not to be used. Note that these contacts are not the contact details of people who are employed by or represent the organization, but official contacts for the organization itself.

              Control1..1
              This element is affected by the following invariants: org-3
              TypeContactPoint
              Is Modifierfalse
              Summaryfalse
              Requirements

              Human contact for the organization.

              Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
              org-3: The telecom of an organization can never be of use 'home' (where(use = 'home').empty())
              50. Organization.telecom:whatsappPhone.id
              Definition

              Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

              ShortUnique id for inter-element referencing
              Control0..1
              Typestring
              Is Modifierfalse
              XML FormatIn the XML format, this property is represented as an attribute.
              Summaryfalse
              52. Organization.telecom:whatsappPhone.extension
              Definition

              May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.

              ShortAdditional content defined by implementations
              Comments

              There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

              Control0..*
              TypeExtension
              Is Modifierfalse
              Summaryfalse
              Alternate Namesextensions, user content
              Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
              ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
              SlicingThis element introduces a set of slices on Organization.telecom.extension. The slices areUnordered and Open, and can be differentiated using the following discriminators:
              • value @ url
              • 54. Organization.telecom:whatsappPhone.system
                Definition

                Telecommunications form for contact point - what communications system is required to make use of the contact.

                Shortphone | fax | email | pager | url | sms | other
                Control1..1
                This element is affected by the following invariants: cpt-2
                BindingThe codes SHALL be taken from ContactPointSystem
                (required to http://hl7.org/fhir/ValueSet/contact-point-system|4.0.1)

                Telecommunications form for contact point.

                Typecode
                Is Modifierfalse
                Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                Summarytrue
                Fixed Valuephone
                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                56. Organization.telecom:whatsappPhone.value
                Definition

                The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).

                ShortThe actual contact point details
                Comments

                Additional text data such as phone extension numbers, or notes about use of the contact are sometimes included in the value.

                Control1..1
                Typestring
                Is Modifierfalse
                Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                Summarytrue
                Requirements

                Need to support legacy numbers that are not in a tightly controlled format.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                58. Organization.telecom:whatsappPhone.use
                Definition

                Identifies the purpose for the contact point.

                Shorthome | work | temp | old | mobile - purpose of this contact point
                Comments

                Applications can assume that a contact is current unless it explicitly says that it is temporary or old.

                Control0..1
                BindingThe codes SHALL be taken from ContactPointUse
                (required to http://hl7.org/fhir/ValueSet/contact-point-use|4.0.1)

                Use of contact point.

                Typecode
                Is Modifiertrue because This is labeled as "Is Modifier" because applications should not mistake a temporary or old contact etc.for a current/permanent one
                Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                Summarytrue
                Requirements

                Need to track the way a person uses this contact, so a user can choose which is appropriate for their purpose.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                60. Organization.telecom:whatsappPhone.rank
                Definition

                Specifies a preferred order in which to use a set of contacts. ContactPoints with lower rank values are more preferred than those with higher rank values.

                ShortSpecify preferred order of use (1 = highest)
                Comments

                Note that rank does not necessarily follow the order in which the contacts are represented in the instance.

                Control0..1
                TypepositiveInt
                Is Modifierfalse
                Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
                Summarytrue
                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                62. Organization.telecom:whatsappPhone.period
                Definition

                Time period when the contact point was/is in use.

                ShortTime period when the contact point was/is in use
                Control0..1
                TypePeriod
                Is Modifierfalse
                Summarytrue
                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                64. Organization.address
                Definition

                An address for the organization.

                ShortAn address for the organization
                Comments

                Organization may have multiple addresses with different uses or applicable periods. The use code 'home' is not to be used.

                Control0..*
                This element is affected by the following invariants: org-2
                TypeAddress
                Is Modifierfalse
                Summaryfalse
                Requirements

                May need to keep track of the organization's addresses for contacting, billing or reporting requirements.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                org-2: An address of an organization can never be of use 'home' (where(use = 'home').empty())
                66. Organization.partOf
                Definition

                References the root Organization. Set by operators. Customer Organizations are partOf the root; the root Organization has no partOf.

                ShortRoot Organization (multi-tenant hierarchy)
                Control0..1
                TypeReference(Organization)
                Is Modifierfalse
                Summarytrue
                Requirements

                Need to be able to track the hierarchy of organizations within an organization.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                68. Organization.contact
                Definition

                Contact for the organization for a certain purpose.

                ShortContact for the organization for a certain purpose
                Comments

                Where multiple contacts for the same purpose are provided there is a standard extension that can be used to determine which one is the preferred contact to use.

                Control0..*
                TypeBackboneElement
                Is Modifierfalse
                Summaryfalse
                Requirements

                Need to keep track of assigned contact points within bigger organization.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                70. Organization.contact.id
                Definition

                Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.

                ShortUnique id for inter-element referencing
                Control0..1
                Typestring
                Is Modifierfalse
                XML FormatIn the XML format, this property is represented as an attribute.
                Summaryfalse
                72. Organization.contact.extension
                Definition

                May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.

                ShortAdditional content defined by implementations
                Comments

                There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

                Control0..*
                TypeExtension
                Is Modifierfalse
                Summaryfalse
                Alternate Namesextensions, user content
                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
                74. Organization.contact.modifierExtension
                Definition

                May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

                Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

                ShortExtensions that cannot be ignored even if unrecognized
                Comments

                There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

                Control0..*
                TypeExtension
                Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them
                Summarytrue
                Requirements

                Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

                Alternate Namesextensions, user content, modifiers
                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
                76. Organization.contact.purpose
                Definition

                Indicates a purpose for which the contact can be reached.

                ShortThe type of contact
                Control0..1
                BindingUnless not suitable, these codes SHALL be taken from ContactEntityType
                (extensible to http://hl7.org/fhir/ValueSet/contactentity-type|4.0.1)

                The purpose for which you would contact a contact party.

                TypeCodeableConcept
                Is Modifierfalse
                Summaryfalse
                Requirements

                Need to distinguish between multiple contact persons.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                78. Organization.contact.name
                Definition

                A name associated with the contact.

                ShortA name associated with the contact
                Control0..1
                TypeHumanName
                Is Modifierfalse
                Summaryfalse
                Requirements

                Need to be able to track the person by name.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                80. Organization.contact.telecom
                Definition

                A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.

                ShortContact details (telephone, email, etc.) for a contact
                Control0..*
                TypeContactPoint
                Is Modifierfalse
                Summaryfalse
                Requirements

                People have (primary) ways to contact them in some way such as phone, email.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                82. Organization.contact.address
                Definition

                Visiting or postal addresses for the contact.

                ShortVisiting or postal addresses for the contact
                Control0..1
                TypeAddress
                Is Modifierfalse
                Summaryfalse
                Requirements

                May need to keep track of a contact party's address for contacting, billing or reporting requirements.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
                84. Organization.endpoint
                Definition

                Technical endpoints providing access to services operated for the organization.

                ShortTechnical endpoints providing access to services operated for the organization
                Control0..*
                TypeReference(Endpoint)
                Is Modifierfalse
                Summaryfalse
                Requirements

                Organizations have multiple systems that provide various services and need to be able to define the technical connection details for how to connect to them, and for what purpose.

                Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))