OPD/IPD: add dosage defaults to medicine master form; make drug allergy non-mandatory (default: Allergies Not Known)

This commit is contained in:
DevSoftTech Server 2026-04-01 18:12:25 +05:30
parent a5c604b486
commit e27a69df5d
4 changed files with 67 additions and 20 deletions

View File

@ -2278,6 +2278,12 @@ class Opd_prescription extends BaseController
$data[$restrictionField] = trim((string) $this->request->getPost('dosage_restriction'));
}
foreach (['dosage', 'dosage_when', 'dosage_freq', 'dosage_where', 'no_of_days', 'qty', 'remark'] as $dosageField) {
if (in_array($dosageField, $fields, true)) {
$data[$dosageField] = trim((string) $this->request->getPost($dosageField));
}
}
if ($id > 0) {
$this->db->table($table)->where('id', $id)->update($data);
$savedId = $id;

View File

@ -749,20 +749,18 @@ $allergyStatusNoKnown = in_array($allergyStatusNormalized, ['no known drug aller
<div class="col-md-12">
<div class="border rounded p-2">
<h6 class="mb-2">Drug Allergy / ADR (NABH)</h6>
<div class="small text-danger mb-2">Required: Drug Allergy Status is mandatory. If status is Known, Drug Allergy Details are mandatory.</div>
<div class="row g-2">
<div class="col-md-4">
<label class="form-label mb-1">Drug Allergy Status <span class="text-danger">*</span></label>
<label class="form-label mb-1">Drug Allergy Status</label>
<select class="form-select form-select-sm" id="drug_allergy_status" name="drug_allergy_status">
<option value="">Select status</option>
<option value="Allergies Not Known" <?= ($allergyStatusUnknown || (!$allergyStatusKnown && !$allergyStatusNoKnown)) ? 'selected' : '' ?>>Allergies Not Known</option>
<option value="Known" <?= $allergyStatusKnown ? 'selected' : '' ?>>Known</option>
<option value="Allergies Not Known" <?= $allergyStatusUnknown ? 'selected' : '' ?>>Allergies Not Known</option>
<option value="No Known Drug Allergy" <?= $allergyStatusNoKnown ? 'selected' : '' ?>>No Known Drug Allergy</option>
</select>
<div id="drug_allergy_status_error" class="invalid-feedback d-block" style="display:none;"></div>
</div>
<div class="col-md-8">
<label class="form-label mb-1">Drug Allergy Details <span class="text-danger">*</span> <span class="small text-muted">(when status = Known)</span></label>
<label class="form-label mb-1">Drug Allergy Details <span class="small text-muted">(when status = Known)</span></label>
<input type="text" class="form-control form-control-sm" id="drug_allergy_details" name="drug_allergy_details" value="<?= esc($drugAllergyDetails) ?>" placeholder="e.g. Penicillin rash, NSAID gastritis">
<div id="drug_allergy_details_error" class="invalid-feedback d-block" style="display:none;"></div>
</div>
@ -3476,8 +3474,8 @@ $allergyStatusNoKnown = in_array($allergyStatusNormalized, ['no known drug aller
var status = (statusEl.value || '').trim();
var details = detailsEl ? (detailsEl.value || '').trim() : '';
if (status === '') {
markNabhFieldError(form, '#drug_allergy_status', 'Drug Allergy Status is required as per NABH documentation.');
return false;
statusEl.value = 'Allergies Not Known';
status = 'Allergies Not Known';
}
if (status.toLowerCase() === 'known' && details === '') {
markNabhFieldError(form, '#drug_allergy_details', 'Drug Allergy Details are required when Drug Allergy Status is Known.');

View File

@ -100,6 +100,39 @@
<datalist id="med_company_suggestions"></datalist>
</div>
<hr class="my-2">
<div class="small fw-semibold text-muted mb-1">Prescription Defaults <span class="text-info">(auto-fills on consult form)</span></div>
<div class="row g-1 mb-2">
<div class="col-6">
<label class="form-label form-label-sm mb-0">Dose</label>
<input type="text" id="med_default_dosage" class="form-control form-control-sm" placeholder="e.g. 1-0-1">
</div>
<div class="col-6">
<label class="form-label form-label-sm mb-0">When</label>
<input type="text" id="med_default_when" class="form-control form-control-sm" placeholder="e.g. AC">
</div>
<div class="col-6">
<label class="form-label form-label-sm mb-0">Frequency</label>
<input type="text" id="med_default_freq" class="form-control form-control-sm" placeholder="e.g. TDS">
</div>
<div class="col-6">
<label class="form-label form-label-sm mb-0">Route</label>
<input type="text" id="med_default_where" class="form-control form-control-sm" placeholder="e.g. ORAL">
</div>
<div class="col-4">
<label class="form-label form-label-sm mb-0">Days</label>
<input type="text" id="med_default_days" class="form-control form-control-sm" placeholder="e.g. 5">
</div>
<div class="col-4">
<label class="form-label form-label-sm mb-0">Qty</label>
<input type="text" id="med_default_qty" class="form-control form-control-sm" placeholder="e.g. 15">
</div>
<div class="col-4">
<label class="form-label form-label-sm mb-0">Remark</label>
<input type="text" id="med_default_remark" class="form-control form-control-sm" placeholder="">
</div>
</div>
<div class="d-flex gap-2">
<button type="button" class="btn btn-primary btn-sm" id="btn_med_save">Update</button>
<button type="button" class="btn btn-outline-info btn-sm" id="btn_med_ai_details">Use AI</button>
@ -224,6 +257,7 @@
function clearForm() {
$('#med_id').val('0');
$('#med_item_name,#med_formulation,#med_genericname,#med_salt_name,#med_dosage_restriction,#med_company_name').val('');
$('#med_default_dosage,#med_default_when,#med_default_freq,#med_default_where,#med_default_days,#med_default_qty,#med_default_remark').val('');
}
function buildMedicinePayload() {
@ -234,7 +268,14 @@
genericname: ($('#med_genericname').val() || '').trim(),
salt_name: ($('#med_salt_name').val() || '').trim(),
dosage_restriction: ($('#med_dosage_restriction').val() || '').trim(),
company_name: ($('#med_company_name').val() || '').trim()
company_name: ($('#med_company_name').val() || '').trim(),
dosage: ($('#med_default_dosage').val() || '').trim(),
dosage_when: ($('#med_default_when').val() || '').trim(),
dosage_freq: ($('#med_default_freq').val() || '').trim(),
dosage_where: ($('#med_default_where').val() || '').trim(),
no_of_days: ($('#med_default_days').val() || '').trim(),
qty: ($('#med_default_qty').val() || '').trim(),
remark: ($('#med_default_remark').val() || '').trim()
};
}
@ -268,6 +309,13 @@
$('#med_salt_name').val(row.salt_name || row.sal_name || row.salt || row.saltname || '');
$('#med_dosage_restriction').val(row.dosage_restriction || row.dose_restriction || row.restriction_note || row.restriction || '');
$('#med_company_name').val(row.company_name || '');
$('#med_default_dosage').val(row.dosage || '');
$('#med_default_when').val(row.dosage_when || '');
$('#med_default_freq').val(row.dosage_freq || '');
$('#med_default_where').val(row.dosage_where || '');
$('#med_default_days').val(row.no_of_days || '');
$('#med_default_qty').val(row.qty || '');
$('#med_default_remark').val(row.remark || '');
}
function loadOne(medId) {

View File

@ -482,21 +482,19 @@
<div class="col-md-12">
<div class="border rounded p-2">
<h6 class="mb-2">Drug Allergy / ADR (NABH)</h6>
<div class="small text-danger mb-2">Required: Drug Allergy Status is mandatory. If status is Known, Drug Allergy Details are mandatory.</div>
<div class="row g-2">
<div class="col-md-4">
<label class="form-label mb-1">Drug Allergy Status <span class="text-danger">*</span></label>
<label class="form-label mb-1">Drug Allergy Status</label>
<?php $allergyStatus = strtolower(trim((string) ($opd_prescription[0]->drug_allergy_status ?? ''))); ?>
<select class="form-select form-select-sm rx-instant" id="drug_allergy_status">
<option value="">Select status</option>
<option value="Allergies Not Known" <?= ($allergyStatus === '' || in_array($allergyStatus, ['allergies not known', 'not known'], true)) ? 'selected' : '' ?>>Allergies Not Known</option>
<option value="Known" <?= $allergyStatus === 'known' ? 'selected' : '' ?>>Known</option>
<option value="Allergies Not Known" <?= in_array($allergyStatus, ['allergies not known', 'not known'], true) ? 'selected' : '' ?>>Allergies Not Known</option>
<option value="No Known Drug Allergy" <?= in_array($allergyStatus, ['no known drug allergy', 'none'], true) ? 'selected' : '' ?>>No Known Drug Allergy</option>
</select>
<div id="drug_allergy_status_error" class="invalid-feedback d-block" style="display:none;"></div>
</div>
<div class="col-md-8">
<label class="form-label mb-1">Drug Allergy Details <span class="text-danger">*</span> <span class="small text-muted">(when status = Known)</span></label>
<label class="form-label mb-1">Drug Allergy Details <span class="small text-muted">(when status = Known)</span></label>
<input type="text" class="form-control form-control-sm rx-instant" id="drug_allergy_details" placeholder="e.g. Penicillin rash, NSAID gastritis" value="<?= esc($opd_prescription[0]->drug_allergy_details ?? '') ?>">
<div id="drug_allergy_details_error" class="invalid-feedback d-block" style="display:none;"></div>
</div>
@ -2275,14 +2273,11 @@
var allergyStatusNorm = allergyStatus.toLowerCase().replace(/\s+/g, ' ');
if (allergyStatus === '') {
var msgStatus = 'Drug Allergy Status is required as per NABH documentation.';
setStatus('error', 'Drug Allergy Status is required');
$('.jsError').removeClass('text-muted text-success').addClass('text-danger').text(msgStatus);
markNabhFieldError('#drug_allergy_status', msgStatus);
if (typeof done === 'function') {
done(false, { update: 0, error_text: msgStatus });
allergyStatus = 'Allergies Not Known';
allergyStatusNorm = 'allergies not known';
if ($('#drug_allergy_status').length) {
$('#drug_allergy_status').val('Allergies Not Known');
}
return;
}
if ((allergyStatusNorm === 'known' || allergyStatusNorm === 'yes' || allergyStatusNorm === 'present') && allergyDetails === '') {