@memoarchitect/ontology 0.4.6 → 0.6.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 -4
- package/examples/connected-patient-monitor/README.md +7 -0
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +70 -0
- package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +3 -0
- package/examples/connected-patient-monitor/model/viewpoints/connected_patient_monitor_overview.sysml +6 -0
- package/examples/embedded-infusion-pump/README.md +7 -0
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +66 -0
- package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +3 -0
- package/examples/embedded-infusion-pump/model/viewpoints/embedded_infusion_pump_overview.sysml +6 -0
- package/examples/extensions/README.md +16 -0
- package/examples/extensions/clinical/memo.package.yaml +9 -0
- package/examples/extensions/clinical/src/clinical_extension.sysml +3 -0
- package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +14 -0
- package/examples/extensions/clinical/src/procedures/memo_clinical_procedures.sysml +16 -0
- package/examples/extensions/template/memo.package.yaml +9 -0
- package/examples/extensions/template/src/extension.sysml +15 -0
- package/examples/functional-logical-physical/README.md +7 -0
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +50 -0
- package/examples/functional-logical-physical/model/functional_logical_physical.sysml +3 -0
- package/examples/functional-logical-physical/model/viewpoints/functional_logical_physical_overview.sysml +6 -0
- package/examples/gpca-pump/README.md +26 -0
- package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +1 -1
- package/examples/gpca-pump/memo.config.yaml +2 -2
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +1 -1
- package/examples/gpca-pump/methodology/gpca_scope.sysml +2 -2
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +10 -10
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +17 -6
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +11 -11
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +35 -22
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +25 -6
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +29 -15
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +293 -169
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +139 -21
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +210 -105
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +66 -69
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +43 -76
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +73 -70
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +27 -27
- package/examples/gpca-pump/model/views/context_system_context_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +1 -1
- package/examples/gpca-pump/model/views/document_rmf_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_sdd_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_threat_model_view.sysml +1 -1
- package/examples/gpca-pump/model/views/document_usability_view.sysml +1 -1
- package/examples/gpca-pump/model/views/document_vv_view.sysml +1 -1
- package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +1 -1
- package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +1 -1
- package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +1 -1
- package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +1 -1
- package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +1 -1
- package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +1 -1
- package/examples/gpca-pump/model/views/operational_use_case_view.sysml +6 -6
- package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +1 -1
- package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +1 -1
- package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +2 -2
- package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +1 -1
- package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +1 -1
- package/examples/ivd-laboratory-system/README.md +7 -0
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +58 -0
- package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +3 -0
- package/examples/ivd-laboratory-system/model/viewpoints/ivd_laboratory_system_overview.sysml +6 -0
- package/examples/manual-surgical-instrument/README.md +7 -0
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +41 -0
- package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +3 -0
- package/examples/manual-surgical-instrument/model/viewpoints/manual_surgical_instrument_overview.sysml +6 -0
- package/examples/multidimensional-layers/README.md +7 -0
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +51 -0
- package/examples/multidimensional-layers/model/multidimensional_layers.sysml +4 -0
- package/examples/multidimensional-layers/model/viewpoints/multidimensional_layers_overview.sysml +13 -0
- package/examples/reusable-instrument/README.md +7 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +71 -0
- package/examples/reusable-instrument/model/reusable_instrument.sysml +4 -0
- package/examples/reusable-instrument/model/viewpoints/reusable_instrument_overview.sysml +13 -0
- package/examples/software-only-medical-device/README.md +7 -0
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +62 -0
- package/examples/software-only-medical-device/model/software_only_medical_device.sysml +4 -0
- package/examples/software-only-medical-device/model/viewpoints/software_only_medical_device_overview.sysml +13 -0
- package/examples/surgical-closure-workflow/README.md +8 -0
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +151 -0
- package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +4 -0
- package/examples/surgical-closure-workflow/model/viewpoints/surgical_closure_workflow_overview.sysml +13 -0
- package/examples/surgical-robot/README.md +7 -0
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +58 -0
- package/examples/surgical-robot/model/surgical_robot.sysml +4 -0
- package/examples/surgical-robot/model/viewpoints/surgical_robot_overview.sysml +13 -0
- package/examples/sysml-diagram-samples/README.md +32 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +5 -0
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/action_flow_view.sysml +22 -4
- package/examples/sysml-diagram-samples/model/samples/context_view.sysml +55 -0
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/functional_flow_view.sysml +17 -6
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/interconnection_view.sysml +4 -3
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/operational_behaviour_view.sysml +32 -42
- package/examples/sysml-diagram-samples/model/samples/requirements_view.sysml +63 -0
- package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +109 -0
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/tree_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/samples/use_case_view.sysml +81 -0
- package/examples/temperature-alarm/README.md +7 -0
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +140 -0
- package/examples/temperature-alarm/model/temperature_alarm.sysml +4 -0
- package/examples/temperature-alarm/model/viewpoints/temperature_alarm_overview.sysml +13 -0
- package/memo.manifest.yaml +4 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +4 -4
- package/ontology/memo.package.yaml +1 -1
- package/ontology/memo.rendering.yaml +37 -0
- package/package.json +17 -7
- package/profile/memo.package.yaml +1 -1
- package/profile/templates/connected-device/starter.sysml +3 -3
- package/profile/templates/infusion-pump/starter.sysml +3 -3
- package/profile/templates/monitoring-device/starter.sysml +3 -3
- package/profile/templates/samd/starter.sysml +3 -3
- package/src/architecture/decisions/memo_decisions.sysml +1 -1
- package/src/architecture/{behavior → functional/behavior}/memo_behavior.sysml +12 -11
- package/src/architecture/{constraints → functional/constraints}/memo_constraints.sysml +2 -2
- package/src/architecture/functional/functions/memo_functions.sysml +81 -0
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +46 -0
- package/src/architecture/implementation/hardware/electrical/memo_hardware_electrical.sysml +36 -0
- package/src/architecture/implementation/hardware/fluidic/memo_hardware_fluidic.sysml +14 -0
- package/src/architecture/implementation/hardware/mechanical/memo_hardware_mechanical.sysml +14 -0
- package/src/architecture/implementation/hardware/optical/memo_hardware_optical.sysml +11 -0
- package/src/architecture/implementation/hardware/sensing/memo_hardware_sensing.sysml +17 -0
- package/src/architecture/implementation/hardware/structure/memo_hardware_structure.sysml +12 -0
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +70 -0
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +80 -0
- package/src/architecture/implementation/ui/memo_ui.sysml +159 -0
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +102 -0
- package/src/architecture/logical/structure/memo_logical_structure.sysml +150 -0
- package/src/architecture/operational/activities/memo_activities.sysml +86 -0
- package/src/architecture/operational/context/actors/memo_actors.sysml +38 -0
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +64 -0
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +53 -0
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +116 -0
- package/src/architecture/operational/structure/memo_operational.sysml +26 -0
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +67 -0
- package/src/architecture/operational/workflows/memo_workflows.sysml +126 -0
- package/src/architecture/realization/deployment/memo_deployment.sysml +90 -0
- package/src/architecture/{physical → realization/physical}/memo_physical_architecture.sysml +12 -1
- package/src/artifacts/definitions/memo_artifact_definitions.sysml +1 -1
- package/src/{architecture → assurance}/cybersecurity/memo_cybersecurity.sysml +14 -10
- package/src/assurance/human_factors/memo_human_factors.sysml +50 -0
- package/src/{architecture → assurance}/requirements/memo_requirements.sysml +45 -21
- package/src/assurance/requirements/needs/memo_needs.sysml +43 -0
- package/src/{architecture → assurance/safety_risk}/analysis/memo_fmea.sysml +13 -13
- package/src/{architecture/risk → assurance/safety_risk}/memo_arch_risk.sysml +2 -2
- package/src/{architecture/risk → assurance/safety_risk}/memo_risk.sysml +25 -16
- package/src/assurance/verification_validation/memo_assurance.sysml +49 -0
- package/src/compliance/artifacts/memo_artifacts.sysml +1 -1
- package/src/compliance/change/memo_change.sysml +2 -2
- package/src/compliance/dhf-templates/21cfr820/design-input.md +1 -1
- package/src/compliance/dhf-templates/21cfr820/design-validation.md +1 -1
- package/src/compliance/dhf-templates/21cfr820/user-needs.md +2 -2
- package/src/compliance/dhf-templates/iec-62366/urra.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/fmea.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/har.md +4 -4
- package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/rmp.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/rmr.md +1 -1
- package/src/compliance/iso14971/risk_management_file.sysml +1 -1
- package/src/compliance/postmarket/memo_postmarket.sysml +2 -2
- package/src/core/common/memo_common.sysml +123 -14
- package/src/core/consistency_rules/consistency_rules.sysml +2 -2
- package/src/core/dimensions/dimensions.sysml +45 -24
- package/src/core/enumerations/memo_enumerations.sysml +11 -16
- package/src/core/methodology_scope/methodology_scope.sysml +10 -28
- package/src/core/relationships/memo_relationships.sysml +178 -146
- package/src/core/stdlib/{collections.sysml → collections/collections.sysml} +1 -1
- package/src/core/stdlib/{functions.sysml → functions/functions.sysml} +1 -1
- package/src/core/stdlib/{scalars.sysml → scalars/scalars.sysml} +1 -1
- package/src/core/stdlib/{time.sysml → time/time.sysml} +1 -1
- package/src/core/terminology/terminology.sysml +35 -0
- package/src/memo_namespaces.sysml +247 -302
- package/src/methodology/{memo_core.sysml → core/memo_core.sysml} +19 -13
- package/src/methodology/{memo_gates.sysml → gates/memo_gates.sysml} +1 -1
- package/src/methodology/{memo_patterns.sysml → patterns/memo_patterns.sysml} +1 -1
- package/src/methodology/{memo_profiles.sysml → profiles/memo_profiles.sysml} +27 -35
- package/src/methodology/{memo_workflow.sysml → workflow/memo_workflow.sysml} +1 -1
- package/src/rules/closure/closure_rules.sysml +11 -11
- package/src/rules/coverage/coverage_rules.sysml +8 -8
- package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
- package/src/rules/lifecycle/lifecycle_rules.sysml +1 -1
- package/src/rules/ontology/ontology_invariants.sysml +133 -0
- package/src/rules/quantitative/quantitative_rules.sysml +2 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +189 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +0 -1
- package/src/viewpoints/context/context_viewpoint.sysml +1 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +8 -8
- package/src/viewpoints/functional/{function_allocation_view.sysml → function_allocation_view/function_allocation_view.sysml} +1 -1
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/{system_functional_tree_view.sysml → system_functional_tree_view/system_functional_tree_view.sysml} +1 -1
- package/src/viewpoints/logical/logical_viewpoint.sysml +0 -1
- package/src/viewpoints/operational/operational_viewpoint.sysml +1 -2
- package/src/viewpoints/operational/{use_case_view.sysml → use_case_view/use_case_view.sysml} +1 -1
- package/src/viewpoints/physical/physical_viewpoint.sysml +0 -1
- package/src/viewpoints/requirements/{requirements_traceability_view.sysml → requirements_traceability_view/requirements_traceability_view.sysml} +1 -1
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
- package/src/viewpoints/risk/{risk_chain_view.sysml → risk_chain_view/risk_chain_view.sysml} +2 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
- package/src/viewpoints/software/{software_architecture_view.sysml → software_architecture_view/software_architecture_view.sysml} +1 -1
- package/src/viewpoints/software/software_viewpoint.sysml +1 -2
- package/src/viewpoints/usability/usability_viewpoint.sysml +0 -1
- package/src/viewpoints/verification/verification_viewpoint.sysml +0 -1
- package/template/memo.package.yaml +1 -1
- package/template/src/catalog/starter.sysml +3 -3
- package/examples/gpca-pump/model/samples/README.md +0 -24
- package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +0 -9
- package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +0 -99
- package/src/architecture/assurance/memo_assurance.sysml +0 -29
- package/src/architecture/context/memo_context.sysml +0 -58
- package/src/architecture/functions/memo_functions.sysml +0 -30
- package/src/architecture/hardware_structure/memo_hardware_structure.sysml +0 -15
- package/src/architecture/interfaces/memo_interfaces.sysml +0 -103
- package/src/architecture/logical_structure/memo_logical_structure.sysml +0 -10
- package/src/architecture/operational/memo_operational.sysml +0 -51
- package/src/architecture/software_structure/memo_software_structure.sysml +0 -44
- package/src/architecture/system/memo_system_analysis.sysml +0 -54
- package/src/artifacts/clinical_safety_report.sysml +0 -12
- package/src/artifacts/cybersecurity_assessment_report.sysml +0 -12
- package/src/artifacts/design_change_log.sysml +0 -12
- package/src/artifacts/design_history_file_index.sysml +0 -12
- package/src/artifacts/design_input_plan.sysml +0 -12
- package/src/artifacts/design_output_plan.sysml +0 -12
- package/src/artifacts/evidence_record.sysml +0 -12
- package/src/artifacts/failure_mode_effects_analysis.sysml +0 -12
- package/src/artifacts/hazard_analysis_report.sysml +0 -12
- package/src/artifacts/labeling_specification.sysml +0 -12
- package/src/artifacts/requirements_specification.sysml +0 -12
- package/src/artifacts/requirements_traceability_matrix.sysml +0 -12
- package/src/artifacts/risk_management_plan.sysml +0 -12
- package/src/artifacts/software_design_description.sysml +0 -12
- package/src/artifacts/software_development_plan.sysml +0 -12
- package/src/artifacts/soup_list.sysml +0 -12
- package/src/artifacts/system_architecture_description.sysml +0 -12
- package/src/artifacts/test_protocol.sysml +0 -12
- package/src/artifacts/test_report.sysml +0 -12
- package/src/artifacts/threat_model_report.sysml +0 -12
- package/src/artifacts/usability_engineering_report.sysml +0 -12
- package/src/medical_device_library.sysml +0 -100
- /package/src/methodology/{memo_archetypes.sysml → archetypes/memo_archetypes.sysml} +0 -0
- /package/src/methodology/{memo_rules.sysml → rules/memo_rules.sysml} +0 -0
- /package/src/methodology/{memo_viewpoints.sysml → viewpoints/memo_viewpoints.sysml} +0 -0
- /package/src/viewpoints/clinical/{clinical_evidence_view.sysml → clinical_evidence_view/clinical_evidence_view.sysml} +0 -0
- /package/src/viewpoints/context/{system_context_view.sysml → system_context_view/system_context_view.sysml} +0 -0
- /package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view.sysml → cybersecurity_assessment_view/cybersecurity_assessment_view.sysml} +0 -0
- /package/src/viewpoints/cybersecurity/{threat_model_view.sysml → threat_model_view/threat_model_view.sysml} +0 -0
- /package/src/viewpoints/logical/{logical_architecture_view.sysml → logical_architecture_view/logical_architecture_view.sysml} +0 -0
- /package/src/viewpoints/physical/{network_topology_view.sysml → network_topology_view/network_topology_view.sysml} +0 -0
- /package/src/viewpoints/physical/{physical_bom_view.sysml → physical_bom_view/physical_bom_view.sysml} +0 -0
- /package/src/viewpoints/usability/{usability_engineering_view.sysml → usability_engineering_view/usability_engineering_view.sysml} +0 -0
- /package/src/viewpoints/verification/{verification_coverage_view.sysml → verification_coverage_view/verification_coverage_view.sysml} +0 -0
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ pin an exact release; the package has no repository or runtime dependency on Mem
|
|
|
18
18
|
Tools or Memo Architect.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
pnpm add @memoarchitect/ontology@0.
|
|
21
|
+
pnpm add @memoarchitect/ontology@0.6.0
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
For coordinated development, the private `memo-meta` workspace checks out
|
|
@@ -50,16 +50,17 @@ methodologies/gpca/ @memoarchitect/methodology-gpca descriptor
|
|
|
50
50
|
template/ complete starter project copied by memo init
|
|
51
51
|
examples/gpca-pump/ reference model (not a scaffold template)
|
|
52
52
|
src/ all reusable .sysml content (namespace = directory)
|
|
53
|
-
|
|
53
|
+
memo_namespaces.sysml public memo import and nested namespace map
|
|
54
54
|
core/ common/ enumerations/ relationships/
|
|
55
55
|
dimensions/ semantics/ + stdlib/* (KerML wrapper)
|
|
56
|
-
architecture/
|
|
57
|
-
|
|
56
|
+
architecture/ operational/ functional/ logical/ implementation/ realization/
|
|
57
|
+
assurance/ requirements/ safety_risk/ cybersecurity/ human_factors/ verification_validation/
|
|
58
58
|
compliance/ artifacts/ change/ document_views/ postmarket/ iso14971/
|
|
59
59
|
viewpoints/ reusable viewpoint and view definitions
|
|
60
60
|
rules/ closure/ coverage/ crosslayer/ lifecycle/ quantitative/ (native constraint defs)
|
|
61
61
|
artifacts/ artifact kinds (memo::artifacts)
|
|
62
62
|
methodology/ default methodology
|
|
63
|
+
examples/extensions/ optional domain modules selected by methodology
|
|
63
64
|
```
|
|
64
65
|
|
|
65
66
|
## Build / verify
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Connected patient monitor
|
|
2
|
+
|
|
3
|
+
A focused MEMO example for a connected patient monitor.
|
|
4
|
+
|
|
5
|
+
- `model/connected_patient_monitor.sysml` is the public parent package.
|
|
6
|
+
- `model/catalog/` holds the canonical model elements.
|
|
7
|
+
- `model/viewpoints/` holds diagram views of that catalog.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Focused example: connected, distributed device system. Bedside monitor →
|
|
2
|
+
// gateway → hospital system, with typed network interfaces, a trust boundary
|
|
3
|
+
// at the hospital network edge, and an ISO/IEEE 11073-coded measurement item.
|
|
4
|
+
package memo_examples_connected_patient_monitor {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_core_enumerations::*;
|
|
8
|
+
private import memo_core_terminology::*;
|
|
9
|
+
private import memo_core_relationships::*;
|
|
10
|
+
private import memo_architecture_logical_structure::*;
|
|
11
|
+
private import memo_architecture_logical_interfaces::*;
|
|
12
|
+
private import memo_assurance_cybersecurity::*;
|
|
13
|
+
|
|
14
|
+
part lcMonitor : LogicalComponent {
|
|
15
|
+
attribute :>> id = "CPM-LC-001"; attribute :>> name = "BedsideMonitor";
|
|
16
|
+
attribute :>> responsibility = "Acquire and display vitals; publish measurements.";
|
|
17
|
+
}
|
|
18
|
+
part lcGateway : LogicalComponent {
|
|
19
|
+
attribute :>> id = "CPM-LC-002"; attribute :>> name = "WardGateway";
|
|
20
|
+
attribute :>> responsibility = "Aggregate device data; bridge device LAN to hospital network.";
|
|
21
|
+
}
|
|
22
|
+
part lcCdrService : LogicalComponent {
|
|
23
|
+
attribute :>> id = "CPM-LC-003"; attribute :>> name = "ClinicalDataRepository";
|
|
24
|
+
attribute :>> externalOwner = "hospital IT";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Typed measurement item, coded against ISO/IEEE 11073-10101.
|
|
28
|
+
item spo2Item : LogicalExchangeItem {
|
|
29
|
+
attribute :>> id = "CPM-IT-001"; attribute :>> name = "SpO2Measurement";
|
|
30
|
+
attribute :>> contentKind = FlowContentKind::measurement;
|
|
31
|
+
attribute :>> unit = "%";
|
|
32
|
+
attribute :>> timestampRequired = true;
|
|
33
|
+
attribute :>> codes = mdcSpo2;
|
|
34
|
+
}
|
|
35
|
+
attribute mdcSpo2 : TerminologyCode {
|
|
36
|
+
attribute :>> systemUri = "urn:iso:std:iso:11073:10101";
|
|
37
|
+
attribute :>> code = "150456";
|
|
38
|
+
attribute :>> display = "MDC_PULS_OXIM_SAT_O2";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
part exSpo2ToGateway : LogicalExchange {
|
|
42
|
+
attribute :>> id = "CPM-EX-001"; attribute :>> name = "SpO2ToGateway";
|
|
43
|
+
attribute :>> contentKind = FlowContentKind::measurement;
|
|
44
|
+
attribute :>> direction = DirectionKind::output;
|
|
45
|
+
ref :>> exchangedItem = spo2Item;
|
|
46
|
+
}
|
|
47
|
+
connection : LogicalConnector connect sourceComponent ::> lcMonitor to targetComponent ::> lcGateway {
|
|
48
|
+
attribute :>> contentKind = FlowContentKind::measurement;
|
|
49
|
+
attribute :>> direction = DirectionKind::output;
|
|
50
|
+
}
|
|
51
|
+
connection : LogicalConnector connect sourceComponent ::> lcGateway to targetComponent ::> lcCdrService {
|
|
52
|
+
attribute :>> contentKind = FlowContentKind::information;
|
|
53
|
+
attribute :>> direction = DirectionKind::output;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Network interface with cybersecurity properties; trust boundary at the
|
|
57
|
+
// hospital network edge.
|
|
58
|
+
interface ifHl7Feed : Interface {
|
|
59
|
+
attribute :>> id = "CPM-IF-001"; attribute :>> name = "GatewayToCdrFeed";
|
|
60
|
+
attribute :>> protocol = "HL7 FHIR REST over TLS 1.3";
|
|
61
|
+
attribute :>> securityCriticality = CriticalityKind::high;
|
|
62
|
+
attribute :>> patientContactInterface = false;
|
|
63
|
+
}
|
|
64
|
+
item tbHospitalEdge : TrustBoundary {
|
|
65
|
+
attribute :>> id = "CPM-TB-001"; attribute :>> name = "DeviceLanToHospitalNetwork";
|
|
66
|
+
}
|
|
67
|
+
connection : CrossesTrustBoundary connect boundary ::> tbHospitalEdge to crossingItem ::> ifHl7Feed {
|
|
68
|
+
attribute :>> crossingKind = InterfaceKind::network;
|
|
69
|
+
}
|
|
70
|
+
}
|
package/examples/connected-patient-monitor/model/viewpoints/connected_patient_monitor_overview.sysml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
package memo_examples_connected_patient_monitor_viewpoints {
|
|
2
|
+
private import memo_examples_connected_patient_monitor::*;
|
|
3
|
+
private import memo_viewpoints_definitions::*;
|
|
4
|
+
private import memo_core_enumerations::*;
|
|
5
|
+
view connectedPatientMonitorOverview : MemoDiagramView { expose memo_examples_connected_patient_monitor::*; attribute depth = 2; attribute :>> title = "Connected Patient Monitor Overview"; attribute :>> viewKind = DiagramViewKind::interconnection; attribute :>> diagramType = "ibd"; }
|
|
6
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Embedded infusion pump
|
|
2
|
+
|
|
3
|
+
A focused MEMO example for an embedded infusion pump.
|
|
4
|
+
|
|
5
|
+
- `model/embedded_infusion_pump.sysml` is the public parent package.
|
|
6
|
+
- `model/catalog/` holds the canonical model elements.
|
|
7
|
+
- `model/viewpoints/` holds diagram views of that catalog.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Focused example: embedded programmable device — the three software views
|
|
2
|
+
// (module / runtime / deployment) on a minimal infusion pump.
|
|
3
|
+
// SoftwareItem buildsInto DeploymentUnit deploysTo ProcessingNode;
|
|
4
|
+
// SoftwareComponent hostedBy ProcessingNode with scheduling properties.
|
|
5
|
+
package memo_examples_embedded_infusion_pump {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_core_relationships::*;
|
|
10
|
+
private import memo_architecture_implementation_software_structure::*;
|
|
11
|
+
private import memo_architecture_implementation_software_runtime::*;
|
|
12
|
+
private import memo_architecture_realization_deployment::*;
|
|
13
|
+
private import memo_architecture_realization_physical::*;
|
|
14
|
+
|
|
15
|
+
// Module view (IEC 62304).
|
|
16
|
+
part swInfusionControl : SoftwareModule {
|
|
17
|
+
attribute :>> moduleKind = ModuleKind::item;
|
|
18
|
+
attribute :>> id = "EIP-SW-001"; attribute :>> name = "InfusionControlItem";
|
|
19
|
+
attribute :>> iec62304Role = "software item, class C";
|
|
20
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
21
|
+
}
|
|
22
|
+
part swMotorDriver : SoftwareModule {
|
|
23
|
+
attribute :>> moduleKind = ModuleKind::unit;
|
|
24
|
+
attribute :>> id = "EIP-SW-002"; attribute :>> name = "MotorDriverUnit";
|
|
25
|
+
attribute :>> implementationLanguage = "C";
|
|
26
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
27
|
+
}
|
|
28
|
+
connection : Realizes connect realizing ::> swMotorDriver to realized ::> swInfusionControl;
|
|
29
|
+
|
|
30
|
+
// Runtime view.
|
|
31
|
+
part rtControlLoop : SoftwareComponent {
|
|
32
|
+
attribute :>> runtimeKind = RuntimeKind::task;
|
|
33
|
+
attribute :>> id = "EIP-RT-001"; attribute :>> name = "ControlLoopTask";
|
|
34
|
+
attribute :>> periodMs = 10.0;
|
|
35
|
+
attribute :>> deadlineMs = 10.0;
|
|
36
|
+
attribute :>> wcetMs = 2.5;
|
|
37
|
+
attribute :>> schedulingPolicy = SchedulingPolicyKind::rateMonotonic;
|
|
38
|
+
attribute :>> restartPolicy = "watchdog reset to safe state (pump stopped)";
|
|
39
|
+
attribute :>> faultContainment = "MPU-protected region; safe-state on overrun";
|
|
40
|
+
}
|
|
41
|
+
connection : Realizes connect realizing ::> rtControlLoop to realized ::> swInfusionControl;
|
|
42
|
+
|
|
43
|
+
// Deployment view.
|
|
44
|
+
part duControlImage : DeploymentUnit {
|
|
45
|
+
attribute :>> id = "EIP-DU-001"; attribute :>> name = "ControlFirmwareImage";
|
|
46
|
+
attribute :>> unitKind = "signed firmware image";
|
|
47
|
+
attribute :>> version = "3.1.0";
|
|
48
|
+
attribute :>> integrityProtection = "signature verified by boot loader";
|
|
49
|
+
}
|
|
50
|
+
part mcuSafety : ProcessingNode {
|
|
51
|
+
attribute :>> id = "EIP-HW-001"; attribute :>> name = "SafetyMCU";
|
|
52
|
+
attribute :>> nodeKind = ProcessingNodeKind::microcontroller;
|
|
53
|
+
attribute :>> realTimeCapable = true;
|
|
54
|
+
attribute :>> supportsContainerization = false;
|
|
55
|
+
}
|
|
56
|
+
part rteBareMetal : RuntimeEnvironment {
|
|
57
|
+
attribute :>> id = "EIP-RTE-001"; attribute :>> name = "StaticRTOS";
|
|
58
|
+
attribute :>> osOrRtos = "static-priority RTOS, no dynamic allocation";
|
|
59
|
+
}
|
|
60
|
+
connection : BuildsInto connect module ::> swInfusionControl to deploymentUnit ::> duControlImage;
|
|
61
|
+
connection : DeploysTo connect deploymentUnit ::> duControlImage to node ::> mcuSafety {
|
|
62
|
+
attribute :>> deploymentKind = DeploymentKind::embedded;
|
|
63
|
+
}
|
|
64
|
+
connection : HostedBy connect hostAssembly ::> mcuSafety to processingNode ::> rtControlLoop;
|
|
65
|
+
connection : ProvidesEnvironment connect node ::> mcuSafety to environment ::> rteBareMetal;
|
|
66
|
+
}
|
package/examples/embedded-infusion-pump/model/viewpoints/embedded_infusion_pump_overview.sysml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
package memo_examples_embedded_infusion_pump_viewpoints {
|
|
2
|
+
private import memo_examples_embedded_infusion_pump::*;
|
|
3
|
+
private import memo_viewpoints_definitions::*;
|
|
4
|
+
private import memo_core_enumerations::*;
|
|
5
|
+
view embeddedInfusionPumpOverview : MemoDiagramView { expose memo_examples_embedded_infusion_pump::*; attribute depth = 2; attribute :>> title = "Embedded Infusion Pump Overview"; attribute :>> viewKind = DiagramViewKind::general; attribute :>> diagramType = "bdd"; }
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Extension examples
|
|
2
|
+
|
|
3
|
+
An extension is a regular SysML package selected by a MEMO methodology. MEMO
|
|
4
|
+
does not define a separate extension metaclass. `MethodologyDefinition` and
|
|
5
|
+
`ProjectMethodBinding` already accept packages through `includedModule`.
|
|
6
|
+
|
|
7
|
+
- `template/` is the starting structure for an extension.
|
|
8
|
+
- `clinical/` specializes `OperationalWorkflow` with clinical procedure data.
|
|
9
|
+
|
|
10
|
+
Extensions specialize or reference base types. They do not redefine
|
|
11
|
+
activities, workflows, architecture elements, relationships, or constraints
|
|
12
|
+
already expressed by the base ontology.
|
|
13
|
+
|
|
14
|
+
Extension packages remain outside `src/` and outside the `memo::` namespace.
|
|
15
|
+
Projects import an extension package directly and include it in their selected
|
|
16
|
+
methodology.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
name: "@memoarchitect/example-extension-clinical"
|
|
2
|
+
version: "0.6.0"
|
|
3
|
+
type: methodology
|
|
4
|
+
extends: "@memoarchitect/methodology-default"
|
|
5
|
+
sysmlDir: "./src"
|
|
6
|
+
description: "Example methodology extension for clinical-procedure vocabulary"
|
|
7
|
+
license: "MIT"
|
|
8
|
+
tags: ["memo", "methodology", "extension", "clinical"]
|
|
9
|
+
usage: ["extension", "clinical-procedures"]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package memo_extension_clinical_methodology {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
private import memo_methodology_core::*;
|
|
4
|
+
|
|
5
|
+
part clinicalExtensionMethod : MethodologyDefinition {
|
|
6
|
+
attribute :>> id = "EXT-CLINICAL-001";
|
|
7
|
+
attribute :>> name = "ClinicalProcedureExtension";
|
|
8
|
+
attribute :>> version = "0.6.0";
|
|
9
|
+
attribute :>> domain = "clinical procedures";
|
|
10
|
+
attribute :>> description = "Adds optional clinical-procedure vocabulary to a MEMO project.";
|
|
11
|
+
attribute :>> baseMethodName = "MedicalDeviceLightDefault";
|
|
12
|
+
attribute :>> includedModule = "memo_extension_clinical";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Clinical data added to the base operational workflow. Activities, tasks,
|
|
2
|
+
// techniques, variants, and resources continue to use the base ontology.
|
|
3
|
+
package memo_extension_clinical_procedures {
|
|
4
|
+
private import ScalarValues::*;
|
|
5
|
+
|
|
6
|
+
private import memo_core_terminology::*;
|
|
7
|
+
private import memo_architecture_operational_workflows::*;
|
|
8
|
+
|
|
9
|
+
action def ClinicalProcedureWorkflow specializes OperationalWorkflow {
|
|
10
|
+
attribute procedureCode : TerminologyCode[0..1];
|
|
11
|
+
attribute bodySiteCode : TerminologyCode[0..1];
|
|
12
|
+
attribute clinicalObjective : String;
|
|
13
|
+
attribute anesthesiaRequirement : String;
|
|
14
|
+
attribute typicalDuration : String;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Replace the package name and included module with extension-specific names.
|
|
2
|
+
package memo_extension_template {
|
|
3
|
+
private import ScalarValues::*;
|
|
4
|
+
private import memo_methodology_core::*;
|
|
5
|
+
|
|
6
|
+
part extensionMethod : MethodologyDefinition {
|
|
7
|
+
attribute :>> id = "EXT-METH-001";
|
|
8
|
+
attribute :>> name = "ExtensionMethod";
|
|
9
|
+
attribute :>> version = "0.1.0";
|
|
10
|
+
attribute :>> domain = "project extension";
|
|
11
|
+
attribute :>> description = "Adds a project or domain package to the selected MEMO methodology.";
|
|
12
|
+
attribute :>> baseMethodName = "MedicalDeviceLightDefault";
|
|
13
|
+
attribute :>> includedModule = "replace_with_extension_package";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Functional, logical, physical
|
|
2
|
+
|
|
3
|
+
A focused MEMO example separating functional, logical, and physical design.
|
|
4
|
+
|
|
5
|
+
- `model/functional_logical_physical.sysml` is the public parent package.
|
|
6
|
+
- `model/catalog/` holds the canonical model elements.
|
|
7
|
+
- `model/viewpoints/` holds diagram views of that catalog.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Focused example: the realization graph across perspectives.
|
|
2
|
+
// One function is allocated to a logical component and realized by BOTH a
|
|
3
|
+
// software module and a mechanical part — realization is a many-to-many
|
|
4
|
+
// graph, and no layer is a mandatory pipeline stage.
|
|
5
|
+
package memo_examples_functional_logical_physical {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_core_relationships::*;
|
|
10
|
+
private import memo_architecture_operational_activities::*;
|
|
11
|
+
private import memo_architecture_functional_functions::*;
|
|
12
|
+
private import memo_architecture_logical_structure::*;
|
|
13
|
+
private import memo_architecture_implementation_software_structure::*;
|
|
14
|
+
private import memo_architecture_implementation_hardware_structure::*;
|
|
15
|
+
|
|
16
|
+
// Operational world: what the clinician does.
|
|
17
|
+
action actOcclusionResponse : OperationalActivity {
|
|
18
|
+
attribute :>> id = "FLP-ACT-001"; attribute :>> name = "RespondToLineOcclusion";
|
|
19
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Functional: technology-independent responsibility.
|
|
23
|
+
part fnLimitLinePressure : SystemFunction {
|
|
24
|
+
attribute :>> id = "FLP-FN-001"; attribute :>> name = "LimitLinePressure";
|
|
25
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
26
|
+
}
|
|
27
|
+
connection : Enables connect enabling ::> fnLimitLinePressure to enabled ::> actOcclusionResponse;
|
|
28
|
+
|
|
29
|
+
// Logical: solution structure, still technology-independent.
|
|
30
|
+
part lcPressureProtection : LogicalComponent {
|
|
31
|
+
attribute :>> id = "FLP-LC-001"; attribute :>> name = "PressureProtectionElement";
|
|
32
|
+
attribute :>> controlledVariable = "line pressure";
|
|
33
|
+
}
|
|
34
|
+
connection : AllocatedTo connect function ::> fnLimitLinePressure to allocatedElement ::> lcPressureProtection;
|
|
35
|
+
|
|
36
|
+
// Implementation: the SAME logical element is realized by software
|
|
37
|
+
// (pressure-limit supervision) AND mechanics (mechanical relief valve).
|
|
38
|
+
part swPressureSupervisor : SoftwareModule {
|
|
39
|
+
attribute :>> id = "FLP-SW-001"; attribute :>> name = "PressureSupervisor";
|
|
40
|
+
attribute :>> responsibility = "Pause pumping when measured pressure exceeds threshold.";
|
|
41
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
42
|
+
}
|
|
43
|
+
part mechReliefValve : MechanicalPart {
|
|
44
|
+
attribute :>> id = "FLP-HW-001"; attribute :>> name = "MechanicalReliefValve";
|
|
45
|
+
attribute :>> mechanicalFunction = "vents line pressure above mechanical set point, independent of software";
|
|
46
|
+
attribute :>> patientContact = false;
|
|
47
|
+
}
|
|
48
|
+
connection : Realizes connect realizing ::> swPressureSupervisor to realized ::> lcPressureProtection;
|
|
49
|
+
connection : Realizes connect realizing ::> mechReliefValve to realized ::> lcPressureProtection;
|
|
50
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
package memo_examples_functional_logical_physical_viewpoints {
|
|
2
|
+
private import memo_examples_functional_logical_physical::*;
|
|
3
|
+
private import memo_viewpoints_definitions::*;
|
|
4
|
+
private import memo_core_enumerations::*;
|
|
5
|
+
view functionalLogicalPhysicalOverview : MemoDiagramView { expose memo_examples_functional_logical_physical::*; attribute depth = 2; attribute :>> title = "Function to Physical Realization"; attribute :>> viewKind = DiagramViewKind::general; attribute :>> diagramType = "bdd"; }
|
|
6
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# GPCA Pump Reference Example
|
|
2
|
+
|
|
3
|
+
This is the complete MEMO reference model. It demonstrates scenario-driven
|
|
4
|
+
modelling for a generic patient-controlled analgesia infusion pump.
|
|
5
|
+
|
|
6
|
+
Start with `ucDeliverPcaTherapy` in `model/catalog/gpca_operational.sysml`:
|
|
7
|
+
|
|
8
|
+
1. The use case states the clinical goal.
|
|
9
|
+
2. `wfPrepareAndStartTherapy`, `wfManageActiveTherapy`, and
|
|
10
|
+
`wfRespondToTherapyAlarm` are the workflows that support it.
|
|
11
|
+
3. The operational scenarios select normal, alternate, exception, and recovery
|
|
12
|
+
paths through those workflows.
|
|
13
|
+
4. The selected path connects to the explicit ISO 14971 chain
|
|
14
|
+
(`HazardCause` → `Hazard` → `SequenceOfEvents` →
|
|
15
|
+
`HazardousSituation` → `Harm`), initial and residual risk,
|
|
16
|
+
`RiskControlMeasure`, architecture, verification, and evidence.
|
|
17
|
+
|
|
18
|
+
## Layout
|
|
19
|
+
|
|
20
|
+
- `model/catalog/` — canonical model elements, grouped by concern.
|
|
21
|
+
- `model/views/` — diagram and document views; each answers a review question.
|
|
22
|
+
- `methodology/` — GPCA-specific methodology and profile content.
|
|
23
|
+
- `dhf/` — document templates and generated-document material.
|
|
24
|
+
|
|
25
|
+
Read the detailed walkthrough at `docs/examples/gpca-walkthrough.md` before
|
|
26
|
+
browsing the full catalog.
|
|
@@ -4,6 +4,6 @@ projectName: gpca-pump
|
|
|
4
4
|
projectType: device
|
|
5
5
|
|
|
6
6
|
# Phase H: project pins the GPCA-specific methodology.
|
|
7
|
-
# @
|
|
7
|
+
# @memoarchitect/methodology-gpca extends @memoarchitect/methodology-default and subtracts
|
|
8
8
|
# cybersecurity and SOUP for the non-networked prototype variant.
|
|
9
|
-
methodology: "@
|
|
9
|
+
methodology: "@memoarchitect/methodology-gpca@^0.6.0"
|
|
@@ -10,7 +10,7 @@ package memo_examples_gpca_pump_methodology_gpca_profiles {
|
|
|
10
10
|
attribute :>> name = "GPCAPrototypeMethodology";
|
|
11
11
|
attribute :>> version = "1.0";
|
|
12
12
|
attribute :>> domain = "medical device modeling";
|
|
13
|
-
attribute :>> description = "GPCA infusion pump methodology — subtraction-based tailoring for non-networked prototype. Excludes cybersecurity layer and
|
|
13
|
+
attribute :>> description = "GPCA infusion pump methodology — subtraction-based tailoring for non-networked prototype. Excludes cybersecurity layer and SOUP modules.";
|
|
14
14
|
attribute :>> baseMethodName = "MedicalDeviceLightDefault";
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -18,8 +18,8 @@ package memo_examples_gpca_pump_methodology_gpca_scope {
|
|
|
18
18
|
|
|
19
19
|
attribute :>> includedViewpointType = "VP-CTX; VP-LOG; VP-RISK";
|
|
20
20
|
|
|
21
|
-
attribute :>> excludedKind = "CybersecurityAsset; AttackSurface; Threat; Vulnerability; ThreatScenario; CyberHazard; CyberRisk; CyberMitigation; SecurityRequirement; TrustBoundary; SecurityClaim;
|
|
21
|
+
attribute :>> excludedKind = "CybersecurityAsset; AttackSurface; Threat; Vulnerability; ThreatScenario; CyberHazard; CyberRisk; CyberMitigation; SecurityRequirement; TrustBoundary; SecurityClaim; SoftwareModule[moduleKind=soup]";
|
|
22
22
|
|
|
23
|
-
attribute :>> description = "GPCA prototype methodology — subtracts cybersecurity layer (non-networked device) and
|
|
23
|
+
attribute :>> description = "GPCA prototype methodology — subtracts cybersecurity layer (non-networked device) and SOUP modules (no SOUP in prototype). Derived from default methodology by exclusion.";
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
package memo_examples_gpca_pump_model_catalog_gpca_analysis {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
|
-
private import
|
|
4
|
+
private import memo_assurance_safety_risk_analysis::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
7
|
// ── FMEA (IEC 60812) ────────────────────────────────────────
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
package memo_examples_gpca_pump_model_catalog_gpca_architecture {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
|
-
private import
|
|
5
|
-
private import
|
|
4
|
+
private import memo_architecture_implementation_hardware_structure::*;
|
|
5
|
+
private import memo_architecture_implementation_software_structure::*;
|
|
6
6
|
private import memo_architecture_logical_structure::*;
|
|
7
7
|
private import memo_core_relationships::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
@@ -190,49 +190,49 @@ package memo_examples_gpca_pump_model_catalog_gpca_architecture {
|
|
|
190
190
|
attribute :>> complexity = ComplexityKind::high;
|
|
191
191
|
attribute :>> operatingSystem = "synchronous data-flow execution; AADL immediate port semantics (source specifies no timing)";
|
|
192
192
|
}
|
|
193
|
-
part tlm :
|
|
193
|
+
part tlm : SoftwareModule {
|
|
194
194
|
attribute :>> id = "SW-001";
|
|
195
195
|
attribute :>> name = "Top_Level_Mode";
|
|
196
196
|
attribute :>> responsibility = "Ensure system ON/OFF behavior and startup/shutdown checks.";
|
|
197
197
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
198
198
|
attribute :>> complexity = ComplexityKind::medium;
|
|
199
199
|
}
|
|
200
|
-
part config :
|
|
200
|
+
part config : SoftwareModule {
|
|
201
201
|
attribute :>> id = "SW-002";
|
|
202
202
|
attribute :>> name = "Config";
|
|
203
203
|
attribute :>> responsibility = "Prescription entry, drug-library limit checking, confirmation, and persistent storage.";
|
|
204
204
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
205
205
|
attribute :>> complexity = ComplexityKind::high;
|
|
206
206
|
}
|
|
207
|
-
part alarm :
|
|
207
|
+
part alarm : SoftwareModule {
|
|
208
208
|
attribute :>> id = "SW-003";
|
|
209
209
|
attribute :>> name = "Alarm";
|
|
210
210
|
attribute :>> responsibility = "Monitor and notify exceptional conditions.";
|
|
211
211
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
212
212
|
attribute :>> complexity = ComplexityKind::high;
|
|
213
213
|
}
|
|
214
|
-
part logging :
|
|
214
|
+
part logging : SoftwareModule {
|
|
215
215
|
attribute :>> id = "SW-004";
|
|
216
216
|
attribute :>> name = "Logging";
|
|
217
217
|
attribute :>> responsibility = "Append-only event log of doses, mode changes, alarms, and configuration changes.";
|
|
218
218
|
attribute :>> safetyClass = SafetyClassKind::B;
|
|
219
219
|
attribute :>> complexity = ComplexityKind::medium;
|
|
220
220
|
}
|
|
221
|
-
part infusionMgr :
|
|
221
|
+
part infusionMgr : SoftwareModule {
|
|
222
222
|
attribute :>> id = "SW-005";
|
|
223
223
|
attribute :>> name = "Infusion_Manager";
|
|
224
224
|
attribute :>> responsibility = "Handle drug infusion commands and therapy parameters.";
|
|
225
225
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
226
226
|
attribute :>> complexity = ComplexityKind::high;
|
|
227
227
|
}
|
|
228
|
-
part systemMonitor :
|
|
228
|
+
part systemMonitor : SoftwareModule {
|
|
229
229
|
attribute :>> id = "SW-006";
|
|
230
230
|
attribute :>> name = "System_Monitor";
|
|
231
231
|
attribute :>> responsibility = "POST, periodic CPU/RAM/ROM checks, watchdog kicking, and battery supervision.";
|
|
232
232
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
233
233
|
attribute :>> complexity = ComplexityKind::medium;
|
|
234
234
|
}
|
|
235
|
-
part systemStatus :
|
|
235
|
+
part systemStatus : SoftwareModule {
|
|
236
236
|
attribute :>> id = "SW-007";
|
|
237
237
|
attribute :>> name = "System_Status";
|
|
238
238
|
attribute :>> responsibility = "Maintain the shared system status vector (Reservoir_Volume, Volume_Infused, Reservoir_Empty, In_Therapy) consumed by Alarm, Config, and Infusion_Manager.";
|
|
@@ -240,7 +240,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_architecture {
|
|
|
240
240
|
attribute :>> complexity = ComplexityKind::medium;
|
|
241
241
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/System_Status.aadl";
|
|
242
242
|
}
|
|
243
|
-
part outputBus :
|
|
243
|
+
part outputBus : SoftwareModule {
|
|
244
244
|
attribute :>> id = "SW-008";
|
|
245
245
|
attribute :>> name = "OutputBus";
|
|
246
246
|
attribute :>> responsibility = "Aggregate all subsystem outputs into the single GPCA_SW_OUT output vector (mode, commanded flow rate, notifications, prescription echo, status).";
|
|
@@ -2,7 +2,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_behavior_actions {
|
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
private import memo_examples_gpca_pump_model_catalog_gpca_architecture::*;
|
|
4
4
|
|
|
5
|
-
private import
|
|
5
|
+
private import memo_architecture_functional_behavior::*;
|
|
6
|
+
private import memo_architecture_logical_interfaces::*;
|
|
6
7
|
private import memo_core_enumerations::*;
|
|
7
8
|
|
|
8
9
|
// ═════════════════════════════════════════════════════════════
|
|
@@ -16,11 +17,21 @@ package memo_examples_gpca_pump_model_catalog_gpca_behavior_actions {
|
|
|
16
17
|
// ═════════════════════════════════════════════════════════════
|
|
17
18
|
|
|
18
19
|
// ── Action definitions (typed steps with parameters) ────────
|
|
19
|
-
item def SensorStatusVector
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
item def
|
|
23
|
-
|
|
20
|
+
item def SensorStatusVector specializes InterfaceItem {
|
|
21
|
+
attribute :>> itemKind = InterfaceItemKind::data;
|
|
22
|
+
}
|
|
23
|
+
item def AlarmSignal specializes InterfaceItem {
|
|
24
|
+
attribute :>> itemKind = InterfaceItemKind::signal;
|
|
25
|
+
}
|
|
26
|
+
item def BolusRequestSignal specializes InterfaceItem {
|
|
27
|
+
attribute :>> itemKind = InterfaceItemKind::signal;
|
|
28
|
+
}
|
|
29
|
+
item def FlowCommand specializes InterfaceItem {
|
|
30
|
+
attribute :>> itemKind = InterfaceItemKind::command;
|
|
31
|
+
}
|
|
32
|
+
item def TherapyEventRecord specializes InterfaceItem {
|
|
33
|
+
attribute :>> itemKind = InterfaceItemKind::event;
|
|
34
|
+
}
|
|
24
35
|
|
|
25
36
|
action def AcquireSensorData {
|
|
26
37
|
out sensorStatus : SensorStatusVector;
|