릴리스 노트 0.83
소개
Bahmni에는 Reports 앱이 있습니다. 권한이 있으면 Home 대시보드에서 접근하며, 보고서를 시작일·종료일과 출력 형식을 지정해 실행할 수 있습니다.
각 Bahmni 구현에는 자체 구성 모듈이 있습니다. 보고서 구성 파일은 openmrs/apps/reports 디렉터리에 있습니다.
Bahmni에서는 보고서를 다음과 같이 사용할 수 있습니다.
- 관리자에게 유용한 표준 보고서
- 여러 이해관계자의 분석을 위한 백엔드 데이터 추출
Bahmni 보고 모듈이 지원하는 출력 형식
- HTML
- EXCEL
- Custom EXCEL(미리 정의된 매크로가 있는 Excel)
- CSV
- ODF(OpenOffice 형식)
Bahmni에서 보고서를 정의하는 방법은 여러 가지입니다.
- 기본 제공 보고서
- 사용자 지정 SQL
- Jasper Reports
- 일반 보고서
구성 예시(reports/app.json)
"config": {
"paperSize": "A3", //The default paper size is A4. Supported sizes are A3 and A4.
"supportedFormats": ["pdf"], //List of available formats are html, pdf, excel, csv, custom excel, ods. When not defined, all the available formats will be listed.
}기본 제공 보고서
기본 제공 보고서는 특정 정보를 제공하지만 구성이 제한적이고 재사용이 어려워 유지관리 부담이 커집니다. 일반 보고서는 이 문제를 해결하기 위해 제공됩니다.
참조 표
- Bahmni에서는 이름을 지정해 여러 연령 그룹을 설정하고 보고서별로 사용할 수 있습니다.
예:
아래 보고서는 연령 그룹별 집계 수를 보여 줍니다.

이런 보고서를 표시하려면 참조 표 "reporting_age_group"에 연령 그룹 구성을 삽입한 뒤 보고서 구성에서 참조합니다.

구성
"nutritionProgram": {
"name": "Nutrition Program - <5 years children receiving (Vitamin A)", "type": "obsCount", "config": { "ageGroupName": "Nutrition Program Vitamin A", "conceptNames": ["Childhood Illness, Vitamin A Capsules Provided"] }
}
SQL 명령으로 reporting_age_group에 항목을 삽입할 수 있습니다. 아래는 INSERT SQL 명령 예시입니다.
INSERT INTO reporting_age_group (name,report_group_name, min_years, min_days, max_years, max_days) VALUES ('6 - 11 months', 'Nutrition Program Vitamin A',0,180,1,-1);
INSERT INTO reporting_age_group (name,report_group_name, min_years, min_days, max_years, max_days) VALUES ('12 - 59 months', 'Nutrition Program Vitamin A',1,0,5,-1);
- 일부 보고서에서는 개념의 참조 범위를 설정할 수도 있습니다.
1. 관찰 건수 보고서
다음 세 가지 변형이 있습니다.
참고: 여러 개념 이름을 입력할 때는 모두 같은 데이터 유형이어야 합니다. 데이터 유형을 혼합하면 항상 관찰 집계 보고서가 생성됩니다.
1.1 관찰 건수
불리언 또는 코딩 개념이 아닌 개념에 생성된 관찰 수만 집계할 때 사용합니다.
예시

구성
"nutritionProgram": {"name": "Nutrition Program - <5 years children receiving (Vitamin A)", "type": "obsCount", "config": { "ageGroupName": "Nutrition Program Vitamin A","conceptNames": ["Childhood Illness, Vitamin A Capsules Provided"],"locationTagNames": ["Report Location"],
"countOnlyClosedVisits":"false" }}
- OpenMRS에 "Report location" 위치 태그를 추가하고 구성에 지정합니다. 예: "locationTagNames": ["Report Location"],

1.2 코드화 관찰 건수
코딩 개념의 관찰 수를 사용자가 선택한 코딩 답변별로 분류하여 집계합니다.

구성
"nutritionProgram": {"name": "Nutrition Program - Nutritional status of registered children","type":"obsCount", "config": { "ageGroupName": "Nutritional Status For Registered Children", "conceptNames": ["Nutrition, Nutritional Status"], "locationTagNames": ["Report Location"]}}
- OpenMRS에 "Report location" 위치 태그를 추가하고 구성에 지정합니다. 예: "locationTagNames": ["Report Location"]

1.3 불리언 개념 건수
(Boolean Observations Count로 이름 변경 예정) 사용자가 선택한 예/아니요(True/False)별로 불리언 관찰 수를 집계할 때 사용합니다.
예시

구성
"nutritionProgram": {"name": "Nutrition Program - <5 yrs Children receiving (Deworming)","type": "obsCount", "config": { "ageGroupName": "All Ages", "conceptNames": ["Childhood Illness, Albendazole Given"] }}

2. 코딩 관찰별 코딩 관찰(집계)
두 코딩 관찰을 집계하고 서로 교차한 피벗 테이블로 표시합니다.
예시

구성
"safeMotherhoodProgram": {"name": "Safe Motherhood program - Type of delivery", "type": "CodedObsByCodedObs", "config": { "ageGroupName": "All Ages", "conceptPair": ["Delivery Note, Method of Delivery", "Delivery Note, Fetal Presentation"], "rowsGroupBy": ["Delivery Note, Method of Delivery"], "columnsGroupBy": ["Delivery Note, Fetal Presentation"] }}

3. 진단 건수
Bahmni 시스템에 입력된 모든 진단의 건수를 나열합니다.
구성
"nameOfReport": {"name": "Name of Report", "type": "diagnosisCount", // Mandatory. Value should be exactly diagnosisCount "config": { "dateRangeRequired": false, // Optional. Used to display reports that do not require a date range in a different section. Default true "applyDateRangeFor": "visitStopDate|diagnosisDate", // Optional. Default value = 'visitStopDate'. Valid only when dateRangeRequire=true "visitsToConsider": "open|closed|all", // Optional field. Default value = 'all' "ageGroupName": "age group name defined in reporting_age_group.report_group_name" //Optional "concept": "concept_set_name", // Mandatory. Three level concept set structure, with a root_concept, header_concepts and leaf_concepts "rowsGroupBy": ["gender|agegroup_name|header_concept_name|leaf_concept_name"], // Optional field but when rowsGroupBy is specified, columnsGroupBy should also be specified. Default value is ["header_concept_name", "leaf_concept_name]"columnsGroupBy": ["gender|agegroup_name|header_concept_name|leaf_concept_name"], //Optional field but when rowsGroupBy is specified, columnsGroupBy should also be specified. Default value is ["agegroup_name"]"icd10ConceptSource": "ICD10-BD", // Optional field. Default value = 'ICD 10 - WHO'. If any implementation is using a different concept source for diagnosis coding, it can be set here.
"locationTagNames":["Report Location"] // Optional field. If any location tag is provided, only the encounters associated with the locations with those tags are counted. If this parameter is not set, all the encounters would be counted.
}}현재 개념 필드를 지정하면 보고서에 ICD10 코드가 포함되지 않습니다. 진단 보고서에 ICD10 설정이 필요한지는 아직 명확하지 않으며 결정 후 모든 보고서가 같은 규칙을 따릅니다.
연령 그룹은 OpenMRS 데이터베이스의 reporting_age_group 테이블에 있어야 합니다.
예시
Diagnosis Summary report"OralnDentalReport": { "name": "Dental and Oral Report", "type": "diagnosisCount", "config": { "concept": "Oral diagnosis", "ageGroupName": "Age Groups", "rowsGroupBy": ["header_concept_name","leaf_concept_name"], "columnsGroupBy": ["gender","agegroup_name"] } }
연령 그룹 없는 진단 보고서
"OralnDentalReport1": { "name": "Dental and Oral Report 1", "type": "diagnosisCount", "config": { "locationTagNames":["Report Location"], "icd10ConceptSource":"ICD10-BD", "rowsGroupBy": [ "header_concept_name", "leaf_concept_name" ], "visitTypes":["IPD","OPD"], "columnsGroupBy": [ "gender", "agegroup_name" ] } },

연령 그룹 포함 진단 보고서
"OralnDentalReport2": { "name": "Dental and Oral Report 2", "type": "diagnosisCount", "config": { "locationTagNames":["Report Location"], "icd10ConceptSource":"ICD10-BD", "ageGroupName": "Registration", "rowsGroupBy": [ "header_concept_name", "leaf_concept_name" ], "visitTypes":["IPD","OPD"], "columnsGroupBy": [ "gender", "agegroup_name" ] } },

4. 검사 건수
모든 검사, 결과와 건수를 나열합니다.
구성
"name": "Malaria Control Programme - Diagnosis and Result [check for Microscopy= 'PBS for Malaria, Filaria parasite', RDT= SUM('Malaria Ags', 'Malaria Abs')]", "type": "TestCount"예시

6. 관찰 템플릿 보고서
지정 기간에 입력된 템플릿의 모든 필드와 값을 보여 주는 보고서입니다.
구성
"vitalsTemplateReport":{
"name": "Vitals Template Report",
"type": "obsTemplate",
"config": {
"templateName": "Vitals",
"patientAttributes": ["caste", "education"],
"locationTagNames": ["Report Location"],
"applyDateRangeFor": "encounterCreateDate"
}
}name: 보고서 이름
templateName: 보고서를 생성할 관찰 템플릿
patientAttributes: 보고서에서 환자별로 표시할 카스트, 교육 등의 환자 속성
applyDateRangeFor: 날짜 범위 필터 기준으로 encounterCreateDate 또는 encounterDate를 지정합니다. 기본값은 encounterDate입니다.
OpenMRS에 "Report location" 위치 태그를 추가합니다.
구성에 예: "locationTagNames": ["Report Location"]로 위치 태그를 지정합니다.
예시

7. OPD/IPD 방문 집계 보고서
지정 기간의 신규 및 기존 OPD/IPD 환자 수를 나열합니다.
구성
"ipdOPd": {"name": "OPD/IPD Visit Count","type": "IpdOpdVisitCount"}
예:

8. 숫자 개념 값 보고서
지정한 연령 그룹과 결과값 범위를 기준으로 숫자 개념 관찰 수를 나열합니다.
구성
"HaemoglobinRange": {"name": "Haemoglobin Range Based Report","type":"NumericConceptValuesCount","config": { "rangeGroupName": "Haemoglobin", "ageGroupName": "Haemoglobin", "conceptNames": ["Haemoglobin"], "countOncePerPatient": false}}"countOncePerPatient" 기본값은 false여야 합니다. 이 경우 관찰이 기록된 횟수만큼 집계합니다.
한 진료 사건 안에서는 관찰을 한 번만 집계하며, 같은 사건에서 관찰을 여러 번 변경해도 하나로 봅니다.
"countOncePerPatient"가 true이면 지정 날짜 범위에서 환자별 최신 관찰값만 집계합니다.
예:

9. 개념 클래스별 관찰 집계 보고서
지정 날짜 범위에서 개념 클래스를 기준으로 관찰 수를 나열합니다.
구성
"radiologyCount": {"name": "Radiology(X-Ray) Count","type": "ObsCountByConceptClass","config": { "conceptClassNames": ["Radiology"] }}예:

10. 관찰값 집계 보고서
지정한 개념 이름의 각 값별 관찰 수를 나열합니다.
구성
"ObsValueCount": {"name": "Obs Value Counts for Albumin, MCH, Surgery Date and Posture(blood pressure)","type": "ObsValueCount","config": { "conceptNames": ["Albumin","MCH","Date of Surgery","Posture"] }}
예:

11. 검사 결과가 있는 환자 보고서
검사 목록과 결과 조건에 따라 검사 결과가 있는 환자와 검사 결과를 나열합니다.
구성
"patientsWithLabTest": {"name": "Patients with labtest results for HIV ELISA, Albumin and MCH","type": "PatientsWithLabtestResults","config": { "conceptNames": ["HIV ELISA (Blood)","Albumin","MCH"]"testOutcome": ["abnormal","normal"] }}
12. IPD 환자 보고서
IPD 환자 목록과 환자 정보, 확정 진단(여러 개면 쉼표 구분), 구성한 개념의 관찰값(여러 개면 쉼표 구분), 환자 속성 목록, 주소 속성 목록을 생성합니다.
구성
"ipdPatients": { "name": "IPD Patients Report", "type": "ipdPatients", "config": { "addressAttributes": ["address1", "city_village"], "patientAttributes": ["caste", "education"], "conceptNames": ["Height", "Weight"],"locationTagNames": ["Report Location"],"filterBy": "Date of Discharge" }}참고: addressAttributes는 항상 snake_case여야 합니다. 예: "cityVillage"가 아니라 "city_village".
날짜 범위는 "Date of Admission" 또는 "Date of Discharge"에 적용할 수 있습니다. "filterBy" 매개변수로 선택하며 미설정 시 기본값은 "Date of Admission"입니다.
- OpenMRS에 "Report location" 위치 태그를 추가하고 구성에 지정합니다. 예: "locationTagNames": ["Report Location"],

13. 방문 집계 수 보고서
지정 날짜 범위에 발생한 입원·퇴원 건수를 방문 유형별로 생성합니다.
구성
"visitAggregateCount": { "name": "Visit Aggregate Count Report", "type": "VisitAggregateCount", "config": { "type": "VisitAggregateCountReport","locationTagNames": ["Report Location"],"visitTypes": "'IPD','OPD','EMERGENCY'" }}- OpenMRS에 "Report location" 위치 태그를 추가하고 구성에 지정합니다. 예: "locationTagNames": ["Report Location"],

14. 환자 프로그램 상태 집계 보고서
프로그램의 각 상태에 들어간 환자 수를 생성합니다.
참고: 프로그램에 상태가 없으면 빈 페이지가 열립니다. "programName"은 OpenMRS에 미리 구성된 프로그램이어야 합니다.
구성
"patientProgram": { "name": "Patient Program State Count Report", "type": "programStateCount", "config": { "programName": "Patient Overall Status" }}예: Patient Overall Status 프로그램에 "Attending Clinic", "Transferred OutOf", "Dead" 상태를 추가했습니다. 이 보고서는 각 상태에 진입한 환자 수를 보여 줍니다.
지정 날짜 범위(예: 2015-08-01부터 2015-08-13까지)를 기준으로 합니다.
환자가 현재 다른 상태에 있어도 원래 상태가 날짜 범위 안에 있고 삭제되지 않았다면 해당 상태 건수에 포함합니다.

15. 환자 프로그램 상태 전환 집계 보고서
프로그램 상태 전환을 겪은 환자 수를 생성합니다.
참고: 프로그램에 상태가 없으면 빈 페이지가 열립니다. "programName"은 OpenMRS에 미리 구성된 프로그램이어야 합니다.
구성
"malariaProgram": { "name":"Malaria Program State Transition Report", "type":"programStateTransitionReport", "config":{ "programName":"Malaria Program" }}예: Malaria Program에 'First State', 'Second State', 'Third State'를 추가하면 상태 전환 환자 수를 표시합니다.
2015-08-02~2015-08-06 기간의 'First State'→'Second State' 및 'Second State'→'Third State' 전환을 집계합니다.

16. 환자 데이터 보고서
이 보고서는 다음 필드로 환자 세부 정보를 생성합니다.
- 환자 ID - 환자 이름 - 나이 - 성별 - 생년월일 - 주소 필드 - 환자 속성 - 등록일
참고: 날짜 범위를 지정하지 않으면 모든 환자 데이터를 반환합니다.
구성
"patientInformation": { "name": "Patient Information", "type": "PatientReport" }

17. 프로그램 환자 상태 보고서
다음 필드로 환자 세부 정보를 생성합니다.
- 일련번호 - 환자 식별자 - 환자 이름 - 환자 나이 - 프로그램 등록일 - 환자 상태 - 상태 시작일 - 상태 종료일 - 환자 프로그램 종료일 - 환자 결과
구성
"programPatientStateReport":{ "name": "Program Patient State Report", "type": "PatientProgramReport", "config": { "programName": "Malaria Program" }},18. 프로그램 등록 기본 제공 보고서

구성
"programEnrollmentTemplateReport": { "name": "Program Enrollments", "type": "ProgramEnrollmentReport"}19. 관찰 기본 제공 보고서

구성
"obsCannedReport": { "name": "Obs Canned Report", "type": "obsCannedReport", "config": { "patientAttributes": ["caste", "education"], "applyDateRangeFor": "ObsRecording", "addressAttributes": ["postal_code", "city_village"], "conceptNames": ["WEIGHT","Pulse", "Systolic"], "visitIndependentConcept": ["HEIGHT"], "enrolledProgram" :"HIV Program" , "showObsOnlyForProgramDuration": false }}- Patient Attributes: personattributetype.name의 가능한 값. 필수
- Apply Date Range For: 날짜 유형의 <tablename>.<columnname>. 필수
- Address Attributes: person_address 열 이름. 필수
- concept names: 최하위 개념만 지원. 필수
- visit independent concepts: 방문과 무관하게 최신 관찰 사용. 필수
- enrolled program: 프로그램 하나만 지원. 선택
- show obs only for program duration: 지정 프로그램 기간의 관찰만 필터링. 필수
20. 약물 처방 보고서:
지정 날짜 범위에 약물을 처방받은 환자 정보를 표시하며 환자 정보와 약물 정보로 구성됩니다.
구성:
"drugOrderReport":{ "name": "Drug Order report", "type":"DrugOrder"}21. 프로그램 관찰 템플릿 보고서
지정 기간에 입력된 템플릿의 모든 필드와 값을 보여 주는 보고서입니다.
구성
"vitalsTemplateReport":{
"name": "Vitals Template Report",
"type": "programObsTemplate",
"config": {
"templateName": "Vitals",
"patientAttributes": ["caste", "education"],
"programAttributes":[ "Doctor","Enrollment","Id","Treatment_Date"],
"programNames": ["Malaria","Tuberculosis"],
"addressAttributes":["city", "state_province"]
}
}name: 보고서 이름
templateName: 보고서를 생성할 관찰 템플릿
patientAttributes: 보고서에서 환자별로 표시할 카스트, 교육 등의 환자 속성
programAttributes: 보고서에서 프로그램별로 표시할 의사, 치료일 등의 프로그램 속성
programNames: 관찰을 표시할 프로그램 이름 목록. 미지정 시 모든 프로그램의 관찰을 가져옵니다.
OpenMRS에 "Report location" 위치 태그를 추가합니다.
구성에 예: "locationTagNames": ["Report Location"]로 위치 태그를 지정합니다.
addressAttributes: 표시할 주소 속성 목록. 항상 snake case여야 합니다. 예: "cityVillage"가 아니라 "city_village".
예시

22. 프로그램별 약물 처방 보고서
지정 날짜 범위에서 활성 프로그램만 고려해 약물 처방과 활성 프로그램의 모든 데이터를 내보냅니다. 표시할 프로그램과 프로그램 속성을 구성할 수 있습니다.
사용 가능한 구성은 아래 코드 조각을 참조하십시오.
예:

사용자 지정 SQL
기본 제공 보고서의 한계를 보완하려고 사용자 지정 SQL로 데이터를 추출할 수 있습니다. 다만 OpenMRS 데이터 모델을 알아야 하므로 일반 보고서가 이 문제를 해결합니다.
구성
"hospitalActivities": {"name": "Hospital Activities - Number of Clients Served (New and Total)", "type": "MRSGeneric", "config": { "sqlPath": "/var/www/bahmni_config/openmrs/reports/hmis/number_of_clients.sql" }}
Jasper Reports(사용 중단)
일부 초기 구현에서 사용합니다. Jasper 설정과 양식·SQL 설계가 필요한 오래된 방식이므로 새 사이트에는 권장하지 않습니다.
일반 보고서
구현자는 SQL 작성에 OpenMRS 데이터 모델을 알아야 하고 개발자는 비슷한 SQL을 복제해야 해 유지관리 부담이 큽니다.
Bahmni는 관찰, 방문, 프로그램 등 엔터티별 일반 보고서를 제공하며 관련 필드와 필터를 구성할 수 있습니다.
23. 방문 보고서
분석과 개선을 위해 방문 정보를 여러 방식으로 추출할 수 있습니다. 방문 필터와 출력 필드 집합을 구성할 수 있습니다.
구성 옵션과 관계없이 다음 필드는 보고서에 항상 포함됩니다.
- 환자 식별자
- 환자 이름(이름 + 성)
- 나이
- 생년월일
- 성별
- 환자 생성일
- 방문 유형
- 시작일
- 종료일
- 입원일
- 퇴원일
사용 가능한 구성은 아래 코드 조각을 참조하십시오.
"nameOfReport":{
"name": "Report Name",
"type": "visits",
"config": {
"forDataAnalysis": true,
"patientAttributes": ["caste", "class", "education", "occupation", "primaryContact"],
"visitAttributes": ["Visit Status", "Admission Status"],
"patientAddresses": ["address3", "city_village"],
"applyDateRangeFor": "visitStopDate",
"visitTypesToFilter": ["PHARMACY VISIT", "OPD"]
}
}| 키 | 설명 | 필수 | 기본값 |
|---|---|---|---|
| nameOfReport | 고유 키 | 예 | |
| name | 보고서 이름 | 예 | |
| type | visits | 예 | |
| config | 구성 섹션 | 아니요 | |
| forDataAnalysis | patient_id와 visit_id 포함 | 아니요 | false |
| patientAttributes | 환자 속성 포함 | 아니요 | |
| visitAttributes | 방문 속성 포함 | 아니요 | |
| patientAddresses | 환자 주소 포함 | 아니요 | |
| applyDateRangeFor | 날짜 범위 필드 | 아니요 | visitStartDate |
| visitTypesToFilter | 방문 유형 필터 | 아니요 | 모든 방문 유형 |
예:

24. 관찰 보고서
분석과 개선을 위해 관찰 정보를 여러 방식으로 추출할 수 있습니다. 관찰 필터와 출력 필드를 구성할 수 있습니다.
구성 옵션과 관계없이 다음 필드는 보고서에 항상 포함됩니다.
- 환자 식별자, 환자 이름, 나이, 생년월일, 성별, 위치 이름
- 개념 이름·관찰값·관찰 일시·상위 개념(encounterPerRow가 false일 때)
- 프로그램 등록일, 프로그램 종료일, 환자 생성일
사용 가능한 구성은 아래 코드 조각을 참조하십시오.
"nameOfReport":{
"name": "Report Name",
"type": "observations",
"config": {
"patientAttributes": ["caste", "class", "education", "occupation", "primaryContact"],
"patientAddresses": ["address3", "city_village"],
"visitAttributes": ["Visit Status", "Admission Status"],
"showVisitInfo": true,
"showProvider": true,
"programsToFilter": [],
"conceptNamesToFilter": [],
"conceptClassesToFilter": [],
"locationTagsToFilter": ["Login Location"],
"applyDateRangeFor": "obsDatetime",
"encounterPerRow": false,
"forDataAnalysis": true,
"visitTypesToFilter": ["PHARMACY VISIT", "OPD"]
}
}| 키 | 가능한 값 | 설명 | 필수 | 기본값 |
|---|---|---|---|---|
| nameOfReport | 임의 문자열 | 고유 키 | 예 | |
| name | 임의 문자열 | 표시 이름 | 예 | |
| type | observations | 유형 | 예 | observations |
| config | 구성 섹션 | 아니요 | ||
| patientAttributes | 환자 속성 | 포함 | 아니요 | |
| patientAddresses | 주소 필드 | 포함 | 아니요 | |
| visitAttributes | 방문 속성 | 포함 | 아니요 | |
| showVisitInfo | true / false | 방문 정보 | 아니요 | false |
| showProvider | true / false | 제공자 | 아니요 | false |
| conceptNamesToFilter | FULLY_SPECIFIED 개념 | 개념 필터 | 조건부 | 전체 |
| conceptClassesToFilter | 개념 클래스 | 클래스 필터 | 조건부 | 전체 |
| locationTagsToFilter | 위치 태그 | 위치 필터 | 아니요 | 전체 |
| applyDateRangeFor | visitStopDate / visitStartDate / programDatetime / obsDatetime | 날짜 필드 | 아니요 | obsDatetime |
| encounterPerRow | true / false | encounter당 한 행 | 아니요 | false |
| forDataAnalysis | true / false | 분석용 ID | 아니요 | false |
| programsToFilter | 프로그램 | 프로그램 필터 | 아니요 | |
| visitTypesToFilter | 방문 유형 | 방문 필터 | 아니요 | 전체 |
예:
행마다 관찰 하나를 표시하는 보고서 예시입니다.

행마다 encounter 하나를 표시하는 보고서 예시입니다.

모든 기본 필드를 포함하는 보고서 예시입니다.

25. 프로그램 보고서
분석과 개선을 위해 프로그램 정보를 여러 방식으로 추출할 수 있습니다. 프로그램 필터와 출력 필드를 구성할 수 있습니다.
구성 옵션과 관계없이 다음 필드는 보고서에 항상 포함됩니다.
- 환자 식별자, 환자 이름, 나이, 생년월일, 성별, 환자 생성일, 프로그램 이름, 등록일, 완료일, 현재 상태
사용 가능한 구성은 아래 코드 조각을 참조하십시오.
"nameOfReport":{
"name": "Report Name",
"type": "programs",
"config": {
"patientAttributes": ["caste", "class", "education", "occupation", "primaryContact"],
"patientAddresses": ["address3", "city_village"],
"programAttributes": ["Visit Status", "Admission Status"],
"programNamesToFilter": [],
"showAllStates": true,
"forDataAnalysis": true
}
}| 키 | 가능한 값 | 설명 | 필수 | 기본값 |
|---|---|---|---|---|
| nameOfReport | 임의 문자열 | 고유 키 | 예 | |
| name | 임의 문자열 | 표시 이름 | 예 | |
| type | programs | 유형 | 예 | programs |
| config | 구성 섹션 | 아니요 | ||
| patientAttributes | 환자 속성 | 포함 | 아니요 | 없음 |
| patientAddresses | 주소 필드 | 포함 | 아니요 | 없음 |
| programAttributes | 프로그램 속성 | 포함 | 아니요 | 없음 |
| programNamesToFilter | 프로그램 배열 | 필터 | 아니요 | 전체 |
| forDataAnalysis | true / false | 분석용 ID | 아니요 | false |
| showAllStates | true / false | 모든 상태 | 아니요 | false |
예:

26. 일반 보고서 집계
엔터티 기반 보고서 데이터를 Excel로 추출해 매크로로 통계를 만들 수 있습니다. 이 기능은 구성에 피벗 정보를 지정해 필요한 출력을 생성합니다.
구성 예시는 아래 코드 조각을 참조하십시오.
{
"nameOfReport": {
"name": "Blood Pressure",
"type": "aggregation",
"config": {
"report":{
"type": "observations",
"config": {
"conceptNamesToFilter":["Diastolic Data", "Systolic Data"],
"showVisitInfo" : true,
"forDataAnalysis": true,
"visitAttributes": ["Visit Status", "Admission Status"],
"visitTypesToFilter": ["IPD"]
}
},
"rowGroups": [
"Gender"
],
"columnGroups": [
"Concept Name", "value"
],
"distinctGroups": [
"Patient Identifier"
]
}
}
}| 키 | 가능한 값 | 설명 | 필수 | 기본값 |
|---|---|---|---|---|
| nameOfReport | 임의 문자열 | 고유 키 | 예 | |
| name | 임의 문자열 | 표시 이름 | 예 | |
| type | aggregation | 유형 | 예 | aggregation |
| config | 구성 섹션 | 예 | ||
| report | 기존 일반 보고서 | 집계 대상 | 예 | 없음 |
| rowGroups | 열 이름 | 행 그룹 | 예 | 없음 |
| columnGroups | 열 이름 | 열 그룹 | 예 | 없음 |
| distinctGroups | 열 이름 | 고유 개수 기준 | 예 | 없음 |
예:

예시 구성은 이완기·수축기 값별 남성과 여성 수를 표시합니다. rowGroups는 Gender, columnGroups는 Concept Name과 Value이며 Patient Identifier를 기준으로 집계합니다.

27. 여러 보고서 연결
여러 보고서를 하나로 연결할 수 있습니다. CSV는 지원하지 않습니다.
구성 예시는 아래 코드 조각을 참조하십시오.
| 키 | 가능한 값 | 설명 | 필수 | 기본값 |
|---|---|---|---|---|
| nameOfReport | 임의 문자열 | 고유 키 | 예 | |
| name | 임의 문자열 | 표시 이름 | 예 | |
| type | concatenated | 유형 | 예 | concatenated |
| config | 한 파일에 포함할 보고서 구성 | 예 |
예:
Visit Report와 Obs Canned Report를 연결하면 Excel에서는 다른 시트에 표시하고 PDF, HTML에서는 위아래로 이어집니다.

생성된 보고서를 매크로가 포함된 기존 통합 문서 템플릿에 삽입하기
Bahmni에서는 보고서 데이터를 피벗 테이블용 수식이 포함된 기존 통합 문서 템플릿에 삽입할 수 있습니다. 템플릿은 .xls 형식이어야 합니다.
Home > Reports에서 CUSTOM EXCEL을 선택하고 Excel 수식 템플릿을 업로드한 뒤 Run Report를 누릅니다. 실제 데이터는 Report 시트에, 수식 결과는 Sheet1에 생성됩니다.
매크로가 포함된 Excel 템플릿을 사용할 수 있습니다. 템플릿의 Sheet1에 수식을 추가하고 업로드합니다.
템플릿의 매크로가 실제 데이터에 수식을 적용하므로 생성된 보고서를 열 때 Enable macros를 선택해야 합니다.
수식 예시: =SUM(Report!G9, Report!G10) - 'Report' 시트에는 수식을 적용하지 않은 원시 데이터가 포함됩니다.
참고: 다른 템플릿을 사용하면 작동하지 않습니다. 위에 연결된 템플릿만 사용하십시오.
매번 파일을 업로드하지 않도록 bahmni_config에 macroTemplate xls 파일 구성하기
구성 절차:
- 매크로 수식이 포함된 xls(Microsoft 1997-2000) 파일을 bahmni_config에 복사합니다.
- report.json에 xls 파일 경로를 구성합니다.
"diabetes":{ "name": "Diabetes", "type": "obsCount", "config": { "ageGroupName": "All Ages", "conceptNames": ["Diabetes, Intake"], "visitTypes": ["OPD","IPD"], "macroTemplatePath" : "/var/www/bahmni_config/openmrs/apps/reports/macroTemplates/Diabetes.xls" } }, - xml
Bahmni Wiki · CC BY-SA 4.0