{# T1 - FDA AI-DSF performance evidence attachment set (D4 section 2): the cover and fifteen
sections through base.html's furniture. Every value comes from proofpack.render.t1's
context (Number cells carry data-ref / data-kind / data-facet); every sentence is a
claim of run.json rendered by proofpack.render.sentences; customer text is escaped
inside .customer-text; status words only inside .status. No arithmetic here. #}
{% extends "base.html" %}
{% from "_criteria.html" import criteria_table %}
{% from "_figures.html" import curve_figure, calibration_figure, forest_figure %}
{% macro ncell(c, extra="") -%}
{%- endmacro %}
{% macro notes(key) -%}
{% for ref in anchors[key] %}{{ margin_note(ref) }}
{% endfor %}
{%- endmacro %}
{% macro narrative(items) -%}
{% if items %}
{{ page_header() }}
4. Site diversity
{{ notes("s4") }}
{{ placeholder(slots["CT-05"]) }}
{% if site_block %}
Table T1-5 is the site table of section 9 (per site, D4 section 5.3 format).
{% else %}
{{ no_data("No site attribute was supplied: per-site performance is not reported.") }}
{% endif %}
5. Representativeness
{{ notes("s5") }}
{{ placeholder(slots["CT-06"]) }}
The distribution of each attribute in the test set is Table T1-3 (section 2); the adequacy of that distribution for the intended use is the manufacturer's judgement.
6. Reference standard
{{ notes("s6") }}
{{ manufacturer_text("reference standard as declared", reference_standard.type ~ " (" ~ reference_standard.description ~ ")") }}
{{ placeholder(slots["CT-07"]) }}
{{ page_footer() }}
{{ page_header() }}
8. Calibration
{{ notes("s8") }}
{{ placeholder(slots["CT-09"]) }}
{% if calibration.present %}
Table T1-9 - calibration of the declared probability score (D4 section 5.5){% if calibration.curve_note %}; {{ calibration.curve_note }}{% endif %}
| Quantity | Estimate [95% CI] | Method |
{% for r in calibration.rows %}
| {{ r.label }} | {{ ncell(r.cell) }}{{ r.method.text }} |
{% endfor %}
{% if calibration.ipa_tiers or calibration.clustered %}{% endif %}
Decile table - ten equal-mass bins by score; observed k/n (%) with its interval
| Decile | n | Mean predicted | Observed k/n (%) [95% CI] |
{% for d in calibration.deciles %}
| {{ d.bin }} | {{ d.n }} | {{ d.mean_pred }} | {{ ncell(d.observed) }}
{% endfor %}
{% if figures.f4 %}{{ calibration_figure(figures.f4) }}{% endif %}
{% else %}
{% if calibration.reason %}
calibration: null - reason {{ calibration.reason.reason }} (score declared {{ calibration.reason.score_type }}, {{ calibration.reason.orientation }}).
{% else %}
{{ no_data("calibration: null - the run document records no reason") }}
{% endif %}
{% if figures.f4_note %}{{ no_data(figures.f4_note) }}{% endif %}
{% endif %}
{{ narrative(calibration.sentences) }}
{{ page_footer() }}
{{ page_header() }}
10. Fairness (descriptive)
{{ notes("s10") }}
{% if fairness %}
{{ manufacturer_text("fairness declaration (" ~ fairness.author ~ ", " ~ fairness.date ~ ")", "criterion of interest " ~ fairness.criterion_of_interest ~ " on " ~ fairness.attribute ~ "; " ~ fairness.justification) }}
Table T1-13 - gaps of each level against the reference level {{ fairness.reference_level }} (percentage points; AUROC on its own scale). The declared criterion of interest is the manufacturer's; every other gap is descriptive and not a target; the selection-rate gap is descriptive only
| Level | Op. | Δ TPR [95% CI] | Δ FPR [95% CI] | Δ PPV [95% CI] | Δ NPV [95% CI] | Δ AUROC [95% CI] | Selection-rate gap (descriptive) | Calibration by group |
{% for g in fairness.gaps %}
| {{ g.level }} | {{ g.op }} | {{ ncell(g.tpr) }}{{ ncell(g.fpr) }}{{ ncell(g.ppv) }}{{ ncell(g.npv) }}{{ ncell(g.auroc) }}{{ ncell(g.selection) }}{{ g.calibration_reason or "—" }} |
{% endfor %}
{{ narrative(fairness.sentences) }}
{% else %}
{{ no_data("No fairness criterion of interest was declared: no fairness block was computed.") }}
{% endif %}
11. Robustness
{{ notes("s11") }}
{{ no_data("Robustness analyses (leave-one-site-out, threshold sensitivity, missingness) are not computed in this build (v1.1): the run document carries no robustness block.") }}
12. Acceptance criteria
{{ notes("s12") }}
{% if has_criteria %}
{{ criteria_table(criteria_rows) }}
{{ narrative(criterion_sentences) }}
{% else %}
No acceptance criteria were declared; estimates and intervals only.
{% endif %}
{{ page_footer() }}
{{ page_header() }}
13. Performance monitoring
{{ notes("s13") }}
{{ placeholder(slots["CT-11"]) }}
{{ no_data("Monitoring analyses are produced by T3, which is v1.1; they are not part of this attachment set.") }}
14. Inputs for the public submission summary
{{ notes("s14") }}
Supplement only: {{ public_summary_note }}.
Table T1-18 - plain-language numbers (the same Numbers as Tables T1-7 and T1-8)
| Metric | Estimate | 95% CI | n |
{% for r in public_summary %}
| {{ r.metric }} | {{ ncell(r.est) }}{{ ncell(r.ci) }}{{ r.n }} |
{% endfor %}
15. Model card
{{ notes("s15") }}
Note: {{ model_card_note }}.
{{ no_data("The optional model card is not produced in this release; it is scheduled for ProofPack v1.1.") }}
Appendices
Appendix A, the methods appendix, is T7; appendix B, the run manifest, declarations, scope and disclaimer, is T8. Both are written beside this document from the same run.json.
{{ page_footer() }}
{% endblock %}