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.

5 min read

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

  1. 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.
  2. 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.
  3. 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 epicmp tool (agreement within one point, see results).
  4. 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.
  5. Documentation: SRS, design description, model card, data documentation with the SCI and sensor annotation records, SBOM, failure-mode list for the risk file.
  6. Final validation run on the frozen version; algorithm validation report.
  7. Study analysis script, tested on synthetic data.
  8. Support the clinical study with the frozen algorithm interface.

To-do list, Corsano

  1. Agree intended use and predicate; schedule a Q-Sub.
  2. Commission cardiologist re-annotation of the exported strips (two readers, adjudication).
  3. 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.
  4. Plan and run the clinical validation study; statistician for sample size.
  5. 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).