Research prototype · synthetic data only · not for clinical use

The reviewed record for clinical notes

ClinicalBrief turns note text into structured findings, puts every one in front of a clinician before it counts, and links each back to the sentence it came from.

How it works

Clinicians write notes all day, but what is in them is hard to search, check or share.

Every AI output stays pending until a person decides, and every decision is written down.

clinical_note_01.txtsynthetic

54 y/o female. History of type 2 diabetes and hypertension. Denies chest pain. Mother had breast cancer. Continue metformin 500 mg twice daily.

condition medication negated family history
structured findingsexample
  • Type 2 diabetes mellitus
    Condition · E11.9
    approved
  • Hypertension
    Condition · I10
    approved
  • Metformin 500 mg
    Medication · twice daily
    pending
  • Chest pain
    Negated · not recorded as a finding
    excluded
  • Breast cancer
    Family history · not the patient
    excluded
clinical_note_02.txtsynthetic

62 y/o male. Admitted with pneumonia. No fever today. Father has asthma. Started amoxicillin 500 mg three times daily.

condition medication negated family history
structured findingsexample
  • Pneumonia
    Condition · J18.9
    approved
  • Amoxicillin
    Medication · three times daily
    pending
  • Fever
    Negated · not recorded as a finding
    excluded
  • Asthma
    Family history · not the patient
    excluded
clinical_note_03.txtsynthetic

71 y/o female. Known atrial fibrillation and chronic kidney disease. On warfarin 5 mg daily. Denies dizziness. Sister had a myocardial infarction.

condition medication negated family history
structured findingsexample
  • Atrial fibrillation
    Condition · I48.91
    approved
  • Chronic kidney disease
    Condition · N18.9
    pending
  • Warfarin
    Medication · 5 mg daily
    pending
  • Dizziness
    Negated · not recorded as a finding
    excluded
  • Myocardial infarction
    Family history · not the patient
    excluded
  1. 01

    Import

    Synthea notes and structured records, with provenance on every row.

  2. 02

    Extract

    Rule-based findings; negated and family-history mentions are excluded.

  3. 03

    Review

    Approve, edit or reject each finding, with its source sentence.

  4. 04

    Code

    ICD-10 suggestions by dictionary match; the rest stays unmapped.

  5. 05

    Use

    Search, Copilot and FHIR export read reviewed findings only.

Human review & audit

Nothing counts as fact until a person says so

A cross-patient review queue with keyboard shortcuts, bulk approval per note and undo. Conflicting edits are refused, and the graph, Copilot, FHIR export and risk score use reviewed findings only.

review queue
example
Type 2 diabetes mellitus
Condition · E11.9
A

“History of type 2 diabetes and hypertension.”

approved
Hypertension → Essential hypertension
Condition · I10
E

“History of type 2 diabetes and hypertension.”

edited
Stroke
Condition · dictionary match
R

“Heat stroke risk discussed before travel.”

rejected
audit_log
10:41:02 approve type 2 diabetes
10:42:05 edit hypertension
10:43:08 reject stroke
Asthma
Condition · J45.909
A

“Asthma since childhood, uses albuterol as needed.”

approved
Albuterol → Albuterol 90 MCG inhaler
Medication
E

“Asthma since childhood, uses albuterol as needed.”

edited
Dialysis
Procedure · dictionary match
R

“Dialysis was discussed as a future option only.”

rejected
audit_log
11:41:02 approve asthma
11:42:05 edit albuterol
11:43:08 reject dialysis

Every decision writes the review history and an audit row. Keys: A approve, E edit, R reject, U undo.

Record search

Search every note, not just the analysed ones

Postgres full-text search across notes, conditions, medications, procedures, observations and allergies, with date filters and medication start and stop events. The local model may widen the terms; results are always real records.

search records
example
diabetes medication
+ metformin+ insulin+ glipiziderelated terms · local model
  • medicationMetformin 500 MG oral tablet · started2024-03-01
  • note...continue metformin 500 mg twice daily...2024-03-01
  • medicationInsulin glargine · stopped2023-11-20
2019medications · last 12 months2024
"chest pain"
exact phrase · in quotes
  • conditionChest pain (finding) · onset2023-08-14
  • note...presents with chest pain on exertion, relieved by rest...2023-08-14
  • note...follow-up: no further chest pain since last visit...2023-10-02
2021one patient · 20232025
asthma or wheeze
+ albuterol+ inhalereither word · plus related terms
  • conditionAsthma (disorder) · onset2016-05-02
  • medicationAlbuterol 90 MCG inhaler · started2016-05-02
  • note...expiratory wheeze heard on auscultation...2022-01-10
2015all dates · timeline order2024

35,103 synthetic notes searchable · keyword full-text search, not a semantic model

copilot · local model
example

What was the most recent HbA1c?

The most recent HbA1c was 6.8 % on 2024-03-01 E1

E1 · observation · 2024-03-01
Hemoglobin A1c/Hemoglobin.total in Blood: 6.8 %
grounded in sourcesruns on this machine

What allergies does the patient have?

Penicillin allergy, reaction: rash E1 She also reacts to sulfa drugs.

1 statement removed: no source
E1 · allergy · recorded 2018-06-11
Penicillin allergy - rash, moderate
partly groundedruns on this machine

What conditions does the patient have, and should insulin start?

model draft · checked first

Type 2 diabetes mellitus is on the condition list E1 Start insulin 10 units at night.

withheld · the draft gave treatment advice

No generated answer could be verified. These matching records are in the patient's file:

• Diabetes mellitus type 2 (disorder), clinical status: active (2019-03-01) E1

matching records shownruns on this machine

What is the patient's blood type?

I couldn't find evidence for this in the available records.

No record mentions a blood type, so nothing is guessed.

no evidence in recordruns on this machine
Grounded Copilot · prototype

Answers that cite the record, from a model that stays local

Questions are answered from one patient's record by a model running on the same machine. Every claim links to its source and unsupported numbers are flagged. If a draft gives treatment advice, the whole answer is withheld and only the matching records are shown.

Interoperability

A FHIR R4 bundle, validated before it leaves

Patient, encounters, conditions, medications, allergies, procedures and observations from the record, checked against R4 models and reference rules. A bundle that fails validation cannot be downloaded.

fhir r4 export
example
bundle · transaction · passed
PatientEncounterEncounterConditionConditionConditionMedicationStatementMedicationStatementObservationObservationObservationProcedureAllergyIntoleranceEncounter
  • Every resource parses as FHIR R4
  • Every reference resolves inside the bundle
  • Invariants hold (e.g. con-4)
Download bundledownload enabled
bundle · transaction · failed
PatientEncounterConditionConditionMedicationStatementObservationObservationProcedure
  • Every resource parses as FHIR R4
  • Every reference resolves inside the bundle· a reference points outside the bundle
  • Invariants hold (e.g. con-4)
Download bundledownload blocked · 1 check failed

One real export from the demo data: 573 entries, 436 KB, validation passed.

six roles · enforced twice

Built for everyone who touches the record

Each role sees exactly what it needs. Hover or tap a role to see what it can do.

  • See patientsclinicians: assigned patients only
  • Read note text
  • Upload notes, add patients
  • Decide on AI findings
  • Search records
  • Export FHIR
  • Audit log and governance
[clinician]

Sees only the patients assigned to them; uploads notes and decides on AI findings.

Enforced in the API and mirrored in Postgres row-level security. New accounts start as pending, with no access, until an admin grants a role. Reads of clinical data are audited.

Honest about what is built

Implemented means built and tested. Prototype means working but simplified. Not built yet means not built yet.

5 implemented5 prototype3 not built yet
Implemented5
  • Human review and audit trail
    Review queue, undo, conflict checks, governance page
  • Record search
    Postgres full-text search over every note and the structured record
  • FHIR R4 export
    Transaction bundle from the record, structurally validated
  • Roles and row-level security
    Six roles in the API, mirrored in Postgres RLS
  • Synthea import
    Dry run, per-record validation, rejected-record log, idempotent re-import
Prototype5
  • Grounded Copilot
    Local model only; cites sources, flags unsupported claims
  • Entity extraction
    Rule-based dictionary with negation and family-history checks
  • ICD-10 suggestions
    Exact match against a small dictionary; the rest stays unmapped
  • Knowledge graph
    From the record plus reviewed findings only
  • PHI redaction
    Regex patterns; not a validated de-identification method
Not built yet3
  • Accuracy evaluation
    No accuracy figure is shown until measured on a labelled set
  • Semantic search
    Embeddings, kept only if they beat full-text search on a fixed question set
  • De-identified research view
    Researchers get no note text until one exists

See it on 409 synthetic patients

Synthea sample data and the Synthea Coherent Data Set (CC BY 4.0). No real patient data.

How it works