This deep-dive document is updated with every public release. Each version below lists shipped features, the engineering work behind them, and the sales talking points that go with them.
localhost:4145 and access DICOM data, image thumbnails, or OCR results without any credential. On multi-user hospital PCs the exposure surface is non-trivial.crypto.randomBytes(32).toString('hex') and writes the result to bridge.config.json as localToken. GET /health returns { ..., localToken } alongside the existing version/port/ae fields. Every other route runs a middleware check against the x-bridge-local-token header — mismatch or missing header → immediate 401 Unauthorized, request dropped. Frontend patch: src/lib/bridge.ts exports getBridgeLocalToken(), setBridgeLocalToken(token), installBridgeAuthInterceptor(). main.tsx calls installBridgeAuthInterceptor() on startup — patches window.fetch globally so every call to the bridge URL automatically injects the stored token. Token is persisted in localStorage[sc_bridge_local_token]; refreshed on each /health call (Settings.tsx + Patients.tsx). Doctor impact: zero — completely transparent to normal workflow.softcode-bridge.src.js (middleware + /health return), softcode-bridge.js (re-obfuscated), src/lib/bridge.ts (new helpers), src/main.tsx (interceptor install).softcode-bridge.src.js (editable source, 171 KB, git-tracked, never distributed) and softcode-bridge.js (obfuscated output, 278 KB, what doctors receive). build-obfuscate.sh in public/bridge/ runs javascript-obfuscator with RC4 string encryption, control flow flattening (threshold 0.75), dead code injection (0.2), and self-defending mode (crashes if the outer wrapper is tampered). Any future source edits must end with a re-obfuscation run before deployment.javascript-obfuscator installed globally. Re-obfuscate: cd artifacts/usg-reporting/public/bridge && ./build-obfuscate.sh. Output file is what both the .bat installer and the API server's /api/bridge-latest endpoint serve..bat installer requires Windows Scripting Host + internet access for the Node.js download step; some locked-down hospital PCs block PowerShell or MSI installs, and some clinic IT admins refuse to run .bat files. A single-file executable sidesteps all these blockers.pkg tool bundles Node.js runtime + bridge-entry.js entry point into a single self-contained executable. Two targets built:node12-win-x64 target (~30 MB). Node.js 12 supports Windows 7, 8, 10, and 11 × 64-bit. No Node.js installation required.node18-mac-x64 target (~50 MB). macOS x64. No Node.js installation required.public/bridge/dist/ and served from the app. Settings → Local Bridge shows new download cards (🪟 Windows / 🍎 Mac) below the primary .bat installer. Primary flow: .bat → recommended for most clinics (auto Node install, Task Scheduler entry, auto-update via force-update). Binary: backup only — no auto-update, no Task Scheduler, just double-click and run.bridge-entry.js is the pkg entry point; it requires softcode-bridge.js from the same directory. Rebuild: cd artifacts/usg-reporting/public/bridge && npm run build:win / npm run build:mac.srAvailable state in PatientDetail.tsx with four values: null | "checking" | "found" | "absent". A new useEffect watching (bridgeUrl, patient.id, linkedImages.length) probes GET /measurements/<key> on the bridge using the same key cascade the OCR pipeline uses (accessionNumber → studyId → patient.name), with a 2.5 s per-request abort timeout so a slow bridge cannot freeze the UI. Stops at the first hit. Renders a small, pre-scan badge next to the SR+OCR / AI buttons:
hidden sm:flex) and disappears once OCR runs (the existing "✓ N values · SR + OCR" success badge takes over). Recognises both bridge-side SR and inline SR carried on image objects via applyLinkedImages.src/pages/PatientDetail.tsx — state declared at ~line 1972, useEffect placed AFTER the useGetPatient query to satisfy TS block-scoping; badge JSX in the OCR/AI button cluster ~line 3754. No backend or bridge changes; pure frontend pre-fetch reusing the existing /measurements/<key> contract.src/lib/hardwareCheck.ts rewritten with three re-benchmark triggers — re-runs whenever any are true:
REBENCH_TTL_MS = 7d). Catches laptop swaps, OS updates, persistent throttling.{ force: true }. Used by the (future) "OCR is slow on my PC" Settings button.localStorage[sc_ocr_engine_v2_diag] now carries a rebenchReason field ("no-cache" | "expired" | "borderline" | "manual") so support calls can be answered in 30 seconds: "your PC last benchmarked 8 days ago, scored 32 Mpps, switched to server OCR — that's why it feels different."requestRebenchmark(): Promise<EngineDecision> (force-rerun, returns full decision so caller can toast "Switched to server OCR"), isOcrBenchmarkStale(): boolean (lets a Settings panel show a yellow "overdue" dot). ensureOcrEnginePreference() kept its existing zero-arg signature — fully backward compatible. Cache key remains sc_ocr_engine_v2; existing installs upgrade transparently on next login.@whiskeysockets/baileys (so the bridge keeps running even if Baileys isn't installed). New endpoints:
GET /whatsapp — full HTML page: status banner, auto-refreshing QR PNG, connected phone display, Logout button.GET /whatsapp/qr.png — current pairing QR as PNG (204 if connected/no QR).GET /whatsapp/status — JSON { available, connected, phone, hasQr, lastError }.POST /whatsapp/start — initiate connection (idempotent).POST /whatsapp/send — body { number, message, files: [{ name, base64, mime }] }. Auto-prefixes 10-digit numbers with +91.POST /whatsapp/logout — clears auth state at <basePath>/whatsapp-auth/.loggedOut).WhatsAppSendModal.tsx opens from the green WhatsApp icon on every Finalized report row in PatientDetail.tsx. Polls /whatsapp/status every 4 s; banner branches for checking | connected | disconnected | unavailable | offline. PDFs generated client-side via jsPDF (text Report PDF; auto-grid Print Images PDF using bridge's /images/thumbnail/:id). On success, logAddonUse("whatsapp_send", report.id) POSTs to /api/addons/log for billing.patientsTable.whatsappNumber (text, nullable, separate from phone); usersTable.whatsappNumber (text, doctor's own); usersTable.addonWhatsapp (boolean, default false). Backend addon registered at ₹0.70 (twice other rates because each send can include both PDFs). PATCH /api/patients/:id + POST /api/patients + PATCH /api/doctor/clinic-info all accept whatsappNumber. Admin → Add-ons panel gained per-doctor WhatsApp toggle row; ADDON_PRICES.whatsapp = 0.70; bill rows + per-doctor enabled-addon list updated. Installer V33 bundles npm install --omit=optional --no-audit --no-fund for Baileys at install time. BridgeInstallerV33.bat writes package.json with @whiskeysockets/baileys ^6.7.18 and qrcode ^1.5.4; failure to install Baileys is non-fatal (DICOM/HTTP keep working; only WA send becomes unavailable). Logs at Bridge\npm-install.log.ReportEditor.tsx ~lines 4232–4318 picks the right asset by template type and finding keywords (e.g. "gallbladder"/"biliary"/"cholelithiasis" → gallbladder-overview; "pcod"/"pcos"/"polycystic" → PCOD-overview).artifacts/usg-reporting/public/anatomy/*.png.enc: 15 full-frame "overview" diagrams + 11 multi-panel reference images (still useful for organs without dedicated single-organ art). Installer V33 anatomy file list updated..png on a public CDN made it trivial for any competitor to scrape the entire library and ship it in their own product.artifacts/usg-reporting/scripts/encrypt-anatomy.mjs walks public/anatomy/, encrypts each .png with AES-256-CTR, writes the .png.enc sibling, and deletes the original. Per-file IV is derived deterministically from SHA-256("anatomy:" + filename).slice(0, 16) so the same file always encrypts to the same blob (CDN-cache friendly). Decrypt helper src/lib/anatomyDecrypt.ts uses the Web Crypto API in the doctor's browser; returns a Blob URL ready to drop into <img src>. The bridge's HEAD-check uses abdomen-overview.png.enc (old bridges fall back to server, which still works)..png requests now 404 (only .png.enc served). Re-runnable encryption script — only encrypts new .png files (skips existing .enc).currentText !== aiOriginal). Doctors who type from scratch (especially senior radiologists who don't bother with AI drafts) had no way to feed their style back into the model.aiOriginal === null as "" for the comparison. Now the button appears whenever currentText.trim() !== (aiOriginal ?? "").trim(). Manual-from-scratch reports are training-eligible.src/pages/ReportEditor.tsx — Train AI gating condition.artifacts/usg-reporting/src/utils/localOcr.ts + artifacts/api-server/src/routes/ocr.ts:
LABEL_MAP with proper plausibility ranges (pancreas 0.5–5 cm, bladder wall 1–15 mm, prostate 1–10 cm, aorta 5–40 mm, IVC 3–30 mm, portal vein 4–20 mm, isthmus 1–10 mm, yolk sac, nasal bone 1–10 mm, TCD 10–80 mm).SHORT_TO_LABEL rewritten to match exact form field names (e.g. liver→"Liver Span", spleen→"Spleen Size", cbd→"Common Bile Duct").uterus → ["Uterus Size (L x W x AP)", "Uterus Size"]).M1/M2 and DIST prefixes.src/utils/localOcr.ts, src/routes/ocr.ts. Pure regex / map changes; no upstream OCR engine touched.printCols = printRows = min(6, ceil(√N)) and toggles printSinglePage = true in one click.src/pages/PatientDetail.tsx — print modal slot grid section./scan-dicom that actively re-attached images. New STUDY_STOPWORDS set filters scan-type words (anomaly, scan, usg, obstetric, tiffa etc.) before any name comparison. namesMatch now requires at least one non-stop-word in common; blank names return false.datesMatch compares patientVisitDate (YYYY-MM-DD) against DICOM StudyDate tag 00080020 (YYYYMMDD); when both present, MUST equal.PatientDetail.tsx): all 3 /scan-dicom callers now send patientVisitDate. visitDate resolves to p.visitDate ?? p.createdAt.public/bridge/softcode-bridge.js — STUDY_STOPWORDS, namesMatch, datesMatch; src/pages/PatientDetail.tsx — added patientVisitDate to /scan-dicom POSTs at lines ~2180, ~2274, ~2356. 12/12 unit cases pass (3-Ashwini same-day collisions BLOCKED, yesterday-DICOM-into-today-patient BLOCKED, surname-first DICOM format MATCH, no-date allows match for back-compat).sonography-assistant.replit.app; custom domain attachment (softcodehq.com / softcodeusg.app) is in progress. Recommended monthly spend limit set at $200 (~₹16 500) at replit.com/usage as a hard cap safety net.PatientDetail.tsx at ~line 3539, conditioned on dicomMeasLoaded && (ocrSource === "sr-ocr" || null). The badge appears the moment SR arrives, with a Hinglish doctor hint: "Report page slot 1 pe rakho → SR+OCR dabao → 2-3 sec mein GA mil jayega."artifacts/usg-reporting/src/pages/PatientDetail.tsx ~line 3539. Pure UI change, no backend touched. HMR-clean reload.reportPageFound() helper inside the Phase A and Phase B loops. After each batch:
artifacts/usg-reporting/src/pages/PatientDetail.tsx lines ~1355–1425. Result: typical scan time drops from ~30 s to ~5 s; cloud compute per scan drops by roughly 80%.min(6, os.cpus()) (so the production 2-vCPU container runs two workers), PSM3 fast-path and batch size 12 are retained as designed. Pool prewarm fires 500 ms after app.listen in artifacts/api-server/src/index.ts.hasDicom, hasDoppler, mergePg2And3, bigDiagramAlone — are computed before the print stylesheet is injected. When no DICOM: if no Doppler, mergePg2And3=true (charts + diagram share one A4 sheet, zoom 0.82); if Doppler present, bigDiagramAlone=true (diagram enlarged to zoom 0.88 on page 3). If DICOM present, normal 3-page layout is used.src/pages/ReportEditor.tsx — mergePg2And3 / bigDiagramAlone variables injected into the printCSS string before window.open. CSS uses transform: scale() on the diagram container and @page { page-break-before: avoid } on the merged block.autoGeneratePending useEffect in PatientDetail.tsx that fired handleAiDraft automatically. Removed the handleAiDraft auto-call at line 3155 of ReportEditor.tsx. Set autoStart={false} on the OCR pipeline. GPT-4o is now invoked only when the doctor clicks the blue "Generate Draft" button explicitly.src/pages/PatientDetail.tsx (removed autoGeneratePending useEffect), src/pages/ReportEditor.tsx (removed auto handleAiDraft call, autoStart={false}). The handleOcrMeasurements(data, autoMode=true) signature now passes autoMode=true for silent fills and false only on manual "Generate Draft" path.page-break-inside: avoid to the .footer CSS class so the signature block never splits across pages. Added a <div class="footer"> block (doctor name, signature image, stamp label) to every page section (page 1, 2 and 3) in both the live print HTML and the auto-save finalized HTML.src/pages/ReportEditor.tsx — printCSS string for live print and the doFinalize() HTML template both include footer div per page. footer { margin-top: 18px; } ensures signature appears immediately after content, not floating at page bottom.aiDraft.ts with IRIA conventions: "noted", "s/o" (suggestive of), "B/L" (bilateral), concise numbered findings, obstetric prose paragraphs (growth, liquor, placenta), mandatory EDD line, "Clinical correlation advised." closing. Sex of fetus never mentioned (PNDT hardcoded).artifacts/api-server/src/routes/aiDraft.ts — system prompt object. Prompt uses structured sections: IRIA_RULES, OBSTETRIC_FORMAT, GENERAL_FORMAT, PNDT_CONSTRAINT. Temperature: 0.3 for consistent style.handleOcrMeasurements(data, autoMode) function now accepts an autoMode flag. When true (OCR/SR pipeline): measurements fill silently, no GPT-4o call. When false (Generate Draft button): full pipeline including AI draft runs.src/pages/PatientDetail.tsx — applyOcrResult() and handleOcrMeasurements(). The Tesseract OCR pipeline (src/utils/localOcr.ts) extracts BPD, HC, AC, FL, EFW, GA weeks/days using regex GA_RE with GA_LABELS normalisation. Values are mapped to report fields and set silently via React state.\DICOM, \PDFReports and \AIUpdates automatically but missed the \PNDT folder, forcing the bridge or the doctor to create it on first Form F save. This caused a "folder not found" warning on day one of every new install.SoftcodeBridgeInstallerV32.bat script now executes a PowerShell New-Item -ItemType Directory -Force for all four sub-folders during the path setup phase (line 77), before the bridge service is started. -Force makes it idempotent on re-installs.$chosenBase\DICOM, $chosenBase\PDFReports, $chosenBase\PNDT, $chosenBase\AIUpdates. The bridge config (bridge.config.json) writes the chosen base path so all four folders are reachable via deterministic sub-paths at runtime.GET /api/bridge/version returning { version, releasedAt, basePath, ae, appUrl }. The frontend fetches this on mount and binds the result to every UI element that displays a bridge version. The installer template uses {{version}} placeholder substitution at download time so the .bat label always matches the live release.bridge/version.json. Build pipeline writes the file once; Express middleware reads it; React Query caches the response with a 5-minute stale time..slot-label strip with a top-left .slot-num circular badge that overlays the image without occupying full width. CSS box-sizing tightened so DICOM image cells respect cell borders exactly. Print stylesheet uses print-color-adjust:exact to preserve the badge across all browsers.src/pages/PatientDetail.tsx — slot template (~line 1349) and CSS (~line 1376). The badge uses position:absolute; top:6px; left:6px with high z-index over the image.\DICOM\ folder. Practices doing 50–150 scans per day accumulated thousands of files in one directory — impossible to audit, and fragile when Windows Explorer tried to render thumbnails for the whole folder.safeFolderName() helper that sanitises the DICOM Patient Name tag (strips slashes, colons and reserved characters) and creates \DICOM\PatientName\file.dcm. The /save-file endpoint accepts an optional patientName field so PDF reports and PNDT Form F documents use the same subfolder scheme under \PDFReports\ and \PNDT\ respectively. rebuildIndexFromDisk walks one level of subfolders on startup so older flat files remain indexed without any migration step.public/bridge/softcode-bridge.js — safeFolderName() helper, handleCStoreRequest, /save-file route, rebuildIndexFromDisk. The folder is created with fs.mkdirSync({ recursive: true }) so the first save for a new patient is atomic.doFinalize() in ReportEditor.tsx now fire-and-forgets a PDF save immediately after locking the report. It builds the full report HTML (header, patient info, measurements, findings, impression, signature) and calls saveToLocalDrive("pdf", fileName, html, patientName). The bridge receives this over the socket and writes it to \PDFReports\PatientName\PatientName_YYYY-MM-DD.pdf without any user interaction required.src/pages/ReportEditor.tsx — doFinalize(); src/lib/bridge.ts — saveToLocalDrive() extended with optional patientName param; softcode-bridge.js — /save-file route. The PDF is generated client-side using window.open / html2canvas pipeline already in the codebase.localStorage on every call to doFinalize(). When the counter reaches exactly 50, 100, or 150, the MilestoneCelebration component mounts as a full-screen overlay over the current page — coloured particle fireworks (8 burst explosions, gravity physics, fade-out) play on a transparent canvas, and a professional message is shown in a dark-glass card. The overlay auto-dismisses after 3.5 s or on click. The counter key is sc_dfin_YYYY-MM-DD and is garbage-collected the next day, so every calendar day starts from zero.src/components/MilestoneCelebration.tsx — self-contained component with canvas fireworks and all three messages; src/pages/ReportEditor.tsx — celebrateCount state and incrementDailyFinalized() call inside doFinalize(). Zero network calls. No personal data. No PII. Counter never leaves the browser.doFinalize() now fire-and-forgets a PDF save immediately after locking the report. Complete HTML (header, measurements, findings, impression, signature) is built client-side and pushed over the bridge socket to \PDFReports\PatientName\.src/pages/ReportEditor.tsx → doFinalize(); src/lib/bridge.ts → saveToLocalDrive(); bridge /save-file route writes the file./save-file mechanism used for Form F → written to \PNDT\PatientName\ on the doctor's PC automatically when Form F is generated.src/pages/Reports.tsx Form F generation calls saveToLocalDrive("pndt", fileName, html, patientName).NumberOfFrames > 1; extracts frame 0 as JPEG thumbnail for the inbox card; stores total frame count; the viewer UI shows a frame slider for clip playback.public/bridge/softcode-bridge.js → handleCStoreRequest() multi-frame branch. Thumbnail encoded as base64 JPEG and stored in the bridge index alongside the frame count.PatientDetail.tsx — selectable layouts (1×1, 2×1, 2×2, 3×3, 4×4), per-slot zoom (1×–4×), per-slot frame selection for clips. The layout is rendered as a printable A4 page with slot-number badges.src/pages/PatientDetail.tsx — image sheet print handler, slot template, layout selector, CSS print stylesheet. print-color-adjust:exact preserves image quality across all browsers.public/bridge/softcode-bridge.js → handleCFindRequest(). Patient list fetched via GET /api/dicom/worklist?date=today. Formatted as DICOM C-FIND response DS/LO VRs.public/bridge/softcode-bridge.js → parseDicomSR() with a brand-specific code map. DCMJS used for tag parsing. Output is a flat JSON object sent to POST /api/dicom/sr.POST /api/patients/auto-create with the DICOM Patient Name tag. Softcode creates a stub patient record and atomically links the study. The doctor sees the auto-linked entry in the DICOM Inbox ready to use.artifacts/api-server/src/routes/dicom.ts — auto-create route. Patient name sanitised before insert. The stub is flagged so reception can fill missing demographic details later.POST /api/ai/sync. Monthly retrain job runs as a scheduled Replit server task.Web app: Replit auto-deploy on merge to main. Doctors get the new build on next page refresh. Zero downtime.
Bridge: Doctor downloads new SoftcodeBridgeInstaller.bat from Settings, runs as Administrator. Installer stops the existing bridge service, overwrites Node files, preserves bridge.config.json, restarts. Total downtime per machine: under 30 seconds.
Documentation: Both the Doctor's Detailed User Guide and this Engineering Deep Dive are regenerated and re-deployed with every release. Admins can re-download the latest copy from Settings → Documentation at any time.
Softcode USG AI Assist is a cloud-based ultrasonography (USG) reporting platform built specifically for Indian sonography practices. It combines AI-powered clinical drafting (GPT-4o), DICOM machine integration, PNDT-compliant printing, and a complete multi-role clinic management system — all delivered through a modern dark-themed browser interface that runs on any laptop, tablet or smartphone.
| Problem in Indian USG Practice | How Softcode Solves It |
|---|---|
| Doctors waste 3–5 minutes typing each report from scratch — 30+ reports a day means 2+ hours of typing | GPT-4o auto-drafts a complete professional report in 8–10 seconds from measurements |
| Reports inconsistent in style across staff and across days | The AI learns each doctor's personal phrasing and corrections — every report sounds like the doctor wrote it |
| Patient name has to be typed again into the USG machine — typos cause mismatch | Reception Worklist Bridge pushes the patient list to the machine — doctor just selects, never types |
| USG machine images are saved on the machine and lost — never end up in the report | Doctor DICOM Bridge pulls images and SR measurements directly into the report editor |
| PNDT compliance is tedious — Form F, signatures, registration numbers, sex determination wording | Built-in PNDT Form F auto-fill, automatic compliance footer, and AI is hard-coded to never mention sex determination |
| Reception, billing, receipts and reports live in different software | Single platform — patient registration, billing, receipts, reports, dashboards all in one place |
| No way for sales dealers to track or earn from their installed base | Built-in Dealer role with commission tracking, doctor linkage and payout requests |
| Layer | Technology | Why |
|---|---|---|
| Frontend | React + TypeScript + Vite + TailwindCSS | Fast SPA, type safety, modern dark UI, responsive across desktop/tablet/mobile |
| Backend API | Node.js + Express + TypeScript | Lightweight, fast iteration, single-language stack |
| Database | PostgreSQL with Drizzle ORM | Reliable, ACID, JSONB for flexible report fields, type-safe schema |
| AI Engine | OpenAI GPT-4o | Best clinical reasoning, natural language quality, multilingual support |
| Local Bridge | Node.js DIMSE library | Implements DICOM C-STORE SCP and C-FIND SCP (MWL) on the doctor's PC |
| Auth | Role-based with stored credentials | Username/password login routed by role (Doctor / Reception / Admin / Dealer). Note for engineering team: the current production build uses simplified credential checks — hardening to bcrypt + signed sessions is on the roadmap. |
| Hosting | Replit Cloud (production) | Auto-scaling, integrated TLS, zero-ops deployment |
Most clinic software gives every staff member full access. That creates two problems: junior staff can accidentally delete patient data, and there is no clean way for sales partners (dealers) to participate in the business. Softcode separates duties into four roles, each with the minimum permissions needed for the job.
DLR-A3X9). They share it with doctors at the time of sale. Doctors enter that code at signup. From then on, every credit that doctor consumes earns the dealer a configurable commission.The current production build uses a simplified credential check suitable for the present customer base. Planned hardening (in progress): bcrypt password hashing, signed server-side sessions, brute-force rate limiting, and instant session revocation when Admin deactivates an account. Engineering should treat this as the next priority before scaling to enterprise hospital chains.
user.isDemo = true. Print, delete and AI Train operations are all gated behind this flag and silently disabled.In every USG clinic, the workflow always starts at the front desk: a patient walks in, gives a referral slip, pays, gets sent to the scan room. By the time the doctor sees them, name, age, study type and payment must already be in the system. So Patients is the entry point of the software for both Reception and Doctor.
| Field | Why It Exists |
|---|---|
| Full Name | Mandatory — printed on the report. Forms primary identification on every screen. |
| Age, Gender, Phone | Age affects medical interpretation (e.g. paediatric vs adult ranges). Phone enables future SMS reminders and report sharing. |
| Study Type + Sub-type | Determines which template loads in the editor, which measurement fields appear, and which AI prompt is used. Critical routing field. |
| Referred By | Printed on the report. Referring doctor often calls back asking for the report — having the name on file makes the conversation easy. |
| Chief Complaint | Sent to the AI as clinical context — the AI weighs findings differently when the patient came in with "right upper quadrant pain" vs "routine antenatal". |
| Billing Amount, Discount, Payment Mode, Payment Status | Powers the receipt printer, the dashboard revenue stats, and the daily collection report. Payment Mode (Cash/UPI/Card/Cheque/Online) lets receptionists track collections by mode. |
| Priority (Routine / Urgent / 🚨 Emergency) | Visual triage. Emergency patients get a red badge in the list so the doctor knows to scan them next. Built for trauma centres and obstetric emergencies. |
| ID Proof Type + Number (Aadhaar/PAN/Passport/Voter ID) | Required for PNDT obstetric records. Also helpful when government audits the clinic. |
| Patient Photo | Uploaded or captured from webcam. Useful for identification at follow-up visits, especially in busy obstetric clinics. |
| Companion Name, Relation, Phone | PNDT requires a companion entry for obstetric patients. Also useful for follow-up if the patient is reachable only through family. |
Each patient card shows colour-coded badges so doctors and receptionists understand the status at a glance — without opening the patient detail.
| Badge | Meaning | Why It Matters |
|---|---|---|
| 🚨 Emergency (red) | Priority = Emergency | Doctor scans these first — visual triage |
| ⚡ Urgent (amber) | Priority = Urgent | Second priority after emergencies |
| Returning Patient (purple) | This patient has visited before | Doctor knows to check Compare Reports — IUGR or follicular tracking depends on it |
| 3 img (blue) | DICOM images linked from the machine | Print job will include images — tells reception to use higher-quality paper |
| Payment: Paid / Partial / Pending / Complimentary | Color coded green/amber/red/purple | Reception can chase pending payments at the end of the day |
| Study Type Badge | Abdomen / Obstetric / KUB etc. | Doctor can mentally batch similar studies |
GET /patients returns hasReport and hasPrintedImages per patient (server-computed JOINs). lastViewedAt column tracks viewing. POST /patients/:id/mark-viewed is auth-gated. Sort order is desc(createdAt) so newest patients appear at the top.Every other feature exists to feed or support the report editor. This is where the doctor's time is spent and where Softcode's value is most visible. A traditional report takes 3–5 minutes of typing and dictation. With Softcode, it takes 30 seconds: enter measurements → click Generate AI Draft → review → finalise → print.
Every USG study has different measurement fields, different normal ranges, different reporting conventions. A one-size-fits-all editor would be useless. So we built dedicated templates for every common study type.
| # | Template | Specialty Focus |
|---|---|---|
| 1 | Obstetric — 1st / 2nd / 3rd Trimester + Twin | Antenatal monitoring, growth tracking |
| 2 | Abdomen USG | Liver, GB, kidneys, spleen, pancreas |
| 3 | Whole Abdomen / KUB USG | Comprehensive abdominal survey / kidney-ureter-bladder |
| 4 | Pelvis / Gynecology — Routine + Follicular Study | Uterus, ovaries, follicle tracking for IVF |
| 5 | Thyroid (with TIRADS) | Nodule risk classification |
| 6 | Breast (with BI-RADS) | Lesion characterisation, screening |
| 7 | Vascular Doppler — Carotid, DVT, Peripheral | Stenosis, thrombosis, peripheral disease |
| 8 | Renal Doppler / Transplant | Renal artery stenosis, transplant assessment |
| 9 | Fetal Echo | Cardiac evaluation in utero |
| 10 | Neonatal Cranial | Through-fontanelle infant brain scan |
| 11 | Musculoskeletal — Shoulder/Knee/etc. | Tendon tears, bursitis, joint effusion |
| 12 | Small Parts / Neck / Parotid / Salivary | Lymph nodes, glands |
| 13 | Scrotal / Testicular | Torsion, varicocele, orchitis |
| 14 | Prostate / TRUS | Prostate volume, BPH, cancer screening |
| 15 | Endovaginal / Endometrial | TVS findings, endometrial assessment |
| 16 | Chest / Pleural USG | Effusion, pneumothorax, lung points |
| 17 | FAST / Trauma Scan | Emergency intra-abdominal bleeding detection |
| 18 | Pediatric | Child-specific abdominal protocols (intussusception, appendicitis) |
| 19 | Interventional USG | USG-guided biopsies, aspirations |
| 20 | CEUS (Contrast-Enhanced) | Contrast agent enhancement patterns |
| 21 | Elastography | Liver stiffness, lesion stiffness |
| 22 | 3D / 4D Obstetric | Volumetric fetal imaging |
Each template loads its own measurement panel with the right fields, the right units, and the right AI prompt — the doctor never has to remember "what should I measure for thyroid".
Always frame the AI as a "professional first draft writer that the doctor reviews and signs". This is medico-legally important — the doctor is fully responsible for what they print. Softcode never replaces clinical judgement; it removes typing.
src/utils/localOcr.ts — GA_RE regex, GA_LABELS mapping, normalizeGaValue(). src/pages/PatientDetail.tsx — handleOcrMeasurements(data, autoMode=true) fills fields silently when autoMode=true. Tesseract runs via tesseract.js WASM in the browser — zero PII leaves the device during OCR.doFinalize() increments a browser localStorage key (sc_dfin_YYYY-MM-DD). When the counter equals exactly 50, 100, or 150, the MilestoneCelebration component mounts as a position:fixed full-screen overlay with z-index:9999 above all other UI. A canvas element covers the viewport and renders 8 firework bursts (70 particles each, coloured, gravity-physics, alpha-fade). A dark-glass card with gradient text headline and a professional message is centred on the overlay. Auto-dismisses after 3.5 s; clicking anywhere also dismisses.src/components/MilestoneCelebration.tsx — fully self-contained React component. incrementDailyFinalized() and isMilestone() are exported helpers. The previous day's key is garbage-collected on the next increment. Zero API calls. Zero PII. The counter stores only an integer — never a name, ID, or clinical value. Key format example: sc_dfin_2026-04-29.| Milestone | Headline | Message |
|---|---|---|
| 50 | 50 Reports Finalized Today 🏆 | "Remarkable dedication, Doctor. You have helped 50 patients today — your commitment to quality care is truly commendable." |
| 100 | 100 Reports — Outstanding Achievement 💯 | "A century of finalized reports in a single day. Your expertise and efficiency are making a real difference for every patient you serve." |
| 150 | 150 Reports Today — Exceptional 🚀 | "150 patients have received your expert care today. This level of dedication is what defines an exceptional clinician. Well done, Doctor." |
For obstetric practices, growth charts are the single most clinically valuable feature. International software costs ₹3+ lakh per year for this. Softcode bundles it.
Charts appear automatically only when:
| Group | Chart | Color | Reference |
|---|---|---|---|
| Biometry | BPD (Biparietal Diameter) | Blue | Hadlock / INTERGROWTH-21st |
| HC (Head Circumference) | Purple | Hadlock / INTERGROWTH-21st | |
| AC (Abdominal Circumference) | Cyan | Hadlock / INTERGROWTH-21st | |
| FL (Femur Length) | Green | Hadlock / INTERGROWTH-21st | |
| Weight | EFW (Estimated Fetal Weight) | Amber/Gold | Hadlock 1985 formula |
| Doppler | UA-PI (Umbilical Artery PI) | Red | Arduini & Rizzo |
| UA-RI (Umbilical Artery RI) | Orange | Arduini & Rizzo | |
| UA S/D Ratio | Pink | Arduini & Rizzo | |
| Uterine Artery PI | Indigo | Papageorghiou | |
| MCA-PI (Middle Cerebral Artery) | Teal | Mari |
Tick + Growth Charts in the print toolbar (purple checkbox). The PDF output includes all 10 charts in full colour, properly paginated, with the patient's data points clearly visible. Patients love taking these home — they look like a hospital chart.
| Document | Who Prints | Format |
|---|---|---|
| USG Report | Doctor (after Finalise) | A4, with header, findings, impression, signature, PNDT footer |
| Patient Receipt | Reception (after registration) | A4 or thermal, with name, study, gross/discount/net, payment mode, status, priority |
| DICOM Image Sheet | Doctor | A4, configurable grid (1×1, 2×2, 3×2), white or black clinical theme |
| Condition | Pages | Layout |
|---|---|---|
| Obstetric, no DICOM images, no Doppler | 2 | Page 1: findings + impression + signature; Page 2: fetal charts + anatomy diagram + signature |
| Obstetric, no DICOM images, Doppler present | 2–3 | Page 2: charts + diagram; Page 3: Doppler values + larger diagram + signature |
| Any report with DICOM images attached | 3 | Standard 3-page layout — report, charts, images |
| Non-obstetric | 1 | Single page — findings + impression + signature |
Doctor signature block appears on every page — no unsigned pages in any multi-page printout.
| Section | Content | Always or Optional |
|---|---|---|
| Header Bar | Clinic name, address, phone, PNDT Reg. No. | Always (from Settings → Profile) |
| Title Bar (Blue) | e.g. "ULTRASONOGRAPHY REPORT — OBSTETRIC (2ND TRIMESTER)" | Always |
| Patient Info Table | Name, Age/Sex, Referred By, Date, Sonologist | Always |
| Measurements Table | All filled measurements in 2-column layout | If measurements exist |
| Anatomy Diagram | Organ illustration with annotations | Optional (+ Diagram checkbox) |
| Findings (large block) | Detailed clinical findings — AI or doctor written | Always |
| Impression (amber box) | Conclusion / summary | Always |
| Fetal Growth Charts | 10 colour percentile charts | Optional, OB 2nd/3rd only |
| PNDT Compliance Footer | Legal disclaimer + Centre Reg. No. | Auto for obstetric reports |
| Doctor Signature Image | Uploaded signature, 52px tall × max 160px wide | Always (from Settings → Signature) |
| Doctor Name + Degree + Reg. No. | Below signature | Always |
| Generation Timestamp + AI Assisted Label | Bottom — for traceability | Always |
USG machines speak DICOM. Without DICOM integration, the doctor types every patient name twice (once in software, once on machine), takes machine images on USB, transfers to PC, manually attaches to report. That's 5 minutes wasted per patient. With DICOM, all of that is automatic.
Both bridges are implemented in the same single Node.js process running on the doctor's PC, listening on a single port (4145). One installer sets up both. One configuration in the USG machine activates both.
One Windows .bat installer. Run as Administrator. The user sees a progress bar; the script silently does this:
C:\SoftcodeBridge\Result: the doctor sees a small tray icon near the clock. The bridge runs forever, even after Windows restarts.
| Brand | Menu Path on Machine |
|---|---|
| Samsung (Medison) | System Menu → Setup → Network → DICOM Settings |
| GE (Voluson / Logiq) | Config ⚙ → Connectivity → DICOM → Devices → Add |
| Philips | System → Connectivity → DICOM → Worklist Server |
| Mindray | System → System Configuration → Connectivity → DICOM |
| SonoScape | System → Network → DICOM Servers |
| Chison | Setup → Network → DICOM → Add Server |
| Toshiba / Canon | Patient → DICOM Setting → Remote Host |
| Voluson (GE series) | Connectivity (same as GE) |
Settings tab in Softcode shows step-by-step accordions for each brand — engineer never has to look anything up.
| Level | Scope | How It Improves |
|---|---|---|
| Personal Learning | Per doctor | Doctor's edits → stored as correction notes → injected into future drafts |
| Cloud Learning | Across all Softcode doctors | Anonymised aggregated corrections → monthly merge into the master AI model on Softcode cloud |
Already explained in section 3.4. Quick recap of the data structure: each correction is stored as { doctorId, studyType, hint, patternBefore, patternAfter, createdAt }. On every AI draft, the system gathers all hints for that doctor + study type and prepends them to the GPT-4o system prompt as "This doctor's preferences (always follow): ...".
The full trained model can be exported as a JSON file by Admin. This is used for:
| Stat Card | Why It Matters to Softcode |
|---|---|
| Total Doctors | Acquisition metric |
| Active Doctors | Engagement metric — paying customers |
| Total Billed (₹) | Revenue this month/year |
| Amount Pending (₹) | Outstanding collections — for follow-up |
| Total Cleared (₹) | Confirmed cash flow |
Click any doctor → opens a detail panel with full control:
| Section | What It Does |
|---|---|
| Doctor Info | Read-only display of name, email, clinic, degree, reg no., signup date |
| Add-ons Toggles | Voice / Diagram / Compare / Print Images — turn each ON or OFF for this doctor. Drives upsell tiers. |
| Set Credit Price | ₹ per AI credit for this doctor. Different doctors can have different prices (e.g. high-volume gets discount). |
| Recharge Credits | Manually add credits to the doctor's account when they pay (e.g. ₹5000 → 250 credits at ₹20 each). |
| Credits Used This Month | Editable for manual corrections (e.g. waive credits during disputes) |
| Generate Bill | Auto-creates monthly bill: credits × price + add-on usage |
| Mark Bill Paid | After payment received, mark as paid → shows in history |
| Deactivate | Disables login but keeps all data. Doctor cannot log in until reactivated. |
Admin sees the cloud sync dashboard: when last sync ran, how many corrections were merged, breakdown by study type. Admin can trigger manual sync if needed.
| Tab | What It Does |
|---|---|
| Registrations | Approve / Reject new dealer signups |
| Dealers | Active dealers list, their codes, linked doctor counts |
| Dealer Details | Dive into one dealer: linked doctors, billing history, profit accumulated |
| Payout Section | Process dealer payout requests. Mark paid when transferred. |
Stores the Softcode entity details that print on every invoice: business name, GSTIN, PAN, bank details, UPI ID, owner name, address. Admin updates once; reflected on every invoice.
A dealer signs up → Softcode gives them a unique code. They go to clinics, demo the software, and convince doctors to install. The doctor enters the dealer code at signup. From that point on:
| Stat Card | What It Shows |
|---|---|
| Linked Doctors | Count of doctors using the dealer's code |
| Credits Used | Total credits consumed by all linked doctors |
| Total Billed (₹) | Revenue Softcode has billed those doctors |
| Your Profit (₹) | Dealer's share of that revenue — ready for payout |
Click to expand → see per-doctor breakdowns. Dealer knows exactly which clinic is generating the most revenue and can focus retention there.
The most important tab — it controls what prints on every report.
Doctor sees their own credit balance, total credits used, total amount charged by Softcode (or their dealer). Can filter by Paid / Unpaid / Pending. Download all bills as PDF for accounting.
Standard password change with current-password verification. Min 6 characters.
Upload a transparent PNG of the doctor's signature. Renders at exactly 52px tall × max 160px wide on every printed report. Without this, reports print without a signature image — only the typed name.
Stores a URL link to the doctor's online PNDT registration certificate. The actual PNDT number that prints on reports comes from the Profile tab; this is just a reference link for the doctor's own use.
Where the doctor configures their DICOM machine link. Generates the secure token, downloads the bridge JS and the Windows installer, shows the IP/Port/AE Title to enter into the machine. Includes step-by-step accordion guides for 8 USG brands. See section 6 for the full flow.
Direct messaging to the Softcode support team. Real-time. Chat history preserved.
For admin doctors managing multiple reception accounts. Add, list, remove reception staff. View the unique Reception Code they need to enter to link themselves.
See how many corrections the AI has learned per study type. Reset training data if you want to start fresh. View the training quality score.
Submit two types: Software Issue (bugs, feature requests) and HL7 Monthly Feedback (clinical standards input — once a month each clinic sends a structured note about real-world findings to Softcode for AI improvement).
| Channel | Who → Whom | Purpose |
|---|---|---|
| Floating AI Chat 💬 | Any user → AI | Clinical queries — "What is TIRADS 4?", "Normal AFI range?" |
| Live Chat (Settings) | Doctor / Dealer → Softcode Support Team | Software help, billing questions |
| Internal Chat | Doctor ↔ Reception | "Patient on table — finalise quickly please" |
Bottom-right of every page. Click to open a chat panel powered by GPT-4o. Doctor can ask any clinical question and get an instant evidence-based answer. Cost-free for the doctor (Softcode absorbs token cost — usually pennies).
From Settings → Live Chat. Real-time messaging to the Softcode support team. Online status visible. History preserved across sessions.
| Action | Cost | Why |
|---|---|---|
| Generate AI Draft | 1 credit | One GPT-4o call |
| Regenerate AI Draft | 1 credit | Another GPT-4o call |
| QA Check | 1 credit | Another GPT-4o call |
| Voice Input | Per add-on price | Speech recognition + GPT cleanup |
| Anatomy Diagram | Per add-on price | Add-on subscription |
| Compare Reports | Per add-on price | Add-on subscription |
| Patient registration / view / edit / print / DICOM / templates | Free | Core features must always work even with zero credits |
Admin sets the ₹/credit price separately for each doctor. High-volume clinics get discounted rates. Trial doctors might get a lower introductory price. Add-ons priced separately. The doctor never sees the ₹ price — only their credit balance.
On the 28th of every month, Admin clicks Generate Bill for each doctor → bill = (credits used × price) + add-on usage. Doctor sees the bill in My Bills tab. Pays via UPI/bank transfer to Softcode → Admin marks Paid → invoice issued.
doctorId)Every important action (report created, finalised, deleted, printed, AI generated, login, password change) is logged server-side with timestamp + user ID. Available for download in legal disputes.
"Softcode USG AI Assist is an AI-powered ultrasonography reporting platform. The doctor enters measurements, GPT-4o writes a complete clinical report in 8 seconds, and the AI personally learns each doctor's writing style over time. It connects directly to your USG machine via DICOM, prints PNDT-compliant reports with fetal growth charts, and runs entirely in the browser — no installation, works on laptop, tablet or phone. ₹X per month per doctor."
| Objection | Answer |
|---|---|
| "AI will make medical mistakes." | The AI is a draft writer. The doctor reviews and signs every report — final responsibility stays with the doctor. Plus the QA Check catches missing fields before printing. |
| "My existing software is fine." | How long does a report take to type? Multiply by 30 reports a day. That's 2+ hours of typing daily that Softcode eliminates. Your time alone pays for the software 10× over. |
| "Internet outages will block me." | Existing reports remain viewable and printable offline. AI draft requires internet (so does GPT-4o), but the rest of the workflow degrades gracefully. |
| "PNDT issues — sex determination liability." | The AI is hard-coded to refuse sex determination. The QA check explicitly blocks it. PNDT Form F is auto-generated. We are more compliant than your current paper system. |
| "My USG machine is old." | Any DICOM-capable machine since 2005 works. We support Samsung, GE, Philips, Mindray, Voluson, SonoScape, Chison, Toshiba/Canon. Show me your machine model — I will confirm. |
| "What about my staff who don't know computers?" | Reception screen is one page — register patient, take payment, print receipt. Designed for non-technical staff. Doctor screen has AI; staff doesn't. |
| "How much will it cost long-term?" | Pay-per-report model — ₹X per AI report, ₹0 for everything else (registration, viewing, printing, DICOM). Predictable and proportional to your business volume. |
| "What if you go out of business?" | You can export all your data anytime as PDF/CSV. Reports are downloaded; nothing is locked in. |
| "I want to try before I buy." | Click Demo on the login screen → instantly explore everything. No signup needed. |
| "Can I edit AI mistakes?" | Yes — every line is editable until you Finalise. And Train AI ensures the same mistake doesn't repeat. |
| Customer | Suggested Plan | Reasoning |
|---|---|---|
| Solo doctor, 5–10 scans/day | 200 credits/month basic, no add-ons | Low volume — low cost — quick adoption |
| Mid clinic, 20–30 scans/day | 500 credits + Voice + Diagram add-ons | Volume justifies add-ons; voice saves time |
| Multi-doctor practice, 50+ scans/day | Custom enterprise pricing per doctor + all add-ons | High value, recurring revenue, dealer commission |
| Hospital chain | Volume pricing + Admin custom training import | Bulk negotiation, branded training data |
| Field | Value |
|---|---|
| Document | Feature Deep Dive Guide (6 of 6) |
| Audience | Engineering · Sales · Marketing — internal only |
| Version | 3.9 |
| Issued | May 2026 |
| Last revised | May 2026 |
| Status | Current — supersedes all earlier versions |
| Owner | Softcode Engineering Office |
| Legal entity | Softcode |
| Website | www.softcodehq.com |
| Support | [email protected] |
| Version | Date | Change Summary |
|---|---|---|
| 3.9 | May 4, 2026 | Bridge v4.9.27 — local API token auth (x-bridge-local-token header required on all endpoints except /health; 32-byte crypto token generated on first startup, stored in bridge.config.json, returned by /health; frontend window.fetch interceptor in main.tsx auto-injects token). Bridge JS obfuscation (javascript-obfuscator RC4 + control flow flattening + self-defending; source → softcode-bridge.src.js, output → softcode-bridge.js 278 KB; build-obfuscate.sh for rebuilds). Standalone binary distribution (SoftcodeBridge-win.exe node12-win-x64 ~30 MB Windows 7/8/10/11; SoftcodeBridge-mac node18-mac-x64 ~50 MB macOS; both via pkg; backup to primary .bat installer; downloadable from Settings → Local Bridge). Softcode logo refresh — transparent-background gold logo on login page (w-32 h-32, gold glow drop-shadow) and sidebar (w-16 h-16). |
| 3.8 | May 3, 2026 | SR pre-probe badge — pre-scan "✓ SR ready / ⟳ SR check / no SR" indicator next to the OCR/AI buttons in PatientDetail.tsx (~line 3754); driven by a new useEffect that probes the bridge's /measurements/<key> endpoint with a 2.5 s abort timeout, using the same key cascade (accessionNumber → studyId → patient.name) the OCR pipeline uses. Doctor sees — before clicking — whether SR is ready; saves unnecessary AI calls. Adaptive OCR engine re-benchmark in src/lib/hardwareCheck.ts — 3 triggers: AGE (snapshot > 7 days), PROXIMITY (mpps within ±20% of the 50 Mpps threshold), MANUAL ({ force: true }). Diagnostic snapshot now carries rebenchReason. New exports: requestRebenchmark(), isOcrBenchmarkStale(). ensureOcrEnginePreference() signature unchanged — backward compatible. Eliminates stale routing on borderline PCs and turns "OCR slow" support calls into 30-second diagnoses. |
| 3.7 | May 2, 2026 | Bridge v4.9.0 — WhatsApp Send to Patient module (Baileys WhatsApp Web client, QR pairing UI hosted at localhost:4145/whatsapp; POST /whatsapp/send accepts { number, message, files }; auth state at <basePath>/whatsapp-auth/; auto-reconnect except on explicit logout). Frontend: WhatsAppSendModal.tsx with bridge-status polling, patient + doctor WA number fields, Report PDF + Images PDF generation via jsPDF; gated on per-doctor addonWhatsapp flag at ₹0.70/use. Installer V33 bundles npm install of Baileys at install time. Anatomy assets AES-256-CTR encrypted (key embedded in JS bundle for casual-scraper protection); decrypt helper in src/lib/anatomyDecrypt.ts; build script scripts/encrypt-anatomy.mjs; 26 anatomy files (15 full-frame + 11 multi-panel) under public/anatomy/*.png.enc. Diagram routing in ReportEditor.tsx ~lines 4232–4318 picks the right asset by template/subtype. Train AI button now appears whenever currentText.trim() !== (aiOriginal ?? "").trim(), so manual-from-scratch reports are training-eligible. Per-frame OCR LABEL_MAP + SHORT_TO_LABEL extended to 10 new organs (pancreas, bladder wall, prostate, aorta, ivc, pv, isthmus, ys, nb, tcd); SMALL_CALIPER_KEYS fallback for diameter/thickness; mm-unit normalisation in fallback 3 fixed; client/server LABEL_MAP aligned. Print modal Auto-fit shortcut. Bridge v4.8.5 hardens patient matching with full-name + study-date check; v4.8.4 removed cross-patient stealing exception. |
| 3.6 | May 2, 2026 | Production launch on Replit Autoscale Asia (2 vCPU / 4 GiB RAM, max 3 machines, scale-to-zero); public URL sonography-assistant.replit.app; recommended monthly spend cap $200 (~₹16 500). Purple "SR Detection" badge added in PatientDetail.tsx ~line 3539 (gated on dicomMeasLoaded && (ocrSource === "sr-ocr" || null)). SR-driven early-stop OCR added via reportPageFound() helper inside Phase A & B loops in PatientDetail.tsx lines ~1355–1425 — typical scan time drops from ~30 s to ~5 s, per-scan compute drops by ~80%. Sharp preprocess, six-worker Tesseract pool clamped to min(6, os.cpus()), PSM3 fast-path and batch size 12 retained. |
| 3.5 | May 2, 2026 | Smart print layout — pages 2 and 3 auto-merge when no DICOM images present; fetal charts and anatomy diagram share one page. AI draft is now manual-only: GPT-4o fires only on "Generate Draft" button click, never automatically. Doctor signature added to every print page. Indian radiology (IRIA) style AI prompt — "noted", "s/o", concise numbered findings, EDD line, "Clinical correlation advised" closing. OCR pipeline silently auto-fills measurements from USG screenshots without triggering a draft. |
| 3.4 | April 2026 | Documentation refresh: added Softcode logo to the cover; added expanded Document Control with legal entity, website, support email and last-revised date; added explicit Version Control table; added "Approved by" signature block; added clear informational disclaimer. No software behaviour change — all v3.3 engineering, sales and marketing content remains accurate. |
| 3.3 | Apr 28, 2026 | Bridge installer creates all four data folders automatically; engineering, sales and marketing notes updated. |
| 3.2 | April 25, 2026 | PDF auto-save on finalization to local bridge folder; PNDT Form F local save; multi-frame DICOM support with frame-0 thumbnail; image sheet print with selectable layouts (1×1 to 4×4). |
| 3.1 | April 18, 2026 | DICOM SR parser (vendor-agnostic: Samsung, GE, Philips, Mindray, Voluson, SonoScape, Chison, Toshiba/Canon) — measurements auto-fill report editor; DICOM Modality Worklist bridge (C-FIND); HL7 feedback channel; AI cloud sync. |
| 3.0 | April 12, 2026 | AI-powered report drafting (GPT-4o); Indian radiology style prompts; anatomy diagram (obstetric); fetal growth charts (BPD, HC, AC, FL); EDD calculator; Doppler measurements; obstetric risk panel. |
| 2.0 | April 8, 2026 | DICOM bridge core: USG machine → local PC bridge → cloud; DICOM C-STORE SCP; real-time image streaming to browser; per-patient image viewer with multi-layout print. |
| 1.0 | April 2, 2026 | Initial product launch: patient registration, manual report editor, doctor and reception login, role-based access, basic USG reporting workflow, billing and receipts. |
| 3.0 | April 12, 2026 | AI-powered report drafting (GPT-4o), anatomy diagram, fetal growth charts, EDD calculator, Doppler, obstetric risk panel. First public release of this Feature Deep Dive guide. |
| 2.0 | April 8, 2026 | DICOM bridge core: USG machine → local PC bridge → cloud; DICOM C-STORE SCP; real-time image streaming to browser; per-patient image viewer with multi-layout print. |
| 1.0 | April 2, 2026 | Initial product launch: patient registration, manual report editor, doctor and reception login, role-based access, basic USG reporting workflow, billing and receipts. |
Softcode | USG AI Assist | Feature Deep Dive Guide | Version 3.9 | May 2026
Website: www.softcodehq.com · Support: [email protected]
Built for engineers who maintain it · sales who pitch it · marketing who position it
© Softcode 2026 — All rights reserved. This document is confidential and for authorised internal use only.