Gap analysis and to-do list
FDA 510(k) evidence for the 30-second AF strip classifier: what exists, what is missing, who owns it, and in what order.
Scope: 510(k) for software that classifies a 30-second single-lead ECG strip from the sensor as AF, not AF, or inconclusive. Predicate category 21 CFR 870.2345. Status as of 14 September 2026. Owners: Algorithm (this work), Corsano (regulatory, quality, clinical), Developer (original engine author).
Gap analysis
| # | Submission element | Exists today | Gap | Owner | Status |
|---|---|---|---|---|---|
| 1 | Intended use and indications | wording proposed | formal statement agreed with regulatory | Corsano | open |
| 2 | Predicate and substantial-equivalence table | candidates identified (Apple, Fitbit ECG apps) | comparison table | Corsano | open |
| 3 | Frozen algorithm version | experiment scripts and model files on elon | repository, tag, model hashes, pinned build, clean strip-in / decision-out interface | Algorithm | in progress |
| 4 | Software requirements and design description | pipeline description, feature and threshold tables (RESULTS.md, methods page) | formal SRS / SDS for the frozen version | Algorithm | drafts exist |
| 5 | Model card and training procedure | hyperparameters, features, thresholds, tuning method documented | consolidated model card | Algorithm | drafts exist |
| 6 | Data documentation | dataset table, split rules, audit findings | provenance, licence, consent and annotator record per source; sensor set re-annotation record | Algorithm + Corsano (clinic, cardiologists) | partial |
| 7 | Unit and integration tests, traceability | none | tests with expected values, bit-for-bit reproduction on a fixed strip set, requirement-to-test matrix | Algorithm | open |
| 8 | Validation protocol, pre-specified | targets proposed | written protocol: sets, frozen thresholds, acceptance criteria, CI method, WFDB scoring, subgroups | Algorithm | open |
| 9 | Algorithm validation report (bench) | feasibility results on AFDB, MIT-BIH, held-out sensor patients | single pre-specified run on the frozen version, EC57 tables via WFDB tools | Algorithm | after 3 and 8 |
| 10 | Cardiologist re-annotation of sensor strips | export prepared (2,660 strips, PNG + WFDB, no labels) | two blinded readers, adjudication, interval-level labels | Corsano | open, critical path |
| 11 | Clinical validation study on the device | none | protocol, ethics, simultaneous 12-lead reference, blinded reads, a few hundred subjects enriched for AF, statistical report | Corsano | open, longest item |
| 12 | Study analysis script | none | endpoint computation from reads and algorithm output, tested before unblinding | Algorithm | after 8 |
| 13 | Risk management inputs | failure-mode list in RESULTS.md | hazards integrated into the ISO 14971 file | Algorithm (inputs) + Corsano (file) | partial |
| 14 | Labeling performance section | numbers exist | final numbers from 9 and 11 with CIs, inconclusive rate, exclusions | Corsano, after 9 and 11 | open |
| 15 | Human factors (if consumer-facing) | Corsano process | study on interpretation of AF / not AF / inconclusive | Corsano | open |
| 16 | Cybersecurity, SBOM | Corsano process; dependency list exists | SBOM for the frozen build | Algorithm (SBOM) + Corsano | partial |
| 17 | Predetermined change control plan | decision pending | retraining procedure and re-test criteria, if retraining after clearance is planned | Algorithm + Corsano | decision needed |
| 18 | Beat detector provenance | engine code and models delivered; open questions to the developer | answers on unannotated code state, training environment, IP assignment | Developer + Corsano | open |
| 19 | Pre-submission meeting (Q-Sub) | none | confirm predicate, endpoints and sample size with FDA before the study | Corsano | recommended |
To-do list, Algorithm owner
- Freeze: create the repository, move the pipeline into a versioned module, pin dependencies, tag, record model hashes. Deliverable: tagged release with build instructions. Progress 15 Sep: freeze manifest generator written (model SHA-256, engine commit, feature list, hyperparameters, decision rule); repository and tag pending.
- Tests: unit tests for features, plausibility gate, guard, thresholds, strip decision; integration test reproducing a fixed strip set bit for bit; traceability matrix. Progress 15 Sep: 12 unit tests written and passing (RR features incl. the new lag features, plausibility gate, window labels, hysteresis, gap merging, EC57 scorer, guard, strip rule, model determinism and monotonicity); integration test and traceability matrix pending.
- Validation protocol: write and freeze before any further run; include the WFDB cross-check of the EC57 scorer. Progress 15 Sep: draft protocol page published for review; EC57 scorer cross-checked against the reference
epicmptool (agreement within one point, see results). - Pending experiment: engine-native features on AFDB (running); decide whether morphology features enter the frozen version. Also running: PhysioNet/CinC 2017 (8,528 public single-lead strips) as a second strip-level test set.
- Documentation: SRS, design description, model card, data documentation with the SCI and sensor annotation records, SBOM, failure-mode list for the risk file.
- Final validation run on the frozen version; algorithm validation report.
- Study analysis script, tested on synthetic data.
- Support the clinical study with the frozen algorithm interface.
To-do list, Corsano
- Agree intended use and predicate; schedule a Q-Sub.
- Commission cardiologist re-annotation of the exported strips (two readers, adjudication).
- Secure data documentation from the clinic (SCI) and consent basis for the sensor set; obtain the developer’s answers and IP assignment. Added 15 Sep: obtain the annotation backend repository (ecg-base), which holds the expert-label audit trail and the training folders; the web annotation tool and the beat-classifier training service have been reviewed.
- Plan and run the clinical validation study; statistician for sample size.
- Risk file, human factors, cybersecurity, labeling, eSTAR assembly.
Order and rough timing
Weeks 0-3: freeze, tests, protocol (Algorithm); re-annotation commissioned, Q-Sub requested (Corsano). Weeks 3-6: documentation, SBOM, study script (Algorithm); annotation delivered, study protocol and ethics (Corsano). Weeks 6-8: final validation run and report (Algorithm). Months 3-8: clinical study, then labeling and submission (Corsano).