PackagesCanonicalsLogsProblems
    Packages
    hl7.fhir.us.pq-cmc-fda@2.0.0-ballot
    http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pqcmc-product-part
description: The manufactured drug product defined by all its parts or layers. If the drug product composition is homogeneous it will have a single part or component.
package_name: hl7.fhir.us.pq-cmc-fda
derivation: constraint
name: FinishedProduct
type: ManufacturedItemDefinition
elements:
  identifier: {mustSupport: true, index: 0}
  status: {mustSupport: true, index: 1}
  name: {short: Product Proprietary Name | Product Non-proprietary Name, mustSupport: true, index: 2}
  manufacturedDoseForm:
    binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-manufactured-dose-form-terminology'}
    index: 3
  property:
    mustSupport: true
    array: true
    min: 6
    index: 4
    elements:
      type:
        mustSupport: true
        index: 5
        elements:
          text: {mustSupport: true, index: 6}
        required: [text]
    slicing:
      rules: closed
      description: Slice based on value
      discriminator:
      - {path: type.text, type: value}
      min: 6
      slices:
        Schematic:
          match:
            type: {text: Product Schematic}
          schema:
            short: Product Schematic
            mustSupport: true
            array: true
            min: 1
            _required: true
            index: 45
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Product Schematic}
                    index: 46
              value:
                mustSupport: true
                choices: [valueAttachment]
                index: 48
              valueAttachment: {type: Attachment, mustSupport: true, choiceOf: value, index: 49}
            required: [valueAttachment, value]
        OvrRelsMech:
          match:
            type: {text: Product Overall Release Mechanism}
          schema:
            short: Product Overall Release Mechanism
            mustSupport: true
            index: 12
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Product Overall Release Mechanism}
                    index: 13
              value:
                mustSupport: true
                choices: [valueCodeableConcept]
                index: 15
              valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 16}
            required: [value, valueCodeableConcept]
        CoatInd:
          match:
            type: {text: Coating Indicator}
          schema:
            short: Product Coating Indicator
            mustSupport: true
            index: 17
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Coating Indicator}
                    index: 18
              value:
                mustSupport: true
                choices: [valueBoolean]
                index: 20
              valueBoolean: {type: boolean, mustSupport: true, choiceOf: value, index: 21}
            required: [value, valueBoolean]
        TotWgtDen:
          match:
            type: {text: Product Total Weight Numeric Denominator}
          schema:
            short: Product Total Weight Numeric Denominator
            mustSupport: true
            index: 61
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Product Total Weight Numeric Denominator}
                    index: 62
              value:
                mustSupport: true
                choices: [valueQuantity]
                index: 64
              valueQuantity: {type: Quantity, mustSupport: true, choiceOf: value, index: 65}
              value[x]:
                elements:
                  value: {mustSupport: true, index: 66}
                required: [value]
            required: [value, valueQuantity]
        CapClass:
          match:
            type: {text: Capsule Classification Category}
          schema:
            short: Capsule Shell Part Classification Category
            mustSupport: true
            index: 34
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Capsule Classification Category}
                    index: 35
              value:
                mustSupport: true
                choices: [valueCodeableConcept]
                index: 37
              valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 38}
            required: [value, valueCodeableConcept]
        OvrRelsProf:
          match:
            type: {text: Product Overall Release Profile}
          schema:
            short: Product Overall Release Profile
            mustSupport: true
            _required: true
            index: 7
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Product Overall Release Profile}
                    index: 8
              value:
                mustSupport: true
                choices: [valueCodeableConcept]
                index: 10
              valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 11}
            required: [value, valueCodeableConcept]
        TotWgtNum:
          match:
            type: {text: Product Total Weight Numeric Numerator}
          schema:
            short: Product Total Weight Numeric Numerator
            mustSupport: true
            _required: true
            index: 55
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Product Total Weight Numeric Numerator}
                    index: 56
              value:
                mustSupport: true
                choices: [valueQuantity]
                index: 58
              valueQuantity: {type: Quantity, mustSupport: true, choiceOf: value, index: 59}
              value[x]:
                elements:
                  comparator: {short: Product Total Weight Operator, mustSupport: true, index: 60}
            required: [value, valueQuantity]
        BeaTypCnt:
          match:
            type: {text: Tablet Bead Type Count}
          schema:
            short: Tablet Bead Type Count
            mustSupport: true
            index: 28
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Tablet Bead Type Count}
                    index: 29
              value:
                mustSupport: true
                pattern:
                  type: Quantity
                  value: {code: '1', system: 'http://unitsofmeasure.org'}
                choices: [valueQuantity]
                index: 31
              valueQuantity:
                type: Quantity
                mustSupport: true
                pattern:
                  type: Quantity
                  value: {code: '1', system: 'http://unitsofmeasure.org'}
                choiceOf: value
                index: 32
              value[x]:
                elements:
                  value: {mustSupport: true, index: 33}
                required: [value]
            required: [value, valueQuantity]
        LayCnt:
          match:
            type: {text: Tablet Layer Count}
          schema:
            short: Product Tablet Layer Count
            mustSupport: true
            index: 22
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Tablet Layer Count}
                    index: 23
              value:
                mustSupport: true
                pattern:
                  type: Quantity
                  value: {code: '1', system: 'http://unitsofmeasure.org'}
                choices: [valueQuantity]
                index: 25
              valueQuantity:
                type: Quantity
                mustSupport: true
                pattern:
                  type: Quantity
                  value: {code: '1', system: 'http://unitsofmeasure.org'}
                choiceOf: value
                index: 26
              value[x]:
                elements:
                  value: {mustSupport: true, index: 27}
                required: [value]
            required: [value, valueQuantity]
        CapConCnt:
          match:
            type: {text: Capsule Constituent Count}
          schema:
            short: Product Capsule Constituent Count
            mustSupport: true
            index: 39
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Capsule Constituent Count}
                    index: 40
              value:
                mustSupport: true
                pattern:
                  type: Quantity
                  value: {code: '1', system: 'http://unitsofmeasure.org'}
                choices: [valueQuantity]
                index: 42
              valueQuantity:
                type: Quantity
                mustSupport: true
                pattern:
                  type: Quantity
                  value: {code: '1', system: 'http://unitsofmeasure.org'}
                choiceOf: value
                index: 43
              value[x]:
                elements:
                  value: {mustSupport: true, index: 44}
                required: [value]
            required: [value, valueQuantity]
        QualStd:
          match:
            type: {text: Quality Standard}
          schema:
            short: Product Quality Standard
            mustSupport: true
            array: true
            min: 1
            _required: true
            index: 72
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Quality Standard}
                    index: 73
              value:
                mustSupport: true
                choices: [valueCodeableConcept]
                index: 75
              valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 76}
            required: [value, valueCodeableConcept]
        WgtTyp:
          match:
            type: {text: Product Weight Type}
          schema:
            short: Product Weight Type
            mustSupport: true
            _required: true
            index: 50
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Product Weight Type}
                    index: 51
              value:
                mustSupport: true
                choices: [valueCodeableConcept]
                index: 53
              valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 54}
            required: [value, valueCodeableConcept]
        Sterile:
          match:
            type: {text: Sterile Product Indicator}
          schema:
            short: Sterile Product Indicator
            mustSupport: true
            _required: true
            index: 77
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Sterile Product Indicator}
                    index: 78
              value:
                mustSupport: true
                choices: [valueBoolean]
                index: 80
              valueBoolean: {type: boolean, mustSupport: true, choiceOf: value, index: 81}
            required: [value, valueBoolean]
        TotWgtTxt:
          match:
            type: {text: Total Weight Textual}
          schema:
            short: Product Total Weight Textual
            mustSupport: true
            index: 67
            elements:
              type:
                elements:
                  text:
                    pattern: {type: String, value: Total Weight Textual}
                    index: 68
              value:
                mustSupport: true
                choices: [valueMarkdown]
                index: 70
              valueMarkdown: {type: markdown, mustSupport: true, choiceOf: value, index: 71}
            required: [valueMarkdown, value]
  component:
    constraint:
      cmc-amount-ratio-or-quantity:
        human: The amount ratio extension and an amount with a non-percentage unit are mutually exclusive
        source: http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pqcmc-product-part
        severity: error
        expression: "defineVariable('system','http://unitsofmeasure.org').select(\n  modifierExtension.where(url = 'http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pq-amount-ratio')\n  .union(\n    amount.where(\n        system = %system and \n        code.memberOf('http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-non-percentage-units')\n    )\n  ).count() = 1\n)"
    mustSupport: true
    index: 82
    elements:
      modifierExtension:
        index: 83
        slicing:
          rules: open
          ordered: false
          discriminator:
          - {path: url, type: value}
          min: null
          slices:
            amountRatio:
              match: {url: null}
              schema: {type: Extension, mustSupport: true, url: 'http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pq-amount-ratio', index: 84}
              min: 0
              max: 1
      type:
        short: Product Part Type
        mustSupport: true
        index: 85
        elements:
          coding:
            binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-product-part-type'}
            index: 86
      function: {type: CodeableConcept, short: Product Part Function Description, mustSupport: true, index: 87}
      amount:
        mustSupport: true
        array: true
        max: 2
        index: 88
        slicing:
          rules: open
          ordered: false
          discriminator:
          - {path: code, type: value}
          min: null
          max: 2
          slices:
            weight:
              match: {code: null}
              schema:
                mustSupport: true
                index: 89
                elements:
                  value: {short: Product Part Total Weight Numeric, mustSupport: true, index: 90}
                  unit: {short: Product Part Total Weight Numeric UOM, mustSupport: true, index: 91}
                  code:
                    binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-non-percentage-units'}
                    index: 92
                required: [value, unit]
            percent:
              match: {code: null}
              schema:
                mustSupport: true
                index: 93
                elements:
                  value: {short: Product Part Content Percent, mustSupport: true, index: 94}
                  unit: {short: Product Part Content Percent UOM, mustSupport: true, index: 95}
                  code:
                    binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-percentage-units'}
                    index: 96
                required: [value, unit]
      constituent:
        short: Product Part Ingredient Component Function Category
        constraint:
          cmc-ingredient-functions:
            human: |-
              If Drug Product Component constituent Function Category is Active Ingredient or Adjuvant THEN Drug Product Component constituent Function is not applicable.
              If Drug Product Component Function Category constituent is Inactive Ingredient (excipient) THEN Drug Product Component Function must be from the value list.
            source: http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pqcmc-product-part
            severity: error
            expression: function.coding.where(code = 'C42637' and system = 'http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl').exists() implies function.coding.code.count() = 2
          cmc-amount-ratio-or-quantity:
            human: The amount ratio extension and an amount with a non-percentage unit are mutually exclusive
            source: http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pqcmc-product-part
            severity: error
            expression: "defineVariable('system','http://unitsofmeasure.org').select(\n  modifierExtension.where(url = 'http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pq-amount-ratio')\n  .union(\n    amount.where(\n        system = %system and \n        code.memberOf('http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-non-percentage-units')\n    )\n  ).count() = 1\n)"
        mustSupport: true
        index: 97
        extensions:
          textualStrength:
            url: http://hl7.org/fhir/StructureDefinition/originalText
            type: Extension
            mustSupport: true
            index: 99
            elements:
              value:
                short: Textual Strength
                choices: [valueString]
                index: 101
              valueString: {type: string, short: Textual Strength, choiceOf: value, index: 102}
        elements:
          extension:
            index: 98
            slicing:
              rules: open
              ordered: false
              discriminator:
              - {path: url, type: value}
              min: null
              slices:
                textualStrength:
                  match: {url: null}
                  schema:
                    type: Extension
                    mustSupport: true
                    url: http://hl7.org/fhir/StructureDefinition/originalText
                    index: 99
                    elements:
                      value:
                        short: Textual Strength
                        choices: [valueString]
                        index: 101
                      valueString: {type: string, short: Textual Strength, choiceOf: value, index: 102}
          modifierExtension:
            index: 103
            slicing:
              rules: open
              ordered: false
              discriminator:
              - {path: url, type: value}
              min: null
              slices:
                amountRatio:
                  match: {url: null}
                  schema: {type: Extension, mustSupport: true, url: 'http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pq-amount-ratio', index: 104}
                  min: 0
                  max: 1
          amount:
            mustSupport: true
            array: true
            min: 1
            max: 2
            index: 105
            slicing:
              rules: open
              ordered: false
              discriminator:
              - {path: code, type: value}
              min: 1
              max: 2
              slices:
                weight:
                  match: {code: null}
                  schema:
                    mustSupport: true
                    _required: true
                    index: 106
                    elements:
                      value: {short: Product Part Ingredient Amount Numeric, mustSupport: true, index: 107}
                      unit: {short: Product Part Ingredient Amount Numeric UOM, mustSupport: true, index: 108}
                      code:
                        binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-non-percentage-units'}
                        mustSupport: true
                        index: 109
                    required: [value, unit, code]
                percent:
                  match: {code: null}
                  schema:
                    mustSupport: true
                    index: 110
                    elements:
                      value: {short: Product Part Ingredient Content Percent, mustSupport: true, index: 111}
                      unit: {short: Product Part Ingredient Content Percent UOM, mustSupport: true, index: 112}
                      code:
                        binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-percentage-units'}
                        index: 113
                    required: [value, unit]
          location:
            short: Product Part Ingredient Physical Location
            mustSupport: true
            index: 114
            elements:
              coding:
                binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-product-part-ingredient-physical-location'}
                mustSupport: true
                index: 115
              text: {mustSupport: true, index: 116}
            required: [coding]
          function:
            mustSupport: true
            array: true
            min: 1
            max: 2
            index: 117
            slicing:
              rules: closed
              description: Slice on the function coding
              discriminator:
              - {path: $this, type: value}
              min: 1
              max: 2
              slices:
                Category:
                  match: {}
                  schema:
                    binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-drug-product-component-function-category-terminology'}
                    mustSupport: true
                    _required: true
                    index: 118
                  min: 1
                  max: 1
                Function:
                  match: {}
                  schema:
                    short: Product Part Ingredient Function
                    mustSupport: true
                    binding: {strength: required, valueSet: 'http://hl7.org/fhir/us/pq-cmc-fda/ValueSet/pqcmc-excipient-function-terminology'}
                    index: 119
                  min: 0
                  max: 1
          hasIngredient: {type: CodeableReference, mustSupport: true, index: 120}
        required: [function, hasIngredient, amount]
      property:
        type: BackboneElement
        mustSupport: true
        array: true
        min: 2
        index: 121
        elements:
          type:
            mustSupport: true
            index: 122
            elements:
              text: {mustSupport: true, index: 123}
            required: [text]
        slicing:
          rules: closed
          description: Slice based on value
          discriminator:
          - {path: type.text, type: value}
          min: 2
          slices:
            PPiD:
              match:
                type: {text: Product Part Identifier}
              schema:
                short: Product Part Identifier
                mustSupport: true
                _required: true
                index: 124
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Product Part Identifier}
                        index: 125
                  value:
                    mustSupport: true
                    choices: [valueCodeableConcept]
                    index: 127
                  valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 128}
                required: [value, valueCodeableConcept]
            PPiDref:
              match:
                type: {text: Product Part Identifier Reference}
              schema:
                short: Product Part Identifier Reference
                mustSupport: true
                index: 129
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Product Part Identifier Reference}
                        index: 130
                  value:
                    mustSupport: true
                    choices: [valueCodeableConcept]
                    index: 132
                  valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 133}
                required: [value, valueCodeableConcept]
            RelsProf:
              match:
                type: {text: Product Part Release Profile}
              schema:
                short: Product Part Release Profile
                mustSupport: true
                _required: true
                index: 134
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Product Part Release Profile}
                        index: 135
                  value:
                    mustSupport: true
                    choices: [valueCodeableConcept]
                    index: 137
                  valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 138}
                required: [value, valueCodeableConcept]
            RelsMech:
              match:
                type: {text: Product Part Release Mechanism}
              schema:
                short: Product Part Release Mechanism
                mustSupport: true
                index: 139
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Product Part Release Mechanism}
                        index: 140
                  value:
                    mustSupport: true
                    choices: [valueCodeableConcept]
                    index: 142
                  valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 143}
                required: [value, valueCodeableConcept]
            CoatPurpose:
              match:
                type: {text: Coating Product Part Purpose}
              schema:
                short: Coating Product Part Purpose
                mustSupport: true
                array: true
                index: 144
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Coating Product Part Purpose}
                        index: 145
                  value:
                    mustSupport: true
                    choices: [valueCodeableConcept]
                    index: 147
                  valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 148}
                required: [value, valueCodeableConcept]
            Color:
              match:
                type: {text: Product Part Color Description}
              schema:
                short: Product Part Color Description
                mustSupport: true
                index: 149
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Product Part Color Description}
                        index: 150
                  value:
                    mustSupport: true
                    choices: [valueCodeableConcept]
                    index: 152
                  valueCodeableConcept: {type: CodeableConcept, mustSupport: true, choiceOf: value, index: 153}
                required: [value, valueCodeableConcept]
            AddInfo:
              match:
                type: {text: Product Part Additional Information}
              schema:
                short: Product Part Additional Information
                mustSupport: true
                index: 154
                elements:
                  type:
                    elements:
                      text:
                        pattern: {type: String, value: Product Part Additional Information}
                        index: 155
                  value:
                    mustSupport: true
                    choices: [valueMarkdown]
                    index: 157
                  valueMarkdown: {type: markdown, mustSupport: true, choiceOf: value, index: 158}
                required: [valueMarkdown, value]
      component: {mustSupport: true, index: 159}
    required: [constituent]
package_version: 2.0.0-ballot
class: profile
kind: resource
url: http://hl7.org/fhir/us/pq-cmc-fda/StructureDefinition/pqcmc-product-part
base: http://hl7.org/fhir/StructureDefinition/ManufacturedItemDefinition
version: 2.0.0-ballot
required: [component]