FEATURE: Quick-add functionality for Course/Treatment master terms
NEW COMPONENTS:
1. Course master table: ipd_discharge_course_master
- term_name, term_code, icd_code, is_active
- Auto-creates on first use
2. Controller endpoints in Ipd_discharge.php:
- course_master_lookup() - AJAX autocomplete search
- course_master_list() - Full list with filters
- course_master_save() - Create/update records
- course_master_delete() - Remove records
3. Routes added to Config/Routes.php:
- Ipd_discharge/course_master_lookup (GET)
- Ipd_discharge/course_master_list (GET)
- Ipd_discharge/course_master_save (POST)
- Ipd_discharge/course_master_delete (POST)
VIEW CHANGES (discharge_create.php):
- Course input now uses input-group layout
- Green 'Save in Master' button added
- Custom dropdown for autocomplete with code badges
- Hidden field: new_course_master_id
- JavaScript: initCourseAutocomplete() function
- Integrated with existing quickAddTermModal
QUICK-ADD MODAL ENHANCEMENT:
- Now supports 3 types: surgery, procedure, course
- Dynamic endpoint selection based on type
- Course type uses course_master_save endpoint
- Auto-populates course input and master_id on save
AUTOCOMPLETE FEATURES:
- Type 2+ characters → searches course_master table
- Dropdown shows: Name + SNOMED/ICD code badges
- Arrow key navigation (Up/Down/Enter/Escape)
- Click or Enter to select
- Hover highlighting with visual feedback
- 300ms debounce for performance
WORKFLOW:
1. Type course/treatment name
2. See dropdown with existing terms (if any)
3. Click 'Save in Master' to add new term
4. Modal opens with name pre-filled
5. Enter SNOMED/ICD codes (optional)
6. Save → Auto-populates input + master_id
7. Click '+ADD Row' to add to discharge
BENEFITS:
- Consistent UI across Surgery/Procedure/Course sections
- Fast term entry without leaving form
- Master library builds during workflow
- ABDM compliance with code support
- Reusable terms across discharges
BUGFIX: 404 error when saving editable complaint fields
PROBLEM: When editing complaint name or remark in IPD discharge
form, the AJAX request to update_complaint_field returned HTTP 404.
ROOT CAUSE: In CodeIgniter 4, routes must be explicitly defined.
The new update_complaint_field method was added to Ipd_discharge
controller but no route was registered in Routes.php.
SOLUTION: Added POST route for Ipd_discharge/update_complaint_field
in app/Config/Routes.php following the existing pattern for other
Ipd_discharge AJAX endpoints.
Now editable complaint fields save correctly with green/red feedback.
- FhirR4Builder: rewrite buildLabReportBundle() with DiagnosticReportLab
profile, structured Observation valueQuantity/valueString, reference
ranges, interpretation codes, Binary+DocumentReference for HTML report,
Encounter resource, HFR-based bundle identifier system
- FhirR4Builder: rewrite buildDischargeSummaryBundle() with optional
Practitioner/Organization params, structured ABDM sections (chief
complaints 422843007, medical history 1003642006, investigations
721981007, procedures 1003640003, medications 721912009, follow-up
736271009), HFR-based bundle identifier system
- AbdmGateway: shareIpdDischargeBundle() now builds a real
DischargeSummaryRecord FHIR bundle and posts via pushRecord()
(POST /v3/records/push) instead of the stale shareIpdDischargeBundle()
- AbdmGateway: shareDiagnosisReportBundle() now builds a real
DiagnosticReportRecord FHIR bundle and posts via pushRecord()
instead of the stale shareDiagnosisReportBundle()
- AbdmGateway: add getHospitalProfileForFhir() and mapLabTypeToTitle()
helpers; fix pre-existing undefined \ bug in
getActiveConsentRecord()
- Add ABDM_FHIR reference package, AbdmBridgeLog controller/view,
bridge record migration, debug scripts and misc UI/settings updates
- POST Opd_prescription/fhir_bundle_submit endpoint:
loads stored FHIR bundle, fetches patient/OPD/doctor context,
calls EAtriaBridgeConnector::pushRecord to push to bridge
- Standalone preview page (/Opd_prescription/fhir_bundle_preview/N):
added Submit to ABDM Bridge button with CSRF-safe AJAX + inline
success/error alert
- FHIR modal in task_board.php: added Submit to ABDM button next
to Copy JSON; JS reads _fhirOpdId/_fhirSessionId and posts to
fhir_bundle_submit with CSRF token refresh
- Add separate Save Settings button below User Settings card
- Create myProfileSaveSettings controller method for dedicated settings save
- Settings save endpoint: POST /my-profile/save-settings
- Validates sidebar_auto_hide_seconds (0-60 range)
- Provides immediate feedback: success/error message display
- Separate from profile photo and password updates
- Message auto-hides after 2 seconds on success
- 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