- Add direct expiry disposal (write-off) and quick return from Nearest Expiry report
- Add Disposal Register view and PDF audit certificate
- Add supplier info and rich selectable autocomplete in purchase return search
- Register disposal & quick return routes in Routes.php
- IPD Billing: replace ambiguous 'In Package' switch with explicit 'Include in IPD Bill (Normal)' / 'In Package (Covered)' dropdown selector in Medical Bills and Package tabs
- IPD Billing: return recalculated summary metrics from credit-type endpoint and update dashboard cards in real-time
- Pharmacy: classify IPD bills using ipd_credit_type instead of group_invoice_id to correctly show Package: No for credit bills and add to Total Credit
- Pharmacy Billing: default item quantity to blank instead of 0 to allow direct typing without backspacing, with validation against 0/empty submissions
- Pharmacy Invoice: add outside doctor/consulting doctor selection and auto-save via AJAX
- Replace all patient_master_exten checks with patient_master across Medical.php
- Fixes blank patient info in multiple pharmacy pages:
* /Medical/ipd_print/{id}/credit - IPD print bills (UHID, Patient name)
* Counter sale forms and invoice editing
* Patient search functionality
* IPD group print consolidated views
* Auto UHID lookup endpoints
- patient_master_exten table exists but lacks core patient fields (p_fname, p_rname, p_code)
- Ensures consistent patient data display throughout pharmacy module
- Matches earlier fixes for billing and invoice list pages
- Use patient_master directly in list_med_inv and list_med_orginv methods
- patient_master_exten exists but lacks p_fname, p_rname, p_code fields
- Fixes blank Name/Age/Gender/P Code in /Medical/list_med_inv page
- Consistent with earlier fix for list_org_ipd
- Use patient_master table directly instead of patient_master_exten
- patient_master_exten may exist but lacks p_fname, p_rname fields
- Matches pattern used in IpdBillingModel::baseIpdListQuery()
- Fixes blank patient names/codes in /Medical/list_org_ipd page
- Update isIpdDischargedInvoice to check ONLY ipd_status field (remove fallback checks)
- Add IPD status toggle UI in discharge panel (Active/Discharged control)
- Create toggleIpdStatus controller method with permission check
- Add billing.ipd.status.manage permission for controlling bill edit lock
- Allows editing bills when needed by toggling status independently of discharge_date
- Auto-releases bed when setting status to discharged