Getting Started

Installation

macOS (Current Release)

Download the .dmg file from the download page. Open the disk image and drag ClinicalFlow into your Applications folder. On first launch, macOS may ask you to confirm you want to open an app from an identified developer — click Open.

Supported on macOS 11.0 (Big Sur) or later. Optimized for Apple Silicon (M1, M2, M3, M4).

File sizes: The installer is approximately 50 MB. On first launch, ClinicalFlow will prompt you to download a Whisper speech recognition model (465 MB for Small) if you choose offline mode.

Windows & Linux

Windows and Linux builds are in development. Currently, ClinicalFlow is macOS-only. Sign up for notifications on the download page to be notified when these platforms become available.

First Launch & PIN Setup

When you open ClinicalFlow for the first time, you’ll be asked to create a numeric PIN (4–8 digits). This PIN encrypts all clinical data stored on your device using AES-256 encryption.

You’ll enter this PIN every time you open the app. ClinicalFlow never stores your PIN in plaintext — only an Argon2id cryptographic hash is saved for verification.

Important: If you forget your PIN, your data cannot be recovered. The encryption is designed so that only you can access patient information. Write your PIN down and store it securely. The only recovery option is a full PIN reset, which permanently deletes all data.

After creating your PIN, the Welcome Wizard guides you through initial setup.

Welcome Wizard

The Welcome Wizard runs once after PIN creation and walks you through a 5-screen setup flow:

ScreenTitleWhat You Do
Welcome“Welcome to ClinicalFlow”Introduction screen. Click Get Started to begin.
Step 1 of 4“Choose Your Language”Select from 37 supported languages. This sets your transcription, note generation, and UI language.
Step 2 of 4“Choose Your Mode”Select Online (Deepgram + Claude, recommended) or Offline (Whisper + Ollama, privacy-first). You can switch anytime in Settings.
Step 3 of 4“Online Setup” or “Offline Setup”Online: Enter and test your Deepgram and Claude API keys. Offline: Verify Whisper model is ready and test Ollama connection.
Step 4 of 4“You’re All Set!”Quick-start tips showing essential keyboard shortcuts. Click Start Using ClinicalFlow.

After completing the wizard, it never appears again. The welcomeCompleted flag is saved in your configuration. To re-run the setup, delete your auth.json file (see Log Files for file locations).

Demo Mode

ClinicalFlow includes two built-in demo encounters to help you explore the app without a real patient visit.

Accessing Demo Mode

Triple-click the Help button (3 clicks within 400ms). A picker modal appears with two demo scenarios.

Medical Demo

A multi-problem internal medicine encounter with James Robinson (patient), Dr. Patel (physician), and Maria (medical assistant). Covers Type 2 diabetes, hypertension, peripheral neuropathy, and left knee osteoarthritis. The transcript plays back word-by-word with waveform animation (~24 entries).

Dental Demo

A comprehensive dental encounter with Ms. Ramirez (patient) and Dr. Chen (dentist). Covers MOD caries, endodontic failure, impacted wisdom tooth, and a 4-phase treatment plan. The transcript loads instantly (15 entries), the dental chart auto-populates with findings, and the dental_general template is auto-selected.

Demo mode is a great way to test different note templates, dental charting, medical coding, and the verification system before using ClinicalFlow in a real encounter.

System Requirements

Online Mode (Minimum)

Operating SystemmacOS 11.0+ (Apple Silicon recommended)
RAM4 GB
Disk Space~1 GB (app + bundled Whisper model)
InternetRequired (for Deepgram and Claude API calls)
MicrophoneAny USB or built-in microphone
API KeysDeepgram (free tier: $200 credit) + Anthropic

Offline Mode (Recommended)

ProcessorApple Silicon (M1 or later)
RAM8 GB recommended (Whisper + Ollama)
Disk Space~8 GB (app + Whisper model + Ollama model)
InternetNot required (one-time internet needed for initial Ollama model download)
DependenciesOllama (free, separate install from ollama.com)
Recording & Transcription

Recording Basics

The record button is the large circular button at the bottom center of the app. Press it or hit Space to start recording. The button pulses red and a timer counts up in the header.

Controls

ActionButtonShortcut
Start / Stop recordingRecord button (red circle)Space or Cmd+R
Pause / ResumePause button (appears during recording)P

During Recording

  • The timer in the header counts up (MM:SS format)
  • The waveform visualizer animates at 60 FPS to show audio input level
  • Transcript entries appear in real time in the left panel
  • Each entry shows the speaker name, timestamp, and transcribed text
  • The transcript auto-scrolls to the latest entry (can be toggled off in Settings)

Maximum Session Duration

Sessions are limited to 4 hours of continuous recording. When this limit is reached, recording stops automatically.

Crash Recovery

ClinicalFlow writes audio data to disk continuously during recording (flushing every ~10 seconds). If the app crashes mid-recording, your audio is preserved up to the last flush. On restart, ClinicalFlow recovers the session automatically.

Online Transcription (Deepgram)

Online mode uses Deepgram Nova-3 Medical, a cloud-based speech recognition model optimized for clinical encounters. It provides the highest accuracy and real-time speaker diarization.

Setup

  1. Sign up at deepgram.com (free tier includes $200 of credit)
  2. Create an API key in your Deepgram dashboard
  3. Open ClinicalFlow Settings → Transcription → paste your API key → click Save

The connection indicator in the header will show Online — connected when the key is valid.

How It Works

Audio is captured from your microphone, encoded as 16-bit PCM at 16 kHz mono, and streamed to Deepgram over an encrypted WebSocket connection (WSS). Deepgram returns transcription results with word-level timestamps and speaker labels. A keepalive signal is sent every 8 seconds, and utterance boundaries are detected after 1,500ms of silence.

Keyterm Boosting

ClinicalFlow sends up to 100 medical terms to Deepgram as keyterm parameters, drawn from the corrections dictionary and medical dictionary. This improves recognition accuracy for clinical terminology.

Speaker Diarization

Deepgram automatically identifies different speakers in the audio stream. ClinicalFlow maps these speaker IDs to the speakers you’ve defined in the sidebar.

Offline Transcription (Whisper)

Offline mode uses a local Whisper Small model (465 MB, multilingual) running via a whisper-server HTTP sidecar. No audio ever leaves your machine.

How It Works

Audio is captured in 3-second chunks with 0.5-second overlap. Each chunk is sent as a 16 kHz mono WAV to the local whisper-server via HTTP POST. The server keeps the model loaded in memory between requests for fast inference. Chunks below a 200 RMS silence threshold are skipped to avoid processing silence.

Model Details

Model fileggml-small.bin (multilingual) or ggml-small.en.bin (English-only)
Size465 MB each
Startup timeout30 seconds for model loading
Request timeout10 seconds per chunk
Temperature0.0 (deterministic)
ThreadsAuto-detected (minimum 4)
Network binding127.0.0.1 only (no external access)
No speaker diarization: Whisper does not provide speaker diarization. In offline mode, you can manually switch speakers in the sidebar, or use the 1.5-second silence detection heuristic to auto-switch.

Microphone Setup

ClinicalFlow uses your system’s default audio input device. Audio is captured at 16 kHz, 16-bit signed mono via the native audio stack (cpal on Rust).

For best results, use an external USB microphone positioned between you and the patient. Built-in laptop microphones work but capture more ambient noise.

On macOS, you’ll need to grant microphone permission on first launch: System Settings → Privacy & Security → Microphone → enable ClinicalFlow.

Languages (37)

ClinicalFlow supports 37 languages across the full pipeline: transcription, medical term corrections, note generation, and date formatting.

RegionLanguages
English (4)en-US, en-GB, en-AU, en-IN
Romance (8)Spanish, Latin American Spanish, French, Italian, Portuguese, Brazilian Portuguese, Dutch, Romanian
Germanic (4)German, Swedish, Danish, Norwegian
Asian (10)Japanese, Korean, Chinese (Simplified), Chinese (Traditional), Hindi, Tamil, Telugu, Thai, Vietnamese, Indonesian, Malay
Slavic (8)Russian, Ukrainian, Polish, Czech, Slovak, Bulgarian, Croatian, Slovenian
Other (3)Arabic, Hebrew, Turkish, Finnish, Hungarian, Greek

Correction Dictionaries

Medical term corrections are available for 6 languages, totaling 204 patterns:

LanguagePatterns
English82
Spanish30
French29
German21
Portuguese21
Italian21

Languages without dedicated correction dictionaries use the base transcription engine output without post-processing.

Medical Term Corrections

Speech-to-text engines frequently garble medical terminology. ClinicalFlow applies a post-processing step after transcription that fixes common errors using 204 regex patterns across 6 languages.

What Gets Corrected

CategoryExamples
Drug names“metforming” → metformin, “lipator” → Lipitor, “hydroclorothiazide” → hydrochlorothiazide
Conditions“hypertention” → hypertension, “dye-a-beet-eez” → diabetes, “arithemia” → arrhythmia
Abbreviations“bee pee” → BP, “ee kay gee” → EKG
Vital signsCatches unrealistic values like “BP 1420 over 88” and flags for review

Custom Dictionary

Corrections are loaded from language-specific JSON files in the app’s data directory (corrections.json for English, corrections-es.json for Spanish, etc.). You can edit these files to add corrections specific to your specialty:

[
  { "pattern": "\\bmetforming\\b", "flags": "gi", "replacement": "metformin" },
  { "pattern": "\\byour-custom-term\\b", "flags": "gi", "replacement": "CorrectTerm" }
]

ClinicalFlow reloads the corrections file on each app launch. Changes take effect on the next recording.

Hallucination Filtering

Whisper occasionally produces false positive text output from silence or background noise. ClinicalFlow filters these automatically before they reach the transcript.

What Gets Filtered

  • Whisper meta-tags: [blank_audio], (silence), (blank audio), (no audio)
  • Background sounds: (music), (laughter), (coughing), (breathing), (footsteps), and similar
  • YouTube/social media artifacts: “subscribe”, “like and subscribe”, “thank you for watching” (training data leakage from Whisper)
  • Generic filler: “thank you.”, “goodbye.”, “the end.”, single-word outputs
  • Structural patterns: Fully parenthesized strings, repeated words/phrases, empty output
Not configurable. The hallucination filter is hardcoded in the Rust backend (audio.rs). It cannot be modified without recompiling the application.

Medical Vocabulary Conditioning

ClinicalFlow conditions the Whisper model with a prompt containing 55+ medical terms to improve recognition of clinical terminology. This prompt is passed to whisper-server via the --prompt flag.

Term Categories

CategoryCountExamples
Medications62metformin, lisinopril, atorvastatin, gabapentin, warfarin
Conditions80+hypertension, atrial fibrillation, COPD, osteoarthritis
Anatomy21cervical, thoracic, lumbar, bilateral, anterior, posterior
Vitals9systolic, diastolic, blood pressure, heart rate, SpO2
Labs12A1c, CBC, BMP, CMP, TSH, lipid panel, creatinine
Dental35+caries, periodontitis, mesial, occlusal, buccal, pulpitis
Not user-configurable. The medical vocabulary prompt is compiled into the Rust binary. Changing it requires editing audio.rs and recompiling.
Speakers

Speaker Management

The sidebar’s Speakers section lets you define who is in the encounter. Each speaker gets a name, a role, and a unique color that appears in the transcript.

Adding a Speaker

Click the + button in the Speakers section. Enter a name (e.g., “Dr. Martinez”) and select a role. ClinicalFlow automatically assigns a color.

Switching the Active Speaker

Click a speaker’s name in the sidebar to make them the active speaker. All subsequent transcript entries will be attributed to this speaker until you switch again or auto-detection switches for you.

Removing a Speaker

Click the × button next to a speaker’s name. Existing transcript entries from that speaker are preserved.

Roles & Colors

Each speaker can be assigned one of three roles. The role determines how the speaker’s words are categorized in the generated clinical note:

RoleAbbreviationNote Categorization
PhysicianDrStatements go to Objective, Assessment, and Plan sections
PatientPtStatements go to Subjective (chief complaint, symptoms, history)
OtherOtContext-dependent; can represent a nurse, family member, translator, or other participant

Each speaker has a unique color in the transcript, displayed as a left border on each entry for easy visual scanning.

Auto-Detection

When Auto-detect speakers is enabled (Settings → Recording), ClinicalFlow uses two methods to automatically switch speakers:

  • Diarization data (online mode) — Deepgram provides speaker IDs with each transcript segment, and ClinicalFlow maps these to your defined speakers.
  • Silence detection (both modes) — After 1.5 seconds of silence, ClinicalFlow may switch the active speaker. This works best in clear turn-taking conversations.

Auto-detection is not perfect. You can always manually click a speaker in the sidebar to correct it.

Note Generation

Cloud AI (Claude Haiku 4.5)

Cloud AI uses Anthropic’s Claude Haiku 4.5 (claude-haiku-4-5-20251001) to generate clinical notes. It provides the highest quality output with the most natural clinical language.

Setup

  1. Sign up at console.anthropic.com
  2. Create an API key (starts with sk-ant-)
  3. Open ClinicalFlow Settings → AI Note Generation → select Cloud AI
  4. Paste your API key and click Save
  5. Click Test to verify the connection

Technical Details

Modelclaude-haiku-4-5-20251001
Temperature0.3 (generation), 0.1 (verification pass)
Max tokens2,048 per request
Timeout120 seconds
Typical input~1,500 tokens (transcript + system prompt)
Typical output~800 tokens per note

Cost

A full online encounter (Deepgram transcription + Claude note generation with verification) costs approximately $0.10–$0.15 per encounter for a 15-minute visit. This is separate from your ClinicalFlow subscription — you pay Deepgram and Anthropic directly through your own API keys.

How It Works

When you click Generate Note (or press G), ClinicalFlow sends the full transcript to Claude along with a detailed clinical prompt that specifies the note template, evidence-extraction rules, safety constraints, and output structure. Claude’s response streams back in real time — you see the note being written section by section.

Ollama (Local AI)

Ollama runs AI models entirely on your local machine. No data leaves your computer. It’s free, open-source, and supports dozens of models.

Installation

  1. Download Ollama from ollama.com/download
  2. Install and launch it (it runs in the background)
  3. Open Terminal and pull a model: ollama pull llama3.1:8b
  4. In ClinicalFlow Settings → AI Note Generation → select Ollama
  5. Click Test to verify the connection, then Refresh to load available models.

Recommended Models

ModelSizeQualitySpeed
llama3.1:8b4.7 GBGoodFast
mistral:7b4.1 GBGoodFast
gemma2:9b5.4 GBVery GoodMedium
llama3.1:70b39 GBExcellentSlow (needs 64GB+ RAM)

Configuration

Default server URL: http://localhost:11434. ClinicalFlow includes 3 automatic retries for transient failures.

Rule-Based Fallback

If both Cloud AI and Ollama are unavailable, ClinicalFlow falls back to a rule-based note generator. This deterministic system extracts information using pattern matching: vital sign patterns, medication mentions, symptom descriptions, and exam findings.

Rule-based notes are less polished than AI-generated ones but provide a reliable baseline that captures key data points. Select it explicitly in Settings → AI Note Generation → Rule-Based.

Two-Pass Verification

ClinicalFlow’s verification system runs a second AI pass after generating a note. This auditor checks every claim against the original transcript.

CheckDescriptionExample
HallucinationFindings not supported by the transcriptNote says “lungs clear” but no lung exam was discussed
ContradictionSame finding appears as both positive and negative“denies chest pain” but Assessment says “chest pain”
OmissionSomething discussed but missing from the noteLabs ordered but not in the Plan
CategorizationItems in the wrong sectionA new medication listed as “continued”

The verification pass runs at temperature 0.1 for maximum precision. Toggle in Settings → AI Note Generation → Verification pass.

Verification requires AI. The verification pass uses the same AI engine as note generation (Cloud AI or Ollama). It is not available with the rule-based engine.

Clinical Prompt System

ClinicalFlow uses a carefully engineered prompt to guide AI note generation. The prompt includes:

  • Template specification — Exact section headers and structure for the selected template (from all 20 built-in templates)
  • Evidence-extraction rules — Every line must trace back to something explicitly stated in the transcript
  • Omission logic — If a system or exam component was not discussed, it is omitted (not listed as “not assessed”)
  • Pertinent negatives — Only negatives the patient explicitly denied are included
  • Medication categorization — Separates new prescriptions, continued medications, and dosage changes
  • Multilingual output — For non-English languages, an OUTPUT LANGUAGE directive generates clinical content in the target language while keeping section headers in English for the note parser
  • Dental chart integration — When a dental template is selected, dental chart findings are serialized into the prompt
  • Medical/dental coding — When auto-coding is enabled, a separate coding prompt generates ICD-10, CPT, E&M, or CDT codes from the note content
Note Templates

Template Overview

ClinicalFlow includes 20 built-in note templates across 5 categories, plus the ability to create custom templates. Select a template from the dropdown (#formatSelector) in the sidebar, or change your default in Settings.

General Templates (3)

TemplateKeySections
SOAP NotessoapSubjective, Objective, Assessment, Plan
HPI-FocusedhpiPatient Demographics, Chief Complaint, History of Present Illness, Review of Systems, Physical Examination, Assessment & Plan
Problem-OrientedproblemVisit Overview, Problem 1 (SOAP per problem), Medications Summary, Follow-Up

Behavioral Health Templates (2)

TemplateKeySections
DAP Note (Psychiatry)dapData, Assessment, Plan
BIRP Note (Behavioral)birpBehavior, Intervention, Response, Plan

Specialty Templates (10)

TemplateKeySections
CardiologycardiologyCardiac History, Cardiovascular Examination, Diagnostics, Assessment, Plan
OrthopedicsorthopedicsHistory, Musculoskeletal Examination, Imaging, Assessment, Plan
PediatricspediatricsGrowth & Development, History, Physical Examination, Assessment, Plan
OB/GYNobgynOB/GYN History, Physical Examination, Labs & Studies, Assessment, Plan
Emergency / Urgent CareemergencyTriage, History of Present Illness, Physical Examination, Medical Decision Making, Disposition
DermatologydermatologyHistory, Lesion Description, Assessment, Plan
NeurologyneurologyNeurological History, Neurological Examination, Diagnostic Studies, Assessment, Plan
OphthalmologyophthalmologyOphthalmic History, Examination, Assessment, Plan
Preventive / WellnesswellnessPreventive Health, Health Screening, Physical Examination, Counseling & Education, Plan
Procedure NoteprocedurePre-Procedure, Procedure, Findings, Post-Procedure

Dental Templates (5)

Dental templates automatically enable the interactive dental chart in the sidebar.

TemplateKeySections
General Dental Examdental_generalChief Complaint, Dental History, Extraoral Examination, Intraoral Examination, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan
Periodontal Examdental_periodontalChief Complaint, Periodontal History, Periodontal Examination, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan
Endodontic Evaluationdental_endodonticChief Complaint, Endodontic History, Diagnostic Testing, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan
Oral Surgery Consultdental_oral_surgeryChief Complaint, Surgical History, Clinical Examination, Radiographic Findings, Dental Chart Findings, Assessment, Surgical Plan
Prosthodontic Evaluationdental_prosthodonticChief Complaint, Prosthodontic History, Clinical Examination, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan

Custom Templates

Click + Custom Template in the template dropdown to create your own. Provide a name, define section names, and optionally write a custom AI prompt. Custom templates are stored in the ms-custom-templates config key as a JSON array.

Dental Charting

Interactive Dental Chart

When any dental template is selected, a Dental Chart section appears in the sidebar with an “Edit Chart” button. Clicking opens a full-screen SVG dental chart modal.

The chart supports both 32-tooth adult (permanent) and 20-tooth primary (deciduous) dentition with a toggle switch. Teeth use ADA Universal numbering: adult teeth 1–32, primary teeth A–T.

Tooth States (8)

Click any tooth to open a two-tier popup. Select from 8 color-coded clinical states:

StateColorHex
HealthyGreen#34D399
Decay / CariesRed#F87171
MissingGray (40% opacity)#64748B
RestoredBlue#60A5FA
ImplantPurple#A78BFA
Root CanalAmber#FBBF24
FractureOrange#FB923C
ImpactedMagenta#E879F9

Surface Marking

For states that affect specific surfaces (decay, restored, fracture), a second tier of surface buttons appears after selecting the state:

Tooth TypeSurfaces
Posterior (molars/premolars)M (Mesial), O (Occlusal), D (Distal), B (Buccal), L (Lingual)
Anterior (canines/incisors)M (Mesial), I (Incisal), D (Distal), F (Facial), L (Lingual)

Anatomical validation prevents impossible surface combinations. Click outside the popup to save your selection.

AI Integration

Dental chart findings are automatically serialized into the AI prompt during note generation. The format includes dentition type, tooth number, state, and affected surfaces.

Response Parsing

When the AI generates a note mentioning dental findings, ClinicalFlow can parse findings back to the chart. Acronym protection prevents false surface detection for 18 common dental abbreviations: FPD, RPD, ZOE, FGC, PFM, MTA, SDF, BOP, CAL, TMD, TMJ, GBI, OHI, DI, CI, CEJ, PDL, and IPR.

Export

The dental chart SVG and findings table are included in PDF and text exports when enabled in Settings (ms-settings-dentalChartInExport and ms-settings-dentalFindingsInExport).

Periodontal Charting

Periodontal Charting Overview

ClinicalFlow includes a full periodontal charting mode that overlays on the dental chart. When a dental template is active, a “Perio Mode” toggle appears in the dental chart modal. Enabling perio mode transforms the chart into a 6-point probing depth entry system.

Accessing Perio Mode

  • Select any dental template (General Dental, Periodontal Exam, etc.)
  • Open the dental chart modal via Edit Chart
  • Toggle the Perio Mode switch at the top of the chart

What Perio Mode Adds

  • 6-point probing depths per tooth (MB, B, DB, ML, L, DL)
  • Bleeding on probing (BOP) markers per site
  • Recession measurements per site
  • Mobility grades (I, II, III) per tooth
  • Furcation involvement grades (I, II, III) for multi-rooted teeth
  • Clinical attachment level (CAL) auto-calculated from probing depth + recession

All perio data is serialized into the AI prompt during note generation and included in PDF/text exports.

Voice-Driven Entry

Probing depths and perio findings can be entered by voice during a live recording. The perio voice parser recognizes natural dictation patterns and maps them to specific teeth and sites.

Supported Voice Commands

Voice InputParsed As
“Tooth 3, probing 3-2-4-3-2-3”6-point depths for tooth #3: MB=3, B=2, DB=4, ML=3, L=2, DL=3
“Tooth 14, bleeding mesial and distal”BOP marked on MB, ML, DB, DL sites of tooth #14
“Tooth 19, recession 2 millimeters buccal”2mm recession on B site of tooth #19
“Tooth 30, mobility grade 2”Mobility II for tooth #30
“Tooth 3, furcation grade 1”Furcation I for tooth #3

Voice-entered data populates the perio chart in real time. You can also click individual sites on the chart to enter or correct values manually.

Tip: For fastest entry, dictate all 6 probing depths for a tooth as a sequence of numbers (e.g., “3-2-4-3-2-3”). The parser maps them left to right: MB, B, DB, ML, L, DL.

Measurements & Data Points

Each tooth in perio mode tracks the following data points:

MeasurementSitesRangeDescription
Probing Depth (PD)6 per tooth1–15 mmDistance from gingival margin to base of sulcus/pocket
Recession (REC)6 per tooth0–15 mmDistance from CEJ to gingival margin
Bleeding on Probing (BOP)6 per toothYes / NoBleeding observed upon gentle probing
Clinical Attachment Level (CAL)6 per toothCalculatedPD + REC (auto-calculated, not manually entered)
Mobility1 per toothGrade I–IIILateral and vertical tooth movement
Furcation1 per toothGrade I–IIIBone loss at furcation of multi-rooted teeth only

Color Coding

Probing depths are color-coded for quick visual assessment:

DepthColorClinical Significance
1–3 mmGreenNormal / healthy sulcus
4–5 mmYellow / AmberModerate pocketing — monitor or treat
6+ mmRedDeep pocket — active periodontal disease likely

Documentation Completeness Scoring

ClinicalFlow automatically calculates a documentation completeness score for each perio charting session. This helps ensure thorough documentation before generating notes or exporting.

How Scoring Works

The score is a percentage (0–100%) based on the ratio of documented data points to expected data points for the teeth present in the chart. Missing teeth are excluded from the calculation.

ComponentWeightCriteria
Probing depthsPrimaryAll 6 sites recorded for each present tooth
BOPSecondaryBOP status recorded for probed sites
RecessionSecondaryRecession values recorded where applicable
MobilitySupplementalMobility recorded for teeth with deep pockets
FurcationSupplementalFurcation recorded for multi-rooted teeth with bone loss

Score Display

The completeness score appears as a badge in the perio chart header. Scores below 80% display a warning suggesting the provider complete additional measurements before generating the note.

Note: The completeness score is informational — it does not prevent note generation. You can generate a note at any completeness level.
Medical & Dental Coding

Automatic Billing Codes

ClinicalFlow automatically generates billing codes from the generated note content when auto-coding is enabled (ms-settings-autoCoding). Codes appear in a read-only panel (#codingPanel) below the note sections with colored confidence badges.

Confidence Levels

LevelMeaning
HighStrong, specific documentation supports this code
MediumDocumentation supports but lacks some specificity
LowCode is inferred from context; documentation is indirect

Codes are read-only with a copy-to-clipboard option. No direct editing of suggested codes in the UI.

Medical Coding (ICD-10 + CPT)

For medical (non-dental) templates, ClinicalFlow generates:

  • Up to 8 ICD-10-CM diagnosis codes with confidence levels
  • Up to 4 CPT procedure codes with confidence levels
  • E&M level assessment (Level 1–5) based on number of problems addressed, data complexity, and risk of morbidity/mortality

The system uses only real, valid ICD-10-CM and CPT codes.

Dental Coding (CDT + Dental ICD-10)

For dental templates, ClinicalFlow generates CDT D-codes and dental-specific ICD-10 codes. The dental coding engine enforces 4 strict guardrails:

1. Strict Domain Gate

Only CDT D-codes and dental ICD-10 codes are allowed. CPT codes (00100–99499), E&M levels, and non-dental codes are strictly forbidden. Every procedure code must begin with “D”.

2. Depth & Severity Escalator

Never defaults to the shallowest/generic code. If “approaching pulp” or “deep caries” is documented, codes escalate to K04.0/K04.1 rather than K02.51. If “bone loss” or “deep pockets >5mm” is documented, periodontal codes escalate from K05.10 to K05.311+.

3. Structural vs. Positional Trauma

Every injury is classified into exactly one track:

  • Track A (structural failure): cracked/fractured → K03.81, S02.5XXA, D2740, D7140
  • Track B (positional displacement): loosened/luxated → S03.2XXA, M26.30, D7270, D4921

Codes from both tracks are never assigned to the same tooth.

4. Etiology of Absence

For every missing tooth, the reason is determined. Default is acquired (K08.111–K08.409) unless the transcript explicitly states “congenitally absent”, “agenesis”, or “hypodontia” → then congenital (K00.0).

Audit Flags

After billing codes are generated, ClinicalFlow runs an audit pass that checks for common documentation and coding issues. Audit flags appear as collapsible alerts below the coding panel.

What the Audit Checks

Flag TypeDescriptionExample
Unsupported codeA suggested code lacks sufficient documentation in the noteICD-10 code assigned but the condition is only mentioned in the transcript, not the note
Specificity gapA more specific code could be used based on the documentationUnspecified laterality when the note clearly states “left knee”
Missing linkageA procedure code is present without a supporting diagnosis codeCPT procedure assigned without a corresponding ICD-10 diagnosis
E&M mismatchThe E&M level does not align with documentation complexityLevel 5 suggested but only 2 problems documented
Duplicate domainOverlapping codes that may trigger payer rejectionsTwo ICD-10 codes covering the same condition at different specificity levels

Interacting with Flags

Each flag is collapsible — click to expand for details and the specific code(s) involved. Flags are informational only and do not modify the suggested codes. They help providers review and correct coding before submission.

Clinical Warnings

Separate from audit flags, ClinicalFlow generates clinical warnings when the note content suggests potential safety or quality concerns. Warnings appear as highlighted alerts in the coding panel.

Warning Categories

WarningTrigger
Drug interactionTwo or more medications mentioned that have known major interactions
Allergy conflictA prescribed medication matches a documented allergy
Missing follow-upA significant finding is documented but no follow-up plan is specified
Incomplete assessmentA problem is mentioned in the transcript but absent from the Assessment section
Important: Clinical warnings are AI-generated suggestions, not clinical decisions. Always apply independent clinical judgment. ClinicalFlow is a documentation tool, not a clinical decision support system.
Editing & Export

Inline Editing

After note generation, each section is editable directly in the note panel. Click on any section content to make changes. Edits are saved to the active session automatically.

PDF Export

Press E or click the Export PDF button. ClinicalFlow uses a native Swift html2pdf sidecar (WebKit createPDF) to generate a professional PDF with header, formatted sections, disclaimer footer, and optional dental chart.

PDFs are saved to the app’s exports directory with the filename ClinicalFlow_Note_YYYY-MM-DD_HH-MM.pdf.

Text Export

Press T to download the transcript as a plain text file. A native save dialog lets you choose the location. The default filename is ClinicalFlow_Transcript_YYYY-MM-DD.txt.

Copy to Clipboard

Click the Copy button in the note panel header to copy the entire note as plain text. Paste it directly into your EHR (Epic, Cerner, Athena, or any system that accepts text input).

Export Actions

ClinicalFlow provides configurable export actions that appear in the note panel toolbar after note generation. You can enable or disable individual actions to streamline your workflow.

Available Actions

ActionDescriptionDefault
Export PDFGenerate a formatted PDF with header, note sections, dental chart, and disclaimerEnabled
Copy to ClipboardCopy the entire note as plain text for pasting into an EHREnabled
Download TranscriptSave the raw transcript as a .txt fileEnabled
Send to EHRPush the note to a connected EHR system via HL7 (requires EHR integration setup)Hidden until configured
Generate NarrativeCreate an insurance-ready narrative from the note and coding dataEnabled

Action visibility is managed in Settings. Disabled actions are hidden from the toolbar entirely, keeping the interface clean.

Session Archiving

When you click New Session (or press N), ClinicalFlow archives the current encounter. The archive includes the full transcript, generated note, audio recording, dental chart data, coding results, and all session metadata.

Archives are named YYYY-MM-DD_HH-MM_PatientName, encrypted with AES-256-GCM, and sorted newest-first in the archive browser. Audio is stored as a separate unencrypted WAV file.

Integrations

EHR Integration

ClinicalFlow can export clinical notes to Electronic Health Record systems using the HL7 v2 messaging standard. This allows direct transmission of generated notes into your EHR without manual copy-paste.

Setup

Configure EHR integration in Settings → Advanced → EHR Integration:

FieldDescription
Facility NameYour practice or facility name (included in HL7 MSH segment)
Facility IDYour facility’s OID or identifier for HL7 routing
Default Patient MRNDefault Medical Record Number for outgoing messages (can be overridden per session)

How It Works

  • After note generation, click Send to EHR in the export toolbar
  • ClinicalFlow packages the note into an HL7 v2 ORU^R01 message
  • The message includes patient identifiers, note sections, coding data, and dental findings
  • The HL7 message is sent to the configured endpoint
Compatibility: HL7 v2 is supported by most EHR systems including Epic, Cerner, Athena, eClinicalWorks, and NextGen. Contact your EHR vendor for interface setup requirements.

PMS Bridge

The Practice Management System (PMS) Bridge connects ClinicalFlow to your dental or medical practice management software for bidirectional data exchange.

Supported Systems

SystemProtocolData Exchanged
DentrixDatabase bridgePatient demographics, treatment plans, billing codes
EaglesoftDatabase bridgePatient demographics, treatment plans, billing codes
Open DentalDatabase bridgePatient demographics, treatment plans, billing codes
Custom / OtherConfigurableDepends on system capabilities

Configuration

Configure PMS Bridge in Settings → Advanced → PMS Bridge:

FieldDescription
PMS SystemSelect your practice management software from the dropdown
HostDatabase server hostname or IP (e.g., localhost)
PortDatabase port number
DatabaseDatabase name
Username / PasswordDatabase credentials (encrypted at rest)

Use the Test Connection button to verify connectivity before saving. A successful test confirms ClinicalFlow can reach the PMS database.

Network: The PMS Bridge connects over your local network. Ensure the PMS database is accessible from the machine running ClinicalFlow. No data is sent to external servers.

Insurance Narrative Generation

ClinicalFlow can generate insurance-ready narratives from the clinical note and billing codes. These narratives are formatted for insurance claim submissions and pre-authorization requests.

What the Narrative Includes

  • Clinical justification — summarizes the patient’s condition and why the treatment is medically/dentally necessary
  • Supporting documentation — references specific findings from the examination
  • Procedure rationale — links each procedure code to the clinical indication
  • Diagnosis correlation — maps ICD-10 or dental ICD-10 codes to the documented findings

Generating a Narrative

After note generation with coding enabled, click Generate Narrative in the export toolbar. The AI processes the note content, billing codes, and dental chart data to produce a cohesive narrative. The narrative can be copied to clipboard or exported as part of the PDF.

Tip: Insurance narratives work best when the clinical note is thorough. Enable the verification pass to ensure completeness before generating the narrative.
Settings Reference

General & Advanced Tabs

The Settings drawer is organized into two tabs accessible via a segmented control at the top:

TabContainsPurpose
GeneralAccount, Appearance, AI & Transcription, Recording, DentalDay-to-day settings you may adjust frequently
AdvancedEHR Integration, PMS Bridge, Language, SecurityConfigure-once integrations and system settings

Click a tab to switch views. Your selected tab is remembered for the duration of the session.

Appearance

SettingOptionsDescription
ThemeDark / LightSwitches the entire app between dark and light color schemes. Dark is the default.

Transcription Settings

SettingOptionsDescription
ModeOnline / OfflineOnline uses Deepgram Nova-3 Medical. Offline uses Whisper Small. Switch anytime.
Deepgram API KeyText input (masked)Your Deepgram API key. Encrypted at rest.
Recognition Language37 languagesPrimary language for speech recognition. Applies to both modes.

AI Engine Settings

SettingOptionsDescription
EngineCloud AI / Ollama / Rule-BasedWhich system generates clinical notes.
Anthropic API KeyText input (masked)Required for Cloud AI. Encrypted at rest.
Ollama Server URLText inputDefault: http://localhost:11434
Ollama ModelDropdown + RefreshDefault: llama3.1:8b. Click Refresh to load available models.
Verification PassOn / OffRuns a second AI pass to audit the note. Doubles generation time.
Auto CodingOn / OffAutomatically generate billing codes after note generation.

Recording Settings

SettingDefaultDescription
Auto-scroll transcriptOnAutomatically scrolls to the latest transcript entry.
Show timestampsOnDisplays MM:SS markers on each transcript entry.
Auto-detect speakersOnAutomatically switches speakers based on diarization or silence.
Highlight medical termsOffColor-codes 1,300+ recognized conditions, medications, procedures, and anatomy terms.
Include dental chart in exportOnAdds dental chart SVG to PDF exports.
Include dental findings in exportOnAdds dental findings table to exports.

EHR Integration Settings

Found in Settings → Advanced tab → EHR Integration card.

SettingTypeDescription
Facility NameText inputYour practice or facility name for HL7 message headers.
Facility IDText inputOID or identifier used for HL7 routing.
Default Patient MRNText inputDefault Medical Record Number. Can be overridden per session.

PMS Bridge Settings

Found in Settings → Advanced tab → PMS Bridge card.

SettingTypeDescription
PMS SystemDropdownSelect: Dentrix, Eaglesoft, Open Dental, or Custom.
HostText inputDatabase server hostname or IP address.
PortNumber inputDatabase port number.
DatabaseText inputDatabase name on the server.
UsernameText inputDatabase login username.
PasswordText input (masked)Database login password. Encrypted at rest.
Test ConnectionButtonVerifies connectivity to the PMS database.

Language Settings

Found in Settings → Advanced tab → Language card.

SettingOptionsDescription
Recognition Language37 languagesSets the primary language for speech recognition, medical term corrections, note generation, and UI labels. Applies to both online and offline transcription modes.

Security Settings

SettingOptionsDescription
Auto-lock2 / 5 / 10 / 15 / 30 min / NeverLocks after inactivity. Default: 5 minutes. When page is hidden: 60 seconds. Deferred during active recording.
PIN Reset: There is no PIN change feature. To change your PIN, you must use “Reset PIN” which permanently destroys all data (config, sessions, archives, auth) and starts fresh.

Keyboard Shortcuts

ShortcutActionContext
SpaceStart / Stop recordingNot in input/textarea
PPause / Resume recordingWhile recording
GGenerate clinical noteWhen idle, entries exist
EExport note as PDFWhen note generated
NNew sessionAlways (confirm if data exists)
TDownload transcriptWhen entries exist
Cmd/Ctrl+RToggle recordingAlways
Cmd/Ctrl+FSearch transcriptAlways
Cmd/Ctrl+,Open SettingsAlways
EscapeClose all modalsAlways
Security & Privacy

Encryption at Rest

ClinicalFlow encrypts all files containing protected health information using AES-256-GCM with keys derived from your PIN via PBKDF2-HMAC-SHA256 (100,000 iterations).

What Is Encrypted

FileContainsEncrypted?
config.jsonAPI keys, settings, preferences✓ Yes
sessions/active.jsonCurrent transcript, note, dental chart, coding✓ Yes
sessions/archive/*.jsonPast encounter data✓ Yes
auth.jsonPIN hash (Argon2id), welcome flag✗ No (needed before decryption)
sessions/archive/*.wavAudio recordings✗ No (binary audio)
exports/*PDFs and text files✗ No (user-exported)
logs/*.logOperational logs✗ No (sanitized, no PHI)

Each encrypted file has a unique random salt (16 bytes) and nonce (12 bytes) prepended to the ciphertext. Total overhead: 28 bytes per file. Writes are atomic (write to .tmp, then rename) to prevent corruption.

PIN & Lock Screen

The PIN serves two purposes: authentication (proving you’re authorized) and key derivation (your PIN is the cryptographic key that unlocks encrypted files).

  • PIN is verified using Argon2id hashing (memory-hard, resistant to brute force)
  • Only the hash is stored (in auth.json), never the PIN itself
  • PIN length: 4–8 numeric digits
  • No lockout after failed attempts — the encryption itself is the protection
  • Auto-lock default: 5 minutes of inactivity (60 seconds when page is hidden)
  • Auto-lock is deferred during active recording to prevent data loss

Network Requests

DestinationData SentWhenEncryption
wss://api.deepgram.comAudio stream (16-bit PCM, 16 kHz)During online recordingWSS (TLS 1.2+)
https://api.anthropic.comTranscript text + clinical promptDuring Cloud AI note generationHTTPS (TLS 1.2+)
http://localhost:11434Transcript text + promptDuring Ollama note generationNone (localhost only)
https://*.supabase.coAuth tokens, license checksSubscription verificationHTTPS (TLS 1.2+)
Full offline mode: When both transcription (Whisper) and note generation (Ollama or Rule-Based) are set to local, ClinicalFlow makes zero outbound network connections (except periodic subscription verification if applicable).

HIPAA Considerations

ClinicalFlow implements HIPAA technical safeguards: encryption at rest (AES-256-GCM), unique user authentication (PIN), automatic logoff (auto-lock), audit logging (sanitized, no PHI), transmission security (TLS for all network requests), Content Security Policy headers, and localhost-only Whisper binding.

For full HIPAA compliance, your organization also needs Business Associate Agreements (BAAs) with Deepgram and Anthropic if using online features, plus organizational policies covering training, incident response, and access management.

ClinicalFlow is not a covered entity. It is a tool. HIPAA compliance is a shared responsibility between the software (technical safeguards), the API providers (BAAs), and your organization (policies and procedures).

Data Handling Summary

QuestionAnswer
Where is data stored?Locally at ~/Library/Application Support/com.clinicalflow.ai/
Is data encrypted?Yes. AES-256-GCM with PIN-derived keys (config, sessions, archives).
What data leaves my device?Only when using online features: audio to Deepgram, transcript to Anthropic, auth tokens to Supabase.
Can ClinicalFlow see my data?No. There are no ClinicalFlow analytics or telemetry servers.
How do I delete my data?New Session clears active data. Delete individual archives. Or uninstall to remove everything.
What if I lose my PIN?Encrypted data is unrecoverable. Reset PIN destroys all data.
Subscription

Plans & Billing

ClinicalFlow uses Supabase for authentication and Stripe for payment processing.

DetailValue
Free trial14 days with full access
Pro Monthly$25/month
Pro Annual$250/year (saves $50)
Default seats3 per checkout
Offline grace period30 days — if network verification fails but was verified within 30 days, cached status is trusted
Verification intervalEvery 7 days maximum

Subscription States

StateApp Access
trialFull access, shows days remaining
activeFull access
past_dueFull access with payment warning
expiredLocked — shows upgrade options

Manage your subscription through the in-app billing portal, which opens Stripe’s management interface.

Note: Subscription costs are separate from API costs. You pay Deepgram and Anthropic directly through your own API keys for transcription and AI note generation.
Troubleshooting

Microphone Issues

“No microphone found”

Ensure a microphone is connected. Check System Settings → Sound to confirm it’s recognized. Try unplugging and replugging USB microphones.

“Microphone access denied”

macOS: System Settings → Privacy & Security → Microphone → enable ClinicalFlow.

Transcription Issues

Poor transcription accuracy

  • Use an external USB microphone instead of built-in laptop mic
  • Reduce ambient noise (fans, HVAC, other conversations)
  • Speak clearly and at a normal pace
  • Check that the correct language is selected in Settings

Deepgram connection failed

  • Verify your API key in Settings
  • Check your internet connection
  • Check status.deepgram.com for outages
  • Switch to offline mode as a workaround

Ollama Issues

“Ollama not connected”

  • Make sure Ollama is running: ollama list in Terminal
  • If not installed, download from ollama.com
  • Check the server URL in Settings (default: http://localhost:11434)

Out of memory

Switch to a smaller model (e.g., llama3.1:8b instead of llama3.1:70b) or use Cloud AI.

Note Generation Issues

Note seems incomplete or inaccurate

  • Ensure the transcript is complete before generating
  • Enable the verification pass to catch omissions
  • Check that speakers are correctly labeled
  • Try a different template that better matches the encounter type

Cancel a stuck generation

The Generate button becomes a Cancel button during generation. Click it to abort. ClinicalFlow uses an AbortController to cleanly cancel API calls. Timeout is 120 seconds.

Export Issues

PDF export shows blank page

Try exporting again. If the issue persists, use Copy to Clipboard as an alternative.

Save dialog doesn’t appear

Check that ClinicalFlow has file access permissions in System Settings → Privacy & Security → Files and Folders.

Crashes & Recovery

App crashed during recording

Your audio is safe. ClinicalFlow writes to disk every ~10 seconds. On restart, the session is recovered automatically.

App crashed during note generation

The transcript is preserved. Regenerate the note from the saved transcript after restart.

Low memory warning

ClinicalFlow monitors available system memory. Warnings appear at <2 GB free. Close other applications or switch to a smaller model.

Log Files

ClinicalFlow writes structured logs for debugging. Logs never contain patient data.

File Locations

ContentPath
Logs~/Library/Application Support/com.clinicalflow.ai/logs/
All data~/Library/Application Support/com.clinicalflow.ai/

Log files are named clinicalflow-YYYY-MM-DD.log, rotated daily, and auto-cleaned after 30 days.

Architecture

System Architecture

ClinicalFlow is a desktop application built with Tauri v2. The frontend is vanilla HTML/CSS/JavaScript (17 modules, ~6,065 lines) running in a native webview. The backend is Rust (6 modules, ~2,200 lines), handling audio capture, file encryption, and system integration. No JavaScript frameworks are used.

Component Overview

┌─────────────────────────────────────────────────────┐
│                   Tauri Webview                      │
│                                                     │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────┐ │
│  │ Transcript   │  │ Note Panel   │  │ Sidebar   │ │
│  │ Panel        │  │ (editable)   │  │           │ │
│  │              │  │              │  │ Speakers  │ │
│  │ Real-time    │  │ 20 templates │  │ Templates │ │
│  │ entries      │  │ Dental chart │  │ Settings  │ │
│  │ 1,300+ terms │  │ Coding panel │  │ Archive   │ │
│  └──────────────┘  └──────────────┘  └───────────┘ │
│                                                     │
│  17 JS modules — UI, prompts, templates, dental,   │
│  notes, coding, subscription, audio, settings       │
└─────────────────────┬───────────────────────────────┘
                      │  invoke() / listen()
                      │  (26 Tauri IPC commands)
┌─────────────────────┴───────────────────────────────┐
│                  Rust Backend                        │
│                                                     │
│  audio.rs     — cpal capture, whisper-server,       │
│                  hallucination filter, vocab prompt  │
│  storage.rs   — Encrypted sessions, config,         │
│                  archives, PDF export, logging       │
│  crypto.rs    — AES-256-GCM, PBKDF2 key derivation │
│  auth.rs      — Argon2id PIN, auto-lock, AppState   │
│  logging.rs   — Tracing, daily rotation             │
│  lib.rs       — App setup, command registration     │
└─────────────────────┬───────────────────────────────┘
                      │
          ┌───────────┼───────────┐
          ▼           ▼           ▼
┌──────────────┐ ┌─────────┐ ┌──────────────────┐
│whisper-server│ │html2pdf │ │  Local Storage    │
│ (3.44 GB)    │ │ (62 KB) │ │                  │
│              │ │ Swift   │ │ auth.json        │
│ ggml-small   │ │ WebKit  │ │ config.json  🔒  │
│ 465 MB model │ │ PDF gen │ │ active.json  🔒  │
│ HTTP sidecar │ │         │ │ archive/*.json🔒 │
│ 127.0.0.1    │ │         │ │ archive/*.wav    │
└──────────────┘ └─────────┘ │ logs/*.log       │
                             └──────────────────┘

External Services (online mode only):
┌───────────────┐ ┌───────────────┐ ┌──────────────┐
│ Deepgram API  │ │ Anthropic API │ │ Supabase     │
│ WSS streaming │ │ HTTPS (Claude)│ │ Auth + Stripe│
└───────────────┘ └───────────────┘ └──────────────┘

┌───────────────┐
│ Ollama        │
│ localhost     │
│ :11434        │
└───────────────┘

🔒 = AES-256-GCM encrypted with PIN-derived key

Data Formats

File Storage Structure

~/Library/Application Support/com.clinicalflow.ai/
├── auth.json                      PIN hash + welcome flag
├── config.json                    [ENCRYPTED] Settings & API keys
├── sessions/
│   ├── active.json               [ENCRYPTED] Current session
│   └── archive/
│       ├── 2026-02-23_18-45_PatientName.json  [ENCRYPTED]
│       └── 2026-02-23_18-45_PatientName.wav   Audio recording
├── exports/
│   ├── ClinicalFlow_Note_2026-02-23.pdf
│   └── ClinicalFlow_Transcript_2026-02-23.txt
└── logs/
    └── clinicalflow-2026-02-23.log

All session data is stored as JSON files (no database). Sessions include entries, speakers, note sections, dental chart state, and coding results.

Comparison

How ClinicalFlow Compares

An honest comparison of where ClinicalFlow fits relative to other AI clinical documentation tools.

ClinicalFlow’s Strengths

  • Offline mode. Most AI scribes are cloud-only. ClinicalFlow runs with zero internet.
  • 20 specialty templates + dental & perio charting. Covers general, behavioral health, 10 specialties, 5 dental templates, full periodontal charting, and custom templates.
  • Automatic billing codes with audit flags. ICD-10, CPT, E&M, and CDT coding with audit flags and clinical warnings.
  • EHR & PMS integrations. HL7 v2 export to EHR systems, PMS Bridge for Dentrix/Eaglesoft/Open Dental, and insurance narrative generation.
  • Transparent pricing. $25/month with 14-day free trial. Cloud API costs separate and pay-as-you-go.
  • Data stays local. In offline mode, nothing leaves your machine. No ClinicalFlow servers.
  • Open architecture. Bring your own API keys, choose your AI models.
  • Encryption at rest. PIN-based AES-256 encryption is not standard in most scribe tools.

Where Others May Have an Advantage

  • Deep EHR integration. Products like Nuance DAX, Abridge, and Suki offer embedded EHR integration. ClinicalFlow supports HL7 v2 export but does not embed directly inside EHR interfaces.
  • Ambient listening. Some products run continuously without pressing a button. ClinicalFlow requires explicit start/stop.
  • Multi-user and team features. Enterprise products offer multi-provider support, shared templates, and admin dashboards. ClinicalFlow is single-user.
  • Mobile apps. Some competitors have iOS/Android apps. ClinicalFlow is macOS desktop-only.
  • Cross-platform. ClinicalFlow currently runs only on macOS (Apple Silicon). Windows and Linux are planned.

Summary Table

FeatureClinicalFlowTypical Cloud Scribe
Offline mode✓ Full offline available✗ Cloud-only
Note templates20 built-in + customVaries
Dental charting✓ Interactive 32+20 teeth✗ Rarely available
Periodontal charting✓ 6-point probing, voice entry✗ Not available
Billing codes✓ ICD-10, CPT, E&M, CDTVaries
Audit flags✓ Coding audit + clinical warningsVaries
Monthly cost$25/mo + API usage$100–$400/month
Data residencyLocal deviceVendor’s cloud
Encryption at rest✓ AES-256-GCMVaries
EHR integration✓ HL7 v2 export, copy/paste, PDFDirect Epic/Cerner
PMS Bridge✓ Dentrix, Eaglesoft, Open DentalVaries
Insurance narrative✓ AI-generated✗ Rarely available
Mobile app✗ macOS desktop onlyOften ✓
Languages37Varies (often fewer)
ClinicalFlow is best for: Independent practitioners, small practices, dental offices, rural clinics, international settings without reliable internet, and any provider who wants control over their data and costs.
Changelog

Version History

v1.0.0 — Initial Release

February 2026

  • Dual-mode transcription: Deepgram Nova-3 Medical (online) and Whisper Small (offline, 465 MB)
  • AI note generation: Claude Haiku 4.5 (cloud), Ollama (local), and rule-based fallback
  • 20 built-in note templates across 5 categories (General, Behavioral Health, Specialty, Dental, Preventive) plus custom templates
  • Two-pass verification system for hallucination, contradiction, and omission detection
  • Interactive dental chart: 32-tooth adult + 20-tooth primary, 8 states, 5-surface marking
  • Periodontal charting: 6-point probing depths, BOP, recession, mobility, furcation, voice-driven entry
  • Documentation completeness scoring for perio charting sessions
  • Medical coding: ICD-10 (up to 8), CPT (up to 4), E&M level assessment
  • Dental coding: CDT D-codes + dental ICD-10 with 4 guardrails
  • Audit flags and clinical warnings for coding review
  • Multi-speaker management with 3 roles (Physician, Patient, Other) and 1.5s silence detection
  • Medical term post-processor with 204 correction patterns across 6 languages
  • Whisper hallucination filtering and medical vocabulary conditioning (55+ terms)
  • PIN-based authentication with AES-256-GCM encryption at rest (PBKDF2 100k iterations, Argon2id)
  • Auto-lock after configurable inactivity (default: 5 minutes)
  • EHR integration via HL7 v2 export
  • PMS Bridge for Dentrix, Eaglesoft, and Open Dental
  • Insurance narrative generation from notes and billing codes
  • PDF export (Swift WebKit sidecar), text export, clipboard copy, configurable export actions
  • Session archiving with transcript, note, audio, dental chart, and coding data
  • Continuous WAV save (~10s intervals) for crash recovery
  • Structured logging with PHI sanitization (30-day retention)
  • Settings drawer with General/Advanced tabs and squircle card layout
  • Dark and light themes
  • 37-language support (full pipeline: transcription + corrections + notes + UI)
  • 1,300+ medical term highlighting in transcript
  • Welcome wizard (5-screen setup) and 2 demo scenarios (medical + dental)
  • Subscription/licensing via Supabase + Stripe (14-day trial)
  • 10 keyboard shortcuts
  • Built with Tauri v2 for macOS (Apple Silicon)