BBahmni 한국어 매뉴얼검색
한국어 번역 완료
한국어English

약품 투여 빈도와 치료 차트 연결

목적과 이점

이 설정을 사용하면 Medication에 월요일·수요일·금요일 같은 사용자 정의 약품 투여 빈도를 추가할 수 있습니다. 사용자 정의 표시 컨트롤이 설정된 빈도에 따라 정보를 보여주도록 Treatment Chart도 구성할 수 있습니다.

단계

치료 차트는 입원 환자의 방문 대시보드에서 사용할 수 있습니다.

Screen Shot 2016-04-25 at 3.22.22 PM.png

visit.json 구성

apps/clinical/visit.json에 다음 설정이 필요합니다.

Code Snippet
"sections": {
 "Custom Treatment Chart": {
    "type": "custom",
  "displayOrder": 1,
  "config": {
      "title": "Custom Treatment Chart",
  "template": "<custom-treatment-chart config=config visit-summary=visitSummary></custom-treatment-chart>",
  "showOtherActive": true,
  "frequenciesToBeHandled": [
        "Monday, Wednesday, Friday",
  "Tuesday, Thursday, Saturday",
  "Monday, Sunday, Wednesday"
  ]
    }
  },
  "Treatments": {
    "type": "treatment",
  "title": "Treatments",
  "displayOrder": 6,
  "config": {
      "translationKey": "VISIT_TITLE_TREATMENTS_KEY",
  "showFlowSheet": false,
  "showListView": true,
  "showOtherActive": false,
  "showDetailsButton": true,
  "showRoute": true,
  "showDrugForm": true,
  "showProvider" : true
  }
  }
}

customControl.js 구성

apps/customDisplayControl/js/customControl.js에서 구성합니다(js 디렉터리에 이 파일이 없으면 만듭니다).

customControl.js가 이미 있으면 이 설정을 파일 끝에 추가하고 다른 지시문과 병합하지 마십시오.

Code Snippet
.directive('customTreatmentChart', ['appService', 'treatmentConfig', 'treatmentService', 'spinner', '$q', function(appService, treatmentConfig, treatmentService, spinner, $q) {
    var link = function($scope) {
        var Constants = Bahmni.Clinical.Constants;
        var days = [
            'Sunday',
            'Monday',
            'Tuesday',
            'Wednesday',
            'Thursday',
            'Friday',
            'Saturday'
        ];
        $scope.contentUrl = appService.configBaseUrl() + "/customDisplayControl/views/customTreatmentChart.html";

        $scope.atLeastOneDrugForDay = function(day) {
            var atLeastOneDrugForDay = false;
            $scope.ipdDrugOrders.getIPDDrugs().forEach(function(drug) {
                if (drug.isActiveOnDate(day.date)) {
                    atLeastOneDrugForDay = true;
                }
            });
            return atLeastOneDrugForDay;
        };
        $scope.getVisitStopDateTime = function() {
            return $scope.visitSummary.stopDateTime || Bahmni.Common.Util.DateUtil.now();
        };
        $scope.getStatusOnDate = function(drug, date) {
            var activeDrugOrders = _.filter(drug.orders, function(order) {
                if ($scope.config.frequenciesToBeHandled.indexOf(order.getFrequency()) !== -1) {
                    return getStatusBasedOnFrequency(order, date);
                } else {
                    return drug.getStatusOnDate(date) === 'active';
                }
            });
            if (activeDrugOrders.length === 0) {
                return 'inactive';
            }
            if (_.every(activeDrugOrders, function(order) {
                    return order.getStatusOnDate(date) === 'stopped';
                })) {
                return 'stopped';
            }
            return 'active';
        };
        var getStatusBasedOnFrequency = function(order, date) {
            var activeBetweenDate = order.isActiveOnDate(date);
            var frequencies = order.getFrequency().split(",").map(function(day) {
                return day.trim();
            });
            var dayNumber = moment(date).day();
            return activeBetweenDate && frequencies.indexOf(days[dayNumber]) !== -1;
        };
        var init = function() {
            var getToDate = function() {
                return $scope.visitSummary.stopDateTime || Bahmni.Common.Util.DateUtil.now();
            };
            var programConfig = appService.getAppDescriptor().getConfigValue("program") || {};
            var startDate = null,
                endDate = null,
                getEffectiveOrdersOnly = false;
            if (programConfig.showDetailsWithinDateRange) {
                startDate = $stateParams.dateEnrolled;
                endDate = $stateParams.dateCompleted;
                if (startDate || endDate) {
                    $scope.config.showOtherActive = false;
                }
                getEffectiveOrdersOnly = true;
            }
            return $q.all([treatmentConfig(), treatmentService.getPrescribedAndActiveDrugOrders($scope.config.patientUuid, $scope.config.numberOfVisits,
                    $scope.config.showOtherActive, $scope.config.visitUuids || [], startDate, endDate, getEffectiveOrdersOnly)])
                .then(function(results) {
                    var config = results[0];
                    var drugOrderResponse = results[1].data;
                    var createDrugOrderViewModel = function(drugOrder) {
                        return Bahmni.Clinical.DrugOrderViewModel.createFromContract(drugOrder, config);
                    };
                    for (var key in drugOrderResponse) {
                        drugOrderResponse[key] = drugOrderResponse[key].map(createDrugOrderViewModel);
                    }

                    var groupedByVisit = _.groupBy(drugOrderResponse.visitDrugOrders, function(drugOrder) {
                        return drugOrder.visit.startDateTime;
                    });
                    var treatmentSections = [];

                    for (var key in groupedByVisit) {
                        var values = Bahmni.Clinical.DrugOrder.Util.mergeContinuousTreatments(groupedByVisit[key]);
                        treatmentSections.push({
                            visitDate: key,
                            drugOrders: values
                        });
                    }
                    if (!_.isEmpty(drugOrderResponse[Constants.otherActiveDrugOrders])) {
                        var mergedOtherActiveDrugOrders = Bahmni.Clinical.DrugOrder.Util.mergeContinuousTreatments(drugOrderResponse[Constants.otherActiveDrugOrders]);
                        treatmentSections.push({
                            visitDate: Constants.otherActiveDrugOrders,
                            drugOrders: mergedOtherActiveDrugOrders
                        });
                    }
                    $scope.treatmentSections = treatmentSections;
                    if ($scope.visitSummary) {
                        $scope.ipdDrugOrders = Bahmni.Clinical.VisitDrugOrder.createFromDrugOrders(drugOrderResponse.visitDrugOrders, $scope.visitSummary.startDateTime, getToDate());
                    }
                });
        };
        spinner.forPromise(init());
    };
    return {
        restrict: 'E',
        link: link,
        scope: {
            config: "=",
            visitSummary: '='
        },
        template: '<ng-include src="contentUrl"/>'
    }
}]);

화면 관련 구성

apps/customDislayControl/views에 HTML 파일을 만들고 이름을 "customTreatmentChart.html"로 지정한 다음 아래 설정을 추가합니다.

xmlCode Snippettrue

{{config.title}}

{{::(visitSummary.startDateTime | bahmniDate) + ' - '+ (getVisitStopDateTime() | bahmniDate)}}

{{drug.orders[0].getDisplayName()}}

{{day.date | bahmniDate}}

]]>

Code Snippet
<section class="block ipd-treatment-section" ng-if="::visitSummary.isAdmitted() && !print">
    <h2 class="section-title">{{config.title}}</h2>
    <table class="h-scroll">
        <thead>
            <tr>
                <th>
                    <span>{{::(visitSummary.startDateTime | bahmniDate) + ' - '+ (getVisitStopDateTime() | bahmniDate)}}</span>
                </th>
                <th ng-repeat="drug in ::ipdDrugOrders.getIPDDrugs()" class="drug" ng-class="{active: drug.isActive()}">{{drug.orders[0].getDisplayName()}}</th>

            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="day in ::ipdDrugOrders.ipdDrugSchedule.days" ng-if="atLeastOneDrugForDay(day)">
                <td>
                    <span>
 <!-- D{{day.dayNumber}} ({{day.date | bahmniDate}}) -->
 {{day.date | bahmniDate}}
                </span>
                </td>
                <td ng-switch="getStatusOnDate(drug, day.date)" ng-repeat="drug in ::ipdDrugOrders.ipdDrugSchedule.drugs">
                    <span class="fa fa-ok" ng-switch-when="active"></span>
                    <span class="fa fa-stop" ng-switch-when="stopped"></span>
                </td>
            </tr>
        </tbody>
    </table>
</section>

OpenMRS 구성

OpenMRS에서 클래스가 frequency이고 데이터 유형이 N/A인 개념을 추가합니다. 아래 화면의 개념 이름은 "Monday, Wednesday, Friday"입니다. Bahmni UI가 빈도 선택 항목에 이 개념 이름을 표시하므로 이해하기 쉬운 이름을 사용해야 합니다.

Screen Shot 2016-04-26 at 11.10.14.png

Medication 탭의 빈도 드롭다운에 이 빈도를 표시하려면 OpenMRS DB의 order_frequency 테이블에 위에서 만든 개념의 Concept ID를 포함하는 행을 삽입합니다.

Screen Shot 2016-04-26 at 11.36.12.png
원문 정보

Bahmni Wiki · CC BY-SA 4.0

원문 보기 ↗