@memoarchitect/ontology 0.13.2 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
- package/examples/connected-patient-monitor/memo.package.yaml +3 -1
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
- package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
- package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/functional-logical-physical/memo.identity.yaml +28 -0
- package/examples/functional-logical-physical/memo.package.yaml +3 -1
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
- package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
- package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
- package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
- package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
- package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
- package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
- package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
- package/examples/gpca-pump/analysis/Samples/README.md +15 -9
- package/examples/gpca-pump/analysis/memo_model.py +243 -0
- package/examples/gpca-pump/memo.identity.yaml +521 -26
- package/examples/gpca-pump/memo.package.yaml +3 -1
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -357
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -90
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
- package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
- package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
- package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/multidimensional-layers/memo.package.yaml +3 -1
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
- package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
- package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
- package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/reusable-instrument/memo.package.yaml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
- package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/robot-cell-family/README.md +34 -0
- package/examples/robot-cell-family/memo.identity.yaml +142 -0
- package/examples/robot-cell-family/memo.package.yaml +7 -0
- package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
- package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
- package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
- package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
- package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
- package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
- package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
- package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
- package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
- package/examples/robot-platform/memo.package.yaml +3 -0
- package/examples/robot-platform/model/platform.sysml +15 -0
- package/examples/ros-mobile-robot/README.md +5 -4
- package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
- package/examples/ros-mobile-robot/memo.package.yaml +3 -1
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
- package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
- package/examples/software-only-medical-device/memo.package.yaml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
- package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
- package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
- package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
- package/examples/surgical-robot/memo.package.yaml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
- package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/sysml-diagram-samples/README.md +1 -0
- package/examples/sysml-diagram-samples/memo.identity.yaml +459 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +10 -13
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +11 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +63 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +25 -25
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +6 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +15 -17
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +21 -21
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +7 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +14 -14
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +16 -17
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +9 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +7 -14
- package/examples/sysml-diagram-samples/model/{catalog → methodology}/project.sysml +5 -5
- package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
- package/examples/temperature-alarm/memo.identity.yaml +6 -0
- package/examples/temperature-alarm/memo.package.yaml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
- package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/ui-screen-regions/memo.identity.yaml +33 -0
- package/examples/ui-screen-regions/memo.package.yaml +3 -1
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
- package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
- package/extensions/README.md +65 -16
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/aadl/src/aadl_extension.sysml +5 -2
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
- package/extensions/clinical/memo.package.yaml +1 -1
- package/extensions/clinical/src/clinical_extension.sysml +2 -0
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/messaging/src/messaging_extension.sysml +2 -2
- package/extensions/ros/memo.package.yaml +1 -1
- package/extensions/ros/src/ros_extension.sysml +25 -24
- package/extensions/template/memo.package.yaml +1 -1
- package/extensions/template/model/extension.sysml +25 -0
- package/memo.manifest.yaml +1 -7
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +6 -4
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/decisions/memo_decisions.sysml +9 -2
- package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
- package/src/architecture/functional/functions/memo_functions.sysml +45 -31
- package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
- package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
- package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
- package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
- package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
- package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
- package/src/architecture/operational/structure/memo_operational.sysml +5 -2
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
- package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
- package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
- package/src/architecture/variability/memo_variability.sysml +87 -0
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
- package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
- package/src/artifacts/standards/cfr_21_820.sysml +12 -24
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
- package/src/artifacts/standards/iec_60601_1.sysml +16 -32
- package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
- package/src/artifacts/standards/iec_60812.sysml +4 -8
- package/src/artifacts/standards/iec_62304.sysml +607 -47
- package/src/artifacts/standards/iec_62366_1.sysml +12 -24
- package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
- package/src/artifacts/standards/iso_13485.sysml +12 -24
- package/src/artifacts/standards/iso_14971.sysml +118 -20
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
- package/src/artifacts/templates/dhf/system/sad.md +1 -1
- package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
- package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
- package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
- package/src/assurance/safety_risk/memo_risk.sysml +39 -1
- package/src/core/common/memo_common.sysml +61 -68
- package/src/core/enumerations/memo_enumerations.sysml +93 -9
- package/src/core/relationships/memo_relationships.sysml +17 -11
- package/src/core/relationships/memo_workspace_membership.sysml +284 -0
- package/src/core/semantics/semantics.sysml +58 -0
- package/src/core/terminology/terminology.sysml +7 -0
- package/src/memo_namespaces.sysml +6 -0
- package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
- package/src/methodology/core/memo_core.sysml +85 -29
- package/src/methodology/profiles/memo_profiles.sysml +217 -61
- package/src/methodology/workflow/memo_workflow.sysml +28 -0
- package/src/rules/closure/closure_rules.sysml +250 -4
- package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
- package/src/rules/ontology/ontology_invariants.sysml +288 -48
- package/src/rules/quantitative/quantitative_rules.sysml +4 -0
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
- package/src/viewpoints/context/context_viewpoint.sysml +2 -3
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -3
- package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +0 -4
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
- package/src/viewpoints/logical/logical_viewpoint.sysml +2 -3
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
- package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
- package/src/viewpoints/physical/physical_viewpoint.sysml +2 -3
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
- package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -3
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
- package/src/viewpoints/risk/risk_viewpoint.sysml +2 -3
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
- package/src/viewpoints/software/software_viewpoint.sysml +2 -3
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
- package/src/viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml +11 -29
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
- package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
- package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
- package/templates/default/memo.package.yaml +6 -1
- package/templates/default/model/catalog/architecture/system.sysml +7 -3
- package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
- package/extensions/container/src/methodology/container_methodology.sysml +0 -19
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
- package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
- package/extensions/template/src/extension.sysml +0 -39
- package/templates/connected-device/memo.package.yaml +0 -13
- package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
- package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/connected-device/model/catalog/project.sysml +0 -30
- package/templates/connected-device/package.json +0 -8
- package/templates/connected-device/syside.toml +0 -13
- package/templates/infusion-pump/memo.package.yaml +0 -13
- package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
- package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/infusion-pump/model/catalog/project.sysml +0 -30
- package/templates/infusion-pump/package.json +0 -8
- package/templates/infusion-pump/syside.toml +0 -13
- package/templates/monitoring-device/memo.package.yaml +0 -13
- package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
- package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/monitoring-device/model/catalog/project.sysml +0 -30
- package/templates/monitoring-device/package.json +0 -8
- package/templates/monitoring-device/syside.toml +0 -13
- package/templates/samd/memo.package.yaml +0 -13
- package/templates/samd/model/catalog/architecture/system.sysml +0 -5
- package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/samd/model/catalog/project.sysml +0 -30
- package/templates/samd/package.json +0 -8
- package/templates/samd/syside.toml +0 -13
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// Which workspace a relation's far end belongs to.
|
|
2
|
+
//
|
|
3
|
+
// A workspace (the system of systems, or one system) is not declared; it is
|
|
4
|
+
// the closure of what is linked to the system (plans/memo-model-product-project-structure.md,
|
|
5
|
+
// T2). That closure needs one fact per relation: when one end is in a workspace,
|
|
6
|
+
// does the relation draw the other end in? This file states it, for every
|
|
7
|
+
// relation the registry holds and for the edges the builder synthesizes from
|
|
8
|
+
// SysML keywords (`flow`, `interface`, `succession`, `bind`, `variant`).
|
|
9
|
+
//
|
|
10
|
+
// It is a table, not an attribute on each relation def, because the relations
|
|
11
|
+
// the closure needs most are SysML keywords with no def to annotate (`allocate`,
|
|
12
|
+
// `satisfy`, `verify`, `subject`, nesting). One mechanism for all of them.
|
|
13
|
+
//
|
|
14
|
+
// sourceFollowsTarget the source is in whichever workspace the target is in
|
|
15
|
+
// (a function is in the workspace of the component it is
|
|
16
|
+
// allocated to)
|
|
17
|
+
// targetFollowsSource the target is in whichever workspace the source is in
|
|
18
|
+
// (a verification case follows the requirement it verifies)
|
|
19
|
+
// neither the relation joins elements without placing either
|
|
20
|
+
//
|
|
21
|
+
// Every row is a decision and says why. A test requires a row for every
|
|
22
|
+
// relation, so adding a relation forces the decision. The rule of thumb: the
|
|
23
|
+
// dependent end follows the anchor end (a function follows the component it is
|
|
24
|
+
// allocated to, a comment follows the element it annotates). `neither` is for
|
|
25
|
+
// peers, for shared catalogue entries, and for the elements that sit above the
|
|
26
|
+
// systems: a clinical use case that includes three system use cases, or a chain
|
|
27
|
+
// that performs functions of three systems, belongs to the system of systems and
|
|
28
|
+
// must not be pulled into each system it touches (`includesStep`, `performs`,
|
|
29
|
+
// `interface`, `flow`).
|
|
30
|
+
package memo_core_relationships_workspace_membership {
|
|
31
|
+
private import ScalarValues::*;
|
|
32
|
+
private import memo_core_common::*;
|
|
33
|
+
private import memo_core_enumerations::*;
|
|
34
|
+
|
|
35
|
+
part def WorkspaceMembershipEntry specializes MemoPart {
|
|
36
|
+
doc /* One relation and the direction it places elements in a workspace. */
|
|
37
|
+
attribute relation : String;
|
|
38
|
+
attribute direction : WorkspaceMembershipKind;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// An ADR follows the decision it records.
|
|
42
|
+
part membershipDecisionRecordedInADR : WorkspaceMembershipEntry { attribute :>> relation = "decisionRecordedInADR"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
43
|
+
// A design decision follows the element it affects.
|
|
44
|
+
part membershipDecides : WorkspaceMembershipEntry { attribute :>> relation = "decides"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
45
|
+
// A SOUP item follows the component that depends on it.
|
|
46
|
+
part membershipDependsOnSoup : WorkspaceMembershipEntry { attribute :>> relation = "dependsOnSoup"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
47
|
+
// A screen capture follows its screen.
|
|
48
|
+
part membershipCapturesScreen : WorkspaceMembershipEntry { attribute :>> relation = "capturesScreen"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
49
|
+
// A UI action follows the element that triggers it.
|
|
50
|
+
part membershipElementTriggersAction : WorkspaceMembershipEntry { attribute :>> relation = "elementTriggersAction"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
51
|
+
// An interaction flow follows the use case it serves.
|
|
52
|
+
part membershipFlowServesUseCase : WorkspaceMembershipEntry { attribute :>> relation = "flowServesUseCase"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
53
|
+
// A use error follows the element it occurs at.
|
|
54
|
+
part membershipErrorAtElement : WorkspaceMembershipEntry { attribute :>> relation = "errorAtElement"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
55
|
+
// A risk control follows the element that implements it.
|
|
56
|
+
part membershipControlImplementedBy : WorkspaceMembershipEntry { attribute :>> relation = "controlImplementedBy"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
57
|
+
// Neither: a connector joins peer components.
|
|
58
|
+
part membershipLogicalConnector : WorkspaceMembershipEntry { attribute :>> relation = "logicalConnector"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
59
|
+
// Neither: independence is a claim about two channels, not a placement.
|
|
60
|
+
part membershipIndependentOf : WorkspaceMembershipEntry { attribute :>> relation = "independentOf"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
61
|
+
// A difficulty assessment follows its task.
|
|
62
|
+
part membershipAssessesDifficulty : WorkspaceMembershipEntry { attribute :>> relation = "assessesDifficulty"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
63
|
+
// Neither: a governing rule or standard applies to many elements and is placed by none.
|
|
64
|
+
part membershipGoverns : WorkspaceMembershipEntry { attribute :>> relation = "governs"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
65
|
+
// A context participant follows the system of interest.
|
|
66
|
+
part membershipInteractsInContext : WorkspaceMembershipEntry { attribute :>> relation = "interactsInContext"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
67
|
+
// A use context follows its subject element.
|
|
68
|
+
part membershipAppliesInContext : WorkspaceMembershipEntry { attribute :>> relation = "appliesInContext"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
69
|
+
// Neither: an environment is shared by the contexts situated in it.
|
|
70
|
+
part membershipSituatedIn : WorkspaceMembershipEntry { attribute :>> relation = "situatedIn"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
71
|
+
// Neither: an intended use and its capability are operational, not any system.
|
|
72
|
+
part membershipRequiresCapability : WorkspaceMembershipEntry { attribute :>> relation = "requiresCapability"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
73
|
+
// A capability follows the use case it enables.
|
|
74
|
+
part membershipEnablesUseCase : WorkspaceMembershipEntry { attribute :>> relation = "enablesUseCase"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
75
|
+
// A need follows the use case it motivates.
|
|
76
|
+
part membershipMotivates : WorkspaceMembershipEntry { attribute :>> relation = "motivates"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
77
|
+
// A workflow follows the use case it realizes.
|
|
78
|
+
part membershipRealizesUseCase : WorkspaceMembershipEntry { attribute :>> relation = "realizesUseCase"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
79
|
+
// Neither: a transformation joins two actions.
|
|
80
|
+
part membershipTransforms : WorkspaceMembershipEntry { attribute :>> relation = "transforms"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
81
|
+
// A module follows the deployment unit it is built into.
|
|
82
|
+
part membershipBuildsInto : WorkspaceMembershipEntry { attribute :>> relation = "buildsInto"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
83
|
+
// The hardware or software follows the logical component it realizes: the logical component is
|
|
84
|
+
// what a System contains, and what implements it belongs to the same System (logical and
|
|
85
|
+
// implementation are separate structures joined by this allocation, never nested).
|
|
86
|
+
part membershipRealizedBy : WorkspaceMembershipEntry { attribute :>> relation = "realizedBy"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
87
|
+
// A deployment unit follows the node it runs on.
|
|
88
|
+
part membershipDeploysTo : WorkspaceMembershipEntry { attribute :>> relation = "deploysTo"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
89
|
+
// A runtime environment follows the node that provides it.
|
|
90
|
+
part membershipProvidesEnvironment : WorkspaceMembershipEntry { attribute :>> relation = "providesEnvironment"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
91
|
+
// A memory device follows the component bound to it.
|
|
92
|
+
part membershipMemoryBinding : WorkspaceMembershipEntry { attribute :>> relation = "memoryBinding"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
93
|
+
// A physical medium follows the exchange bound to it.
|
|
94
|
+
part membershipConnectionBinding : WorkspaceMembershipEntry { attribute :>> relation = "connectionBinding"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
95
|
+
// A flow specification follows the end-to-end flow it belongs to.
|
|
96
|
+
part membershipFlowComprisesSpec : WorkspaceMembershipEntry { attribute :>> relation = "flowComprisesSpec"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
97
|
+
// Neither: an end-to-end flow crosses deployment units; it is not part of any one.
|
|
98
|
+
part membershipFlowTraversesBinding : WorkspaceMembershipEntry { attribute :>> relation = "flowTraversesBinding"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
99
|
+
// A change request follows the element it changes.
|
|
100
|
+
part membershipChanges : WorkspaceMembershipEntry { attribute :>> relation = "changes"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
101
|
+
// Neither: a clause belongs to the standards library, not to any workspace.
|
|
102
|
+
part membershipConformsTo : WorkspaceMembershipEntry { attribute :>> relation = "conformsTo"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
103
|
+
// A controlled document follows the elements that trace to it.
|
|
104
|
+
part membershipTracesToDocument : WorkspaceMembershipEntry { attribute :>> relation = "tracesToDocument"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
105
|
+
// A threat follows the asset it threatens.
|
|
106
|
+
part membershipThreatenedBy : WorkspaceMembershipEntry { attribute :>> relation = "threatenedBy"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
107
|
+
// A vulnerability follows the threat that exploits it.
|
|
108
|
+
part membershipExploits : WorkspaceMembershipEntry { attribute :>> relation = "exploits"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
109
|
+
// An attack scenario follows the threat it realizes.
|
|
110
|
+
part membershipRealizedByScenario : WorkspaceMembershipEntry { attribute :>> relation = "realizedByScenario"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
111
|
+
// Neither: a cyber element and a safety item are each placed on their own.
|
|
112
|
+
part membershipImpactsSafety : WorkspaceMembershipEntry { attribute :>> relation = "impactsSafety"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
113
|
+
// A security property follows its asset.
|
|
114
|
+
part membershipHasSecurityProperty : WorkspaceMembershipEntry { attribute :>> relation = "hasSecurityProperty"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
115
|
+
// An attack surface follows the asset it exposes.
|
|
116
|
+
part membershipExposesAsset : WorkspaceMembershipEntry { attribute :>> relation = "exposesAsset"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
117
|
+
// Neither: a threat actor is shared by every threat attributed to it.
|
|
118
|
+
part membershipAttributedToThreatActor : WorkspaceMembershipEntry { attribute :>> relation = "attributedToThreatActor"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
119
|
+
// Neither: an attack technique is a shared catalogue entry.
|
|
120
|
+
part membershipUsesAttackTechnique : WorkspaceMembershipEntry { attribute :>> relation = "usesAttackTechnique"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
121
|
+
// Neither: an attack technique is a shared catalogue entry.
|
|
122
|
+
part membershipIncludesAttackTechnique : WorkspaceMembershipEntry { attribute :>> relation = "includesAttackTechnique"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
123
|
+
// A cyber hazard follows the threat that realizes it.
|
|
124
|
+
part membershipRealizesCyberHazard : WorkspaceMembershipEntry { attribute :>> relation = "realizesCyberHazard"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
125
|
+
// A cyber risk assessment follows the risk it assesses.
|
|
126
|
+
part membershipAssessesCyberRisk : WorkspaceMembershipEntry { attribute :>> relation = "assessesCyberRisk"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
127
|
+
// A security finding follows the vulnerability it identifies.
|
|
128
|
+
part membershipIdentifiesVulnerability : WorkspaceMembershipEntry { attribute :>> relation = "identifiesVulnerability"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
129
|
+
// A vulnerability follows the SBOM entry it affects.
|
|
130
|
+
part membershipAffectsSBOMEntry : WorkspaceMembershipEntry { attribute :>> relation = "affectsSBOMEntry"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
131
|
+
// A security finding follows the attack path it demonstrates.
|
|
132
|
+
part membershipDemonstratesAttackPath : WorkspaceMembershipEntry { attribute :>> relation = "demonstratesAttackPath"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
133
|
+
// Evidence follows the mitigation it supports.
|
|
134
|
+
part membershipSupportsMitigationEffectiveness : WorkspaceMembershipEntry { attribute :>> relation = "supportsMitigationEffectiveness"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
135
|
+
// An assumption follows the cyber element it conditions.
|
|
136
|
+
part membershipConditionsCyberElement : WorkspaceMembershipEntry { attribute :>> relation = "conditionsCyberElement"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
137
|
+
// A postmarket process follows the SBOM entry it monitors.
|
|
138
|
+
part membershipMonitorsSBOMEntry : WorkspaceMembershipEntry { attribute :>> relation = "monitorsSBOMEntry"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
139
|
+
// A use error follows the task that commits it.
|
|
140
|
+
part membershipCommitsUseError : WorkspaceMembershipEntry { attribute :>> relation = "commitsUseError"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
141
|
+
// An evaluation follows the task it evaluates.
|
|
142
|
+
part membershipEvaluatesTask : WorkspaceMembershipEntry { attribute :>> relation = "evaluatesTask"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
143
|
+
// A usability test follows the element or task it tests.
|
|
144
|
+
part membershipTestedByUsability : WorkspaceMembershipEntry { attribute :>> relation = "testedByUsability"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
145
|
+
// Neither: a need and its holder are each placed on their own.
|
|
146
|
+
part membershipHeldBy : WorkspaceMembershipEntry { attribute :>> relation = "heldBy"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
147
|
+
// An effect follows its cause.
|
|
148
|
+
part membershipCauses : WorkspaceMembershipEntry { attribute :>> relation = "causes"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
149
|
+
// A detection method follows the failure mode it detects.
|
|
150
|
+
part membershipDetectedBy : WorkspaceMembershipEntry { attribute :>> relation = "detectedBy"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
151
|
+
// Neither: fault-tree nodes are joined, not placed, by their gates.
|
|
152
|
+
part membershipInputToGate : WorkspaceMembershipEntry { attribute :>> relation = "inputToGate"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
153
|
+
// Neither: fault-tree nodes are joined, not placed, by their gates.
|
|
154
|
+
part membershipProducesEvent : WorkspaceMembershipEntry { attribute :>> relation = "producesEvent"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
155
|
+
// Neither: a cut set names events that are placed on their own.
|
|
156
|
+
part membershipContainsEvent : WorkspaceMembershipEntry { attribute :>> relation = "containsEvent"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
157
|
+
// A hazard follows the HAZOP deviation that identifies it.
|
|
158
|
+
part membershipIdentifiesHazard : WorkspaceMembershipEntry { attribute :>> relation = "identifiesHazard"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
159
|
+
// A failure mode follows its element.
|
|
160
|
+
part membershipHasFailureMode : WorkspaceMembershipEntry { attribute :>> relation = "hasFailureMode"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
161
|
+
// Neither: a trace between risk elements places neither. Both ends are risk items (`TracesRisk` joins
|
|
162
|
+
// RiskItem to RiskItem), so the relation names no design element to anchor to; a risk item belongs to the
|
|
163
|
+
// system through the relation that ties it to one (a failure mode, a control measure's allocation).
|
|
164
|
+
// Decided 2026-10-14: a risk chain with no such tie is Unassigned, which is the finding, not a gap here.
|
|
165
|
+
part membershipTracesRisk : WorkspaceMembershipEntry { attribute :>> relation = "tracesRisk"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
166
|
+
// A harm follows the hazardous situation that leads to it.
|
|
167
|
+
part membershipLeadsToHarm : WorkspaceMembershipEntry { attribute :>> relation = "leadsToHarm"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
168
|
+
// Neither: a scenario illustrates a hazard without being part of it.
|
|
169
|
+
part membershipHazardRelatedScenario : WorkspaceMembershipEntry { attribute :>> relation = "hazardRelatedScenario"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
170
|
+
// Neither: a risk matrix is shared by every risk assessed against it.
|
|
171
|
+
part membershipAssessedAgainst : WorkspaceMembershipEntry { attribute :>> relation = "assessedAgainst"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
172
|
+
// A risk estimate follows the risk element it is for.
|
|
173
|
+
part membershipEstimatedFor : WorkspaceMembershipEntry { attribute :>> relation = "estimatedFor"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
174
|
+
// Neither: a residual risk and its control are each placed already.
|
|
175
|
+
part membershipReducedBy : WorkspaceMembershipEntry { attribute :>> relation = "reducedBy"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
176
|
+
// Neither: an overall residual-risk evaluation spans the whole device.
|
|
177
|
+
part membershipEvaluatedIn : WorkspaceMembershipEntry { attribute :>> relation = "evaluatedIn"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
178
|
+
// A risk control follows the risk it mitigates.
|
|
179
|
+
part membershipMitigates : WorkspaceMembershipEntry { attribute :>> relation = "mitigates"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
180
|
+
// A surveillance finding follows the design element it feeds back to.
|
|
181
|
+
part membershipFeedsBackTo : WorkspaceMembershipEntry { attribute :>> relation = "feedsBackTo"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
182
|
+
// A test step follows its verification case.
|
|
183
|
+
part membershipPerformsStep : WorkspaceMembershipEntry { attribute :>> relation = "performsStep"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
184
|
+
// A comment follows the element it annotates.
|
|
185
|
+
part membershipCommentsOn : WorkspaceMembershipEntry { attribute :>> relation = "commentsOn"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
186
|
+
// A rationale follows the element it justifies.
|
|
187
|
+
part membershipRationaleFor : WorkspaceMembershipEntry { attribute :>> relation = "rationaleFor"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
188
|
+
// A note follows the element it annotates.
|
|
189
|
+
part membershipNotesOn : WorkspaceMembershipEntry { attribute :>> relation = "notesOn"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
190
|
+
// A need or driver follows the requirement derived from it.
|
|
191
|
+
part membershipDerivesFrom : WorkspaceMembershipEntry { attribute :>> relation = "derivesFrom"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
192
|
+
// Evidence follows the case that produced it.
|
|
193
|
+
part membershipProducesEvidence : WorkspaceMembershipEntry { attribute :>> relation = "producesEvidence"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
194
|
+
// A threat or risk follows the requirement derived from it.
|
|
195
|
+
part membershipDerivesCyberRequirement : WorkspaceMembershipEntry { attribute :>> relation = "derivesCyberRequirement"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
196
|
+
// Neither: a crossing joins a boundary and an item that are each placed on their own.
|
|
197
|
+
part membershipCrossesTrustBoundary : WorkspaceMembershipEntry { attribute :>> relation = "crossesTrustBoundary"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
198
|
+
// A validation case follows what it validates.
|
|
199
|
+
part membershipValidates : WorkspaceMembershipEntry { attribute :>> relation = "validates"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
200
|
+
// A processing node follows the assembly that hosts it.
|
|
201
|
+
part membershipHostedBy : WorkspaceMembershipEntry { attribute :>> relation = "hostedBy"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
202
|
+
// Neither: an interface definition is owned by the system of systems.
|
|
203
|
+
part membershipBindsToInterface : WorkspaceMembershipEntry { attribute :>> relation = "bindsToInterface"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
204
|
+
// A requirement follows what satisfies it.
|
|
205
|
+
part membershipSatisfiedBy : WorkspaceMembershipEntry { attribute :>> relation = "satisfiedBy"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
206
|
+
// A verification case follows what it verifies.
|
|
207
|
+
part membershipVerifiedBy : WorkspaceMembershipEntry { attribute :>> relation = "verifiedBy"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
208
|
+
// A function follows the element it runs on.
|
|
209
|
+
part membershipAllocatedTo : WorkspaceMembershipEntry { attribute :>> relation = "allocatedTo"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
210
|
+
// Neither: a chain that performs functions of three systems belongs to none of them. Decided 2026-10-14:
|
|
211
|
+
// a chain step is the system of systems' own, so `performs` places nothing in a system.
|
|
212
|
+
part membershipPerforms : WorkspaceMembershipEntry { attribute :>> relation = "performs"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
213
|
+
// Neither: a use case that includes others belongs to the system of systems; pulling it would put it in every system it includes.
|
|
214
|
+
part membershipIncludesStep : WorkspaceMembershipEntry { attribute :>> relation = "includesStep"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
215
|
+
// Neither: a bare dependency says nothing about placement.
|
|
216
|
+
part membershipDependency : WorkspaceMembershipEntry { attribute :>> relation = "dependency"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
217
|
+
// An actor follows the use cases it takes part in.
|
|
218
|
+
part membershipParticipatesIn : WorkspaceMembershipEntry { attribute :>> relation = "participatesIn"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
219
|
+
// A mode follows the component that exhibits it.
|
|
220
|
+
part membershipExhibitsMode : WorkspaceMembershipEntry { attribute :>> relation = "exhibitsMode"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
221
|
+
// Neither: a viewpoint frames concerns that no one workspace owns.
|
|
222
|
+
part membershipFramesConcern : WorkspaceMembershipEntry { attribute :>> relation = "framesConcern"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
223
|
+
// A use case follows its subject.
|
|
224
|
+
part membershipHasSubject : WorkspaceMembershipEntry { attribute :>> relation = "hasSubject"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
225
|
+
// An assumption follows the contract that makes it.
|
|
226
|
+
part membershipAssumes : WorkspaceMembershipEntry { attribute :>> relation = "assumes"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
227
|
+
// A guarantee follows the contract that makes it.
|
|
228
|
+
part membershipRequires : WorkspaceMembershipEntry { attribute :>> relation = "requires"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
229
|
+
// A child follows its parent.
|
|
230
|
+
part membershipComposes : WorkspaceMembershipEntry { attribute :>> relation = "composes"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
231
|
+
// Neither: a refinement dependency says nothing about placement.
|
|
232
|
+
part membershipRealizes : WorkspaceMembershipEntry { attribute :>> relation = "realizes"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
233
|
+
// Neither: a binding equates two features; neither is placed by it.
|
|
234
|
+
part membershipBind : WorkspaceMembershipEntry { attribute :>> relation = "bind"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
235
|
+
// Neither: a flow joins peers; the chain it belongs to is not drawn into each system it touches.
|
|
236
|
+
part membershipFlow : WorkspaceMembershipEntry { attribute :>> relation = "flow"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
237
|
+
// Neither: an interface joins two systems and belongs to the system of systems.
|
|
238
|
+
part membershipInterface : WorkspaceMembershipEntry { attribute :>> relation = "interface"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
239
|
+
// Neither: ordering between steps places neither.
|
|
240
|
+
part membershipSuccession : WorkspaceMembershipEntry { attribute :>> relation = "succession"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
241
|
+
// A variant follows its variation point.
|
|
242
|
+
part membershipVariant : WorkspaceMembershipEntry { attribute :>> relation = "variant"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
243
|
+
|
|
244
|
+
// A feature follows the variants that realize it: realized by variants of two systems it is
|
|
245
|
+
// shared, realized by none it is Unassigned (a feature nothing builds).
|
|
246
|
+
part membershipRealizesFeature : WorkspaceMembershipEntry { attribute :>> relation = "realizesFeature"; attribute :>> direction = WorkspaceMembershipKind::targetFollowsSource; }
|
|
247
|
+
// Neither: a release is a family-level record, and a feature it selects is placed by its variants.
|
|
248
|
+
part membershipSelectsFeature : WorkspaceMembershipEntry { attribute :>> relation = "selectsFeature"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
249
|
+
// A feature lists the views that demonstrate it; listing one places it in no workspace.
|
|
250
|
+
part membershipShowsView : WorkspaceMembershipEntry { attribute :>> relation = "showsView"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
251
|
+
// Neither: two features that need each other are peers, and neither is placed by the other.
|
|
252
|
+
part membershipRequiresFeature : WorkspaceMembershipEntry { attribute :>> relation = "requiresFeature"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
253
|
+
// Neither: two features that exclude each other are peers.
|
|
254
|
+
part membershipExcludesFeature : WorkspaceMembershipEntry { attribute :>> relation = "excludesFeature"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
255
|
+
// A design decision follows the option it weighs, as it follows the element it decides.
|
|
256
|
+
part membershipAlternative : WorkspaceMembershipEntry { attribute :>> relation = "alternative"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
257
|
+
// A design decision follows the option it chose.
|
|
258
|
+
part membershipSelected : WorkspaceMembershipEntry { attribute :>> relation = "selected"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
259
|
+
|
|
260
|
+
// A release record follows the item it releases: a release of a system is in that system's
|
|
261
|
+
// workspace. With `neither` every record is Unassigned, which is a finding.
|
|
262
|
+
part membershipReleaseOf : WorkspaceMembershipEntry { attribute :>> relation = "releaseOf"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
263
|
+
// Neither: a system of systems version contains system releases that belong to their systems.
|
|
264
|
+
part membershipContains : WorkspaceMembershipEntry { attribute :>> relation = "contains"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
265
|
+
// Neither: an interface revision belongs to the system of systems, and the systems that implement it are peers.
|
|
266
|
+
part membershipImplements : WorkspaceMembershipEntry { attribute :>> relation = "implements"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
267
|
+
// Neither: a verification case is placed by what it verifies, not by the release that cites it.
|
|
268
|
+
part membershipVerifiedByCase : WorkspaceMembershipEntry { attribute :>> relation = "verifiedByCase"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
269
|
+
// Neither: a change request is not placed by the release it is raised against.
|
|
270
|
+
part membershipAffectsRelease : WorkspaceMembershipEntry { attribute :>> relation = "affectsRelease"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
271
|
+
|
|
272
|
+
// A device follows the releases it covers, and they follow their items: a device that covers releases of
|
|
273
|
+
// two systems is shared, and one that covers none is Unassigned (an approval for nothing).
|
|
274
|
+
part membershipCovers : WorkspaceMembershipEntry { attribute :>> relation = "covers"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
275
|
+
|
|
276
|
+
// Neither: a step is not placed by the rule that says when it is done.
|
|
277
|
+
part membershipDoneWhen : WorkspaceMembershipEntry { attribute :>> relation = "doneWhen"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
278
|
+
|
|
279
|
+
// A project follows the releases it feeds, as a device follows what it covers: a project that feeds releases
|
|
280
|
+
// of two systems is shared, and one that feeds none is Unassigned (work that reached nothing).
|
|
281
|
+
part membershipFeeds : WorkspaceMembershipEntry { attribute :>> relation = "feeds"; attribute :>> direction = WorkspaceMembershipKind::sourceFollowsTarget; }
|
|
282
|
+
// Neither: a variant is placed by its variation point; the project that introduced it is not drawn into it.
|
|
283
|
+
part membershipIntroducedBy : WorkspaceMembershipEntry { attribute :>> relation = "introducedBy"; attribute :>> direction = WorkspaceMembershipKind::neither; }
|
|
284
|
+
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// applying these metadata defs with `@Name` — never by adding new grammar.
|
|
5
5
|
package memo_core_semantics {
|
|
6
6
|
private import ScalarValues::*;
|
|
7
|
+
private import memo_core_terminology::ExternalReference;
|
|
7
8
|
|
|
8
9
|
// Tags an element with the regulatory standard it derives from
|
|
9
10
|
// (e.g. ISO 14971, IEC 62304, ISO/IEC/IEEE 42010).
|
|
@@ -12,6 +13,63 @@ package memo_core_semantics {
|
|
|
12
13
|
attribute clause : String;
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
// An element imported from another system (a requirements tool, a PLM, a
|
|
17
|
+
// quality system, a test-result export). It annotates an element of ANY
|
|
18
|
+
// metaclass, because imported records span them: a requirement def is not a
|
|
19
|
+
// MemoPart. The source id is `externalReference.identifier`, NOT MemoIdentity's
|
|
20
|
+
// `providedId`: `providedId` is the id an external system knows an
|
|
21
|
+
// authored element by, whereas this records the external record an
|
|
22
|
+
// element was made from, with its revision.
|
|
23
|
+
//
|
|
24
|
+
// @ExternalSource {
|
|
25
|
+
// :>> externalReference { :>> sourceSystem = "..."; :>> identifier = "..."; :>> revision = "B"; }
|
|
26
|
+
// :>> sourceMastered = true;
|
|
27
|
+
// }
|
|
28
|
+
//
|
|
29
|
+
// `sourceMastered` is true when the source system owns the element, so a
|
|
30
|
+
// re-import overwrites it and a MEMO edit would be lost. `sourceWithdrawn`
|
|
31
|
+
// is set by a re-import when the record is gone from the source: the
|
|
32
|
+
// element is kept, so the links to it still compile and can be reviewed.
|
|
33
|
+
metadata def ExternalSource {
|
|
34
|
+
attribute externalReference : ExternalReference[0..1];
|
|
35
|
+
attribute sourceMastered : Boolean[0..1];
|
|
36
|
+
attribute sourceWithdrawn : Boolean[0..1];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// What an import wrote a package from, on the package itself. A source's
|
|
40
|
+
// records live in one package that the import owns and regenerates, so this
|
|
41
|
+
// is the record of where it came from and when it was last imported. A
|
|
42
|
+
// metadata usage is a package member (PackageBodyElement, SysML-textual-bnf.kebnf:124 →
|
|
43
|
+
// PackageMember :133 → DefinitionElement :184 → AnnotatingElement :74 → MetadataFeature).
|
|
44
|
+
metadata def ImportSource {
|
|
45
|
+
attribute sourceSystem : String;
|
|
46
|
+
attribute importFormat : String;
|
|
47
|
+
attribute importFile : String[0..1];
|
|
48
|
+
attribute importedAt : String;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// The revision of an imported element a MEMO-authored link was made against.
|
|
52
|
+
// A link is suspect when that revision is no longer the element's current
|
|
53
|
+
// `externalReference.revision`, or when the element is withdrawn. The status
|
|
54
|
+
// is derived, never stored; reviewing the link rewrites this baseline to the
|
|
55
|
+
// current revision. Only MEMO-authored links carry it: a link imported
|
|
56
|
+
// from the source is mastered there and is re-imported instead.
|
|
57
|
+
//
|
|
58
|
+
// Both are written in a body, because a prefix `#Name` cannot carry a value
|
|
59
|
+
// (PrefixMetadataUsage, SysML-textual-bnf.kebnf:1667). The nested
|
|
60
|
+
// `externalReference { … }` is MetadataBodyUsage (kebnf:1694), and the baseline sits in
|
|
61
|
+
// the link's own body: a `satisfy`'s RequirementBody (kebnf:1408), a
|
|
62
|
+
// connection's or a `dependency`'s DefinitionBody (kebnf:238).
|
|
63
|
+
//
|
|
64
|
+
// `sourceIdentifier` names the imported element the revision belongs to. A
|
|
65
|
+
// link between two imported elements needs it: one revision cannot be
|
|
66
|
+
// compared with two ends, so without it the link could never be cleared by
|
|
67
|
+
// review. Absent, every imported end is compared.
|
|
68
|
+
metadata def TraceBaseline {
|
|
69
|
+
attribute sourceRevision : String;
|
|
70
|
+
attribute sourceIdentifier : String[0..1];
|
|
71
|
+
}
|
|
72
|
+
|
|
15
73
|
// Marks an element as the rationale/provenance carrier for a decision.
|
|
16
74
|
metadata def Provenance {
|
|
17
75
|
attribute source : String;
|
|
@@ -26,10 +26,17 @@ package memo_core_terminology {
|
|
|
26
26
|
|
|
27
27
|
// A reference into an external registry or document (regulatory listing,
|
|
28
28
|
// standard clause, catalog page) with enough context to resolve it.
|
|
29
|
+
//
|
|
30
|
+
// For an element imported from another system (see ExternalSource) it is the
|
|
31
|
+
// record in that system: `sourceSystem` names the system, `identifier` is
|
|
32
|
+
// the id the system knows the record by, and `revision` is the revision of
|
|
33
|
+
// the record as last imported.
|
|
29
34
|
attribute def ExternalReference {
|
|
30
35
|
attribute referenceKind : String;
|
|
31
36
|
attribute identifier : String;
|
|
32
37
|
attribute uri : String;
|
|
33
38
|
attribute section : String;
|
|
39
|
+
attribute sourceSystem : String[0..1];
|
|
40
|
+
attribute revision : String[0..1];
|
|
34
41
|
}
|
|
35
42
|
}
|
|
@@ -37,6 +37,7 @@ package memo {
|
|
|
37
37
|
public import memo_assurance_safety_risk_analysis::*;
|
|
38
38
|
public import memo_assurance_safety_risk_postmarket_surveillance::*;
|
|
39
39
|
public import memo_architecture_decisions::*;
|
|
40
|
+
public import memo_architecture_variability::*;
|
|
40
41
|
|
|
41
42
|
public import memo_viewpoints_definitions::*;
|
|
42
43
|
public import memo_viewpoints_stakeholders_concerns::*;
|
|
@@ -211,6 +212,7 @@ package memo_assurance_safety_compatibility {
|
|
|
211
212
|
// the Diagram workspace, never as architecture layers.
|
|
212
213
|
package memo_namespace_architecture {
|
|
213
214
|
alias decisions for memo_namespace_architecture_decisions;
|
|
215
|
+
alias variability for memo_namespace_architecture_variability;
|
|
214
216
|
|
|
215
217
|
package operational {
|
|
216
218
|
alias structure for memo_namespace_architecture_operational;
|
|
@@ -335,6 +337,10 @@ package memo_namespace_architecture_decisions {
|
|
|
335
337
|
public import memo_architecture_decisions::*;
|
|
336
338
|
}
|
|
337
339
|
|
|
340
|
+
package memo_namespace_architecture_variability {
|
|
341
|
+
public import memo_architecture_variability::*;
|
|
342
|
+
}
|
|
343
|
+
|
|
338
344
|
package memo_namespace_architecture_functions {
|
|
339
345
|
public import memo_architecture_functional_functions::*;
|
|
340
346
|
}
|
|
@@ -7,9 +7,8 @@ package memo_methodology_archetypes {
|
|
|
7
7
|
private import memo_core_common::MemoIdentity;
|
|
8
8
|
part minimal : Archetype {
|
|
9
9
|
@MemoIdentity { :>> providedId = "ARCH-MINIMAL"; }
|
|
10
|
-
attribute :>> name = "Minimal";
|
|
11
10
|
attribute :>> label = "Minimal";
|
|
12
|
-
|
|
11
|
+
doc /* Core ontology only — requirements, hazards, basic architecture (~53 kinds) */
|
|
13
12
|
attribute :>> category = "profile";
|
|
14
13
|
attribute :>> includedLayer = "context; requirements; risk";
|
|
15
14
|
attribute :>> includedStandard = "ISO 14971";
|
|
@@ -18,9 +17,8 @@ package memo_methodology_archetypes {
|
|
|
18
17
|
|
|
19
18
|
part standardArchetype : Archetype {
|
|
20
19
|
@MemoIdentity { :>> providedId = "ARCH-STANDARD"; }
|
|
21
|
-
attribute :>> name = "Standard";
|
|
22
20
|
attribute :>> label = "Standard";
|
|
23
|
-
|
|
21
|
+
doc /* Core + risk + software + DHF — covers most Class II devices (~120 kinds) */
|
|
24
22
|
attribute :>> category = "profile";
|
|
25
23
|
attribute :>> includedLayer = "context; requirements; functions; logical_structure; software_structure; risk; assurance";
|
|
26
24
|
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820";
|
|
@@ -29,9 +27,8 @@ package memo_methodology_archetypes {
|
|
|
29
27
|
|
|
30
28
|
part full : Archetype {
|
|
31
29
|
@MemoIdentity { :>> providedId = "ARCH-FULL"; }
|
|
32
|
-
attribute :>> name = "Full";
|
|
33
30
|
attribute :>> label = "Full";
|
|
34
|
-
|
|
31
|
+
doc /* All architecture layers, standards, and extensions (~200+ kinds) */
|
|
35
32
|
attribute :>> category = "profile";
|
|
36
33
|
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; behavior; risk; arch_risk; assurance; cybersecurity; constraints";
|
|
37
34
|
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820; ISO 13485; IEC 62366; IEC 60601-1; IEC 82304-1; FDA Cybersecurity Guidance";
|
|
@@ -40,9 +37,8 @@ package memo_methodology_archetypes {
|
|
|
40
37
|
|
|
41
38
|
part samd : Archetype {
|
|
42
39
|
@MemoIdentity { :>> providedId = "ARCH-SAMD"; }
|
|
43
|
-
attribute :>> name = "SaMD";
|
|
44
40
|
attribute :>> label = "Software as Medical Device (SaMD)";
|
|
45
|
-
|
|
41
|
+
doc /* Clinical decision support, diagnostic algorithm, AI/ML tool, mobile medical app */
|
|
46
42
|
attribute :>> category = "device-class";
|
|
47
43
|
attribute :>> includedLayer = "context; requirements; functions; logical_structure; software_structure; risk; assurance; cybersecurity";
|
|
48
44
|
attribute :>> includedStandard = "ISO 14971; IEC 62304; IEC 82304-1; FDA Cybersecurity Guidance";
|
|
@@ -51,9 +47,8 @@ package memo_methodology_archetypes {
|
|
|
51
47
|
|
|
52
48
|
part connected : Archetype {
|
|
53
49
|
@MemoIdentity { :>> providedId = "ARCH-CONNECTED"; }
|
|
54
|
-
attribute :>> name = "Connected";
|
|
55
50
|
attribute :>> label = "Connected / IoT Device";
|
|
56
|
-
|
|
51
|
+
doc /* Remote monitoring, wearable, smart device with cloud connectivity and cybersecurity requirements */
|
|
57
52
|
attribute :>> category = "device-class";
|
|
58
53
|
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; risk; assurance; cybersecurity";
|
|
59
54
|
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820; FDA Cybersecurity Guidance";
|
|
@@ -62,9 +57,8 @@ package memo_methodology_archetypes {
|
|
|
62
57
|
|
|
63
58
|
part monitoring : Archetype {
|
|
64
59
|
@MemoIdentity { :>> providedId = "ARCH-MONITORING"; }
|
|
65
|
-
attribute :>> name = "Monitoring";
|
|
66
60
|
attribute :>> label = "Monitoring / Diagnostic Device";
|
|
67
|
-
|
|
61
|
+
doc /* Patient monitor, ECG, SpO2, vital signs, bedside diagnostic equipment */
|
|
68
62
|
attribute :>> category = "device-class";
|
|
69
63
|
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; risk; assurance";
|
|
70
64
|
attribute :>> includedStandard = "ISO 14971; IEC 62304; IEC 60601-1; 21 CFR 820";
|
|
@@ -73,9 +67,8 @@ package memo_methodology_archetypes {
|
|
|
73
67
|
|
|
74
68
|
part infusion_pump : Archetype {
|
|
75
69
|
@MemoIdentity { :>> providedId = "ARCH-INFUSION"; }
|
|
76
|
-
attribute :>> name = "InfusionPump";
|
|
77
70
|
attribute :>> label = "Infusion / Drug Delivery Device";
|
|
78
|
-
|
|
71
|
+
doc /* Infusion pump, syringe driver, implantable drug delivery, dosing device */
|
|
79
72
|
attribute :>> category = "device-class";
|
|
80
73
|
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; behavior; risk; arch_risk; assurance; cybersecurity";
|
|
81
74
|
attribute :>> includedStandard = "ISO 14971; IEC 62304; IEC 60601-1; 21 CFR 820; ISO 13485";
|
|
@@ -84,9 +77,8 @@ package memo_methodology_archetypes {
|
|
|
84
77
|
|
|
85
78
|
part blank : Archetype {
|
|
86
79
|
@MemoIdentity { :>> providedId = "ARCH-BLANK"; }
|
|
87
|
-
attribute :>> name = "Blank";
|
|
88
80
|
attribute :>> label = "Blank Project";
|
|
89
|
-
|
|
81
|
+
doc /* Start from scratch with a minimal SysML shell */
|
|
90
82
|
attribute :>> category = "device-class";
|
|
91
83
|
attribute :>> includedLayer = "";
|
|
92
84
|
attribute :>> includedStandard = "";
|