@startuml
skinparam class {
    BackgroundColor<<master-data>> LightSalmon
    BackgroundColor<<work-product-component>> Gold
    BackgroundColor<<abstract>> LightSteelBlue
    BackgroundColor<<reference-data>> Turquoise
    BackgroundColor<<Abstraction>> LightSkyBlue
    BackgroundColor<<error>> Red
    BackgroundColor<<Activity>> LightSkyBlue
    BackgroundColor<<ReferenceType>> LightSkyBlue
    BackgroundColor<<WorkProductComponent>> LightSkyBlue
    BackgroundColor<<Project>> LightSkyBlue
    BackgroundColor<<Survey>> LightSkyBlue
    BackgroundColor<<Dataset>> LightSkyBlue
    BackgroundColor<<File>> LightSkyBlue
    BackgroundColor<<FileCollection>> LightSkyBlue
    packageStyle rectangle
}
package "Risk.1.0.0 Entity" <<rectangle>>
{
class "Risk" <<master-data>>
   note top of "Risk" : Class evaluated\nin this E-R diagram
   abstract class "AbstractMaster" <<abstract>>
   abstract class "AbstractAliasNames" <<abstract>>
   class "StandardsOrganisation" <<reference-data>>
   "AbstractAliasNames" --> "1" "StandardsOrganisation" : "DefinitionOrganisationID"
   class "Organisation" <<master-data>>
   "AbstractAliasNames" --> "1" "Organisation" : "DefinitionOrganisationID"
   "Organisation" *-- "1" "AbstractMaster" : "allOf"
   "AbstractMaster" *-- "*" "AbstractAliasNames" : "NameAliases[]"
   abstract class "AbstractGeoContext" <<abstract>>
   "AbstractMaster" *-- "*" "AbstractGeoContext" : "GeoContexts[]"
   abstract class "AbstractGeoPoliticalContext" <<abstract>>
   "AbstractGeoContext" *-- "1" "AbstractGeoPoliticalContext" : "oneOf"
   class "GeoPoliticalEntity" <<master-data>>
   "AbstractGeoPoliticalContext" --> "1" "GeoPoliticalEntity" : "GeoPoliticalEntityID"
   "GeoPoliticalEntity" *-- "1" "AbstractMaster" : "allOf"
   abstract class "AbstractSpatialLocation" <<abstract>>
   "AbstractMaster" *-- "1" "AbstractSpatialLocation" : "SpatialLocation"
   class "QuantitativeAccuracyBand" <<reference-data>>
   "AbstractSpatialLocation" --> "1" "QuantitativeAccuracyBand" : "QuantitativeAccuracyBandID"
   abstract class "AbstractAnyCrsFeatureCollection" <<abstract>>
   "AbstractSpatialLocation" *-- "1" "AbstractAnyCrsFeatureCollection" : "AsIngestedCoordinates"
   class "CoordinateReferenceSystem" <<reference-data>>
   "AbstractAnyCrsFeatureCollection" --> "1" "CoordinateReferenceSystem" : "CoordinateReferenceSystemID"
   "CoordinateReferenceSystem" --> "1" "CoordinateReferenceSystem" : "HorizontalCRSID"
   "CoordinateReferenceSystem" --> "1" "CoordinateReferenceSystem" : "VerticalCRSID"
   class "CoordinateTransformation" <<reference-data>>
   "CoordinateReferenceSystem" --> "1" "CoordinateTransformation" : "TransformationID"
   "CoordinateTransformation" --> "*" "CoordinateTransformation" : "ConcatenatedTransformations[].TransformationID"
   "CoordinateTransformation" --> "1" "CoordinateReferenceSystem" : "SourceCRSID"
   "CoordinateReferenceSystem" --> "1" "CoordinateReferenceSystem" : "BaseCRSID"
   "CoordinateReferenceSystem" --> "1" "CoordinateReferenceSystem" : "SourceCRSID"
   "CoordinateReferenceSystem" --> "1" "CoordinateReferenceSystem" : "TargetCRSID"
   class "UnitOfMeasure" <<reference-data>>
   "CoordinateReferenceSystem" --> "1" "UnitOfMeasure" : "HorizontalAxisUnitID"
   class "UnitQuantity" <<reference-data>>
   "UnitOfMeasure" --> "1" "UnitQuantity" : "UnitQuantityID"
   "CoordinateReferenceSystem" --> "1" "UnitOfMeasure" : "VerticalAxisUnitID"
   abstract class "AbstractFeatureCollection" <<abstract>>
   "CoordinateReferenceSystem" *-- "1" "AbstractFeatureCollection" : "Wgs84Coordinates"
   "CoordinateTransformation" --> "1" "CoordinateReferenceSystem" : "TargetCRSID"
   "CoordinateTransformation" *-- "1" "AbstractFeatureCollection" : "Wgs84Coordinates"
   "AbstractAnyCrsFeatureCollection" --> "1" "CoordinateReferenceSystem" : "VerticalCoordinateReferenceSystemID"
   "AbstractSpatialLocation" *-- "1" "AbstractFeatureCollection" : "Wgs84Coordinates"
   "GeoPoliticalEntity" *-- "*" "AbstractAliasNames" : "GeoPoliticalEntityNameAliases[]"
   "GeoPoliticalEntity" --> "1" "GeoPoliticalEntity" : "ParentGeoPoliticalEntityID"
   abstract class "AbstractGeoBasinContext" <<abstract>>
   "AbstractGeoContext" *-- "1" "AbstractGeoBasinContext" : "oneOf"
   class "Basin" <<master-data>>
   "AbstractGeoBasinContext" --> "1" "Basin" : "BasinID"
   "Basin" *-- "1" "AbstractMaster" : "allOf"
   "Basin" *-- "*" "AbstractAliasNames" : "BasinNameAliases[]"
   "Basin" --> "1" "Basin" : "ParentBasinID"
   abstract class "AbstractGeoFieldContext" <<abstract>>
   "AbstractGeoContext" *-- "1" "AbstractGeoFieldContext" : "oneOf"
   class "Field" <<master-data>>
   "AbstractGeoFieldContext" --> "1" "Field" : "FieldID"
   "Field" *-- "1" "AbstractMaster" : "allOf"
   "Field" *-- "*" "AbstractAliasNames" : "FieldNameAliases[]"
   abstract class "AbstractGeoPlayContext" <<abstract>>
   "AbstractGeoContext" *-- "1" "AbstractGeoPlayContext" : "oneOf"
   class "Play" <<master-data>>
   "AbstractGeoPlayContext" --> "1" "Play" : "PlayID"
   "Play" *-- "1" "AbstractMaster" : "allOf"
   "Play" *-- "*" "AbstractAliasNames" : "PlayNameAliases[]"
   abstract class "AbstractGeoProspectContext" <<abstract>>
   "AbstractGeoContext" *-- "1" "AbstractGeoProspectContext" : "oneOf"
   class "Prospect" <<master-data>>
   "AbstractGeoProspectContext" --> "1" "Prospect" : "ProspectID"
   "Prospect" *-- "1" "AbstractMaster" : "allOf"
   "Prospect" *-- "*" "AbstractAliasNames" : "ProspectNameAliases[]"
   "Organisation" *-- "*" "AbstractAliasNames" : "OrganisationNameAliases[]"
   "Organisation" --> "1" "Organisation" : "ParentOrganisationID"
   abstract class "AbstractGeoContext" <<abstract>>
   abstract class "AbstractGeoPoliticalContext" <<abstract>>
   abstract class "AbstractGeoBasinContext" <<abstract>>
   abstract class "AbstractGeoFieldContext" <<abstract>>
   abstract class "AbstractGeoPlayContext" <<abstract>>
   abstract class "AbstractGeoProspectContext" <<abstract>>
   abstract class "AbstractSpatialLocation" <<abstract>>
   abstract class "AbstractAnyCrsFeatureCollection" <<abstract>>
   abstract class "AbstractFeatureCollection" <<abstract>>
   abstract class "AbstractContact" <<abstract>>
   "AbstractContact" --> "1" "Organisation" : "OrganisationID"
   "Risk" *-- "1" "AbstractMaster" : "allOf"
   class "RiskResponseStatus" <<reference-data>>
   "Risk" --> "*" "RiskResponseStatus" : "Preventions[].Status"
   "Risk" *-- "*" "AbstractContact" : "Preventions[].Responsibles[]"
   class "RiskConsequenceCategory" <<reference-data>>
   "Risk" --> "1" "RiskConsequenceCategory" : "ConsequenceCategoryID"
   class "RiskConsequenceSubCategory" <<reference-data>>
   "Risk" --> "1" "RiskConsequenceSubCategory" : "ConsequenceSubCategoryID"
   "RiskConsequenceSubCategory" --> "1" "RiskConsequenceCategory" : "RiskConsequenceCategoryID"
   class "RiskHierarchyLevel" <<reference-data>>
   "Risk" --> "1" "RiskHierarchyLevel" : "RiskHierarchyLevelID"
   class "RiskCategory" <<reference-data>>
   "Risk" --> "1" "RiskCategory" : "RiskCategoryID"
   class "RiskSubCategory" <<reference-data>>
   "Risk" --> "1" "RiskSubCategory" : "RiskSubCategoryID"
   "RiskSubCategory" --> "1" "RiskCategory" : "RiskCategoryID"
   class "RiskDiscipline" <<reference-data>>
   "Risk" --> "1" "RiskDiscipline" : "RiskDisciplineID"
   "Risk" --> "*" "RiskResponseStatus" : "Mitigations[].Status"
   "Risk" *-- "*" "AbstractContact" : "Mitigations[].Responsibles[]"
   "Risk" --> "1" "Organisation" : "AffectedPersonnel"
   "Risk" *-- "*" "AbstractContact" : "RiskResponsibles[]"
   class "PersistedCollection" <<work-product-component>>
   "Risk" --> "1" "PersistedCollection" : "RelatedRiskSetID"
   abstract class "AbstractWPCGroupType" <<abstract>>
   "PersistedCollection" *-- "1" "AbstractWPCGroupType" : "allOf"
   class "dataset/AnyObject" <<dataset>>
   "AbstractWPCGroupType" --> "*" "dataset/AnyObject" : "Datasets[]"
   class "ArtefactRole" <<reference-data>>
   "AbstractWPCGroupType" --> "*" "ArtefactRole" : "Artefacts[].RoleID"
   "AbstractWPCGroupType" --> "*" "dataset/AnyObject" : "Artefacts[].ResourceID"
   abstract class "AbstractTechnicalAssurance" <<abstract>>
   "AbstractWPCGroupType" *-- "*" "AbstractTechnicalAssurance" : "TechnicalAssurances[]"
   "AbstractTechnicalAssurance" *-- "*" "AbstractContact" : "Reviewers[]"
   abstract class "AbstractWorkProductComponent" <<abstract>>
   "PersistedCollection" *-- "1" "AbstractWorkProductComponent" : "allOf"
   "AbstractWorkProductComponent" *-- "1" "AbstractSpatialLocation" : "SpatialPoint"
   "AbstractWorkProductComponent" *-- "1" "AbstractSpatialLocation" : "SpatialArea"
   "AbstractWorkProductComponent" *-- "*" "AbstractGeoContext" : "GeoContexts[]"
   class "any-group-type/AnyObject" <<any-group-type>>
   "AbstractWorkProductComponent" --> "*" "any-group-type/AnyObject" : "LineageAssertions[].ID"
   class "master-data/AnyObject" <<master-data>>
   "PersistedCollection" --> "*" "master-data/AnyObject" : "MemberIDs[]"
   class "reference-data/AnyObject" <<reference-data>>
   "PersistedCollection" --> "*" "reference-data/AnyObject" : "MemberIDs[]"
   class "work-product-component/AnyObject" <<work-product-component>>
   "PersistedCollection" --> "*" "work-product-component/AnyObject" : "MemberIDs[]"
   class "work-product/AnyObject" <<work-product>>
   "PersistedCollection" --> "*" "work-product/AnyObject" : "MemberIDs[]"
   class "CollectionPurpose" <<reference-data>>
   "PersistedCollection" --> "1" "CollectionPurpose" : "PurposeID"
   "PersistedCollection" --> "1" "PersistedCollection" : "ParentCollectionID"
   class "Wellbore" <<master-data>>
   "Risk" --> "1" "Wellbore" : "WellboreID"
   "Wellbore" *-- "1" "AbstractMaster" : "allOf"
   abstract class "AbstractFacility" <<abstract>>
   "Wellbore" *-- "1" "AbstractFacility" : "allOf"
   abstract class "AbstractFacilityOperator" <<abstract>>
   "AbstractFacility" *-- "*" "AbstractFacilityOperator" : "FacilityOperators[]"
   "AbstractFacilityOperator" --> "1" "Organisation" : "FacilityOperatorOrganisationID"
   "AbstractFacility" --> "1" "Organisation" : "InitialOperatorID"
   "AbstractFacility" --> "1" "Organisation" : "CurrentOperatorID"
   "AbstractFacility" --> "1" "Organisation" : "DataSourceOrganisationID"
   class "OperatingEnvironment" <<reference-data>>
   "AbstractFacility" --> "1" "OperatingEnvironment" : "OperatingEnvironmentID"
   "AbstractFacility" *-- "*" "AbstractAliasNames" : "FacilityNameAliases[]"
   abstract class "AbstractFacilityState" <<abstract>>
   "AbstractFacility" *-- "*" "AbstractFacilityState" : "FacilityStates[]"
   abstract class "AbstractFacilityEvent" <<abstract>>
   "AbstractFacility" *-- "*" "AbstractFacilityEvent" : "FacilityEvents[]"
   abstract class "AbstractFacilitySpecification" <<abstract>>
   "AbstractFacility" *-- "*" "AbstractFacilitySpecification" : "FacilitySpecifications[]"
   "AbstractFacilitySpecification" --> "1" "UnitOfMeasure" : "UnitOfMeasureID"
   class "Well" <<master-data>>
   "Wellbore" --> "1" "Well" : "WellID"
   "Well" *-- "1" "AbstractMaster" : "allOf"
   "Well" *-- "1" "AbstractFacility" : "allOf"
   "Well" --> "1" "CoordinateReferenceSystem" : "DefaultVerticalCRSID"
   class "Rig" <<master-data>>
   "Well" --> "1" "Rig" : "RigID"
   "Rig" *-- "1" "AbstractMaster" : "allOf"
   "Rig" *-- "1" "AbstractFacility" : "allOf"
   "Rig" --> "1" "Organisation" : "OwnerID"
   abstract class "AbstractFacilityVerticalMeasurement" <<abstract>>
   "Well" *-- "1" "AbstractFacilityVerticalMeasurement" : "VerticalMeasurements[].allOf"
   class "VerticalMeasurementPath" <<reference-data>>
   "AbstractFacilityVerticalMeasurement" --> "1" "VerticalMeasurementPath" : "VerticalMeasurementPathID"
   class "VerticalMeasurementSource" <<reference-data>>
   "AbstractFacilityVerticalMeasurement" --> "1" "VerticalMeasurementSource" : "VerticalMeasurementSourceID"
   class "WellboreTrajectory" <<work-product-component>>
   "AbstractFacilityVerticalMeasurement" --> "1" "WellboreTrajectory" : "WellboreTVDTrajectoryID"
   "WellboreTrajectory" *-- "1" "AbstractWPCGroupType" : "allOf"
   "WellboreTrajectory" *-- "1" "AbstractWorkProductComponent" : "allOf"
   "WellboreTrajectory" --> "1" "Organisation" : "ServiceCompanyID"
   "WellboreTrajectory" --> "1" "Wellbore" : "WellboreID"
   "Wellbore" --> "1" "Rig" : "RigID"
   "Wellbore" *-- "1" "AbstractFacilityVerticalMeasurement" : "VerticalMeasurements[].allOf"
   "AbstractFacilityVerticalMeasurement" --> "1" "UnitOfMeasure" : "VerticalMeasurementUnitOfMeasureID"
   "AbstractFacilityVerticalMeasurement" --> "1" "CoordinateReferenceSystem" : "VerticalCRSID"
   "AbstractFacilityVerticalMeasurement" --> "1" "Wellbore" : "VerticalReferenceEntityID"
   abstract class "AbstractWellboreDrillingReason" <<abstract>>
   "Wellbore" *-- "*" "AbstractWellboreDrillingReason" : "DrillingReasons[]"
   "Wellbore" --> "1" "Wellbore" : "KickOffWellbore"
   "Wellbore" --> "1" "WellboreTrajectory" : "DefinitiveTrajectoryID"
   "WellboreTrajectory" --> "1" "CoordinateReferenceSystem" : "ProjectedCRSID"
   "WellboreTrajectory" --> "1" "CoordinateReferenceSystem" : "GeographicCRSID"
   "WellboreTrajectory" *-- "1" "AbstractFacilityVerticalMeasurement" : "VerticalMeasurement"
   "AbstractFacilityVerticalMeasurement" --> "1" "Well" : "VerticalReferenceEntityID"
   class "WellBusinessIntention" <<reference-data>>
   "Well" --> "1" "WellBusinessIntention" : "BusinessIntentionID"
   class "WellRole" <<reference-data>>
   "Well" --> "1" "WellRole" : "RoleID"
   class "WellCondition" <<reference-data>>
   "Well" --> "1" "WellCondition" : "ConditionID"
   class "WellBusinessIntentionOutcome" <<reference-data>>
   "Well" --> "1" "WellBusinessIntentionOutcome" : "OutcomeID"
   class "WellStatusSummary" <<reference-data>>
   "Well" --> "1" "WellStatusSummary" : "StatusSummaryID"
   class "WellFluidDirection" <<reference-data>>
   "WellStatusSummary" --> "1" "WellFluidDirection" : "FluidDirectionID"
   "WellStatusSummary" --> "1" "WellRole" : "RoleID"
   "WellStatusSummary" --> "1" "WellCondition" : "ConditionID"
   "WellStatusSummary" --> "1" "WellBusinessIntention" : "BusinessIntentionID"
   "AbstractFacilityVerticalMeasurement" --> "1" "Rig" : "VerticalReferenceEntityID"
   "WellboreTrajectory" --> "*" "UnitOfMeasure" : "AvailableTrajectoryStationProperties[].StationPropertyUnitID"
   "WellboreTrajectory" --> "1" "Organisation" : "CompanyID"
   class "GeologicalFormation" <<reference-data>>
   "Wellbore" --> "1" "GeologicalFormation" : "TargetFormation"
   "Wellbore" *-- "1" "AbstractSpatialLocation" : "ProjectedBottomHoleLocation"
   "Wellbore" *-- "1" "AbstractSpatialLocation" : "GeographicBottomHoleLocation"
   "Wellbore" --> "1" "WellBusinessIntention" : "BusinessIntentionID"
   "Wellbore" --> "1" "WellRole" : "RoleID"
   "Wellbore" --> "1" "WellCondition" : "ConditionID"
   "Wellbore" --> "1" "WellFluidDirection" : "FluidDirectionID"
   "Wellbore" --> "1" "WellBusinessIntentionOutcome" : "OutcomeID"
   "Wellbore" --> "1" "WellStatusSummary" : "StatusSummaryID"
}
package "Legend"  <<rectangle>> #EEEEEE {
   abstract class "Super Type" <<Abstraction>>
   class MasterDataEntity <<master-data>>
   class WorkProductComponent <<work-product-component>>
   abstract class AbstractEntity <<abstract>>
   "Super Type" <|-- MasterDataEntity
   MasterDataEntity *- "1" AbstractEntity : MasterDataEntity\nis composed of one\nAbstractEntity
   WorkProductComponent *- "*" AbstractEntity : WorkProductComponent\nis composed of many\nAbstractEntities
   MasterDataEntity "1" <-- WorkProductComponent : Relationship\nto one
   class UnspecifiedEntity <<any-group-type>>
   WorkProductComponent --> "*" UnspecifiedEntity: Named relationship\nto many
   class ReferenceEntity << reference-data >>
   WorkProductComponent --> "1" ReferenceEntity: Named relationship\nto one
}
@enduml