@memoarchitect/ontology 0.12.1 → 0.15.0
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 -358
- 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 -91
- 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 +675 -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 +7 -29
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
- 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 +27 -36
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
- package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
- 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 +51 -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 +4 -5
- package/src/viewpoints/context/context_viewpoint.sysml +4 -5
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
- package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
- package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
- 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 +4 -5
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
- package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
- package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
- 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 +4 -5
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
- package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
- package/src/viewpoints/software/software_viewpoint.sysml +4 -5
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
- package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
- package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
- 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/project.sysml +0 -26
- 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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// Scenario foundation. A scenario is a selected path through a
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
1
|
+
// Scenario foundation. A scenario is a selected path through a workflow,
|
|
2
|
+
// classified by its kind (nominal or alternate). It is nested in the workflow
|
|
3
|
+
// it is a path through, so a nominal scenario and its alternates are siblings
|
|
4
|
+
// there. An actual or hypothetical execution is a native usage of the
|
|
5
|
+
// scenario, not a separate element.
|
|
6
6
|
package memo_architecture_operational_scenarios {
|
|
7
7
|
private import Metaobjects::SemanticMetadata;
|
|
8
8
|
private import ScalarValues::*;
|
|
@@ -32,9 +32,10 @@ package memo_architecture_operational_scenarios {
|
|
|
32
32
|
attribute postCondition : String;
|
|
33
33
|
attribute pathSummary : String;
|
|
34
34
|
|
|
35
|
-
// The workflow this scenario belongs to is
|
|
36
|
-
// (HasScenario
|
|
37
|
-
//
|
|
35
|
+
// The workflow this scenario belongs to is the one it is nested in
|
|
36
|
+
// (a `HasScenario` relation was removed for that reason); a
|
|
37
|
+
// nominal/alternate pair are scenarios of the same workflow,
|
|
38
|
+
// distinguished by scenarioKind — no baseScenario back-ref.
|
|
38
39
|
// Actors are derived from `perform` on the nested steps, not listed.
|
|
39
40
|
ref useContext : UseContext[0..1];
|
|
40
41
|
// threat scenario
|
|
@@ -11,8 +11,11 @@ package memo_architecture_operational_structure {
|
|
|
11
11
|
// purpose and the root of the operational spine. A MemoMission, because
|
|
12
12
|
// "mission" has no medical-device meaning — intended use is what a device
|
|
13
13
|
// exists to do. Was in memo_assurance_requirements; moved here as the
|
|
14
|
-
// operational-world root.
|
|
15
|
-
|
|
14
|
+
// operational-world root. It is a `requirement def`: the intended use is
|
|
15
|
+
// the top obligation the device's design inputs derive from, and ISO 14971
|
|
16
|
+
// 5.2 asks for it to be documented as the starting point of risk analysis.
|
|
17
|
+
// It was a `part def`, which made it a structural thing.
|
|
18
|
+
requirement def IntendedUse :> MemoMission {
|
|
16
19
|
attribute indication : String;
|
|
17
20
|
attribute contraindication : String;
|
|
18
21
|
attribute patientPopulation : String;
|
|
@@ -35,17 +35,24 @@ package memo_architecture_operational_use_cases {
|
|
|
35
35
|
attribute postCondition : String;
|
|
36
36
|
// clinical / service / manufacturing / development
|
|
37
37
|
attribute useCaseKind : UseCaseKind;
|
|
38
|
+
// A system use case that no clinical use case includes is a finding (rule CR-ONT-086)
|
|
39
|
+
// unless it says so: set this for a use case that is deliberately carried out alone,
|
|
40
|
+
// such as a service procedure. It is not a second kind of use case.
|
|
41
|
+
attribute standalone : Boolean;
|
|
38
42
|
|
|
39
43
|
// The device or system under consideration supports the goal. Native
|
|
40
|
-
// `subject`, not `ref` (R10-S6):
|
|
41
|
-
// before
|
|
42
|
-
//
|
|
44
|
+
// `subject`, not `ref` (R10-S6): a use case needs an explicit subject
|
|
45
|
+
// before it can declare `actor` (the subject parameter comes first),
|
|
46
|
+
// and "the device/system under consideration"
|
|
43
47
|
// is exactly what a case's subject means, so this was a duplicate
|
|
44
48
|
// waiting to surface once `actor` needed a subject to attach to.
|
|
45
49
|
subject supportingSystem : MemoPart[0..1];
|
|
46
|
-
ref primaryUser : User[0..1];
|
|
47
|
-
ref supportingActors : OperationalParticipant[0..*];
|
|
48
50
|
ref useContext : UseContext[0..1];
|
|
51
|
+
// Who takes part is native `actor` (`actor <role> = <participant>;`),
|
|
52
|
+
// inherited from `UseCases::UseCase`. `primaryUser` and
|
|
53
|
+
// `supportingActors` refs stood here as a second way of saying the
|
|
54
|
+
// same thing and were removed; which actor initiates is carried by
|
|
55
|
+
// the actor's name, as the note on `Initiates` below says.
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
connection def Motivates :> MemoRelationship {
|
|
@@ -65,7 +72,8 @@ package memo_architecture_operational_use_cases {
|
|
|
65
72
|
// named on the use case, not in a relationship type. Write
|
|
66
73
|
// `actor <role> = <existingElement>;` inside the use case instead.
|
|
67
74
|
// UML use-case decomposition (`Includes`) is native `include use case` /
|
|
68
|
-
// `include` (R10-S6); write that instead of a connection here.
|
|
69
|
-
// has
|
|
70
|
-
//
|
|
75
|
+
// `include` (R10-S6); write that instead of a connection here. SysML v2
|
|
76
|
+
// has no use-case `extend` (the textual BNF defines IncludeUseCaseUsage
|
|
77
|
+
// and nothing for extend), and MEMO does not add one: an optional path
|
|
78
|
+
// through a use case is an alternate scenario, not a second use case.
|
|
71
79
|
}
|
|
@@ -20,7 +20,7 @@ package memo_architecture_realization_deployment {
|
|
|
20
20
|
private import memo_core_relationships::*;
|
|
21
21
|
private import memo_architecture_implementation_software_structure::*;
|
|
22
22
|
private import memo_architecture_implementation_software_runtime::*;
|
|
23
|
-
private import
|
|
23
|
+
private import memo_architecture_implementation_hardware_common::PhysicalComponent;
|
|
24
24
|
private import memo_architecture_realization_physical::*;
|
|
25
25
|
private import memo_architecture_functional_functions::*;
|
|
26
26
|
private import memo_architecture_logical_structure::*;
|
|
@@ -52,6 +52,24 @@ package memo_architecture_realization_deployment {
|
|
|
52
52
|
:> annotatedElement : SysML::AllocationDefinition;
|
|
53
53
|
:> annotatedElement : SysML::AllocationUsage;
|
|
54
54
|
:>> baseType = buildsIntoLinks meta SysML::Usage;
|
|
55
|
+
}
|
|
56
|
+
// A logical component is REALIZED BY the hardware or software that implements it. The
|
|
57
|
+
// logical and the implementation architectures are separate structures and stay
|
|
58
|
+
// separate: nothing is nested (a logical component never contains software or a
|
|
59
|
+
// physical part, CR-ONT-078); the two are joined by an allocation, as the language
|
|
60
|
+
// joins structures across domains (SysML-textual-bnf.kebnf:792-801, AllocationDefinition and AllocationUsage) and as SYSMOD
|
|
61
|
+
// does with its `logical2product` allocation, logical architecture to product
|
|
62
|
+
// architecture, logical as the source. The target is any part, as HostedBy's ends are:
|
|
63
|
+
// a hardware assembly and a software system are both MemoParts.
|
|
64
|
+
allocation def RealizedBy :> MemoRelationship, Allocations::Allocation {
|
|
65
|
+
end logicalComponent : LogicalComponent :>> source;
|
|
66
|
+
end realization : MemoPart :>> target;
|
|
67
|
+
}
|
|
68
|
+
abstract connection realizedByLinks : RealizedBy[*];
|
|
69
|
+
metadata def <realizedBy> RealizedByMetadata :> SemanticMetadata {
|
|
70
|
+
:> annotatedElement : SysML::AllocationDefinition;
|
|
71
|
+
:> annotatedElement : SysML::AllocationUsage;
|
|
72
|
+
:>> baseType = realizedByLinks meta SysML::Usage;
|
|
55
73
|
}
|
|
56
74
|
// Every usage of this already writes `allocation x : DeploysTo allocate a
|
|
57
75
|
// to b;` -- the declaration was the only part still saying `connection`.
|
|
@@ -92,7 +110,7 @@ package memo_architecture_realization_deployment {
|
|
|
92
110
|
// language says so. The double specialization keeps MEMO's identification
|
|
93
111
|
// core from `MemoRelationship` while adding the standard's allocation
|
|
94
112
|
// semantics; both root on `Connections::BinaryConnection`, so this is a
|
|
95
|
-
// diamond and not a conflict. Verified
|
|
113
|
+
// diamond and not a conflict. Verified with a SysML v2 compiler against a
|
|
96
114
|
// negative control (a non-existent supertype is reported), so the clean
|
|
97
115
|
// result is the checker agreeing rather than the checker skipping.
|
|
98
116
|
|
|
@@ -111,17 +129,19 @@ package memo_architecture_realization_deployment {
|
|
|
111
129
|
:>> baseType = memoryBindingLinks meta SysML::Usage;
|
|
112
130
|
}
|
|
113
131
|
|
|
114
|
-
// AADL `actual_connection_binding`. Which physical
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// the
|
|
118
|
-
//
|
|
119
|
-
// to
|
|
132
|
+
// AADL `actual_connection_binding`. Which physical thing carries an
|
|
133
|
+
// interface: a network medium under a component exchange, a cable or
|
|
134
|
+
// harness under a hardware `Interface`, a connector, a tube. The source is
|
|
135
|
+
// the interface usage rather than a link, because the interface is the
|
|
136
|
+
// ELEMENT that owns the budget (§19.3) and a link instance is not
|
|
137
|
+
// something the graph can bind to; it is also exactly where the latency
|
|
138
|
+
// the medium contributes has to be accounted. Ends are the two bases
|
|
139
|
+
// (MemoInterface, PhysicalComponent) so one binding serves every layer.
|
|
120
140
|
allocation def ConnectionBinding :> MemoRelationship, Allocations::Allocation {
|
|
121
141
|
attribute allocatedBandwidth : String;
|
|
122
142
|
attribute mediumLatencyMs : Real;
|
|
123
|
-
end boundExchange :
|
|
124
|
-
end medium :
|
|
143
|
+
end boundExchange : MemoInterface :>> source;
|
|
144
|
+
end medium : PhysicalComponent :>> target;
|
|
125
145
|
}
|
|
126
146
|
abstract connection connectionBindingLinks : ConnectionBinding[*];
|
|
127
147
|
metadata def <connectionBinding> ConnectionBindingMetadata :> SemanticMetadata {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The realization (deployment and physical) layer as one package.
|
|
2
|
+
//
|
|
3
|
+
// A layer is a namespace of packages: every package whose name begins
|
|
4
|
+
// `memo_architecture_realization_`. This package publicly imports each of them, so
|
|
5
|
+
// `public import memo_architecture_realization::*;` in a methodology's package selects the whole
|
|
6
|
+
// layer, and the same import in any package makes the layer's definitions
|
|
7
|
+
// visible. It declares nothing of its own. test/package.test.mjs holds the list
|
|
8
|
+
// to exactly the packages in the namespace, so a package added to the layer is
|
|
9
|
+
// selected with it.
|
|
10
|
+
package memo_architecture_realization {
|
|
11
|
+
public import memo_architecture_realization_deployment::*;
|
|
12
|
+
public import memo_architecture_realization_physical::*;
|
|
13
|
+
}
|
|
@@ -6,6 +6,7 @@ package memo_architecture_realization_physical {
|
|
|
6
6
|
|
|
7
7
|
private import memo_core_common::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_architecture_logical_interfaces::Interface;
|
|
9
10
|
// For PhysicalElement: a processing node and a memory device ARE physical
|
|
10
11
|
// things — a board and a chip — and specialized MemoPart directly only
|
|
11
12
|
// because the physical family had no shared root until CR-ONT-079 needed
|
|
@@ -58,4 +59,64 @@ package memo_architecture_realization_physical {
|
|
|
58
59
|
attribute portCategory : PortCategoryKind;
|
|
59
60
|
attribute connectorType : String;
|
|
60
61
|
}
|
|
62
|
+
|
|
63
|
+
// ─── Connecting hardware ─────────────────────────────────────────────
|
|
64
|
+
//
|
|
65
|
+
// Hardware is parts with ports. A port on one part is joined to a port on
|
|
66
|
+
// another by a PhysicalInterface, and what crosses it is a PhysicalFlow.
|
|
67
|
+
// They are the hardware-layer counterparts of LogicalInterface and
|
|
68
|
+
// LogicalExchange, and of SoftwareInterface: the same shape, but each
|
|
69
|
+
// states only what its layer can, so a hardware interface is never
|
|
70
|
+
// described in terms of a software API or a logical content kind.
|
|
71
|
+
//
|
|
72
|
+
// The interface is the CONTRACT (an `interface` usage joins two specific
|
|
73
|
+
// ports; the def says what kind of link it is). The plug, cable, header
|
|
74
|
+
// or tube that physically carries it is a part of its own (Cable,
|
|
75
|
+
// PhysicalConnectorPart, ...), related to the interface by a
|
|
76
|
+
// ConnectionBinding allocation. PhysicalPort.connectorType names what a
|
|
77
|
+
// port exposes.
|
|
78
|
+
//
|
|
79
|
+
// part pump {
|
|
80
|
+
// out port pMotorDrive : PhysicalPort { out item drive; }
|
|
81
|
+
// }
|
|
82
|
+
// part driver {
|
|
83
|
+
// in port pMotorIn : PhysicalPort { in item drive; }
|
|
84
|
+
// }
|
|
85
|
+
// part motorHarness : Cable;
|
|
86
|
+
// interface cnMotorDrive : PhysicalInterface
|
|
87
|
+
// connect pump.pMotorDrive to driver.pMotorIn {
|
|
88
|
+
// attribute :>> signalingKind = SignalingKind::pulse;
|
|
89
|
+
// attribute :>> nominalVoltageV = 3.3;
|
|
90
|
+
// }
|
|
91
|
+
// flow flMotorDrive : PhysicalFlow
|
|
92
|
+
// from pump.pMotorDrive.drive to driver.pMotorIn.drive {
|
|
93
|
+
// attribute :>> quantity = "step pulses";
|
|
94
|
+
// }
|
|
95
|
+
// allocation cbMotorDrive : ConnectionBinding
|
|
96
|
+
// allocate cnMotorDrive to motorHarness;
|
|
97
|
+
interface def PhysicalInterface specializes Interface {
|
|
98
|
+
// analog, digital, discrete, pulse or power transfer. Fill in the
|
|
99
|
+
// descriptors that kind needs: a range for analog, a bit rate and
|
|
100
|
+
// protocol for digital, a frequency for pulse.
|
|
101
|
+
attribute signalingKind : SignalingKind;
|
|
102
|
+
attribute mediumKind : PhysicalMediumKind;
|
|
103
|
+
attribute electricalStandard : String;
|
|
104
|
+
attribute nominalVoltageV : Real[0..1];
|
|
105
|
+
attribute nominalCurrentA : Real[0..1];
|
|
106
|
+
attribute bitRateBps : String;
|
|
107
|
+
attribute signalRange : String;
|
|
108
|
+
attribute connectorStandard : String;
|
|
109
|
+
end sourcePort : PhysicalPort;
|
|
110
|
+
end targetPort : PhysicalPort;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// What crosses a physical interface, as a quantity: a voltage, a
|
|
114
|
+
// current, a pressure, a force, a flow of fluid.
|
|
115
|
+
abstract flow def PhysicalFlow {
|
|
116
|
+
attribute quantity : String;
|
|
117
|
+
attribute unit : String;
|
|
118
|
+
attribute nominalValue : String;
|
|
119
|
+
attribute minValue : String;
|
|
120
|
+
attribute maxValue : String;
|
|
121
|
+
}
|
|
61
122
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Features and design options.
|
|
2
|
+
//
|
|
3
|
+
// A design option is native SysML: a `variation` (a definition or a usage whose
|
|
4
|
+
// body holds only `variant` members; SysML-textual-bnf.kebnf:224 for the definition
|
|
5
|
+
// prefix, :282 for the usage prefix, :254-256 the variant member). MEMO adds
|
|
6
|
+
// nothing to how one is written. What SysML has no word for is WHY a variant exists
|
|
7
|
+
// and WHICH ones go together: that is a product feature.
|
|
8
|
+
//
|
|
9
|
+
// part featEuMarket : ProductFeature; // the market EU releases target
|
|
10
|
+
// variation part energyOutput : LogicalComponent {
|
|
11
|
+
// variant part euOutput : LogicalComponent; // a variant, for the EU
|
|
12
|
+
// variant part usOutput : LogicalComponent;
|
|
13
|
+
// }
|
|
14
|
+
// #RealizesFeature dependency from energyOutput::euOutput to featEuMarket;
|
|
15
|
+
// connection : RequiresFeature connect ... // one feature needs another
|
|
16
|
+
//
|
|
17
|
+
// A release selects features (`#SelectsFeature`), and through them the variants it
|
|
18
|
+
// contains; a rule counts one variant per variation point from that. A feature is
|
|
19
|
+
// a usage like any other part, named by the family, and a platform package may
|
|
20
|
+
// declare the family's features once.
|
|
21
|
+
//
|
|
22
|
+
// A variation point cannot own attributes: SysIDE rejects an owned feature in a
|
|
23
|
+
// variation (`usage-variation-owned-feature-membership`). Identity metadata is an
|
|
24
|
+
// annotation and is allowed (measured on E0, 2026-10-13); `status` and anything else
|
|
25
|
+
// a variation point would carry goes on its variants.
|
|
26
|
+
package memo_architecture_variability {
|
|
27
|
+
private import Metaobjects::SemanticMetadata;
|
|
28
|
+
private import ScalarValues::*;
|
|
29
|
+
|
|
30
|
+
private import memo_core_common::*;
|
|
31
|
+
private import memo_core_enumerations::*;
|
|
32
|
+
private import memo_core_relationships::*;
|
|
33
|
+
|
|
34
|
+
// Named ProductFeature, not Feature: `Feature` is the KerML metaclass, and the
|
|
35
|
+
// builder falls back to a metaclass name for a kind it cannot place.
|
|
36
|
+
//
|
|
37
|
+
// A feature's page is what is said about it: its prose is the element's `doc`, and
|
|
38
|
+
// the analysis is these four statements, each optional until someone has an answer.
|
|
39
|
+
// What the feature shows is curated: `#ShowsView` below names its views.
|
|
40
|
+
part def ProductFeature specializes MemoPart {
|
|
41
|
+
/** What the feature gives the people who use the product, in a sentence or two. */
|
|
42
|
+
attribute valueProposition : String[0..1];
|
|
43
|
+
/** Who it is for: the roles or segments that gain from it. */
|
|
44
|
+
attribute targetUsers : String[0..1];
|
|
45
|
+
/** How anyone will know it worked: the measure, and the level that counts as success. */
|
|
46
|
+
attribute successMeasure : String[0..1];
|
|
47
|
+
/** What has to hold for the value to be real, and what is not yet known. */
|
|
48
|
+
attribute assumptions : String[0..1];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// `Requires` is taken by the native `require` relation, so these say what they join.
|
|
52
|
+
connection def RequiresFeature :> MemoRelationship {
|
|
53
|
+
doc /* Selecting the source feature needs the target feature selected too. */
|
|
54
|
+
end dependentFeature : ProductFeature :>> source;
|
|
55
|
+
end requiredFeature : ProductFeature :>> target;
|
|
56
|
+
}
|
|
57
|
+
abstract connection requiresFeatureLinks : RequiresFeature[*];
|
|
58
|
+
metadata def <requiresFeature> RequiresFeatureMetadata :> SemanticMetadata {
|
|
59
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
60
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
61
|
+
:>> baseType = requiresFeatureLinks meta SysML::Usage;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
connection def ExcludesFeature :> MemoRelationship {
|
|
65
|
+
doc /* The two features cannot be selected together. Symmetric: either end may be written first. */
|
|
66
|
+
end firstFeature : ProductFeature :>> source;
|
|
67
|
+
end secondFeature : ProductFeature :>> target;
|
|
68
|
+
}
|
|
69
|
+
abstract connection excludesFeatureLinks : ExcludesFeature[*];
|
|
70
|
+
metadata def <excludesFeature> ExcludesFeatureMetadata :> SemanticMetadata {
|
|
71
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
72
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
73
|
+
:>> baseType = excludesFeatureLinks meta SysML::Usage;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Typed dependencies (memo_core_relationships::MemoTypedDependency): the variant
|
|
77
|
+
// is nested in its variation, so it is a dependency's client by qualified name.
|
|
78
|
+
metadata def RealizesFeature :> MemoTypedDependency {
|
|
79
|
+
doc /* `#RealizesFeature dependency from <variant> to <feature>;` The variant exists to give the family this feature. */
|
|
80
|
+
}
|
|
81
|
+
metadata def SelectsFeature :> MemoTypedDependency {
|
|
82
|
+
doc /* `#SelectsFeature dependency from <release> to <feature>, <feature>;` The release contains the variants that realize these features. */
|
|
83
|
+
}
|
|
84
|
+
metadata def ShowsView :> MemoTypedDependency {
|
|
85
|
+
doc /* `#ShowsView dependency from <feature> to <view>, <view>;` The views the feature's viewpoint lists: chosen for what the feature demonstrates, not found by a rule. */
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -10,15 +10,107 @@ package memo_artifacts_configuration_management {
|
|
|
10
10
|
attribute changeType : ChangeTypeKind;
|
|
11
11
|
attribute impactAssessment : String;
|
|
12
12
|
attribute approvalStatus : String;
|
|
13
|
-
|
|
13
|
+
// The release a change affects is `#AffectsRelease dependency from <request> to <record>;`
|
|
14
|
+
// (below), not a string naming a baseline.
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
part def ConfigurationItem :> MemoPart {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
// No version and no baseline: both belong to a release of the item, not to the item
|
|
19
|
+
// (plan O2). A `ReleaseRecord` whose `#ReleaseOf` is this item carries them.
|
|
19
20
|
attribute controlLevel : String;
|
|
20
21
|
}
|
|
21
22
|
|
|
23
|
+
// A release record is one release of one item: rev D and rev E of a part, or its EU and its US
|
|
24
|
+
// release, are separate records, each with its own part number and revision (plan O2). The
|
|
25
|
+
// definition of the item is held once and carries no revision. The record is an element with a
|
|
26
|
+
// status (inherited from MemoPart: proposed, draft, ... released), so a release moves through
|
|
27
|
+
// the lifecycle the way any element does.
|
|
28
|
+
//
|
|
29
|
+
// part relPumpD : ReleaseRecord {
|
|
30
|
+
// :>> partNumber = "PN-1001"; :>> revision = "D"; :>> modelCommit = "9f2c...";
|
|
31
|
+
// }
|
|
32
|
+
// #ReleaseOf dependency from relPumpD to PumpSystem;
|
|
33
|
+
//
|
|
34
|
+
// `softwareVersion` and `codeTag` are for an item that is software; a record of anything else
|
|
35
|
+
// leaves them out. The links are typed dependencies, because a record's item is a definition and
|
|
36
|
+
// a `ref` cannot point at one: a Dependency's client and supplier are any element
|
|
37
|
+
// (SysML-textual-bnf.kebnf:51-59), and the metadata prefix names the kind (`:52`).
|
|
38
|
+
//
|
|
39
|
+
// A release of a system of systems is the same record with a system of systems for its item. It
|
|
40
|
+
// `#Contains` the records of the system releases it pins, and is the validated configuration:
|
|
41
|
+
// `#VerifiedByCase` names the verification cases that validated it.
|
|
42
|
+
part def ReleaseRecord :> MemoPart {
|
|
43
|
+
attribute partNumber : String[1];
|
|
44
|
+
attribute revision : String[1];
|
|
45
|
+
attribute softwareVersion : String[0..1];
|
|
46
|
+
attribute codeTag : String[0..1];
|
|
47
|
+
// The commit of the model this release was built from. A record cannot hold the hash of the
|
|
48
|
+
// commit that adds it, so it is written after the commit it pins and is always found in a
|
|
49
|
+
// folder that is not itself pinned (`sos/`).
|
|
50
|
+
attribute modelCommit : String[1];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
metadata def ReleaseOf :> MemoTypedDependency {
|
|
54
|
+
doc /* `#ReleaseOf dependency from <record> to <item definition>;` The record is a release of this item. One record, one item. */
|
|
55
|
+
}
|
|
56
|
+
metadata def Contains :> MemoTypedDependency {
|
|
57
|
+
doc /* `#Contains dependency from <record> to <record>, <record>;` The release pins these releases: a system of systems version its systems, a system release its components. */
|
|
58
|
+
}
|
|
59
|
+
metadata def Implements :> MemoTypedDependency {
|
|
60
|
+
doc /* `#Implements dependency from <record> to <interface record>;` The release implements this revision of an interface. */
|
|
61
|
+
}
|
|
62
|
+
metadata def VerifiedByCase :> MemoTypedDependency {
|
|
63
|
+
doc /* `#VerifiedByCase dependency from <record> to <verification case>;` The case that verified, or for a system of systems version validated, this release. `verifiedBy` is taken by the native relation from a requirement to its case. */
|
|
64
|
+
}
|
|
65
|
+
metadata def AffectsRelease :> MemoTypedDependency {
|
|
66
|
+
doc /* `#AffectsRelease dependency from <change request> to <record>;` The release a change request is raised against. */
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// A regulated device is one approval in one jurisdiction (plan O6): the thing a regulator is asked to
|
|
70
|
+
// clear. It is not an item and not a release: it COVERS the system releases the approval names, so two
|
|
71
|
+
// markets can ship different releases of one system, each with its own design history and risk file.
|
|
72
|
+
//
|
|
73
|
+
// part deviceFda : RegulatedDevice {
|
|
74
|
+
// attribute :>> jurisdiction = RegulatoryRegimeKind::FDA_510k;
|
|
75
|
+
// attribute :>> submissionId = "K123456";
|
|
76
|
+
// }
|
|
77
|
+
// #Covers dependency from deviceFda to relPumpD;
|
|
78
|
+
//
|
|
79
|
+
// The jurisdiction is a `RegulatoryRegimeKind`, the same enum the standards library and the document
|
|
80
|
+
// templates (`required_for`) are written against, so a device selects the standards it must meet and the
|
|
81
|
+
// documents it must have. It replaces `ModelMethodBinding.regulatoryRegime`, which stated one regime set
|
|
82
|
+
// for a whole model and is read only when the model declares no device.
|
|
83
|
+
//
|
|
84
|
+
// `IntendedUseOf` and `UsedWith` (plan O6) are not declared: the plan names no end for either, and an end
|
|
85
|
+
// is not invented to fill a name. `Covers` is the link every part of M5 needs.
|
|
86
|
+
part def RegulatedDevice :> MemoPart {
|
|
87
|
+
attribute jurisdiction : RegulatoryRegimeKind[1];
|
|
88
|
+
attribute submissionId : String[0..1];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
metadata def Covers :> MemoTypedDependency {
|
|
92
|
+
doc /* `#Covers dependency from <device>, to <record>, <record>;` The approval covers these system releases. */
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// A project is a change set in an iteration (plan O7): the work that produces releases. It holds a link to
|
|
96
|
+
// where the work is tracked and nothing else; the merge request is the approval. It FEEDS the release records
|
|
97
|
+
// it contributes to, and a variant records the project that introduced it, so "which work gave us this
|
|
98
|
+
// option, and which releases did it reach" is two links.
|
|
99
|
+
//
|
|
100
|
+
// part prjIrrigatedTip : Project { attribute :>> trackerLink = "https://tracker.example/PRJ-12"; }
|
|
101
|
+
// #Feeds dependency from prjIrrigatedTip to relGeneratorEu, relGeneratorUs;
|
|
102
|
+
// #IntroducedBy dependency from outputStage::usOutput to prjIrrigatedTip;
|
|
103
|
+
part def Project :> MemoPart {
|
|
104
|
+
attribute trackerLink : String[0..1];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
metadata def Feeds :> MemoTypedDependency {
|
|
108
|
+
doc /* `#Feeds dependency from <project> to <record>, <record>;` The project's work is in these releases. */
|
|
109
|
+
}
|
|
110
|
+
metadata def IntroducedBy :> MemoTypedDependency {
|
|
111
|
+
doc /* `#IntroducedBy dependency from <variant> to <project>;` The project that introduced this variant. */
|
|
112
|
+
}
|
|
113
|
+
|
|
22
114
|
// ── Relations owned by this package ─────────────────────────────
|
|
23
115
|
// Moved out of memo_core_relationships: their ends are typed against
|
|
24
116
|
// types declared here, and core must not depend on a domain package.
|
|
@@ -4,9 +4,11 @@ package memo_artifacts_core {
|
|
|
4
4
|
private import memo_core_common::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// An artifact is a part: a document, a standard, a clause of one. A
|
|
8
|
+
// relationship end typed MemoArtifact (TracesToDocument) takes all of them.
|
|
9
|
+
abstract part def MemoArtifact :> MemoPart;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
part def ControlledArtifact :> MemoArtifact {
|
|
10
12
|
attribute version : String;
|
|
11
13
|
attribute artifactKind : ArtifactKind;
|
|
12
14
|
attribute owner : String;
|
|
@@ -17,84 +17,72 @@ package memo_artifacts_standards_cfr_21_820 {
|
|
|
17
17
|
|
|
18
18
|
private import memo_core_common::*;
|
|
19
19
|
private import memo_core_common::MemoIdentity;
|
|
20
|
-
|
|
20
|
+
part cfr21Part820 : RegulatoryStandard {
|
|
21
21
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820"; }
|
|
22
|
-
attribute :>> name = "CFR21Part820";
|
|
23
22
|
attribute :>> designation = "21 CFR Part 820";
|
|
24
23
|
attribute :>> issuer = "FDA";
|
|
25
24
|
attribute :>> appliesToRegime = (RegulatoryRegimeKind::FDA_510k, RegulatoryRegimeKind::FDA_PMA);
|
|
26
|
-
|
|
25
|
+
part cfr820_30 : StandardClause {
|
|
27
26
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30"; }
|
|
28
|
-
attribute :>> name = "CFR820_30";
|
|
29
27
|
attribute :>> clauseNumber = "820.30";
|
|
30
28
|
attribute :>> title = "design controls";
|
|
31
29
|
attribute :>> normativeStrength = "shall";
|
|
32
|
-
|
|
30
|
+
part cfr820_30a : StandardClause {
|
|
33
31
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-A"; }
|
|
34
|
-
attribute :>> name = "CFR820_30a";
|
|
35
32
|
attribute :>> clauseNumber = "820.30(a)";
|
|
36
33
|
attribute :>> title = "general design control applicability";
|
|
37
34
|
attribute :>> normativeStrength = "shall";
|
|
38
35
|
}
|
|
39
|
-
|
|
36
|
+
part cfr820_30b : StandardClause {
|
|
40
37
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-B"; }
|
|
41
|
-
attribute :>> name = "CFR820_30b";
|
|
42
38
|
attribute :>> clauseNumber = "820.30(b)";
|
|
43
39
|
attribute :>> title = "design and development planning";
|
|
44
40
|
attribute :>> normativeStrength = "shall";
|
|
45
41
|
}
|
|
46
|
-
|
|
42
|
+
part cfr820_30c : StandardClause {
|
|
47
43
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-C"; }
|
|
48
|
-
attribute :>> name = "CFR820_30c";
|
|
49
44
|
attribute :>> clauseNumber = "820.30(c)";
|
|
50
45
|
attribute :>> title = "design input";
|
|
51
46
|
attribute :>> normativeStrength = "shall";
|
|
52
47
|
}
|
|
53
|
-
|
|
48
|
+
part cfr820_30d : StandardClause {
|
|
54
49
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-D"; }
|
|
55
|
-
attribute :>> name = "CFR820_30d";
|
|
56
50
|
attribute :>> clauseNumber = "820.30(d)";
|
|
57
51
|
attribute :>> title = "design output";
|
|
58
52
|
attribute :>> normativeStrength = "shall";
|
|
59
53
|
}
|
|
60
|
-
|
|
54
|
+
part cfr820_30e : StandardClause {
|
|
61
55
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-E"; }
|
|
62
|
-
attribute :>> name = "CFR820_30e";
|
|
63
56
|
attribute :>> clauseNumber = "820.30(e)";
|
|
64
57
|
attribute :>> title = "design review";
|
|
65
58
|
attribute :>> normativeStrength = "shall";
|
|
66
59
|
}
|
|
67
|
-
|
|
60
|
+
part cfr820_30f : StandardClause {
|
|
68
61
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-F"; }
|
|
69
|
-
attribute :>> name = "CFR820_30f";
|
|
70
62
|
attribute :>> clauseNumber = "820.30(f)";
|
|
71
63
|
attribute :>> title = "design verification";
|
|
72
64
|
attribute :>> normativeStrength = "shall";
|
|
73
65
|
}
|
|
74
|
-
|
|
66
|
+
part cfr820_30g : StandardClause {
|
|
75
67
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-G"; }
|
|
76
|
-
attribute :>> name = "CFR820_30g";
|
|
77
68
|
attribute :>> clauseNumber = "820.30(g)";
|
|
78
69
|
attribute :>> title = "design validation";
|
|
79
70
|
attribute :>> normativeStrength = "shall";
|
|
80
71
|
}
|
|
81
|
-
|
|
72
|
+
part cfr820_30h : StandardClause {
|
|
82
73
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-H"; }
|
|
83
|
-
attribute :>> name = "CFR820_30h";
|
|
84
74
|
attribute :>> clauseNumber = "820.30(h)";
|
|
85
75
|
attribute :>> title = "design transfer";
|
|
86
76
|
attribute :>> normativeStrength = "shall";
|
|
87
77
|
}
|
|
88
|
-
|
|
78
|
+
part cfr820_30i : StandardClause {
|
|
89
79
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-I"; }
|
|
90
|
-
attribute :>> name = "CFR820_30i";
|
|
91
80
|
attribute :>> clauseNumber = "820.30(i)";
|
|
92
81
|
attribute :>> title = "design changes";
|
|
93
82
|
attribute :>> normativeStrength = "shall";
|
|
94
83
|
}
|
|
95
|
-
|
|
84
|
+
part cfr820_30j : StandardClause {
|
|
96
85
|
@MemoIdentity { :>> providedId = "STD-21-CFR-820-30-J"; }
|
|
97
|
-
attribute :>> name = "CFR820_30j";
|
|
98
86
|
attribute :>> clauseNumber = "820.30(j)";
|
|
99
87
|
attribute :>> title = "design history file";
|
|
100
88
|
attribute :>> normativeStrength = "shall";
|
|
@@ -20,51 +20,44 @@ package memo_artifacts_standards_fda_cybersecurity_2023 {
|
|
|
20
20
|
|
|
21
21
|
private import memo_core_common::*;
|
|
22
22
|
private import memo_core_common::MemoIdentity;
|
|
23
|
-
|
|
23
|
+
part fdaCybersecurity2023 : RegulatoryStandard {
|
|
24
24
|
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023"; }
|
|
25
|
-
attribute :>> name = "FDACybersecurity2023";
|
|
26
25
|
attribute :>> designation = "FDA Cybersecurity Guidance 2023";
|
|
27
26
|
attribute :>> edition = "2023-09";
|
|
28
27
|
attribute :>> issuer = "FDA";
|
|
29
28
|
attribute :>> appliesToRegime = (RegulatoryRegimeKind::FDA_510k, RegulatoryRegimeKind::FDA_PMA);
|
|
30
|
-
|
|
31
|
-
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-IV"; }
|
|
32
|
-
attribute :>> name = "FDACyberSectionIV";
|
|
29
|
+
part fdaCyberSection4 : StandardClause {
|
|
30
|
+
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-IV"; :>> label = "FDACyberSectionIV"; }
|
|
33
31
|
attribute :>> clauseNumber = "IV";
|
|
34
32
|
attribute :>> title = "general cybersecurity principles";
|
|
35
33
|
attribute :>> normativeStrength = "informative";
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V"; }
|
|
39
|
-
attribute :>> name = "FDACyberSectionV";
|
|
35
|
+
part fdaCyberSection5 : StandardClause {
|
|
36
|
+
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V"; :>> label = "FDACyberSectionV"; }
|
|
40
37
|
attribute :>> clauseNumber = "V";
|
|
41
38
|
attribute :>> title = "secure product development framework";
|
|
42
39
|
attribute :>> normativeStrength = "informative";
|
|
43
|
-
|
|
44
|
-
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-A"; }
|
|
45
|
-
attribute :>> name = "FDACyberSectionVA";
|
|
40
|
+
part fdaCyberSection5A : StandardClause {
|
|
41
|
+
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-A"; :>> label = "FDACyberSectionVA"; }
|
|
46
42
|
attribute :>> clauseNumber = "V.A";
|
|
47
43
|
attribute :>> title = "security risk management";
|
|
48
44
|
attribute :>> normativeStrength = "informative";
|
|
49
45
|
}
|
|
50
|
-
|
|
51
|
-
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-B"; }
|
|
52
|
-
attribute :>> name = "FDACyberSectionVB";
|
|
46
|
+
part fdaCyberSection5B : StandardClause {
|
|
47
|
+
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-B"; :>> label = "FDACyberSectionVB"; }
|
|
53
48
|
attribute :>> clauseNumber = "V.B";
|
|
54
49
|
attribute :>> title = "security architecture";
|
|
55
50
|
attribute :>> normativeStrength = "informative";
|
|
56
51
|
}
|
|
57
|
-
|
|
58
|
-
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-C"; }
|
|
59
|
-
attribute :>> name = "FDACyberSectionVC";
|
|
52
|
+
part fdaCyberSection5C : StandardClause {
|
|
53
|
+
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-C"; :>> label = "FDACyberSectionVC"; }
|
|
60
54
|
attribute :>> clauseNumber = "V.C";
|
|
61
55
|
attribute :>> title = "cybersecurity testing";
|
|
62
56
|
attribute :>> normativeStrength = "informative";
|
|
63
57
|
}
|
|
64
58
|
}
|
|
65
|
-
|
|
66
|
-
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-VI"; }
|
|
67
|
-
attribute :>> name = "FDACyberSectionVI";
|
|
59
|
+
part fdaCyberSection6 : StandardClause {
|
|
60
|
+
@MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-VI"; :>> label = "FDACyberSectionVI"; }
|
|
68
61
|
attribute :>> clauseNumber = "VI";
|
|
69
62
|
attribute :>> title = "cybersecurity transparency and vulnerability management";
|
|
70
63
|
attribute :>> normativeStrength = "informative";
|