Commit Graph

169 Commits

Author SHA1 Message Date
9fe9c971f1 feat: Healthplix-style complaint table — inline row editing with Frequency/Severity/Duration/Date columns, remove Extract Codes button 2026-05-19 22:58:52 +05:30
b702ff6fdc feat: complaint Extract Codes button with SNOMED chip review panel
- Add 'Extract Codes' button to complaint lookup input
- Parse free-text with duration/severity extraction (regex: 3 days, moderate etc)
- Call Opd_prescription/complaints_extract endpoint -> local SNOMED FULLTEXT
- Render inline chip cards: term, concept_id, duration, severity, confidence%
- Doctor clicks confirm (green tick) or reject (red x) per chip in seconds
- Confirm pre-fills duration+severity in complaint table row automatically
- 'Confirm All' bulk action; Dismiss clears panel
- Add complaints_extract controller method + parseComplaintFreeText helper
- Add route Opd_prescription/complaints_extract
2026-05-19 22:30:23 +05:30
a56e8a5776 feat: SNOMED background coding pipeline + ABDM Coding Panel
- Add opd_coding_queue + opd_snomed_suggestions migrations
- Add ProcessSnomedCoding spark command (cron: snomed:process-coding)
  Extracts clinical phrases, matches local SNOMED FULLTEXT, saves suggestions
- Add AbdmCodingPanel controller: index/review/confirm/reject/correct/mark_fhir_ready/tip_check
- Add coding_panel + coding_panel_review views (Bootstrap 5, AJAX actions)
- Inject queue trigger in opd_prescription_save (fail-open, ON DUPLICATE KEY)
- Add consult form tip badge: polls tip_check 4s after save, shows review link
- Add AbdmCodingPanel routes behind abdm permission filter
- Various ABDM gateway, FHIR, ABHA, SNOMED library updates
2026-05-19 20:40:27 +05:30
0628f8f813 feat: ABDM OPD Queue + ABHA Register flow + patient ABHA search fix
ABDM OPD Queue (today):
- New EAtriaBridgeConnector: opdQueueFetch/opdTokenCreate/opdTokenUpdateStatus + patch() helper
- New AbdmOpdQueue controller: index/list/fetchQueue/createToken/updateTokenStatus/processScannedToken
  - fetchQueue syncs gateway tokens into abdm_opd_tokens (local DB) and enriches with HMS patient data
  - processScannedToken auto-finds/creates patient_master record from ABHA scan data, marks token CALLED
- New migration: abdm_opd_tokens table (gateway_token_id, source, status, patient_id, opd_id, processed_at)
- New view: abdm/opd_queue.php - reception screen with auto-refresh 30s, HMS Patient column (green row when OPD registered)
- Sidebar: ABDM OPD Queue nav link added
- Routes: AbdmOpdQueue with abdmPermFilter

ABHA Register tab (earlier this session):
- New Abha controller: initiate/verifyOtp/communication/verifyCommOtp/validateAbha/card + autoCreateOrFindPatient
- New views: abha/card.php, partials/abha_create_panel.php, partials/abha_otp_modal.php
- Patient_V.php: ABHA Register tab with 4-method wizard (ABHA number, QR scan, facility QR, mobile OTP)

Patient ABHA search fix:
- Patient::search() now detects ABHA column (abha_id/abha_no/abha/abha_address) and searches by it

ABDM Bridge infrastructure:
- EAtriaBridgeConnector: new connector for e-atria.in ABDM bridge gateway
- AbdmConnectorFactory/Interface updated
- AbdmGatewaySettings controller + view
- SNOMED/CSNOTK terminology service skeleton
- Finance payout OPD consult views
- Migration: AddAbdmPushFieldsToOpdAndPatient, CreateSnomedCoreTables
- Docs: abdm/ API specs, architecture, gateway guides
2026-05-16 04:21:31 +05:30
f311d50745 OPD consult: add women history fields, persist in history, update print sections 2026-05-12 12:52:13 +05:30
5d5c9656ea billing: improve patient name display on consult form and history page 2026-05-08 13:49:37 +05:30
fbb03a6abb billing: redesign ABHA wizard, enhance patient info panels and consult page photo/layout 2026-05-08 13:29:57 +05:30
eac78b7014 billing: add ABHA create/verify tab in patient billing view and update IPD panel package; add hospital logo image 2026-05-08 10:48:43 +05:30
b20d5b3ae8 Show opd_no in OPD Q No column 2026-05-05 23:07:10 +05:30
36d3fa843b Implement medical store credit payout workflow and optimize payout pool DataTable grouping 2026-04-30 01:42:03 +05:30
0aa0edbbce Fix OPD confirm payment flow and DataTable initialization
- Opd.php: mode-0 (zero amount) no longer inserts payment_history row
  and skips HealthPlix sync for faster confirm
- Opd.php: added spid-based idempotency for cash/card to prevent
  duplicate payment_history rows on retry
- Opd.php: invoice view hides 0-amount payment_history rows
- opd_appointment_list.php: fix isDataTable call (DataTable -> dataTable)
- jquery.dataTables.min.js: replace non-functional shim with real
  DataTables 1.13.8 (supports ext.search, isDataTable, rows() API)
2026-04-28 12:01:53 +05:30
5226fde8a0 Fix OPD appointment datetime display and date filtering 2026-04-28 10:59:04 +05:30
bd274a3fc3 Add OPD appointment time capture and storage with date+time display 2026-04-28 07:59:47 +05:30
fdd3256ecb fix: add patient history back navigation and restore patient search datatable 2026-04-27 12:05:43 +05:30
6ae9a3516f feat: add HealthPlix OPD sync flow with settings, diagnostics, and sync ID persistence 2026-04-27 08:32:51 +05:30
846e21ce4b billing: add consult history action labels in profile and search 2026-04-22 11:45:38 +05:30
7d09bc3354 billing: refine consult history modal header and close action 2026-04-22 11:21:05 +05:30
2e76aab171 billing: make OPD scan modal fullscreen 2026-04-22 11:14:22 +05:30
29c6e971e4 billing: add OPD scan modal zoom/pan/rotate hotkeys and help text 2026-04-22 11:11:06 +05:30
d02244444e finance/storestock: implement cash submission audits, bank settlements, and opd payout tracking 2026-04-22 10:53:20 +05:30
7e4903bd68 billing: add patient history action and legacy-style OPD history view 2026-04-22 10:33:29 +05:30
fbbecee3b4 feat(ipd-charges): group delete, sort order, Up/Down buttons, foldable billing panels
- Safe delete for empty IPD charge groups with CSRF-safe AJAX
- Migration: add sort_order to ipd_item_type (backfilled)
- Sort order UI on create/edit/list views; persist in controller/model
- Up/Down swap buttons on group list (AJAX swap endpoint + CSRF refresh)
- Fix 500 on edit screen: restore missing getItemTypeById() in ItemIpdModel
- IpdBillingModel: propagate sort_order ordering to ipd-charges and bill-details tabs
- Billing IPD Charges tab: Bedside Clinical/Nursing Charge and Doctor Visit Charge panels now collapsible, start collapsed
2026-04-18 06:56:38 +05:30
b98b1e6f4a Fix predefined advice +Add firing twice due to duplicate document event binding 2026-04-17 05:22:45 +05:30
7612d738aa Make OPD scan list delete self-contained AJAX with inline CSRF sync 2026-04-17 04:50:40 +05:30
4d46ad1492 Fix scan list delete button blocked by carousel overlay on single-image view 2026-04-17 04:48:13 +05:30
f7c419c25e Harden OPD scan delete link fallback when modal CSRF helpers are unavailable 2026-04-17 04:45:35 +05:30
1cea1495fc Fix OPD scan delete button for direct file-list page and AJAX modal 2026-04-17 04:41:45 +05:30
56a0fb83a4 Fix consult examination autocomplete selection behavior 2026-04-17 03:21:34 +05:30
85ce007b26 Rename investigation toggle to Custom Investigation 2026-04-14 22:03:16 +05:30
287b0eb603 Adjust investigation toolbar buttons 2026-04-14 21:57:04 +05:30
aae6211f48 Add investigation shortcuts manager panel 2026-04-14 21:51:49 +05:30
779dbcbaa1 Show formulation with medicine name in OPD medicine list 2026-04-13 12:28:01 +05:30
93fe7741fa Show medicine formulation in OPD medicine autotext suggestions 2026-04-13 12:22:42 +05:30
f99f48b62f fix: restrict scan delete to 24h or same date 2026-04-11 04:49:59 +05:30
7233f5979e feat: auto visit-done on scan save and add scan delete actions 2026-04-11 04:45:45 +05:30
b50d72207e refactor: set number input step to 1 across views 2026-04-10 21:16:25 +05:30
9297849c8a fix: correct IPD balance display when computed balance is zero 2026-04-10 21:07:01 +05:30
6782aee1a4 fix: use computed item totals for IPD gross/net in bill views 2026-04-10 21:03:17 +05:30
a850e3229a fix: close lingering complaint autocomplete suggestions in consult form 2026-04-10 18:36:26 +05:30
54d0afaf95 fix: default OPD appointment filter to Waiting on load and refresh 2026-04-10 14:14:14 +05:30
6a0660cad7 Show patient age and gender in OPD list 2026-04-10 03:55:00 +05:30
c534a83ad2 Normalize OPD queue display per doctor day 2026-04-10 03:44:32 +05:30
5a6ca034cd Prevent duplicate Consult button in waiting rows 2026-04-10 03:35:27 +05:30
c7997c34aa Sync OPD screen with live digest and row snapshot 2026-04-10 03:32:08 +05:30
fd21f24c45 Fix OPD status badges to use full DataTable counts 2026-04-10 03:20:15 +05:30
7f131aeae8 Add OPD doctor/date update endpoint and invoice validation feedback 2026-04-09 19:47:57 +05:30
ccbc5d7b72 Make OPD scan AI processing manual with button 2026-04-09 06:35:17 +05:30
7275d13500 Add OPD keyword manager and caret-aligned autocomplete 2026-04-09 06:25:03 +05:30
418fb3e5e7 Add cached consult autotype suggestions and doctor/master keyword save 2026-04-09 06:07:46 +05:30
b1d329e462 Port legacy OPD autotype suggestions for complaints, provisional diagnosis, and findings 2026-04-09 06:00:29 +05:30
d2d34572f6 Add doctor-customizable foldable consult sections for key OPD fields 2026-04-09 05:49:48 +05:30
90ac310cf0 Port CI3 vitals chart and treatment chart forms to CI4 IPD form print (form_no 6 and 7) 2026-04-09 04:26:09 +05:30
441ae0668f Add placeholder panel to document print settings; autocomplete off on med inputs; localStorage medicine cache 2026-04-09 03:43:53 +05:30
fad0d89260 Speed up medicine autocomplete with cache and 10-row limit 2026-04-08 19:47:38 +05:30
2977192017 Make IPD forms dynamic and stop stale OPD refresh polling 2026-04-08 11:41:33 +05:30
2958f2e9b6 fix: queue no per-doctor-per-day isolation and stop auto-refresh on digest poll
- Queue No (Opd.php::autoCreateOpdQueue, Opd_prescription.php::opd_prescription_save
  and ::ensurePrescriptionSession): changed MAX(queue_no) query to JOIN through
  opd_master.doc_id instead of trusting opd_prescription.doc_id, ensuring queue
  numbering is strictly per-doctor per-day regardless of stale doc_id values in
  opd_prescription rows.

- OPD appointment list: replaced auto-reload-on-digest-change with a manual
  'Refresh' button. When the 8s digest poll detects new data the button turns
  yellow with a 'New' badge; the page only reloads when the user explicitly clicks
  it, preventing disruptive mid-session reloads."
2026-04-07 11:23:20 +05:30
19db43762d Enhance OPD and patient workflows with live updates and UX improvements 2026-04-07 03:27:39 +05:30
16f654289e Move ABDM sandbox to task board and improve OPD queue handling 2026-04-06 13:55:19 +05:30
2fc3d3ddbc fix: remove Queue button from Waiting tab for confirmed paid OPDs 2026-04-06 13:23:14 +05:30
67664ab8ff fix: move confirmed opd appointments into waiting 2026-04-06 13:11:46 +05:30
ca4b4195aa fix: keep new OPD appointments in booked list 2026-04-06 12:51:11 +05:30
b03eb0064a fix: show booked queue actions in waiting list 2026-04-06 12:47:00 +05:30
44cb24c4e1 fix: restore legacy OPD queue workflow 2026-04-06 12:40:34 +05:30
30643c87f8 feat: add scan doc list modal and print medicine formulation prefix 2026-04-06 12:11:56 +05:30
2154af394c fix: build Next Visit chips from opd_nextvisit with date from today 2026-04-06 11:45:08 +05:30
f28fcf2717 feat: auto-create new consult medicines in OPD master with AI/local detail enrichment 2026-04-06 11:38:11 +05:30
c4865f6e03 fix: focus medicine name field after add/update in consult 2026-04-06 11:30:07 +05:30
1843460693 feat: restore Old Prescription panel with add-one/add-all into current consult 2026-04-06 11:24:11 +05:30
2fc4fbd82c fix: use Unicode-compatible Hindi fonts for IPD form PDF rendering 2026-04-06 09:17:48 +05:30
062fc7ab32 feat: Add ABDM Task Board module with ABHA workflow
- Add ABDM sidebar heading and Task Board nav link
- Create migration 000040: abdm_work_tasks table
- Add AbdmTaskBoard controller with backfill methods
- Add AbdmWorkTaskService for task creation/deduplication
- Add AbdmGateway controller for ABDM API integration
- Separate task types: patient_abha_create vs patient_abha_update
- Add lab_report_publish and radiology_report_publish task types
- Patient.php: auto-create ABDM tasks on registration
- Diagnosis.php: auto-create tasks on report verify/finalize
- Task board UI: 7 filter buttons with default Unupdated ABHA view
- Fix SQL crash in backfillLabRadiologyTasks (dynamic column detection)
- Improve load_form AJAX error display with HTTP status + response text
- Add ABDM routes in Routes.php
- Add FHIR R4 builder library updates
- Add bridge sync service updates
2026-04-05 23:42:24 +05:30
9d88aaa2a6 Implement ABDM identity storage and align OPD consult/medicine dose masters 2026-04-04 17:26:40 +05:30
71a6a7e36e Charges invoice print: include payment ID and date in receipt details 2026-04-03 15:46:05 +05:30
37976c8cf1 Charges invoice print: show payment details (Cash/Bank receipts, IPD/Org credit) on portrait mode 2026-04-03 15:42:46 +05:30
fd28d6a01e IPD cash balance: fix date range picker submission and parser 2026-04-03 14:13:05 +05:30
e009b748ca OPD templates: add doctor short description placeholder tokens 2026-04-03 13:46:10 +05:30
435192f81a IPD payment receipt: fix modal loader, add PDF print route, and bank mode details 2026-04-03 13:29:03 +05:30
e282289227 Default new patient blood group to Not Define 2026-04-02 17:49:45 +05:30
2b391705fe Rx print: persist and print Hindi advice from opd_advice 2026-04-01 20:23:10 +05:30
0d500d82b2 Rx print: fix dose translation (prefix match + one-time-a-day), consistent 11px Hindi font 2026-04-01 20:08:00 +05:30
caba6dc84b Rx print: professional font, vitals on one line, advice in Hindi 2026-04-01 20:01:38 +05:30
94e1253e40 Investigation Profile Master: CRUD and consult integration 2026-04-01 18:44:52 +05:30
771fa64778 Investigation Master: CRUD, favourites, specialization filter 2026-04-01 18:26:33 +05:30
e27a69df5d OPD/IPD: add dosage defaults to medicine master form; make drug allergy non-mandatory (default: Allergies Not Known) 2026-04-01 18:12:25 +05:30
a5c604b486 Medicine edit: rename Salt Name label to Substitute 2026-04-01 18:01:51 +05:30
c27e44c9b1 Consult: remove Active/Favorites/All scope buttons, always search all medicines 2026-04-01 17:56:22 +05:30
7ea22378f5 OPD medicine list: move DataTable to server-side ajax 2026-04-01 17:49:02 +05:30
c3bc8f89b8 OPD: simplify medicine list and reuse master dosage defaults 2026-04-01 17:40:50 +05:30
fe1156b68a Fix billing invoice balance/payment flow and deduction UI 2026-04-01 07:23:29 +05:30
3294e39b02 fix: parse and render ECG AI report in structured sections
- add formatEcgReportHtml() for ECG-specific presentation
- extract key ECG metrics (vent rate, PR, P/QRS/T, QT/QTc, axis)
- extract common findings (normal sinus rhythm, left axis deviation, borderline ECG)
- render note separately when present
- add robust fallback splitter for noisy OCR ECG strings without delimiters
- route ECG-like reports through ECG formatter in formatAiReportHtml()
2026-03-31 05:22:41 +05:30
001992b2b5 feat: format AI scan report text in history cards
- add formatAiReportHtml() in opd_prescription_basic to render labeled sections
- auto-format loaded patient scan history reports after AJAX load
- format updated report immediately after Run AI response
- keep raw report text for Use Report action while presenting readable UI blocks
- style history report container as light card for clearer visual structure
2026-03-31 05:18:33 +05:30
cf299de505 feat: add Delete button to Rx-Group list
- new rx_group_delete(int rxId) method in Opd_prescription controller
- deletes linked medicines first (opd_prescrption_prescribed_template), then group row
- POST route: Opd_prescription/rx_group_delete/(:num)
- Delete button (red) added to each row in Rx-Group list table
- confirm dialog before delete (shows group name)
- reloads list after delete; clears form if deleted group was loaded
2026-03-31 04:28:18 +05:30
fa599bb6b1 feat: pre-populate Create Rx-Group modal with current consult medicines
- cache session medicine rows in currentSessionMedicineRows on every renderMedicine() call
- when Create Rx-Group modal opens, show all current consult medicines as checkboxes
- all medicines pre-checked by default so they are included in the new Rx-Group
- uncheck any medicine to exclude it from the Rx-Group
- crgcMedicineList built from checked rows; manually added medicines preserved
- medicines listed as chips: Type Name (Dose When Freq) for quick readability
2026-03-31 04:22:46 +05:30
7dc147a397 feat: add medicine entry to Create Rx-Group modal on consult page
- expanded rxGroupCreateModal to modal-xl with two-column layout
- left column: group info (name, complaints, diagnosis, investigation, finding)
- right column: medicine form (name autocomplete, type, dose/when/freq/where, days/qty/remark)
- medicine name search uses medicine_search endpoint with datalist
- type auto-fills on datalist selection (same Chrome input-event fix as main form)
- dose/when/freq/where selects populated from medicineDoseMasterCache (already loaded)
- + Add Medicine adds to local crgcMedicineList array with live table display
- Remove button (x) on each row in the pending medicine table
- Save Rx-Group: creates group then batch-saves all medicines sequentially
- Save & Apply: same as above then applies group to current session
2026-03-31 04:14:30 +05:30
2ae23c0284 feat: add Create Rx-Group button and modal on consult page
- added '+ Rx-Group' button beside Rx Group selector in medicine panel
- added rxGroupCreateModal with Name/Complaints/Diagnosis/Investigation/Finding fields
- pre-fills Complaints and Diagnosis from current consult textarea values
- Save: creates group and refreshes catalog (group appears in selector)
- Save & Apply: creates group and immediately applies it to current session
- error shown inline in modal, catalog reloads after successful create
2026-03-31 04:07:05 +05:30
e167704aed fix: medicine autocomplete shows plain name, type auto-fills on datalist pick
- remove use_count/(0) decoration from datalist option value
- option value is now plain med_name, no star or count suffix
- extract applyMedicineSelection() helper to avoid code duplication
- detect datalist selection inside input callback (Chrome fires input not change)
- type, med-id, favorite button all fill immediately when exact name match found
- change handler simplified: matches against medicineSuggestRows array directly
2026-03-31 03:47:32 +05:30
ad24857720 feat: align consult Rx medicine controls with Rx-Group Add/Edit masters
- consult form medicine Dose/When/Freq changed to dropdowns from dose masters
- added Where dropdown in consult medicine editor and table display
- consult now loads options from Opd_prescription/rx_group_dose_masters
- medicine add/update payload now includes dosage_where
- medicine list now returns dosage_where_label for readable table output
- edit mode supports existing values not present in current master set
- quick chips now map into select options (with safe fallback)
2026-03-31 03:31:26 +05:30
71f24660b0 fix: prevent duplicate Rx-Group edit requests from repeated event binding
- use namespaced delegated handlers in opd_rx_group_workspace
- call off(...namespace...) before on(...) for all click actions
- resolves multiple rx_group_get calls on single Edit click after panel reopen
2026-03-31 03:18:21 +05:30
ab65ba0514 fix: force Browser Mic mode by default for production stability
- default speech mode preference changed to browser
- on consult load, preference is reset to browser and saved
- prevents automatic /stt-proxy calls until server STT is stabilized
- manual mode selector remains available for future server testing
2026-03-30 19:26:30 +05:30
9e91628370 feat: add manual speech mode switch (Auto/Browser/Server)
- Added Mic Mode selector in consult header
- Apply one preference to both Complaints Mic and Med Mic
- Browser mode can be forced to bypass /stt-proxy 400 errors
- Preference persisted in localStorage
- Mode change stops active recordings safely before applying
2026-03-30 19:21:12 +05:30
f82751db27 feat: add browser fallback mode for Med Mic
- Med Mic now supports server mode and browser speech-recognition mode
- auto-select mode from STT server health: server -> browser -> off
- click behavior updated for both modes (start/stop on same button)
- server failure now auto-falls back to browser mode when supported
- Med Mic labels now reflect current mode (server/browser/off)
2026-03-30 19:15:37 +05:30