NIIMBL Material Procurement and Storage Ontology
type: Ontology
label: Material Procurement and Storage Ontology
abstract: This module contains terms and relations for tracking and tracing of materials. The purpose of the module is to provide support for use cases related to connecting process control to raw material procurement as well as for use cases related to regulatory compliance.
contributor: Adlane Rebai, Millipore Sigma
contributor: Ana Nikolov, OAGi
contributor: Boonserm Kulvatunyou, NIST
contributor: Cameron Gibbs, CrownPoint Technologies, LLC
contributor: Gabriela Henning, NIST
contributor: Jan Kemper, AstraZeneca
contributor: Marie-Aude Coutouly, Millipore Sigma
contributor: Melissa Weller, CrownPoint Technologies, LLC
contributor: Milos Drobnjakovic, OAGi
contributor: Stephen J. Granite, CrownPoint Technologies, LLC
contributor: Stephen Kahmann, CrownPoint Technologies, LLC
creator: NIIMBL BD-1 Ontology Group
license: http://opensource.org/licenses/MIT
imports: ReferenceOntologyCandidates
imports: Core
imports: SupplyChain
imports: Certification
version IRI: MaterialProcurementAndStorage
copyright: Copyright (c) 2022, 2023, 2024, 2025, 2026 Open Applications Group
maturity: Released

CAS registry number
type: Class
subclass of: InformationContentEntity
contributor: Merck KGaA
alternative label: CAS number
example: 64-19-7 denotes acetic acid.; 50-00-0 denotes formaldehyde
adapted from: https://www.cas.org/cas-data/cas-registry
explanatory note: 1) Governmental agencies rely on CAS Registry Numbers for substance identification in regulatory applications because they are unique, easy validated, and internationally recognized. 2) A CAS Registry Number is assigned by the Chemical Abstracts Service to uniquely identify a chemical substance within its curated registry. Each CAS number corresponds to a single substance entry, supporting consistent reference across scientific, regulatory, and industrial domains. The number follows a standard format of three digit groups separated by hyphens (e.g., 7732-18-5 for water).
first order logic axiom: CASRegistryNumber(x) → InformationContentEntity(x)
is primitive: true
natural language definition: information content entity that is a sequence of digits defined within the chemical abstracts service (CAS) registry, which uniquely denotes a type of chemical substance
primitive rationale: There are insufficient ontological constructs available to define the necessary and sufficient conditions for this class. Specifically, constructs for expressing unique identification at the type level, chemical entities and the structured scheme by which CAS Registry Numbers are created are missing.
semi formal natural language axiom: if x is a 'CAS registry number' then x is an 'information content entity'
usage note: Since CAS Registry Numbers provide unique identification at the type level, the property denotes should be used as it is not constrained to be functional. The property designates must not be used in this context, as it is functional and implies reference to a single individual, which would incorrectly constrain the CAS Registry Number to denote only one instance rather than a chemical type.

catalog number
type: Class
subclass of: InformationContentEntity
contributor: Merck KGaA
alternative label: product type identifier
example: G8270 is the catalog number of glucose created by SigmaAldrich; 23225 is the catalog number for the Pierce BCA Protein Assay Kit created by ThermoFisher;17543801 is the catalog number for MabSelect SuRe resins 25ml created by Cytiva; 17543802 is the catalog number for MabSelect SuRe resins 25ml created by Cytiva
counter example: number of a particular lot or batch
first order logic axiom: CatalogNumber(x) → InformationContentEntity(x)
is primitive: true
natural language definition: information content entity that is sequence of alphanumeric characters created by an organization to denote a type of a product they offer for sale
primitive rationale: There are insufficient ontological constructs available to define the necessary and sufficient conditions for this class. Specifically, constructs for expressing unique identification at the type level, and constructs around creation of a number by an organization are missing.
semi formal natural language axiom: if x is a 'catalog number' then x is an 'information content entity'

certificate of analysis
type: Class
subclass of: Certificate
subclass of: Restriction
  on property: BFO_0000110
  some values from: Restriction
    on property: isMeasuredValueOfAtSomeTime
    some values from: Class
      intersection of: Class
        union of: BFO_0000016
        union of: BFO_0000019
      intersection of: Restriction
        on property: BFO_0000195
        some values from: Class
subclass of: Restriction
  on property: BFO_0000110
  some values from: Class
    intersection of: RequirementSpecification
    intersection of: Restriction
      on property: requirementSatisfiedBy
      some values from: Class
        intersection of: Class
        intersection of: Restriction
subclass of: Restriction
  on property: certifies
  some values from: Class
    union of: Lot
    union of: MaterialProduct
example: Certificate of Analysis for Sodium Acetate Trihydrate (Catalog No. SA-12345, Lot 2025-05-17-01) issued by ChemStandard Inc. on 2025-07-20. The certificate reports measured values for properties such as purity (99.6%), pH (8.4), and water content (39.7%), and confirms the material meets ACS Reagent Grade specification.
adapted from: https://www.canada.ca/en/health-canada/services/drugs-health-products/compliance-enforcement/good-manufacturing-practices/guidance-documents/gmp-guidelines-0001/document.html and EU GMP Guide Part I and ASTM E3077
counter example: An internal lab notebook entry documenting the results of an experiment performed on a chemical compound; A certificate issued by a manufacturer stating that a product meets the requirements of a specific standard (e.g., ISO 9001), without including the results of any specific measurements performed on the material.
explanatory note: A Certificate of Analysis (CoA) includes numerical measurement results for one or more product attributes, in contrast to a Certificate of Conformance which may only indicate pass/fail status. A CoA also typically contains details such as the name and address of the laboratory, product specifications, testing procedures, and the signature and date of the approving authority. It is issued for a specific lot or batch and is commonly used as part of quality assurance and regulatory compliance documentation.
first order logic axiom: CertificateOfAnalysis(x) → Certificate(x) ∧ ∃q∃y((Disposition(q) ∨ Quality(q)) ∧ (MaterialProduct(y) ∨ Lot(y)) ∧ specificallyDependsOn(q, y) ∧ ∃r(RequirementSpecification(r) ∧ hasContinuantPartAtAllTimes(x, r) ∧ requirementSatisfiedBy(r, q)) ∧ ∃v(hasContinuantPartAtAllTimes(x, v) ∧ isMeasuredValueOfAtSomeTime(v, q)) ∧ certifies(x, y))
is primitive: true
natural language definition: certificate that provides quantitative results from analytical tests to verify that the attributes of a specific lot, batch, or individual product satisfy the requirement specifications stated in the certificate
primitive rationale: This class is expected to remain primitive until a treatment of ternary relations is established. In particular, it is not currently possible to assert that the material certified by the document satisfies the requirements specified within the same certificate.
semi formal natural language axiom: If x is a 'certificate of analysis', then x is a 'certificate' such that there exists a 'disposition' or 'quality' q that 'specifically depends on' a 'material product' or 'lot' y, where x 'has as continuant part at all times' some 'requirement specification' that is 'satisfied by' q, and x also 'has as continuant part at all times' some value that is the 'measured value of at some time' q, and x 'certifies' y

container identifier
type: Class
subclass of: Identifier
contributor: Merck KGaA
equivalent class: Class
  intersection of: Identifier
  intersection of: Restriction
    on property: designates
    some values from: Container
example: A QR code printed on a plastic drum used to store and transport a buffer solution; A barcode on a stainless steel transport vessel used to transfer cell culture harvest material from a fed-batch bioreactor to the primary capture chromatography system
counter example: A product catalog number that refers to a type of plastic container sold by a manufacturer; A batch number assigned to a lot of buffer solution held in a stainless steel tank. Although the identifier is associated with the material inside the container, it does not identify the container itself and is therefore not a container identifier
first order logic definition: ContainerIdentifier(x) ↔ Identifier(x) ∧ ∃y(Container(y) ∧ designates(x, y))
natural language definition: identifier that identifies a container
semi formal natural language definition: every instance of 'container identifier' is defined as exactly an instance of 'identifier' that 'designates' some 'container'

ERPCode
type: Class
subclass of: information system specific code
deprecated: true
replaced by: enterprise resource planning code

enterprise resource planning code
type: Class
subclass of: information system specific code
contributor: Merck KGaA
example: An ERP code assigned to a lot of cell culture media manufactured in a pharmaceutical company, used to track the batch through inventory, quality control, and release processes. Another ERP code may identify a specific media formulation type purchased from a supplier, while yet another code denotes the supplier itself for integration into the procurement workflow.
abbreviation: ERP code
explanatory note: 1) the erp code are typically assigned within the master data (data that does not change over time) as opposed to transactional data 2) the erp code typically used as primary key in master data within ERP
first order logic axiom: ERPCode(x) → InformationSystemSpecificCode(x)
is primitive: true
natural language definition: identifier of an entity within an enterprise resource planning (ERP) system
primitive rationale: Same primitive rationale as the primitive rationale under the information system specific code.
semi formal natural language axiom: if x is an 'ERP code', then x is an 'information system specific code'

expired material state
type: Class
subclass of: MaterialState
contributor: Merck KGaA
example: The state of a vaccine vial starting from its expiration date, during which it can no longer realize the capability to elicit an immune response, and which ends when the vial is discarded as biological waste; The state of a prepacked chromatography column beginning after it exceeds its validated number of separation cycles, during which it can no longer realize its specified separation capability, and which ends when the column is discarded
adapted from: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-211
counter example: The state of a chromatography column that temporarily fails performance specifications but is undergoing regeneration for reuse.
explanatory note: 1) The expired state ends only with the end of the material entity’s lifecycle, since the material entity cannot regain the lost capability. This state is considered terminal with respect to the function or disposition that has ceased, and no restoration to the original functional condition is possible under normal or intended circumstances. 2) A specified capability refers to a capability that the material entity is intended designed, or qualified to realize, as defined by product design, quality specification, regulatory requirement, or intended use. 3) Expired state does not correlate with the best before date which is applied to cases (typically food industry) where an items capability may only deteriorate slightly , and is thus are unlikely to become dangerous as a result. The notions sorrounding best before should be modeled separately from this term. 4) The first instant of the expired state corresponds to the point in time when the material entity is no longer capable of realizing its specified capability. This point is typically predicted or determined in advance based on stability studies, predefined shelf life, or other empirical criteria, and may be documented through quality specifications, labeling, or regulatory filings.
first order logic axiom: ExpiredState(x) → MaterialState(x)
is primitive: true
natural language definition: material state during which the participating material entity can no longer realize a particular specified capability and that temporally ends with the destruction or disposal of the material entity.
primitive rationale: There are insufficient constructs to represent the association between the state and the capability not being realizable during the duration of the state
semi formal natural language axiom: If x is an 'expired state', then x is a 'material state'.

information system specific code
type: Class
subclass of: InformationContentEntity
example: ERP code is an identifier within an ERP system
first order logic axiom: InformationSystemSpecificCode(x) → InformationContentEntity(x)
is primitive: true
natural language definition: identifier that uniquely identifies an entity or entity type within some information system that is internal to a particular organization
primitive rationale: There are insufficient constructs in the ontology to provide necessary and sufficient conditions. 'Information system' is missing as well as the constructs for denoting an entity type
semi formal natural language axiom: if x is an 'information system specific code', then x is an 'information content entity'

sublot
type: Class
subclass of: BFO_0000040
equivalent class: Class
  intersection of: BFO_0000040
  intersection of: Restriction
    on property: hasRole
    some values from: sublot role
example: Sublot of 140 antacid tablets filled from Lot #6754189 and packaged in a bottle; sublot of antacid tablets contained in a box of 12 such bottles from the same lot; sublot of tetrachloroethylene filled from Lot #PERC6227741 and contained in a 50L drum; sublot of tetrachloroethylene contained in a pallet of 15 such drums from the same lot
explanatory note: See the expanded definition under the corresponding role class. The term is formalized here as a defined class by referring to its corresponding role class and exists primarily for ontological modeling and implementation convenience.
first order logic definition: Sublot(x) ↔ MaterialEntity(x) ∧ ∃r(SublotRole(r) ∧ hasRole(x, r))
natural language definition: material entity which has a sublot role
semi formal natural language definition: every instance of 'sublot' is defined as exactly an instance of 'material entity' that 'has role' some 'sublot role'

sublot role
type: Class
subclass of: TraceableResourceUnitRole
subclass of: Restriction
  on property: roleOf
  some values from: Class
    intersection of: BFO_0000040
    intersection of: Restriction
      on property: BFO_0000176
      some values from: Lot
example: Role held by the sublot of 140 antacid tablets filled from Lot #6754189 and packaged in a bottle; role held by the sublot of tablets in a box of 12 such bottles; role held by the sublot of tetrachloroethylene in a 50L drum from Lot #PERC6227741; role held by the sublot of tetrachloroethylene in a pallet of 15 such drums.
first order logic axiom: SublotRole(x) → TraceableResourceUnitRole(x) ∧ ∃y(MaterialEntity(y) ∧ roleOf(x, y) ∧ ∃l(Lot(l) ∧ continuantPartOfAtSomeTime(y, l)))
is primitive: true
natural language definition: traceable resource unit role held by a material entity when it is part of a lot and is uniquely identifiable within that lot
primitive rationale: The required constructs for creation of a formal definition are not available in this release. In particular the pattern for unique identification within a lot needs to be developed.
semi formal natural language axiom: If x is a 'sublot role', then x is a 'traceable resource unit role' and is the 'role of' some 'material entity' that is the 'continuant part of at some time' some 'lot

has material expiration time instant value expression
type: ObjectProperty
sub property of: isSubjectOf
domain: BFO_0000040
range: TemporalInstantValueExpression
example: A vaccine vial will expire on "2025-12-31T00:00:00";A thawed cell culture medium will expire at "2025-07-26 14:00"; A chromatography resin will expire on "April 1, 2027";A prefilled syringe will expire in "week 48 of 2025"
adapted from: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-211
explanatory note: This relation links a material entity to the time point at which it first enters its expired state, as represented by a temporal instant value expression. The value is typically derived from predictive data such as shelf life, stability testing, or regulatory limits, and reflects the anticipated loss of the entity’s specified capability.
natural language definition: relation from a material entity to a temporal value expression that is the value expression of the first instant of an expiration state of that material entity
usage note: By being a link to a time instant value expression, this property imposes no further constraint on the formatting of the value. For example, it may be represented as an xsd:dateTime, ISO 8601 string, or other temporal literal format, depending on implementation needs. The time instant value expression itself must be linked to the actual value through an appropriate data property (e.g., has date-time instant value in case of xsd:dateTime).

has material first use time instant value expression
type: ObjectProperty
sub property of: isSubjectOf
contributor: Merck KGaA
domain: BFO_0000040
range: TemporalInstantValueExpression
example: chromatography resin was first used on "March 10, 2025";reagent bottle was first opened on "2025-01-01"; stainless steel bioreactor was first used in production on "2022-11-15"
adapted from: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-211
natural language definition: relation from a material entity to a temporal value expression that is the value expression of the first instant of the material use process of the material entity
usage note: By being a link to a time instant value expression, this property imposes no further constraint on the formatting of the value. For example, it may be represented as an xsd:dateTime, ISO 8601 string, or other temporal literal format, depending on implementation needs. The time instant value expression itself must be linked to the actual value through an appropriate data property (e.g., has date-time instant value in case of xsd:dateTime).

has material production time instant value expression
type: ObjectProperty
sub property of: isSubjectOf
contributor: Merck KGaA
domain: Class
  union of: MaterialProduct
  union of: ProcessIntermediateMaterial
range: TemporalInstantValueExpression
example: batch of formulated drug product was produced on "2025-06-30"; vial of purified monoclonal antibody was produced on "2025-01-10"; lot of process intermediate was generated as the result of upstream processing on "2025-07-20 at 14:00"
adapted from: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-211
natural language definition: relation from a material product or process intermediate material to a temporal instant value expression that is the value expression of the first instant of the temporal region during which the material product or process intermediate material exists
usage note: By being a link to a time instant value expression, this property imposes no further constraint on the formatting of the value. For example, it may be represented as an xsd:dateTime, ISO 8601 string, or other temporal literal format, depending on implementation needs. The time instant value expression itself must be linked to the actual value through an appropriate data property (e.g., has date-time instant value in case of xsd:dateTime).

has storage start time instant value expression
type: ObjectProperty
sub property of: isSubjectOf
contributor: Merck KGaA
domain: BFO_0000040
range: TemporalInstantValueExpression
example: A vial of vaccine was placed into refrigerated storage on "2025-01-15";A batch of purified protein was transferred to a -80°C freezer on "2025-07-01 at 16:00"; A buffer solution was moved to temperature-controlled storage on "2025-05-30"
adapted from: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-211
natural language definition: relation from a material entity to a temporal value expression that is the value expression of the first instant of a storage process in which the material entity participates
usage note: By being a link to a time instant value expression, this property imposes no further constraint on the formatting of the value. For example, it may be represented as an xsd:dateTime, ISO 8601 string, or other temporal literal format, depending on implementation needs. The time instant value expression itself must be linked to the actual value through an appropriate data property (e.g., has date-time instant value in case of xsd:dateTime).