glam/schemas/20251121/linkml/modules/classes/StorageCondition.yaml
2025-12-03 17:38:46 +01:00

643 lines
22 KiB
YAML

# StorageCondition Class - Observed condition reports for storage facilities
#
# Represents ACTUAL observed conditions (what IS), which may differ
# from StorageConditionPolicy (what SHOULD BE).
#
# Based on PiCo observation pattern: observations from multiple sources
# can report different conditions for the same storage facility.
#
# Generation date: 2025-11-29
#
id: https://nde.nl/ontology/hc/class/StorageCondition
name: storage_condition_class
title: Storage Condition Observation Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
premis: http://www.loc.gov/premis/rdf/v3/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
pico: https://personsincontext.org/model#
default_prefix: hc
imports:
- linkml:types
- ./Storage
- ./TimeSpan
- ../enums/StorageConditionStatusEnum
- ../enums/StorageObserverTypeEnum
- ../slots/supersedes
- ../slots/confidence_score
- ../slots/observation_date
classes:
StorageCondition:
class_uri: prov:Activity
description: |
An observation-based report of actual storage conditions.
**DEFINITION**:
StorageCondition represents a specific assessment or observation of
a storage facility's actual state at a point in time. Multiple
observations can exist for the same storage facility, from different
observers with potentially different findings.
**CRITICAL DISTINCTION**:
- **StorageCondition** (THIS CLASS): What IS - actual observed state
- **StorageConditionPolicy**: What SHOULD BE - designed/intended conditions
The gap between policy and observed condition is often significant
and represents a critical transparency concern.
**PiCo OBSERVATION PATTERN**:
Following the Person in Context (PiCo) ontology pattern, observations
are NOT assertions of truth but reports from specific observers with
their own perspectives and potential biases.
A journalist discovering white ants in a storage facility creates an
observation with:
- observer_type: JOURNALIST
- condition_status: CRITICAL
- category: PEST_CONTROL
- observation_notes: "White ants discovered in main document depot"
This observation exists ALONGSIDE any official self-assessment, without
requiring reconciliation of conflicting reports.
**PROV-O ALIGNMENT**:
`prov:Activity` - "An activity is something that occurs over a period
of time and acts upon or with entities; it may include consuming,
processing, transforming, modifying, relocating, using, or generating
entities."
The observation activity:
- `prov:wasAssociatedWith` → observer (prov:Agent)
- `prov:used` → storage facility being observed
- `prov:atTime` → observation timestamp
- `prov:generated` → this condition report
**RELATIONSHIP TO STORAGE CLASS**:
```
Storage
├── storage_conditions[] → StorageCondition (THIS CLASS)
│ ├── Observation 1: Internal staff, 2024-06 → GOOD
│ ├── Observation 2: Journalist, 2024-09 → CRITICAL (pest issue)
│ └── Observation 3: Government inspector, 2024-10 → POOR
└── condition_policy → StorageConditionPolicy (what SHOULD be)
```
**USE CASES**:
1. **Regular Internal Assessment**:
- observer_type: INTERNAL_STAFF
- is_official_assessment: true
- category_assessments: Temperature=GOOD, Humidity=GOOD
2. **Investigative Journalism**:
- observer_type: JOURNALIST
- is_official_assessment: false
- observation_notes: "Photographs show water damage in basement storage"
- evidence_documentation: [URLs to published article]
3. **Government Inspection**:
- observer_type: GOVERNMENT_INSPECTOR
- is_official_assessment: true (regulatory authority)
- compliance_status: "NON_COMPLIANT"
- remediation_required: true
4. **Automated Monitoring**:
- observer_type: AUTOMATED_SYSTEM
- category: TEMPERATURE
- measurement_value: "23.5°C"
- threshold_exceeded: true
exact_mappings:
- prov:Activity
close_mappings:
- crm:E7_Activity
- premis:Event
- pico:Observation
slots:
- condition_id
- refers_to_storage
- observation_date
- observation_period
- observer_type
- observer_name
- observer_affiliation
- is_official_assessment
- overall_status
- category_assessments
- observation_notes
- evidence_documentation
- measurement_data
- compliance_status
- remediation_required
- remediation_notes
- follow_up_date
- confidence_score
- supersedes
slot_usage:
condition_id:
slot_uri: dcterms:identifier
description: |
Unique identifier for this condition observation.
Format: URI following NDE Heritage Custodian ontology conventions.
range: uriorcurie
required: true
identifier: true
examples:
- value: "https://nde.nl/ontology/hc/condition/rijksmuseum-depot-2024-q2"
description: "Q2 2024 assessment of Rijksmuseum depot"
refers_to_storage:
slot_uri: prov:used
description: |
The storage facility being assessed.
Links this observation to the Storage instance it describes.
PROV-O: used indicates entities used in activity.
range: Storage
required: true
examples:
- value: "https://nde.nl/ontology/hc/storage/rijksmuseum-depot-amersfoort"
observation_date:
slot_uri: prov:atTime
description: |
Date when this observation was made.
For automated systems: timestamp of data collection.
For human observers: date of site visit or assessment.
PROV-O: atTime specifies instant at which activity occurred.
range: date
required: true
examples:
- value: "2024-09-15"
observation_period:
slot_uri: crm:P4_has_time-span
description: |
Time period covered by this observation if not a point-in-time.
Use for assessments covering a period (e.g., quarterly review)
rather than a single site visit.
CIDOC-CRM: P4_has_time-span for temporal extent.
range: TimeSpan
examples:
- value: "Q2 2024 (April-June)"
observer_type:
slot_uri: prov:wasAssociatedWith
description: |
Type of observer who made this assessment.
**CRITICAL**: Determines how to interpret the observation.
- INTERNAL_STAFF may underreport issues
- JOURNALIST may have discovered unreported problems
- GOVERNMENT_INSPECTOR has regulatory authority
- WHISTLEBLOWER may have insider knowledge
PROV-O: wasAssociatedWith links activity to responsible agent.
range: StorageObserverTypeEnum
required: true
examples:
- value: "JOURNALIST"
- value: "INTERNAL_STAFF"
- value: "GOVERNMENT_INSPECTOR"
observer_name:
slot_uri: prov:wasAssociatedWith
description: |
Name of the individual or team who made this observation.
May be anonymized for whistleblowers or confidential sources.
range: string
examples:
- value: "Maria van der Berg"
- value: "Collections Management Team"
- value: "Anonymous (confidential source)"
observer_affiliation:
slot_uri: prov:actedOnBehalfOf
description: |
Organization the observer represents or works for.
For journalists: newspaper/media outlet.
For inspectors: government agency.
For consultants: consulting firm.
PROV-O: actedOnBehalfOf indicates delegated authority.
range: string
examples:
- value: "De Volkskrant"
- value: "Rijksdienst voor het Cultureel Erfgoed"
- value: "ABC Conservation Consultants"
is_official_assessment:
slot_uri: prov:wasAttributedTo
description: |
Whether this is an official institutional assessment or external observation.
TRUE = Official self-assessment or authorized inspection.
FALSE = External/investigative observation not sanctioned by institution.
**Important for interpretation**: Official assessments represent what
the institution claims; external observations may contradict this.
range: boolean
required: true
examples:
- value: true
description: "Official annual condition survey"
- value: false
description: "Journalist investigation"
overall_status:
slot_uri: premis:hasOutcome
description: |
Overall condition status based on this observation.
Aggregate assessment across all categories observed.
Individual category assessments may vary.
PREMIS: hasOutcome for preservation action results.
range: StorageConditionStatusEnum
required: true
examples:
- value: "CRITICAL"
description: "White ant infestation discovered"
- value: "GOOD"
description: "All parameters within acceptable ranges"
category_assessments:
slot_uri: schema:hasPart
description: |
Individual condition assessments for specific categories.
Each entry maps a StorageConditionCategoryEnum to a status and notes.
Not all categories need to be assessed in every observation.
Structure: List of category assessment objects with:
- category: StorageConditionCategoryEnum value
- status: StorageConditionStatusEnum value
- measurement: Optional measurement value
- notes: Optional category-specific notes
range: StorageConditionCategoryAssessment
multivalued: true
inlined_as_list: true
examples:
- value:
- category: "TEMPERATURE"
status: "GOOD"
measurement: "19.5°C"
- category: "PEST_CONTROL"
status: "CRITICAL"
notes: "White ants discovered in main depot area"
observation_notes:
slot_uri: dcterms:description
description: |
Free-text notes documenting the observation.
Include:
- What was observed
- Context of the observation
- Specific concerns or findings
- Recommendations if any
range: string
examples:
- value: >-
During routine inspection, white ant damage discovered in south
wall of main document storage. Approximately 50 linear meters
of shelving affected. Evidence of active infestation - live
insects observed. Immediate treatment recommended.
evidence_documentation:
slot_uri: prov:wasInfluencedBy
description: |
Links to supporting evidence for this observation.
May include:
- Photographs of conditions
- Published articles (for journalism)
- Official inspection reports
- Sensor data exports
- Video documentation
PROV-O: wasInfluencedBy for supporting sources.
range: uriorcurie
multivalued: true
examples:
- value:
- "https://www.volkskrant.nl/archive-pest-investigation-2024"
- "https://archive.org/evidence/photos/depot-damage-20240915.zip"
measurement_data:
slot_uri: schema:value
description: |
Structured measurement data from sensors or instruments.
JSON-LD compatible structure for environmental readings:
- temperature_celsius
- humidity_percent
- lux_level
- particulate_count
- etc.
range: string
examples:
- value: '{"temperature_celsius": 23.5, "humidity_percent": 58, "threshold_exceeded": true}'
compliance_status:
slot_uri: dcterms:conformsTo
description: |
Compliance status with referenced standards.
Values: COMPLIANT, NON_COMPLIANT, PARTIALLY_COMPLIANT, NOT_ASSESSED
Dublin Core: conformsTo for standards compliance.
range: string
examples:
- value: "NON_COMPLIANT"
description: "Does not meet EN 16893:2018 requirements"
remediation_required:
slot_uri: schema:potentialAction
description: |
Whether remediation action is required based on this observation.
TRUE = Issues found that require corrective action.
FALSE = No immediate action needed.
range: boolean
examples:
- value: true
description: "Pest treatment required immediately"
remediation_notes:
slot_uri: schema:description
description: |
Notes on required or recommended remediation actions.
range: string
examples:
- value: >-
1. Engage licensed pest control immediately
2. Quarantine affected materials
3. Survey adjacent storage areas
4. Install additional monitoring traps
5. Report to Heritage Inspectorate within 48 hours
follow_up_date:
slot_uri: schema:scheduledTime
description: |
Scheduled date for follow-up assessment.
May be set for:
- Verification of remediation
- Regular monitoring cycle
- Compliance re-inspection
range: date
examples:
- value: "2024-12-01"
description: "Post-treatment verification inspection"
confidence_score:
slot_uri: prov:value
description: |
Confidence score (0.0-1.0) in the accuracy of this observation.
Factors affecting confidence:
- Observer expertise (professionals higher)
- Access level (full access higher)
- Evidence quality (documentation higher)
- Measurement calibration (verified higher)
range: float
minimum_value: 0.0
maximum_value: 1.0
examples:
- value: 0.95
description: "Government inspector with full access"
- value: 0.75
description: "Journalist with limited access"
supersedes:
slot_uri: prov:wasRevisionOf
description: |
Previous condition observation that this one supersedes or updates.
Use when a new observation corrects or updates a previous one
from the same observer type.
PROV-O: wasRevisionOf for updated versions.
range: StorageCondition
examples:
- value: "https://nde.nl/ontology/hc/condition/rijksmuseum-depot-2024-q1"
comments:
- "Observations are NOT assertions of truth - they are reports from specific observers"
- "Multiple observations may exist for same storage with conflicting findings"
- "Gap between observed conditions and policy conditions is critical transparency metric"
- "External observations (journalists, researchers) may reveal unreported issues"
- "Official assessments vs external investigations treated equally as data"
- "Automated system observations provide objective measurements but require calibration"
see_also:
- "http://www.w3.org/ns/prov#Activity"
- "https://www.loc.gov/premis/rdf/v3/Event"
examples:
- value:
condition_id: "https://nde.nl/ontology/hc/condition/depot-pest-investigation-2024"
refers_to_storage: "https://nde.nl/ontology/hc/storage/national-archive-depot-b"
observation_date: "2024-09-15"
observer_type: "JOURNALIST"
observer_name: "Jan de Vries"
observer_affiliation: "De Volkskrant"
is_official_assessment: false
overall_status: "CRITICAL"
category_assessments:
- category: "PEST_CONTROL"
status: "CRITICAL"
notes: "White ants discovered in main document depot"
observation_notes: >-
Investigative visit revealed active termite infestation in south
section of Document Depot B. Approximately 50 linear meters of
historical documents at risk. Institution was unaware of extent
of damage until contacted for comment.
evidence_documentation:
- "https://www.volkskrant.nl/archive-pest-crisis-2024"
remediation_required: true
confidence_score: 0.85
description: "Journalist investigation discovering unreported pest infestation"
- value:
condition_id: "https://nde.nl/ontology/hc/condition/rijksmuseum-q2-2024"
refers_to_storage: "https://nde.nl/ontology/hc/storage/rijksmuseum-depot-amersfoort"
observation_date: "2024-06-30"
observation_period:
start_date: "2024-04-01"
end_date: "2024-06-30"
observer_type: "INTERNAL_STAFF"
observer_name: "Collections Management Team"
observer_affiliation: "Rijksmuseum"
is_official_assessment: true
overall_status: "GOOD"
category_assessments:
- category: "TEMPERATURE"
status: "EXCELLENT"
measurement: "18.5°C average"
- category: "HUMIDITY"
status: "GOOD"
measurement: "48% RH average"
- category: "PEST_CONTROL"
status: "GOOD"
notes: "No pest activity detected in monitoring traps"
- category: "SECURITY"
status: "EXCELLENT"
observation_notes: "Quarterly facilities review. All parameters within policy ranges."
compliance_status: "COMPLIANT"
remediation_required: false
confidence_score: 0.90
description: "Official quarterly internal assessment"
# Helper class for category-level assessments
StorageConditionCategoryAssessment:
class_uri: hc:StorageConditionCategoryAssessment
description: |
Individual category assessment within a StorageCondition observation.
Allows granular reporting of different condition categories with
independent status levels.
slots:
- assessment_category
- category_status
- category_measurement
- category_notes
slot_usage:
assessment_category:
slot_uri: dcterms:type
description: Category being assessed (from StorageConditionCategoryEnum)
range: string
required: true
category_status:
slot_uri: premis:hasOutcome
description: Status for this specific category
range: StorageConditionStatusEnum
required: true
category_measurement:
slot_uri: schema:value
description: Measurement value if applicable (e.g., "19.5°C", "48% RH")
range: string
category_notes:
slot_uri: dcterms:description
description: Notes specific to this category assessment
range: string
# Slot definitions
slots:
condition_id:
description: Unique identifier for condition observation
range: uriorcurie
refers_to_storage:
description: Storage facility being assessed
range: Storage
# NOTE: observation_date imported from global slot ../slots/observation_date.yaml
observation_period:
description: Time period covered by observation
range: TimeSpan
observer_type:
description: Type of observer (from enum)
range: StorageObserverTypeEnum
observer_name:
description: Name of observer
range: string
observer_affiliation:
description: Observer's organizational affiliation
range: string
is_official_assessment:
description: Whether this is an official institutional assessment
range: boolean
overall_status:
description: Overall condition status
range: StorageConditionStatusEnum
category_assessments:
description: Individual category assessments
range: StorageConditionCategoryAssessment
multivalued: true
observation_notes:
description: Free-text observation notes
range: string
evidence_documentation:
description: Links to supporting evidence
range: uriorcurie
multivalued: true
measurement_data:
description: Structured measurement data
range: string
compliance_status:
description: Compliance status with standards
range: string
remediation_required:
description: Whether remediation is required
range: boolean
remediation_notes:
description: Notes on required remediation
range: string
follow_up_date:
description: Scheduled follow-up date
range: date
# NOTE: confidence_score imported from global slot ../slots/confidence_score.yaml
# Category assessment slots
assessment_category:
description: Category being assessed
range: string
category_status:
description: Status for this category
range: StorageConditionStatusEnum
category_measurement:
description: Measurement value for category
range: string
category_notes:
description: Notes for this category
range: string