Skip to content

Commit

Permalink
Soorya | BAH-3056 | Rule based dosage calculation in medication tab (#…
Browse files Browse the repository at this point in the history
…615)

* Rule based medication dosage calculation

* Fix eslint errors
  • Loading branch information
SooryaKumaranC-tw authored Jun 27, 2023
1 parent 624ad65 commit 571f714
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,21 @@ angular.module('bahmni.clinical')
}

$scope.doseFractions = treatmentConfig.getDoseFractions();

$scope.hideOrderSet = treatmentConfig.inputOptionsConfig.hideOrderSet;

$scope.showDoseFractions = treatmentConfig.inputOptionsConfig.showDoseFractions;
$scope.isDoseFractionsAvailable = function () {
return $scope.doseFractions && !_.isEmpty($scope.doseFractions) ? true : false;
};

$scope.isRuleMode = function (treatment) {
if (treatment.dosingRule != undefined || treatment.dosingRule != null) {
$scope.treatment.uniformDosingType.doseUnits = 'mg';
return true;
}
return false;
};

$scope.isSelected = function (drug) {
var selectedDrug = $scope.treatment.drug;
return selectedDrug && drug.drug.name === selectedDrug.name;
Expand Down Expand Up @@ -304,6 +311,21 @@ angular.module('bahmni.clinical')
$scope.treatment.calculateQuantityAndUnit();
}, true);

$scope.calculateDose = function (treatment) {
if (treatment.dosingRule != null || treatment.dosingRule != undefined) {
var visitUuid = treatmentConfig.orderSet.calculateDoseOnlyOnCurrentVisitValues ? $scope.activeVisit.uuid : undefined;
var calculatedDose = orderSetService.getCalculatedDose($scope.patient.uuid, treatment.drug.name, treatment.uniformDosingType.dose, "mg", '', treatment.dosingRule, visitUuid);
calculatedDose.then(function (calculatedDosage) {
treatment.uniformDosingType.dose = calculatedDosage.dose;
treatment.calculateQuantityAndUnit();
return treatment;
});
return treatment;
}
};

$scope.$watch('calculateDose', $scope.treatment, true);

$scope.add = function () {
var treatments = $scope.treatments;
if ($scope.treatment.isNewOrderSet) {
Expand Down Expand Up @@ -745,6 +767,16 @@ angular.module('bahmni.clinical')
});
};

var showRulesInMedication = function (medicationConfig) {
$scope.showRulesInMedication = false;
if (medicationConfig !== 'undefined' && medicationConfig.tabConfig !== 'undefined' && medicationConfig.tabConfig.allMedicationTabConfig
!== 'undefined' && medicationConfig.tabConfig.allMedicationTabConfig.orderSet !== 'undefined') {
if (medicationConfig.tabConfig.allMedicationTabConfig.orderSet.showRulesInMedication) {
$scope.showRulesInMedication = true;
}
}
};

var init = function () {
$scope.consultation.removableDrugs = $scope.consultation.removableDrugs || [];
$scope.consultation.discontinuedDrugs = $scope.consultation.discontinuedDrugs || [];
Expand All @@ -754,6 +786,8 @@ angular.module('bahmni.clinical')
mergeActiveAndScheduledWithDiscontinuedOrders();

$scope.treatmentConfig = treatmentConfig;// $scope.treatmentConfig used only in UI
var medicationConfig = appService.getAppDescriptor().getConfigForPage('medication') || {};
showRulesInMedication(medicationConfig);
};
init();
}]);
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,20 @@ <h2 class="section-title has-toggle" toggle="addTreatment">
</div>
</article>
<div class="unit-wrap clearfix">
<article class="form-field" ng-show="showRulesInMedication" >
<div class="field-attribute">
<label class="dose-label">{{ ::treatmentConfig.translate('rule', 'MEDICATION_LABEL_RULE') }} </label>
</div>
<div class="field-value">
<select id="dosingrule" class="form-field frequency" ng-model="treatment.dosingRule"
ng-options="item as item for item in treatmentConfig.dosingRules" placeholder="Please select a rule"
ng-disabled="!treatment.isUniformFrequency">
<option value="">Choose Rule</option>
</select>
</div>
</article>
<button ng-if="!treatmentConfig.isHiddenField('dosingTypeToggle')" type="button" class="icon-button exchange-btn fl"
tabindex="-1" ng-click="treatment.toggleFrequency()">
tabindex="-1" ng-click="treatment.toggleFrequency()" ng-disabled="isRuleMode(treatment)">
<i class="fa fa-exchange"></i>
</button>
<div class="frequency-widget uniform-frequency" ng-show="treatment.isUniformFrequency">
Expand Down Expand Up @@ -83,6 +95,7 @@ <h2 class="section-title has-toggle" toggle="addTreatment">
<select id="uniform-dose-unit" class="form-field freq-choose-units" ng-model="treatment.uniformDosingType.doseUnits"
ng-options="item.name as item.name for item in treatmentConfig.getDoseUnits()"
ng-required="treatment.isUniformDoseUnitRequired()"
ng-disabled="isRuleMode(treatment)"
ng-class="{'noFractionOptions' : !isDoseFractionsAvailable()}">
<option value="">{{ ::treatmentConfig.translate('doseUnitsPlaceHolder', 'MEDICATION_DOSE_UNIT_PLACEHOLDER') }} </option>
</select>
Expand Down Expand Up @@ -261,7 +274,8 @@ <h3 class="orderSet-additional-info" ng-show="treatmentConfig.showAdditionalInfo

<div class="operations fr clearfix">
<button class="add-drug-btn secondary-button fl" type="submit" accesskey="{{ ::treatmentConfig.translate('addAccessKey', 'MEDICATION_ADD_ACCESS_KEY') }}"
ng-disabled="!treatment.drug.uuid && !treatment.concept.uuid && treatment.drugNameDisplay && !treatment.isNonCodedDrug">
ng-disabled="!treatment.drug.uuid && !treatment.concept.uuid && treatment.drugNameDisplay && !treatment.isNonCodedDrug"
ng-click="calculateDose(treatment)">
<span ng-bind-html="::treatmentConfig.translate('add', 'MEDICATION_ADD_BUTTON_LABEL')">
</span>
</button>
Expand Down
1 change: 1 addition & 0 deletions ui/app/i18n/clinical/locale_en.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
"MEDICATION_ADD_DRUG_FORM_TITLE": "Order Drug",
"MEDICATION_ADD_ORDERSET_FORM_TITLE": "Order an Order Set",
"MEDICATION_LABEL_DOSE": "Dose",
"MEDICATION_LABEL_RULE": "Rule",
"MEDICATION_LABEL_UNITS": "Units",
"MEDICATION_LABEL_FREQUENCY": "Frequency",
"MEDICATION_LABEL_ROUTE": "Route",
Expand Down

0 comments on commit 571f714

Please sign in to comment.