@memoarchitect/ontology 0.6.5 → 0.7.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 +1 -1
- package/examples/connected-patient-monitor/model/catalog/project.sysml +24 -0
- package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
- package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
- package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
- package/examples/extensions/clinical/memo.package.yaml +18 -9
- package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +10 -2
- package/examples/extensions/template/memo.package.yaml +17 -9
- package/examples/functional-logical-physical/model/catalog/project.sysml +24 -0
- package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/functional-logical-physical/model/{viewpoints → catalog/viewpoints/unassigned/views}/functional_logical_physical_overview.sysml +1 -1
- package/examples/gpca-pump/gpca-pump.kpar +0 -0
- package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +2 -2
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +5 -5
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +3 -8
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +7 -6
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +19 -8
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +2 -2
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +34 -30
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +27 -23
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +1 -1
- package/examples/gpca-pump/model/catalog/project.sysml +21 -0
- package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
- package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +4 -4
- package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
- package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +7 -7
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +2 -2
- package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +6 -6
- package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +2 -2
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +4 -4
- package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +2 -2
- package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
- package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +1 -0
- package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
- package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
- package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
- package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
- package/examples/nested-architecture-dsm/README.md +49 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +174 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +183 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +90 -0
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
- package/examples/nested-architecture-dsm/model/catalog/traces.sysml +49 -0
- package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -6
- package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
- package/examples/software-only-medical-device/model/catalog/project.sysml +24 -0
- package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
- package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -19
- package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
- package/examples/surgical-robot/model/catalog/project.sysml +24 -0
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +5 -3
- package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
- package/examples/sysml-diagram-samples/README.md +7 -0
- package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +18 -10
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +4 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/functional_flow_view.sysml +23 -20
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/interconnection_view.sysml +17 -14
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/operational_behaviour_view.sysml +23 -20
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +51 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/state_transition_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/tree_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
- package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +2 -1
- package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
- package/examples/ui-screen-regions/README.md +117 -0
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +60 -0
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +189 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +60 -0
- package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
- package/examples/ui-screen-regions/model/catalog/traces.sysml +276 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
- package/memo.manifest.yaml +2 -0
- package/methodologies/default/memo.package.yaml +19 -9
- package/methodologies/gpca/memo.package.yaml +18 -9
- package/ontology/memo.package.yaml +23 -8
- package/package.json +2 -4
- package/profile/memo.package.yaml +18 -9
- package/src/architecture/decisions/memo_decisions.sysml +7 -0
- package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
- package/src/architecture/functional/functions/memo_functions.sysml +5 -12
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +1 -3
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +18 -5
- package/src/architecture/implementation/ui/memo_ui.sysml +210 -27
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -2
- package/src/architecture/logical/structure/memo_logical_structure.sysml +71 -15
- package/src/architecture/operational/activities/memo_activities.sysml +0 -1
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +2 -2
- package/src/architecture/operational/workflows/memo_workflows.sysml +0 -6
- package/src/{compliance/change/memo_change.sysml → artifacts/configuration_management/memo_configuration_management.sysml} +5 -3
- package/src/artifacts/core/memo_controlled_artifacts.sysml +33 -0
- package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +1 -1
- package/src/assurance/human_factors/memo_human_factors.sysml +1 -1
- package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +11 -0
- package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +1 -1
- package/src/core/annotations/memo_annotations.sysml +77 -0
- package/src/core/common/memo_common.sysml +20 -3
- package/src/core/consistency_rules/consistency_rules.sysml +7 -0
- package/src/core/dimensions/dimensions.sysml +5 -1
- package/src/core/enumerations/memo_enumerations.sysml +41 -6
- package/src/core/methodology_scope/methodology_scope.sysml +7 -15
- package/src/core/relationships/memo_relationships.sysml +4 -2
- package/src/memo_namespaces.sysml +97 -67
- package/src/methodology/core/memo_core.sysml +45 -2
- package/src/methodology/profiles/memo_profiles.sysml +30 -40
- package/src/methodology/workflow/memo_workflow.sysml +7 -2
- package/src/rules/closure/closure_rules.sysml +104 -31
- package/src/rules/coverage/coverage_rules.sysml +4 -256
- package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
- package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
- package/src/rules/ontology/ontology_invariants.sysml +30 -73
- package/src/rules/quantitative/quantitative_rules.sysml +8 -8
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +7 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +3 -1
- package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
- package/src/viewpoints/context/context_viewpoint.sysml +3 -1
- package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +3 -1
- package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
- package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +4 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +3 -1
- package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +2 -2
- package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +2 -2
- package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
- package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
- package/src/viewpoints/operational/operational_viewpoint.sysml +3 -1
- package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +2 -2
- package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
- package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
- package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
- package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
- package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
- package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
- package/src/viewpoints/software/software_viewpoint.sysml +3 -1
- package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
- package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
- package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +3 -1
- package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +2 -2
- package/templates/connected-device/memo.package.yaml +11 -5
- package/templates/connected-device/model/catalog/project.sysml +28 -0
- package/templates/connected-device/syside.toml +1 -1
- package/templates/default/memo.package.yaml +11 -5
- package/templates/default/model/catalog/project.sysml +28 -0
- package/templates/default/syside.toml +1 -1
- package/templates/infusion-pump/memo.package.yaml +11 -5
- package/templates/infusion-pump/model/catalog/project.sysml +28 -0
- package/templates/infusion-pump/syside.toml +1 -1
- package/templates/monitoring-device/memo.package.yaml +11 -5
- package/templates/monitoring-device/model/catalog/project.sysml +28 -0
- package/templates/monitoring-device/syside.toml +1 -1
- package/templates/samd/memo.package.yaml +11 -5
- package/templates/samd/model/catalog/project.sysml +28 -0
- package/templates/samd/syside.toml +1 -1
- package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
- package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
- package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
- package/examples/gpca-pump/memo.config.yaml +0 -9
- package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
- package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
- package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
- package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
- package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
- package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
- package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
- package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
- package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
- package/ontology/memo.rendering.yaml +0 -84
- package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
- package/src/compliance/document_views/memo_document_views.sysml +0 -7
- package/src/compliance/iso14971/risk_management_file.sysml +0 -16
- package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/srs.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/task-analysis.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fmea.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
- /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
|
@@ -11,17 +11,26 @@ package memo_rules_ontology {
|
|
|
11
11
|
|
|
12
12
|
// ─── Structure ───────────────────────────────────────────────────────
|
|
13
13
|
|
|
14
|
-
constraint def
|
|
14
|
+
constraint def ContainmentAcyclicRule :> MemoConsistencyRule {
|
|
15
15
|
attribute id = "CR-ONT-001";
|
|
16
|
-
attribute
|
|
16
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
17
|
+
attribute appliesTo = "Model";
|
|
17
18
|
attribute severity = RuleSeverityKind::error;
|
|
18
19
|
attribute rationaleText = "Containment/composition relations (Composes) must form no cycles.";
|
|
19
20
|
attribute predicateExpression = "acyclic(composes)";
|
|
20
21
|
constraint { true }
|
|
21
22
|
}
|
|
22
|
-
constraint def
|
|
23
|
+
constraint def NestedPartConnectedRule :> MemoConsistencyRule {
|
|
23
24
|
attribute id = "AR-IBD-001";
|
|
24
|
-
attribute
|
|
25
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
26
|
+
// Internal-block connectivity is a structural-architecture concern, so
|
|
27
|
+
// the subject is the structural component — not every MemoPart. UI
|
|
28
|
+
// elements, captured evidence, and review comments nest in compositions
|
|
29
|
+
// without ever bearing a connector, and judging them produced warnings
|
|
30
|
+
// no modeller could act on. The engine reads this value; narrowing or
|
|
31
|
+
// widening the rule happens here, not in TypeScript.
|
|
32
|
+
attribute appliesTo = "LogicalComponent";
|
|
33
|
+
attribute evaluator = "architecture";
|
|
25
34
|
attribute severity = RuleSeverityKind::warning;
|
|
26
35
|
attribute rationaleText = "A structural part nested inside another part should expose at least one modeled interface connector. Passive or intentionally isolated parts may retain this warning with an explicit modelling rationale.";
|
|
27
36
|
attribute predicateExpression = "hasConnectorInComposition";
|
|
@@ -32,115 +41,63 @@ package memo_rules_ontology {
|
|
|
32
41
|
// represent that transitive containment query.
|
|
33
42
|
constraint { true }
|
|
34
43
|
}
|
|
35
|
-
constraint def connectorEndpointsExistRule {
|
|
36
|
-
attribute id = "CR-ONT-002";
|
|
37
|
-
attribute appliesTo = "ComponentExchange";
|
|
38
|
-
attribute severity = RuleSeverityKind::error;
|
|
39
|
-
attribute rationaleText = "Connector endpoints must resolve to model elements via the typed refs sourceEndpoint/targetEndpoint; port-path strings are descriptive labels only.";
|
|
40
|
-
attribute predicateExpression = "sourceEndpoint->size() = 1 and targetEndpoint->size() = 1";
|
|
41
|
-
constraint { true }
|
|
42
|
-
}
|
|
43
|
-
constraint def portCompatibilityRule {
|
|
44
|
-
attribute id = "CR-ONT-003";
|
|
45
|
-
attribute appliesTo = "LogicalConnector";
|
|
46
|
-
attribute severity = RuleSeverityKind::error;
|
|
47
|
-
attribute rationaleText = "Connected ports must agree on content kind; a fluid port cannot connect to an information port.";
|
|
48
|
-
attribute predicateExpression = "sourceComponent.ports.contentKind->intersect(targetComponent.ports.contentKind)->size() >= 1";
|
|
49
|
-
constraint { true }
|
|
50
|
-
}
|
|
51
|
-
constraint def directionAgreesWithFlowRule {
|
|
52
|
-
attribute id = "CR-ONT-004";
|
|
53
|
-
attribute appliesTo = "LogicalExchange";
|
|
54
|
-
attribute severity = RuleSeverityKind::error;
|
|
55
|
-
attribute rationaleText = "Exchange direction must agree with the direction of its source and target ports.";
|
|
56
|
-
attribute predicateExpression = "sourcePort.direction != DirectionKind::input and targetPort.direction != DirectionKind::output";
|
|
57
|
-
constraint { true }
|
|
58
|
-
}
|
|
59
|
-
constraint def exchangedItemTypeRule {
|
|
60
|
-
attribute id = "CR-ONT-005";
|
|
61
|
-
attribute appliesTo = "LogicalExchange";
|
|
62
|
-
attribute severity = RuleSeverityKind::warning;
|
|
63
|
-
attribute rationaleText = "Exchanged items must be type-compatible with the exchange content kind.";
|
|
64
|
-
attribute predicateExpression = "exchangedItem->isEmpty() or exchangedItem.contentKind = contentKind";
|
|
65
|
-
constraint { true }
|
|
66
|
-
}
|
|
67
|
-
|
|
68
44
|
// ─── Deployment and realization ──────────────────────────────────────
|
|
69
45
|
|
|
70
|
-
constraint def
|
|
71
|
-
attribute id = "CR-ONT-010";
|
|
72
|
-
attribute appliesTo = "DeploysTo";
|
|
73
|
-
attribute severity = RuleSeverityKind::error;
|
|
74
|
-
attribute rationaleText = "Software deploys only to capable execution nodes (e.g. containerized units require supportsContainerization).";
|
|
75
|
-
attribute predicateExpression = "deploymentKind != DeploymentKind::containerized or node.supportsContainerization = true";
|
|
76
|
-
constraint { true }
|
|
77
|
-
}
|
|
78
|
-
constraint def runtimeTracesToModuleRule {
|
|
46
|
+
constraint def RuntimeTracesToModuleRule :> MemoConsistencyRule {
|
|
79
47
|
attribute id = "CR-ONT-011";
|
|
48
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
80
49
|
attribute appliesTo = "SoftwareComponent";
|
|
81
50
|
attribute severity = RuleSeverityKind::warning;
|
|
82
51
|
attribute rationaleText = "Every runtime component must trace to a module-view definition (Realizes).";
|
|
83
52
|
attribute predicateExpression = "realizes->size() >= 1";
|
|
84
53
|
constraint { true }
|
|
85
54
|
}
|
|
86
|
-
constraint def
|
|
87
|
-
attribute id = "CR-ONT-012";
|
|
88
|
-
attribute appliesTo = "Realizes";
|
|
89
|
-
attribute severity = RuleSeverityKind::error;
|
|
90
|
-
attribute rationaleText = "Realization relations must resolve both ends to model elements, not name strings.";
|
|
91
|
-
attribute predicateExpression = "realizing->size() = 1 and realized->size() = 1";
|
|
92
|
-
constraint { true }
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
constraint def patientContactCharacterizedRule {
|
|
55
|
+
constraint def PatientContactCharacterizedRule :> MemoConsistencyRule {
|
|
96
56
|
attribute id = "CR-ONT-032";
|
|
57
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
97
58
|
attribute appliesTo = "PhysicalComponent";
|
|
98
59
|
attribute severity = RuleSeverityKind::error;
|
|
99
60
|
attribute rationaleText = "Patient-contact components must identify contact nature and duration (ISO 10993-1).";
|
|
100
|
-
attribute predicateExpression = "patientContact
|
|
61
|
+
attribute predicateExpression = "patientContact == false or (contactNature != '' and contactDuration != '')";
|
|
101
62
|
constraint { true }
|
|
102
63
|
}
|
|
103
64
|
|
|
104
65
|
// ─── Assurance coverage ──────────────────────────────────────────────
|
|
105
66
|
|
|
106
|
-
constraint def
|
|
67
|
+
constraint def SafetyCriticalFunctionVerifiedRule :> MemoConsistencyRule {
|
|
107
68
|
attribute id = "CR-ONT-040";
|
|
69
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
108
70
|
attribute appliesTo = "SystemFunction";
|
|
109
71
|
attribute severity = RuleSeverityKind::error;
|
|
110
72
|
attribute rationaleText = "Safety-critical functions (criticality high or catastrophic) must trace to at least one verification case.";
|
|
111
|
-
attribute predicateExpression = "criticality
|
|
73
|
+
attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or verifiedBy->size() >= 1";
|
|
112
74
|
constraint { true }
|
|
113
75
|
}
|
|
114
|
-
constraint def
|
|
76
|
+
constraint def CriticalTaskValidatedRule :> MemoConsistencyRule {
|
|
115
77
|
attribute id = "CR-ONT-041";
|
|
78
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
116
79
|
attribute appliesTo = "UserTask[criticality=high]";
|
|
117
80
|
attribute severity = RuleSeverityKind::error;
|
|
118
81
|
attribute rationaleText = "Critical tasks (criticality high or catastrophic) must trace to usability validation (FDA HF guidance; IEC 62366-1 summative evaluation).";
|
|
119
|
-
attribute predicateExpression = "criticality
|
|
82
|
+
attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or validates->size() >= 1";
|
|
120
83
|
constraint { true }
|
|
121
84
|
}
|
|
122
|
-
constraint def
|
|
85
|
+
constraint def UseErrorTracesToHazardRule :> MemoConsistencyRule {
|
|
123
86
|
attribute id = "CR-ONT-042";
|
|
87
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
124
88
|
attribute appliesTo = "UseError";
|
|
125
89
|
attribute severity = RuleSeverityKind::warning;
|
|
126
90
|
attribute rationaleText = "Safety-relevant use errors (severity serious or worse) must trace to a hazard.";
|
|
127
|
-
attribute predicateExpression = "severity
|
|
91
|
+
attribute predicateExpression = "not(severity == 'serious' or severity == 'critical' or severity == 'catastrophic') or causes->size() >= 1 or tracesRisk->size() >= 1";
|
|
128
92
|
constraint { true }
|
|
129
93
|
}
|
|
130
|
-
constraint def
|
|
94
|
+
constraint def AlternateScenarioHasBaseRule :> MemoConsistencyRule {
|
|
131
95
|
attribute id = "CR-ONT-043";
|
|
96
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
132
97
|
attribute appliesTo = "MemoScenario";
|
|
133
98
|
attribute severity = RuleSeverityKind::error;
|
|
134
99
|
attribute rationaleText = "Alternate, exception, and recovery scenarios must identify their base scenario or variation point — never duplicate the workflow.";
|
|
135
|
-
attribute predicateExpression = "variantKind
|
|
136
|
-
constraint { true }
|
|
137
|
-
}
|
|
138
|
-
constraint def singleAxisOwnershipRule {
|
|
139
|
-
attribute id = "CR-ONT-045";
|
|
140
|
-
attribute appliesTo = "MemoPart";
|
|
141
|
-
attribute severity = RuleSeverityKind::error;
|
|
142
|
-
attribute rationaleText = "Every element is owned by exactly one axis, encoded by its owning package: a horizontal architecture layer (memo_architecture_*) XOR a vertical assurance discipline (memo_assurance_*) — never both. Cross-axis participation is expressed by typed relationships, not by dual membership.";
|
|
143
|
-
attribute predicateExpression = "owningPackage.startsWith('memo_architecture_') xor owningPackage.startsWith('memo_assurance_')";
|
|
100
|
+
attribute predicateExpression = "not(variantKind == 'alternate' or variantKind == 'exception' or variantKind == 'recovery') or baseScenario->size() == 1 or variationPoint != ''";
|
|
144
101
|
constraint { true }
|
|
145
102
|
}
|
|
146
103
|
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// native `constraint def` bodies. The aggregate ratio rule (QT-003) is a
|
|
4
|
-
// model-level metric, not a single-subject predicate, and is omitted (see note).
|
|
1
|
+
// Quantitative per-subject cardinality constraints. Aggregate ratios belong to
|
|
2
|
+
// model-level coverage reporting rather than this evaluator.
|
|
5
3
|
package memo_rules_quantitative {
|
|
6
4
|
private import ScalarValues::*;
|
|
7
5
|
|
|
8
6
|
private import memo_core_consistency_rules::*;
|
|
9
7
|
private import memo_core_enumerations::*;
|
|
10
8
|
|
|
11
|
-
constraint def
|
|
9
|
+
constraint def HazardMaxControlsRule :> MemoConsistencyRule {
|
|
12
10
|
attribute id = "QT-001";
|
|
11
|
+
attribute tailoring = RuleTailoringKind::assurance;
|
|
13
12
|
attribute appliesTo = "Hazard";
|
|
14
13
|
attribute severity = RuleSeverityKind::info;
|
|
15
14
|
attribute rationaleText = "Excessive controls per hazard suggests the hazard is too broad and should be decomposed.";
|
|
16
|
-
attribute predicateExpression = "mitigates->size()
|
|
15
|
+
attribute predicateExpression = "mitigates->size() <= 10";
|
|
17
16
|
constraint { true }
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
constraint def
|
|
19
|
+
constraint def SwComponentMaxInterfacesRule :> MemoConsistencyRule {
|
|
21
20
|
attribute id = "QT-002";
|
|
21
|
+
attribute tailoring = RuleTailoringKind::assurance;
|
|
22
22
|
attribute appliesTo = "SoftwareModule";
|
|
23
23
|
attribute severity = RuleSeverityKind::info;
|
|
24
24
|
attribute rationaleText = "High interface count indicates excessive coupling; consider decomposition.";
|
|
25
|
-
attribute predicateExpression = "threatenedBy->size()
|
|
25
|
+
attribute predicateExpression = "threatenedBy->size() <= 8";
|
|
26
26
|
constraint { true }
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -158,6 +158,13 @@ package memo_viewpoints_catalog {
|
|
|
158
158
|
attribute :>> purpose = "Runtime message ordering between software components along a functional scenario.";
|
|
159
159
|
attribute :>> defaultViewKind = DiagramViewKind::sequence;
|
|
160
160
|
}
|
|
161
|
+
// The first cataloged viewpoint to resolve to `geometry`: screen regions
|
|
162
|
+
// carry authored RegionBounds, so a geometry view draws modelled facts.
|
|
163
|
+
part vpUILayout : Viewpoint {
|
|
164
|
+
attribute :>> id = "VP-CAT-028"; attribute :>> name = "UILayoutViewpoint";
|
|
165
|
+
attribute :>> purpose = "Captured screens with their marked regions and the UI elements those regions present.";
|
|
166
|
+
attribute :>> defaultViewKind = DiagramViewKind::geometry;
|
|
167
|
+
}
|
|
161
168
|
|
|
162
169
|
// ── Compatibility mappings (§22): legacy diagram intents resolve to
|
|
163
170
|
// standard view kinds; C4 and AADL stay in examples/ mappings. ──
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_clinical_clinical_viewpoint {
|
|
|
9
9
|
attribute :>> name = "ClinicalViewpoint";
|
|
10
10
|
attribute :>> title = "Clinical Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows clinical context, users, use environment, and clinical evidence.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the context and assurance layers for clinical stakeholders — intended use, patient/clinician interaction, clinical evidence, and clinical safety claims.";
|
|
13
13
|
attribute :>> purpose = "Communicate clinical use context and clinical evidence for the device.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::clinicalEngineer, AudienceKind::regulatoryEngineer);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::context;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_clinical_clinical_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::narrativeSection);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::clinical);
|
|
20
20
|
attribute :>> includedLayers = ("context", "assurance");
|
|
21
|
+
attribute :>> explorerLane = "assurance";
|
|
22
|
+
attribute :>> explorerOrder = 4;
|
|
21
23
|
attribute :>> allowedElementKinds = ("Actor", "UseContext", "Evidence");
|
|
22
24
|
attribute :>> userExtensible = true;
|
|
23
25
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_clinical_views_clinical_evidence_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
7
|
view def MemoClinicalEvidenceView :> MemoDocumentView {
|
|
8
|
-
attribute :>> viewKind = DocumentViewKind::
|
|
8
|
+
attribute :>> viewKind = DocumentViewKind::clinical;
|
|
9
9
|
attribute :>> generationRule = "Include use contexts, actors, and clinical evidence supporting the device's intended use, filtered to clinical concern.";
|
|
10
10
|
attribute :>> outputKind = (ViewOutputKind::documentSection);
|
|
11
11
|
attribute :>> presentationKind = (PresentationKind::narrativeSection);
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_context_context_viewpoint {
|
|
|
9
9
|
attribute :>> name = "ContextViewpoint";
|
|
10
10
|
attribute :>> title = "System Context Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows actors, use context, and system boundary.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the context layer to communicate who interacts with the device, under which use conditions, and where trust or safety boundaries exist.";
|
|
13
13
|
attribute :>> purpose = "Communicate operational context and boundaries.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::systemArchitect);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::context;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_context_context_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::blockDiagram);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::interoperability);
|
|
20
20
|
attribute :>> includedLayers = ("context");
|
|
21
|
+
attribute :>> explorerLane = "architecture";
|
|
22
|
+
attribute :>> explorerOrder = 0;
|
|
21
23
|
// UseEnvironment (IEC 62366-1 3.20) is what the device sits inside —
|
|
22
24
|
// facility, procedure area, ambient conditions. A context view that
|
|
23
25
|
// cannot show it is missing half of "where is this used".
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_context_views_system_context_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_context_system_context_view {
|
|
|
6
6
|
private import memo_viewpoints_context_context_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view systemContextView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_context_views_system_context_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-CTX-001";
|
|
12
12
|
attribute :>> name = "SystemContextView";
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_cybersecurity_cybersecurity_viewpoint {
|
|
|
9
9
|
attribute :>> name = "CybersecurityViewpoint";
|
|
10
10
|
attribute :>> title = "Cybersecurity Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows assets, trust boundaries, threats, vulnerabilities, cyber hazards, cyber risks, and mitigations.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the cybersecurity layer, using STRIDE-style threat categories by default while allowing safety and privacy impacts to be traced into the broader model.";
|
|
13
13
|
attribute :>> purpose = "Communicate cybersecurity design, threat analysis, and cyber risk posture.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::securityEngineer);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::risk;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_cybersecurity_cybersecurity_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::custom);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::cybersecurity, ConcernKind::privacy, ConcernKind::safety);
|
|
20
20
|
attribute :>> includedLayers = ("cybersecurity", "software_structure", "hardware_structure", "interfaces", "risk", "assurance");
|
|
21
|
+
attribute :>> explorerLane = "assurance";
|
|
22
|
+
attribute :>> explorerOrder = 3;
|
|
21
23
|
attribute :>> allowedElementKinds = ("CybersecurityAsset", "Threat", "Vulnerability", "CyberHazard", "CyberRisk", "CyberMitigation", "SecurityRequirement", "TrustBoundary", "ThreatScenario");
|
|
22
24
|
attribute :>> allowedRelationshipKinds = ("ThreatenedBy", "Exploits", "RealizedByScenario", "Mitigates", "DerivesCyberRequirement", "ImpactsSafety", "CrossesTrustBoundary");
|
|
23
25
|
attribute :>> documentUsage = ("Secure Product Development", "Threat Model", "Cybersecurity Risk Assessment", "QMSR");
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_cybersecurity_views_cybersecurity_assessment_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
7
|
view def MemoCybersecurityAssessmentView :> MemoDocumentView {
|
|
8
|
-
attribute :>> viewKind = DocumentViewKind::
|
|
8
|
+
attribute :>> viewKind = DocumentViewKind::cybersecurityAssessment;
|
|
9
9
|
attribute :>> generationRule = "Include cyber risks, exploitability, mitigations, security requirements, verification, residual risk, and postmarket evidence references.";
|
|
10
10
|
attribute :>> outputKind = (ViewOutputKind::documentSection);
|
|
11
11
|
attribute :>> presentationKind = (PresentationKind::riskTable);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_cybersecurity_views_threat_model_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
7
|
view def MemoCybersecurityThreatModelView :> MemoDocumentView {
|
|
8
|
-
attribute :>> viewKind = DocumentViewKind::
|
|
8
|
+
attribute :>> viewKind = DocumentViewKind::threatModel;
|
|
9
9
|
attribute :>> generationRule = "Include assets, trust boundaries, threat scenarios, vulnerabilities, mitigations, and trace links to safety/privacy concerns.";
|
|
10
10
|
attribute :>> outputKind = (ViewOutputKind::documentSection);
|
|
11
11
|
attribute :>> presentationKind = (PresentationKind::narrativeSection);
|
|
@@ -21,6 +21,10 @@ package memo_viewpoints_definitions {
|
|
|
21
21
|
attribute userExtensible : Boolean;
|
|
22
22
|
// Optional navigation grouping interpreted by Memo Architect.
|
|
23
23
|
attribute group : String;
|
|
24
|
+
// Explorer placement follows the MEMO V-model: Architecture is read
|
|
25
|
+
// top-to-bottom; Assurance is read left-to-right.
|
|
26
|
+
attribute explorerLane : String;
|
|
27
|
+
attribute explorerOrder : Integer;
|
|
24
28
|
// default diagram kind for a catalog viewpoint (optional)
|
|
25
29
|
attribute defaultViewKind : DiagramViewKind[0..1];
|
|
26
30
|
}
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_functional_functional_viewpoint {
|
|
|
9
9
|
attribute :>> name = "FunctionalViewpoint";
|
|
10
10
|
attribute :>> title = "Functional Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows system functions, their decomposition, and allocation.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the functions layer for what the system does, independent of how it is structured — function trees, function allocation, and behavior triggers.";
|
|
13
13
|
attribute :>> purpose = "Describe the system's functional decomposition and behavior.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::systemArchitect);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::architecture;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_functional_functional_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::activityDiagram);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::performance);
|
|
20
20
|
attribute :>> includedLayers = ("functions");
|
|
21
|
+
attribute :>> explorerLane = "architecture";
|
|
22
|
+
attribute :>> explorerOrder = 2;
|
|
21
23
|
attribute :>> allowedElementKinds = ("SystemFunction", "FunctionalFlow", "FunctionalFlowStep", "FunctionalScenario", "FunctionalExchange");
|
|
22
24
|
attribute :>> userExtensible = true;
|
|
23
25
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_functional_views_function_allocation_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_functional_function_allocation_view {
|
|
|
6
6
|
private import memo_viewpoints_functional_functional_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view functionAllocationView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_functional_views_function_allocation_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-FUNC-002";
|
|
12
12
|
attribute :>> name = "FunctionAllocationView";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_functional_views_system_functional_tree_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_functional_system_functional_tree_view {
|
|
|
6
6
|
private import memo_viewpoints_functional_functional_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view systemFunctionalTreeView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_functional_views_system_functional_tree_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-FUNC-001";
|
|
12
12
|
attribute :>> name = "SystemFunctionalTreeView";
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_logical_logical_viewpoint {
|
|
|
9
9
|
attribute :>> name = "LogicalArchitectureViewpoint";
|
|
10
10
|
attribute :>> title = "Logical Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows logical decomposition and interfaces.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the logical architecture layer for subsystem structure, responsibilities, and major interactions, independent of physical realization.";
|
|
13
13
|
attribute :>> purpose = "Describe the system's logical decomposition.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::systemArchitect);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::architecture;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_logical_logical_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::blockDiagram);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::performance);
|
|
20
20
|
attribute :>> includedLayers = ("logical_structure", "interfaces");
|
|
21
|
+
attribute :>> explorerLane = "architecture";
|
|
22
|
+
attribute :>> explorerOrder = 3;
|
|
21
23
|
attribute :>> allowedElementKinds = ("LogicalComponent", "Interface");
|
|
22
24
|
attribute :>> userExtensible = true;
|
|
23
25
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_logical_views_logical_architecture_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_logical_logical_architecture_view {
|
|
|
6
6
|
private import memo_viewpoints_logical_logical_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view logicalArchitectureView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_logical_views_logical_architecture_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-LOG-001";
|
|
12
12
|
attribute :>> name = "LogicalArchitectureView";
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_operational_operational_viewpoint {
|
|
|
9
9
|
attribute :>> name = "OperationalViewpoint";
|
|
10
10
|
attribute :>> title = "Operational & Use-Case Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows actors, use contexts, operational scenarios, and system capabilities.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the context, operational, and system layers for how actors use the device — operational scenarios, capabilities, and the functional chains that realize them.";
|
|
13
13
|
attribute :>> purpose = "Communicate how actors interact with the system and which capabilities they invoke.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::projectLead, AudienceKind::systemArchitect);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::context;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_operational_operational_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::custom);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::performance, ConcernKind::interoperability);
|
|
20
20
|
attribute :>> includedLayers = ("context", "operational", "system");
|
|
21
|
+
attribute :>> explorerLane = "architecture";
|
|
22
|
+
attribute :>> explorerOrder = 1;
|
|
21
23
|
attribute :>> allowedElementKinds = ("Actor", "UseContext", "OperationalActivity", "OperativeScenario");
|
|
22
24
|
attribute :>> userExtensible = true;
|
|
23
25
|
}
|
package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_operational_views_use_case_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_operational_use_case_view {
|
|
|
6
6
|
private import memo_viewpoints_operational_operational_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view useCaseView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_operational_views_use_case_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-OPS-001";
|
|
12
12
|
attribute :>> name = "UseCaseView";
|
|
@@ -9,7 +9,7 @@ package memo_viewpoints_physical_physical_viewpoint {
|
|
|
9
9
|
attribute :>> name = "PhysicalViewpoint";
|
|
10
10
|
attribute :>> title = "Physical Viewpoint";
|
|
11
11
|
attribute :>> shortDescription = "Shows physical components, hardware structure, and their interconnections.";
|
|
12
|
-
attribute :>>
|
|
12
|
+
attribute :>> description = "Default viewpoint derived from the physical and hardware structure layers for bill-of-materials, hardware decomposition, physical interfaces, and network/connectivity topology.";
|
|
13
13
|
attribute :>> purpose = "Describe the system's physical realization and interconnections.";
|
|
14
14
|
attribute :>> audience = (AudienceKind::hardwareEngineer);
|
|
15
15
|
attribute :>> stage = WorkflowStageKind::architecture;
|
|
@@ -18,6 +18,8 @@ package memo_viewpoints_physical_physical_viewpoint {
|
|
|
18
18
|
attribute :>> presentationKind = (PresentationKind::blockDiagram);
|
|
19
19
|
attribute :>> concernKinds = (ConcernKind::reliability, ConcernKind::interoperability);
|
|
20
20
|
attribute :>> includedLayers = ("hardware_structure", "physical");
|
|
21
|
+
attribute :>> explorerLane = "architecture";
|
|
22
|
+
attribute :>> explorerOrder = 5;
|
|
21
23
|
attribute :>> allowedElementKinds = ("ProcessingNode", "HardwareAssembly", "PhysicalPort");
|
|
22
24
|
attribute :>> userExtensible = true;
|
|
23
25
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_physical_views_network_topology_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_physical_network_topology_view {
|
|
|
6
6
|
private import memo_viewpoints_physical_physical_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view networkTopologyView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_physical_views_network_topology_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-PHY-002";
|
|
12
12
|
attribute :>> name = "NetworkTopologyView";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_viewpoints_physical_views_physical_bom_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -6,7 +6,7 @@ package memo_viewpoints_physical_physical_bom_view {
|
|
|
6
6
|
private import memo_viewpoints_physical_physical_viewpoint::*;
|
|
7
7
|
|
|
8
8
|
view physicalBOMView : MemoDiagramView {
|
|
9
|
-
expose
|
|
9
|
+
expose memo_viewpoints_physical_views_physical_bom_view::*;
|
|
10
10
|
attribute depth = 2;
|
|
11
11
|
attribute :>> id = "VIEW-PHY-001";
|
|
12
12
|
attribute :>> name = "PhysicalBOMView";
|