IEC 62304:2006+A1:2015 Software Lifecycle — EPPA¶
Lifecycle artefacts are missing
As of 2026-05-21, EPPA has working software but no formalised IEC 62304
lifecycle artefacts (no Software Development Plan, no SOUP register, no
V&V plan signed off, no formal Software Architecture Description). This
document defines the artefacts that must exist before EPPA can be the
subject of an EU MDR technical-documentation submission to a notified
body (see 10-eu-mdr-saMD-classification.md).
1. Document identity¶
| Field | Value |
|---|---|
| Document title | IEC 62304 Software Lifecycle Plan — EPPA |
| Document ID | EPPA-SLP-001 |
| Version | 0.1 (draft) |
| Status | Draft — not approved |
| Effective date | n/a |
| Owner | LABIS UCA — Software lead (pending) |
| Linked documents | 10-eu-mdr-saMD-classification.md, 12-iso-14971-risk.md, 50-secdev-checklist.md |
2. Regulatory anchors¶
- IEC 62304:2006+A1:2015 — Medical device software — Software life cycle processes.
- IEC 82304-1:2016 — Health software — Part 1: General requirements for product safety.
- ISO 14971:2019 — Application of risk management to medical devices.
- ISO 13485:2016 — QMS for medical devices (process anchor).
- EU MDR Annex I §17 — General requirements for software.
- MDCG 2019-16 Rev.1 — Cybersecurity for medical devices.
3. Software safety classification (IEC 62304 §4.3)¶
IEC 62304 §4.3 requires the manufacturer to assign a software safety class to the software system (and to each software item, with allowance for the "divide and segregate" principle of §4.3(b)).
3.1 Definitions¶
| Class | Definition (§4.3) |
|---|---|
| Class A | The software system cannot contribute to a hazardous situation; OR a hazardous situation that could result from a software failure does not result in unacceptable risk after consideration of risk control measures external to the software system. |
| Class B | A hazardous situation that could result from a software failure could result in non-serious injury. |
| Class C | A hazardous situation that could result from a software failure could result in death or serious injury. |
3.2 EPPA classification reasoning¶
| Question | Answer |
|---|---|
| Can EPPA software failure lead to a hazardous situation? | Yes. Wrong marker placement, wrong scaling, wrong angle computation or wrong qualitative classification can mislead a clinician's interpretation of postural alignment. |
| Can that hazardous situation result in death? | No. Even worst-case mis-classification leads to mis-prescribed corrective exercises, not life-threatening outcomes. EPPA does not administer energy, drugs or surgery. |
| Can it result in serious injury (per IEC 62304 definition: "injury or illness that directly or indirectly is life threatening, results in permanent impairment of a body function or permanent damage to a body structure, or necessitates medical or surgical intervention to prevent permanent impairment")? | Unlikely. Mis-prescribed corrective exercise is reversible. However, if EPPA outputs were used outside the intended use (e.g. as the sole basis for surgical planning, contraindicated in 01-intended-use-statement.md §5), the worst case could rise toward serious injury. This is mitigated by the non-device disclaimer and the explicit non-claims. |
| Can it result in non-serious injury? | Yes — mild musculoskeletal strain from inappropriate corrective exercise; misallocation of clinical resources; psychological harm from misinformation about postural condition. |
Conclusion: Class B.
Why not Class C
Class C requires that a software failure could result in death or
serious injury after consideration of risk controls external to the
software. With the clinician-in-the-loop control measure (Art. 22 GDPR
non-applicability; explicit clinician judgement required), the residual
severity is non-serious. The MDR Rule 11 classification (Class IIa,
10-eu-mdr-saMD-classification.md) is
consistent with IEC 62304 Class B; the two scales are independent but
typically co-vary.
3.3 Segregation (IEC 62304 §4.3(b))¶
EPPA is currently monolithic — Next.js client + FastAPI server + Python analysis modules in a single repository. The §4.3(b) segregation principle allows the manufacturer to identify software items of higher safety class and segregate them from items of lower safety class. EPPA today does not exploit segregation; the entire system inherits Class B.
A future refactor that isolates the analysis kernel from the presentation layer could enable Class A for the UI shell and Class B only for the kernel, reducing the V&V burden on UI changes. This is a roadmap item, not a current commitment.
4. Required lifecycle artefacts (Class B mapping)¶
The following table maps each IEC 62304 process to the deliverable required for Class B. Process numbers reference IEC 62304 clauses.
| Process / clause | Deliverable | Required for Class B? | EPPA status |
|---|---|---|---|
| §5.1 Software development planning | Software Development Plan (SDP) | Yes | Missing |
| §5.1.6 Configuration management plan | CM Plan (or section of SDP) | Yes | Implicit (Git) — needs formal document |
| §5.1.7 Software problem resolution plan | Problem resolution procedure | Yes | Informal (GitHub Issues) — needs formal document |
| §5.2 Software requirements analysis | Software Requirements Specification (SRS) | Yes | Missing |
| §5.3 Software architectural design | Software Architecture Description (SAD) | Yes (Class B+) | Missing (informal claude.md notes) |
| §5.4 Software detailed design | Detailed Design (Class C only) | No for Class B | n/a |
| §5.5 Software unit implementation | Source code + unit tests | Yes | Partial — vitest/pytest present, no traceability |
| §5.6 Software integration and integration testing | Integration test plan and report | Yes | Partial — playwright e2e present |
| §5.7 Software system testing | System test plan and report | Yes | Missing as a formal artefact |
| §5.8 Software release | Release records (build hash, version, configuration baseline) | Yes | Partial — package.json version present, no formal release record |
| §6 Software maintenance process | Maintenance plan | Yes | Missing |
| §7 Software risk management process | Risk management file (also under ISO 14971) | Yes | DRAFT in 12-iso-14971-risk.md |
| §8 Software configuration management process | CM records | Yes | Partial (Git history) |
| §8.1 Configuration item identification | Inventory of CIs (source, third-party, tools) | Yes | Missing as formal artefact |
| §9 Software problem resolution process | Problem reports + change requests | Yes | Partial (GitHub Issues) — needs traceability |
5. SOUP register (IEC 62304 §5.3.3, §7.1.3, §8.1.2)¶
SOUP ("Software Of Unknown Provenance") is third-party software incorporated into the medical device that was not developed under an IEC 62304 process. Every SOUP item requires:
- §5.3.3 — Architectural rationale for inclusion.
- §5.3.4 — Functional and performance requirements.
- §7.1.3 — Risk identification associated with the SOUP item.
- §8.1.2 — Configuration item identification (version, supplier, source).
5.1 EPPA SOUP register — seed¶
| Item | Version | Supplier | Purpose | Safety relevance | Risk control |
|---|---|---|---|---|---|
| Next.js | 15.5.15 | Vercel | Frontend framework | Low — UI shell, not analysis kernel | Pin major version; regression test on upgrade; security advisory monitoring |
| React | 18.3.1 | Meta | UI library | Low | Same as Next.js |
| FastAPI | 0.115.0 | Sebastián Ramírez et al. | Backend HTTP framework | Medium — routes analysis requests | Pin version; integration tests must pass before upgrade |
| NumPy | 2.0.2 | NumPy maintainers | Numerical computation | High — used in marker geometry | Pin minor version; numerical regression test suite against MATLAB reference |
OpenCV (cv2) |
>=4.8.0 | OpenCV maintainers | Image manipulation | Medium — image preprocessing | Pin version; visual regression tests |
| Pillow | not bundled (E3) | Pillow maintainers | Image I/O | Low | Pin version |
| Pydantic | 2.9.2 | Pydantic | Request/response validation | Medium — input sanitisation surface | Pin major; security advisory monitoring |
| SQLAlchemy (planned) | >=2.0,<3 | SQLAlchemy | ORM | Medium — data integrity | Standard advisory monitoring |
| Argon2-cffi | >=23.1 | hynek | Password hashing | Medium — auth (see 50-secdev-checklist.md) |
Pin version; OWASP ASVS V2 alignment |
| PyJWT | >=2.8 (with crypto extra) |
maintainers | JWT signing/verification (planned) | Medium — auth surface | Pin version; algorithm pinned to RS256 |
Authoritative machine-generated SOUP register
The table above is a human-readable seed. The authoritative SOUP register
is generated from fronts/eppa/package-lock.json and
fronts/eppa/python/requirements.txt with:
cd fronts/eppa && python3 scripts/supply_chain.py generate --artifact-dir .supply-chain-artifacts.
The generated SBOM and SOUP JSON files are CI/release artifacts and are not
committed by default. The pipeline fails if generation finds no components.
Policy details and the vulnerability allowlist format are documented in
fronts/eppa/docs/security/supply-chain-policy.md.
6. Software Development Plan (skeleton)¶
The SDP must cover, at minimum:
- Scope — what software is covered (EPPA frontend + backend + analysis pipeline; excluded: dev-only tooling).
- Lifecycle model — agile-iterative variant compatible with IEC 62304; reference IEC TR 80002-3:2017 for agile in safety-critical software.
- Roles and responsibilities — software lead, V&V lead, regulatory lead, clinical reviewer, security lead.
- Process inputs — intended use (
01-intended-use-statement.md), risk management (12-iso-14971-risk.md), classification (10-eu-mdr-saMD-classification.md), security checklist (50-secdev-checklist.md). - Standards applied — IEC 62304, IEC 82304-1, ISO 14971, ISO 13485, ISO/IEC 27001 (informative), OWASP ASVS L2 (informative).
- Tools used — Git, GitHub Actions, vitest, pytest, Playwright, MkDocs Material, etc.; tool validation per IEC 62304 §6.8 (qualification of software tools used in safety-critical workflows).
- Deliverables and reviews — for each process clause in §4 above.
- Traceability — requirement → design → code → test, maintained in a traceability matrix.
- Configuration management — Git as the authoritative CI store; release tags as configuration baselines.
- Problem resolution — GitHub Issues as the authoritative system; every problem report has severity, root-cause analysis, and a verified fix.
7. Software Architecture Description (skeleton)¶
Required content per §5.3:
- High-level architecture diagram (Next.js client ↔ FastAPI server ↔ Python analysis kernel).
- Identification of all SOUP (see §5).
- Identification of software items by safety class.
- Interfaces (HTTP API, image upload, marker JSON schema).
- Segregation rationale (none in v1 — entire system Class B; planned isolation of analysis kernel).
- Architectural risk control measures (e.g. clinician-in-the-loop UI; non-device disclaimer ribbon).
8. Verification and validation plan (skeleton)¶
| Activity | IEC 62304 ref | EPPA approach |
|---|---|---|
| Unit testing | §5.5.2 | vitest (TypeScript), pytest (Python). Coverage target ≥ 80 % on analysis kernel modules. |
| Integration testing | §5.6 | API contract tests (FastAPI TestClient); cross-language tests (frontend → backend round-trip). |
| System testing | §5.7 | Playwright e2e covering the four-view capture flow, marker placement, analysis output, CSV/PDF export. |
| Regression testing | §6 (maintenance) | Full suite re-run on every release; numerical regression vs MATLAB reference on a fixed image set. |
| Anomaly handling | §9 | GitHub Issues with severity labels; root-cause documented. |
| Tool validation | §6.8 | Tools used in safety-critical workflow (e.g. NumPy) treated as SOUP; build tools (vitest, pytest, Playwright) recorded with version pins. |
Validation, in the IEC 82304-1 sense, is broader: it includes confirmation that EPPA is fit for its intended use in the clinical environment. This overlaps with the clinical evaluation under EU MDR Art. 61, which is not covered here.
9. Change management (IEC 62304 §6, §8, §9)¶
| Change category | Trigger | Process |
|---|---|---|
| Source-code change | Pull request | PR review by software lead; CI must pass; if change affects safety class, regulatory review. |
| SOUP version bump | Dependabot or manual | Update SOUP register; re-run regression; document in change record. |
| Intended-use change | PR to 01-intended-use-statement.md |
Triggers re-classification (Rule 11), re-DPIA, re-risk-file review, re-translation of disclaimer. |
| Architecture change | Major refactor (e.g. extract analysis kernel) | Update SAD; re-review safety-class segregation; re-V&V plan. |
| Hot fix | Production incident | Emergency change record; root-cause analysis within 5 working days; backport to mainline. |
10. IEC 82304-1 cross-reference (product-level safety and security)¶
IEC 82304-1 is the product-level companion to IEC 62304 (which is process-level). The relevant clause for EPPA is §6 (general requirements including safety and security).
| IEC 82304-1 §6 requirement | EPPA approach | Reference |
|---|---|---|
| §6.1 Product requirements | Intended use + indications + contraindications | 01-intended-use-statement.md |
| §6.2 Health software safety | Risk management file | 12-iso-14971-risk.md |
| §6.3 Health software security | Security checklist (OWASP ASVS L2) | 50-secdev-checklist.md |
| §6.4 Usability | Clinical training programme + user manual | 01-intended-use-statement.md §7 |
| §6.5 Information for safety | Non-device disclaimer + IFU | 91-non-device-disclaimer.md |
11. Open questions for the software lead¶
- Confirm lifecycle model. Pure-waterfall is impractical; pure-agile is not directly compatible with IEC 62304. Recommend IEC TR 80002-3:2017 tailoring.
- Confirm coverage targets. 80 % on the analysis kernel is conventional for Class B; confirm against EPPA's risk file once §10 is signed.
- Confirm SOUP cadence. Quarterly review minimum; weekly for security advisories.
- Confirm tool validation list. Which tools require validation under §6.8 vs which are off-the-shelf and not safety-relevant.
References¶
- IEC 62304:2006+A1:2015, "Medical device software — Software life cycle processes" — https://www.iso.org/standard/64686.html
- IEC 82304-1:2016, "Health software — Part 1: General requirements for product safety" — https://www.iso.org/standard/59543.html
- ISO 14971:2019, "Medical devices — Application of risk management to medical devices" — https://www.iso.org/standard/72704.html
- ISO 13485:2016, "Medical devices — Quality management systems — Requirements for regulatory purposes" — https://www.iso.org/standard/59752.html
- IEC TR 80002-3:2017, "Medical device software — Part 3: Process reference model of medical device software life cycle processes (IEC 62304)" — https://www.iso.org/standard/65694.html
- ISO/IEC 27001:2022, "Information security, cybersecurity and privacy protection — Information security management systems — Requirements" — https://www.iso.org/standard/27001
- MDCG 2019-16 Rev.1, "Guidance on cybersecurity for medical devices" — https://health.ec.europa.eu/system/files/2022-01/md_cybersecurity_en.pdf
- Regulation (EU) 2017/745, Annex I §17 (software) — https://eur-lex.europa.eu/eli/reg/2017/745/oj
- OWASP ASVS v4.0.3 — https://owasp.org/www-project-application-security-verification-standard/