- Add local Whisper (whisper.cpp / faster-whisper) as transcription provider Set TRANSCRIBE_PROVIDER=local with configurable model size and binary path - Upgrade all refine/instruction inputs to resizable textareas across encounter, dictation, hospital course, chart review, well visit, sick visit - Make AI memory injection flexible: physician preferences and corrections are now actively applied (not just "formatting reference"), while still overridable by current prompt instructions
83 lines
5 KiB
HTML
83 lines
5 KiB
HTML
<div class="module-header">
|
|
<h2><i class="fas fa-microphone"></i> Voice Dictation → HPI</h2>
|
|
<p>Dictate your narrative → AI restructures into polished HPI</p>
|
|
</div>
|
|
|
|
<div class="demographics-bar">
|
|
<div class="demo-field"><label>Patient Age</label><input type="text" id="dict-age" placeholder="e.g., 8 months"></div>
|
|
<div class="demo-field"><label>Gender</label><select id="dict-gender"><option value="">Select</option><option>Male</option><option>Female</option></select></div>
|
|
<div class="demo-field">
|
|
<label>Setting</label>
|
|
<select id="dict-setting">
|
|
<option value="outpatient">Outpatient</option>
|
|
<option value="inpatient">Inpatient/Floors</option>
|
|
<option value="ed">Emergency Dept</option>
|
|
</select>
|
|
</div>
|
|
<div class="demo-field demo-field-model">
|
|
<label><i class="fas fa-robot"></i> Model</label>
|
|
<select class="tab-model-select"></select>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Save/Load bar -->
|
|
<div class="save-bar-wrap">
|
|
<div class="save-bar" id="dict-save-bar">
|
|
<div style="display:flex;align-items:center;gap:8px;flex:1;">
|
|
<i class="fas fa-tag" style="color:var(--g400);font-size:13px;"></i>
|
|
<input type="text" id="dict-label" class="save-label-input" placeholder="Patient label (e.g. John D, Visit #42)">
|
|
</div>
|
|
<button id="btn-dict-save" class="btn-sm btn-ghost"><i class="fas fa-floppy-disk"></i> Save</button>
|
|
<button id="btn-dict-load" class="btn-sm btn-ghost"><i class="fas fa-folder-open"></i> Load</button>
|
|
<button id="btn-dict-new" class="btn-sm btn-ghost" title="Clear all and start new patient" style="color:var(--red);"><i class="fas fa-rotate-left"></i> New</button>
|
|
</div>
|
|
<div id="dict-load-popover" class="enc-load-popover hidden">
|
|
<div class="enc-load-popover-inner">
|
|
<input type="text" id="dict-load-search" class="enc-load-search" placeholder="Search saved encounters...">
|
|
<button class="enc-pop-close btn-sm btn-ghost"><i class="fas fa-times"></i></button>
|
|
</div>
|
|
<div id="dict-pop-list" class="enc-pop-list"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="record-controls">
|
|
<button id="dict-record-btn" class="record-btn btn-purple"><i class="fas fa-microphone"></i><span>Start Dictation</span></button>
|
|
<button id="dict-pause-btn" class="btn-sm btn-ghost hidden" style="margin-left:8px;"><i class="fas fa-pause"></i> Pause</button>
|
|
<div id="dict-recording-indicator" class="recording-indicator hidden"><div class="pulse-dot pulse-purple"></div><span>Dictating... <span id="dict-timer">00:00</span></span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="card-header"><h3><i class="fas fa-file-lines"></i> Dictation</h3><button id="dict-clear" class="btn-sm btn-ghost"><i class="fas fa-eraser"></i> Clear</button></div>
|
|
<div id="dict-transcript" class="editable-box" contenteditable="true" data-placeholder="Dictation appears here or type directly..."></div>
|
|
</div>
|
|
|
|
<div class="soap-options">
|
|
<label>Generate as:</label>
|
|
<select id="dict-output-type">
|
|
<option value="hpi">HPI Only</option>
|
|
<option value="soap-full">Full SOAP Note</option>
|
|
<option value="soap-subjective">SOAP Subjective Only</option>
|
|
</select>
|
|
</div>
|
|
|
|
<button id="dict-generate-btn" class="btn-generate btn-generate-purple"><i class="fas fa-wand-magic-sparkles"></i> Generate</button>
|
|
|
|
<div id="dict-output" class="card output-card hidden">
|
|
<div class="card-header output-header">
|
|
<h3><i class="fas fa-file-medical"></i> Output</h3>
|
|
<div class="output-actions">
|
|
<span id="dict-model-tag" class="model-tag"></span>
|
|
<button class="btn-sm btn-primary" data-action="copy" data-target="dict-hpi-text"><i class="fas fa-copy"></i> Copy</button>
|
|
<button class="btn-sm btn-ghost" data-action="speak" data-target="dict-hpi-text"><i class="fas fa-volume-high"></i> Read</button>
|
|
<button class="btn-sm btn-ghost" data-action="nc-export" data-target="dict-hpi-text" data-label="hpi-dictation"><i class="fas fa-cloud-arrow-up"></i></button>
|
|
</div>
|
|
</div>
|
|
<div id="dict-hpi-text" class="output-text" contenteditable="true"></div>
|
|
<div class="refine-bar">
|
|
<textarea id="dict-refine-input" class="refine-input" rows="2" placeholder="Tell AI to modify..."></textarea>
|
|
<button class="btn-sm btn-primary" id="dict-refine-btn"><i class="fas fa-edit"></i> Refine</button>
|
|
<button class="btn-sm btn-ghost" id="dict-shorten-btn"><i class="fas fa-compress"></i> Shorter</button>
|
|
</div>
|
|
</div>
|