mml-ruby 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +199 -10
- data/lib/mml.rb +288 -5
- data/lib/mml/common.rb +26 -268
- data/lib/mml/version.rb +1 -1
- data/lib/xml/address.xml.builder +12 -0
- data/lib/xml/baseclinic.xml.builder +36 -0
- data/lib/xml/creatorinfo.xml.builder +6 -0
- data/lib/xml/creatorlicense.xml.builder +3 -0
- data/lib/xml/department.xml.builder +8 -0
- data/lib/xml/extref.xml.builder +5 -0
- data/lib/xml/facility.xml.builder +8 -0
- data/lib/xml/firstclinic.xml.builder +47 -0
- data/lib/xml/id.xml.builder +4 -0
- data/lib/xml/insurance.xml.builder +82 -0
- data/lib/xml/lifestyle.xml.builder +6 -0
- data/lib/xml/name.xml.builder +10 -0
- data/lib/xml/patientinfo.xml.builder +51 -0
- data/lib/xml/personalizedinfo.xml.builder +25 -0
- data/lib/xml/phone.xml.builder +10 -0
- data/lib/xml/progresscourse.xml.builder +89 -0
- data/lib/xml/registereddiagnosis.xml.builder +27 -0
- data/lib/xml/staffinfo.xml.builder +6 -0
- data/lib/xml/summary.xml.builder +125 -0
- data/lib/xml/surgery.xml.builder +81 -0
- data/spec/mml/admission_spec.rb +45 -0
- data/spec/mml/allergy_item_spec.rb +35 -0
- data/spec/mml/anesthesia_procedure_spec.rb +15 -0
- data/spec/mml/anesthesiologist_spec.rb +22 -0
- data/spec/mml/base_clinic_module_spec.rb +58 -0
- data/spec/mml/birth_info_spec.rb +90 -0
- data/spec/mml/blood_type_spec.rb +40 -0
- data/spec/mml/clinical_record_spec.rb +37 -0
- data/spec/mml/creator_info_spec.rb +3 -3
- data/spec/mml/creator_license_spec.rb +7 -0
- data/spec/mml/death_flag_spec.rb +11 -0
- data/spec/mml/death_info_spec.rb +19 -0
- data/spec/mml/department_spec.rb +3 -3
- data/spec/mml/diagnostic_category_spec.rb +23 -0
- data/spec/mml/discharge_spec.rb +29 -0
- data/spec/mml/dx_item_spec.rb +19 -0
- data/spec/mml/family_history_item_spec.rb +36 -0
- data/spec/mml/first_clinic_module_spec.rb +105 -0
- data/spec/mml/infection_item_spec.rb +39 -0
- data/spec/mml/inpatient_item_spec.rb +49 -0
- data/spec/mml/insurance_class_spec.rb +24 -0
- data/spec/mml/insurance_client_spec.rb +36 -0
- data/spec/mml/insurance_spec.rb +182 -0
- data/spec/mml/lifestyle_module_spec.rb +50 -0
- data/spec/mml/nationality_spec.rb +19 -0
- data/spec/mml/objective_spec.rb +51 -0
- data/spec/mml/operation_element_item_spec.rb +31 -0
- data/spec/mml/organization_info_spec.rb +35 -0
- data/spec/mml/other_blood_type_spec.rb +31 -0
- data/spec/mml/outpatient_item_spec.rb +48 -0
- data/spec/mml/past_history_item_spec.rb +23 -0
- data/spec/mml/past_history_spec.rb +17 -0
- data/spec/mml/patient_info_spec.rb +126 -0
- data/spec/mml/phone_spec.rb +5 -1
- data/spec/mml/physical_exam_item_spec.rb +40 -0
- data/spec/mml/plan_spec.rb +45 -0
- data/spec/mml/problem_item_spec.rb +35 -0
- data/spec/mml/procedure_item_spec.rb +44 -0
- data/spec/mml/progress_course_module_spec.rb +79 -0
- data/spec/mml/public_insurance_item_spec.rb +64 -0
- data/spec/mml/race_spec.rb +19 -0
- data/spec/mml/registered_diagnosis_spec.rb +124 -0
- data/spec/mml/related_doc_spec.rb +15 -0
- data/spec/mml/service_history_spec.rb +53 -0
- data/spec/mml/staff_info_spec.rb +31 -0
- data/spec/mml/subject_spec.rb +16 -0
- data/spec/mml/subjective_item_spec.rb +23 -0
- data/spec/mml/summary_module_spec.rb +239 -0
- data/spec/mml/surgery_item_spec.rb +132 -0
- data/spec/mml/surgery_module_spec.rb +90 -0
- data/spec/mml/surgical_staff_spec.rb +34 -0
- data/spec/mml/test_result_spec.rb +24 -0
- data/spec/mml/vaccination_item_spec.rb +38 -0
- data/spec/mml/value_with_link_spec.rb +15 -0
- data/spec/spec_helper.rb +1 -1
- metadata +137 -5
- checksums.yaml +0 -7
@@ -0,0 +1,15 @@
|
|
1
|
+
describe MML::RelatedDoc do
|
2
|
+
let(:related_doc) {MML::RelatedDoc.new(value: '11D1AC5400A0C94A814796045F768ED5', relation: 'detail')}
|
3
|
+
|
4
|
+
it 'is an instance of MML::RelatedDoc' do
|
5
|
+
expect(related_doc).to be_an_instance_of MML::RelatedDoc
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'value should be assigned properly' do
|
9
|
+
expect(related_doc.value).to eq '11D1AC5400A0C94A814796045F768ED5'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'relation should be assigned properly' do
|
13
|
+
expect(related_doc.relation).to eq 'detail'
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
describe MML::ServiceHistory do
|
2
|
+
let(:out_staff_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '00123')}
|
3
|
+
let(:out_staff_name) {MML::Name.new(repCode: 'A', fullname: 'Hiroyuki Yoshihara')}
|
4
|
+
let(:out_staff_personalized_info) {MML::PersonalizedInfo.new(id: id, personName: [out_staff_name])}
|
5
|
+
let(:out_staff_creator_license) { MML::CreatorLicense.new(tableId: 'MML0026', value: 'doctor')}
|
6
|
+
let(:out_staff_info) {MML::StaffInfo.new(personalizedInfo: out_staff_personalized_info, creatorLicense: [out_staff_creator_license])}
|
7
|
+
let(:outpatient_item) {MML::OutpatientItem.new(date: '2013-08-25', first: true, emergency: true, outPatientCondition: '10A.M.the patient was put into the ambulance on a stretcher and driven to our hospital.', staffs: [out_staff_info])}
|
8
|
+
let(:referer_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '23234567')}
|
9
|
+
let(:referer_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Ono', given: 'Yoko', degree: 'M.D.')}
|
10
|
+
let(:referer_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Medical College Hospital')}
|
11
|
+
let(:referer_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '801.006.3')}
|
12
|
+
let(:referer_facility) {MML::Facility.new(id: referer_facility_id, name: [referer_facility_name])}
|
13
|
+
let(:referer) {MML::PersonalizedInfo.new(id: referer_id, personName: [referer_name], facility: referer_facility)}
|
14
|
+
let(:admission) {MML::Admission.new(date: '2013-12-08', admissionCondition: 'Emergency admission by ambulance', emergency: true, referFrom: referer)}
|
15
|
+
|
16
|
+
let(:refer_to_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '55234567')}
|
17
|
+
let(:refer_to_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Tanaka', given: 'Fujiko', degree: 'M.D.')}
|
18
|
+
let(:refer_to_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Heisei Hospital')}
|
19
|
+
let(:refer_to_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '32354678')}
|
20
|
+
let(:refer_to_facility) {MML::Facility.new(id: refer_to_facility_id, name: [refer_to_facility_name])}
|
21
|
+
let(:refer_to) {MML::PersonalizedInfo.new(id: refer_to_id, personName: [refer_to_name], facility: refer_to_facility)}
|
22
|
+
let(:discharge) {MML::Discharge.new(date: '2013-08-31', dischargeCondition: '4 P.O.D, the patient was transferred to the chronic hospital.', outcome: 'transferChronic', referTo: refer_to)}
|
23
|
+
|
24
|
+
let(:id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '23456789')}
|
25
|
+
let(:name) {MML::Name.new(repCode: 'A', fullname: 'Kenji Araki')}
|
26
|
+
let(:personalized_info) {MML::PersonalizedInfo.new(id: id, personName: [name])}
|
27
|
+
let(:creator_license) { MML::CreatorLicense.new(tableId: 'MML0026', value: 'doctor')}
|
28
|
+
let(:staff_info) {MML::StaffInfo.new(personalizedInfo: personalized_info, creatorLicense: [creator_license])}
|
29
|
+
|
30
|
+
let(:inpatient_item) {MML::InpatientItem.new(admission: admission, discharge: discharge, staffs: [staff_info])}
|
31
|
+
|
32
|
+
let(:service_history) {MML::ServiceHistory.new(start: '2013-08-25', end: '2013-08-31', outPatient: [outpatient_item], inPatient: [inpatient_item])}
|
33
|
+
|
34
|
+
it 'is an instance of MML::ServiceHistory' do
|
35
|
+
expect(service_history).to be_an_instance_of MML::ServiceHistory
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'start is assigned properly' do
|
39
|
+
expect(service_history.start).to eq '2013-08-25'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'end is assigned properly' do
|
43
|
+
expect(service_history.end).to eq '2013-08-31'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'outPatient should be assigned properly' do
|
47
|
+
expect(service_history.outPatient[0].date).to eq '2013-08-25'
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'inPatient should be assigned properly' do
|
51
|
+
expect(service_history.inPatient[0].admission.date).to eq '2013-12-08'
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
describe MML::StaffInfo do
|
2
|
+
let(:id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '00123')}
|
3
|
+
let(:name) {MML::Name.new(repCode: 'A', fullname: 'Hiroyuki Yoshihara')}
|
4
|
+
let(:personalized_info) {MML::PersonalizedInfo.new(id: id, personName: [name])}
|
5
|
+
let(:creator_license) { MML::CreatorLicense.new(tableId: 'MML0026', value: 'doctor')}
|
6
|
+
let(:staff_info) {MML::StaffInfo.new(personalizedInfo: personalized_info, creatorLicense: [creator_license])}
|
7
|
+
|
8
|
+
it 'is an instance of MML::StaffInfo' do
|
9
|
+
expect(staff_info).to be_an_instance_of MML::StaffInfo
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'personalizedInfo should be assigned properly' do
|
13
|
+
expect(staff_info.personalizedInfo.id.value).to eq '00123'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'personalizedInfo is mandatory' do
|
17
|
+
expect {staff_info.personalizedInfo = nil}.to raise_error ArgumentError
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'creatorLicense should be assigned properly' do
|
21
|
+
expect(staff_info.creatorLicense[0].value).to eq 'doctor'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'creatorLicense is mandatory' do
|
25
|
+
expect {staff_info.creatorLicense = nil}.to raise_error ArgumentError
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "to_xml" do
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
describe MML::Subjective do
|
2
|
+
let(:subjective_item) {MML::SubjectiveItem.new(timeExpression: '5 years ago', eventExpression: ['headache'])}
|
3
|
+
let(:subjective) {MML::Subjective.new(freeNotes: 'headache from 5 years ago', subjectiveItem: [subjective_item])}
|
4
|
+
|
5
|
+
it 'is an instance of MML::Subjective' do
|
6
|
+
expect(subjective).to be_an_instance_of MML::Subjective
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'freeNotes should be assigned properly' do
|
10
|
+
expect(subjective.freeNotes).to eq 'headache from 5 years ago'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'subjectiveItem should be assigned properly' do
|
14
|
+
expect(subjective.subjectiveItem[0].timeExpression).to eq '5 years ago'
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
describe MML::SubjectiveItem do
|
2
|
+
let(:subjective_item) {MML::SubjectiveItem.new(timeExpression: '5 years ago', eventExpression: ['headache'])}
|
3
|
+
|
4
|
+
it 'is an instance of MML::SubjectiveItem' do
|
5
|
+
expect(subjective_item).to be_an_instance_of MML::SubjectiveItem
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'timeExpression should be assigned properly' do
|
9
|
+
expect(subjective_item.timeExpression).to eq '5 years ago'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'timeExpression is mandatory' do
|
13
|
+
expect {subjective_item.timeExpression = nil}.to raise_error ArgumentError
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'eventExpression should be assigned properly' do
|
17
|
+
expect(subjective_item.eventExpression).to eq ['headache']
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'eventExpression is mandatory' do
|
21
|
+
expect {subjective_item.timeExpression = nil}.to raise_error ArgumentError
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,239 @@
|
|
1
|
+
describe MML::Summary do
|
2
|
+
let(:out_staff_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '00123')}
|
3
|
+
let(:out_staff_name) {MML::Name.new(repCode: 'A', fullname: 'Hiroyuki Yoshihara')}
|
4
|
+
let(:out_staff_personalized_info) {MML::PersonalizedInfo.new(id: id, personName: [out_staff_name])}
|
5
|
+
let(:out_staff_creator_license) { MML::CreatorLicense.new(tableId: 'MML0026', value: 'doctor')}
|
6
|
+
let(:out_staff_info) {MML::StaffInfo.new(personalizedInfo: out_staff_personalized_info, creatorLicense: [out_staff_creator_license])}
|
7
|
+
let(:outpatient_item) {MML::OutpatientItem.new(date: '2013-08-25', first: true, emergency: true, outPatientCondition: '10A.M.the patient was put into the ambulance on a stretcher and driven to our hospital.', staffs: [out_staff_info])}
|
8
|
+
let(:referer_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '23234567')}
|
9
|
+
let(:referer_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Ono', given: 'Yoko', degree: 'M.D.')}
|
10
|
+
let(:referer_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Medical College Hospital')}
|
11
|
+
let(:referer_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '801.006.3')}
|
12
|
+
let(:referer_facility) {MML::Facility.new(id: referer_facility_id, name: [referer_facility_name])}
|
13
|
+
let(:referer) {MML::PersonalizedInfo.new(id: referer_id, personName: [referer_name], facility: referer_facility)}
|
14
|
+
let(:admission) {MML::Admission.new(date: '2013-12-08', admissionCondition: 'Emergency admission by ambulance', emergency: true, referFrom: referer)}
|
15
|
+
|
16
|
+
let(:refer_to_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '55234567')}
|
17
|
+
let(:refer_to_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Tanaka', given: 'Fujiko', degree: 'M.D.')}
|
18
|
+
let(:refer_to_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Heisei Hospital')}
|
19
|
+
let(:refer_to_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '32354678')}
|
20
|
+
let(:refer_to_facility) {MML::Facility.new(id: refer_to_facility_id, name: [refer_to_facility_name])}
|
21
|
+
let(:refer_to) {MML::PersonalizedInfo.new(id: refer_to_id, personName: [refer_to_name], facility: refer_to_facility)}
|
22
|
+
let(:discharge) {MML::Discharge.new(date: '2013-08-31', dischargeCondition: '4 P.O.D, the patient was transferred to the chronic hospital.', outcome: 'transferChronic', referTo: refer_to)}
|
23
|
+
|
24
|
+
let(:id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '23456789')}
|
25
|
+
let(:name) {MML::Name.new(repCode: 'A', fullname: 'Kenji Araki')}
|
26
|
+
let(:personalized_info) {MML::PersonalizedInfo.new(id: id, personName: [name])}
|
27
|
+
let(:creator_license) { MML::CreatorLicense.new(tableId: 'MML0026', value: 'doctor')}
|
28
|
+
let(:staff_info) {MML::StaffInfo.new(personalizedInfo: personalized_info, creatorLicense: [creator_license])}
|
29
|
+
|
30
|
+
let(:inpatient_item) {MML::InpatientItem.new(admission: admission, discharge: discharge, staffs: [staff_info])}
|
31
|
+
|
32
|
+
let(:service_history) {MML::ServiceHistory.new(start: '2013-08-25', end: '2013-08-31', outPatient: [outpatient_item], inPatient: [inpatient_item])}
|
33
|
+
|
34
|
+
let(:registered_diagnosis) {MML::RegisteredDiagnosis.new(diagnosis: 'right tibial fracture')}
|
35
|
+
|
36
|
+
let(:death_info) {MML::DeathInfo.new(date: '2013-08-31', autopsy: true, value: 'The patient died of gastric cancer.')}
|
37
|
+
|
38
|
+
let(:surgical_diagnosis) {MML::RegisteredDiagnosis.new(diagnosis: 'Lung cancer')}
|
39
|
+
let(:procedure_item) {MML::ProcedureItem.new(operation: 'right lobectomy')}
|
40
|
+
let(:surgery_item) {MML::SurgeryItem.new(date: '2013-12-10', surgicalDiagnosis: [surgical_diagnosis], surgicalProcedure: [procedure_item])}
|
41
|
+
let(:surgery) {MML::Surgery.new(surgeryItem: [surgery_item])}
|
42
|
+
|
43
|
+
let(:physicalExamRef) {MML::ExtRef.new(href: 'http://chest/auscultation')}
|
44
|
+
let(:physicalExam) {MML::ValueWithLink.new(value: 'Heart sounds were clear', link: [physicalExamRef])}
|
45
|
+
|
46
|
+
let(:doc_ref) {MML::ExtRef.new(href: 'img://file/angio/')}
|
47
|
+
let(:related_doc) {MML::RelatedDoc.new(value: '11D1AC5400A0C94A814796045F768ED5', relation: 'detail')}
|
48
|
+
let(:clinical_record) {MML::ClinicalRecord.new(value: 'Emergency coronary angiography was carried out.', date: '2013-12-20', extRef: [doc_ref], relatedDoc: [related_doc])}
|
49
|
+
|
50
|
+
let(:discharge_ref) {MML::ExtRef.new(href: 'ext:/summary/discharge')}
|
51
|
+
let(:discharge_findings) {MML::ValueWithLink.new(value: 'Symptoms free, no wound infection.', link: [discharge_ref])}
|
52
|
+
|
53
|
+
let(:medication_ref) {MML::ExtRef.new(href: 'patient1234/prescription003.HL7')}
|
54
|
+
let(:medication) {MML::ValueWithLink.new(value: 'Prescription on discharge', link: [medication_ref])}
|
55
|
+
|
56
|
+
let(:test_ref) {MML::ExtRef.new(href: 'patient1234/prescription004.HL7')}
|
57
|
+
let(:test_result) {MML::TestResult.new(date: '2013-12-22', value: 'Labo findings on discharge', link: [test_ref])}
|
58
|
+
|
59
|
+
let(:plan_ref) {MML::ExtRef.new(href: 'patient1234/rehabilitationplan')}
|
60
|
+
let(:plan) {MML::ValueWithLink.new(value: 'Rehabilitation program and wound care will continue in the chronic hospital.', link: [plan_ref])}
|
61
|
+
let(:summary) {MML::Summary.new(serviceHistory: service_history, registeredDiagnosis: [registered_diagnosis], deathInfo: death_info, surgeryModule: [surgery], chiefComplaints: 'Severe chest pain', patientProfile: 'The patient is a 40-year-old married forester.', history: 'On a background of good health, (snip)', physicalExam: physicalExam, clinicalCourse: [clinical_record], dischargeFindings: discharge_findings, medication: medication, testResults: [test_result], plan: plan, remarks: 'Patient education: good. Appointment in outpatient department in 2 weeks.')}
|
62
|
+
|
63
|
+
it 'is an instance of MML::Summary' do
|
64
|
+
expect(summary).to be_an_instance_of MML::Summary
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'serviceHistory should be assigned properly' do
|
68
|
+
expect(summary.serviceHistory.start).to eq '2013-08-25'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'registeredDiagnosis should be assigned properly' do
|
72
|
+
expect(summary.registeredDiagnosis[0].diagnosis).to eq 'right tibial fracture'
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'registeredDiagnosis is optional' do
|
76
|
+
expect {summary.registeredDiagnosis = nil}.not_to raise_error
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'deathInfo should be assigned properly' do
|
80
|
+
expect(summary.deathInfo.value).to eq 'The patient died of gastric cancer.'
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'deathInfo is optional' do
|
84
|
+
expect {summary.deathInfo = nil}.not_to raise_error
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'surgeryModule should be assigned properly' do
|
88
|
+
expect(summary.surgeryModule[0].surgeryItem[0].date).to eq '2013-12-10'
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'surgeryModule is optional' do
|
92
|
+
expect {summary.surgeryModule = nil}.not_to raise_error
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'chiefComplaint should be assigned properly' do
|
96
|
+
expect(summary.chiefComplaints).to eq 'Severe chest pain'
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'chiefComplaints is optional' do
|
100
|
+
expect {summary.chiefComplaints = nil}.not_to raise_error
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'patientProfile should be assigned properly' do
|
104
|
+
expect(summary.patientProfile).to eq 'The patient is a 40-year-old married forester.'
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'patientProfile is optional' do
|
108
|
+
expect {summary.patientProfile}.not_to raise_error
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'hitory should be assigned properly' do
|
112
|
+
expect(summary.history).to eq 'On a background of good health, (snip)'
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'history is optional' do
|
116
|
+
expect {summary.history = nil}.not_to raise_error
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'physicalExam should be assigned properly' do
|
120
|
+
expect(summary.physicalExam.value).to eq 'Heart sounds were clear'
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'physicalExam is optional' do
|
124
|
+
expect {summary.physicalExam = nil}.not_to raise_error
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'clinicalCourse should be assigned properly' do
|
128
|
+
expect(summary.clinicalCourse[0].date).to eq '2013-12-20'
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'clinicalCourse is optional' do
|
132
|
+
expect {summary.clinicalCourse = nil}.not_to raise_error
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'dischargeFindings should be assigned properly' do
|
136
|
+
expect(summary.dischargeFindings.value).to eq 'Symptoms free, no wound infection.'
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'dischargeFindings is optional' do
|
140
|
+
expect {summary.dischargeFindings = nil}.not_to raise_error
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'medication should be assigned properly' do
|
144
|
+
expect(summary.medication.value).to eq 'Prescription on discharge'
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'medication is optional' do
|
148
|
+
expect {summary.medication = nil}.not_to raise_error
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'testResults should be assigned properly' do
|
152
|
+
expect(summary.testResults[0].value).to eq 'Labo findings on discharge'
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'plan should be assigned properly' do
|
156
|
+
expect(summary.plan.value).to eq 'Rehabilitation program and wound care will continue in the chronic hospital.'
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'remarks should be assigned properly' do
|
160
|
+
expect(summary.remarks).to eq 'Patient education: good. Appointment in outpatient department in 2 weeks.'
|
161
|
+
end
|
162
|
+
|
163
|
+
describe '#to_xml' do
|
164
|
+
subject {summary.to_xml}
|
165
|
+
|
166
|
+
it {should match '<mmlSm:SummaryModule>'}
|
167
|
+
it {should match '<mmlSm:serviceHistory'}
|
168
|
+
it {should match 'mmlSm:start="2013-08-25"'}
|
169
|
+
it {should match 'mmlSm:end="2013-08-31"'}
|
170
|
+
it {should match '<mmlSm:outPatient><mmlSm:outPatientItem>'}
|
171
|
+
it {should match '<mmlSm:date>2013-08-25</mmlSm:date>'}
|
172
|
+
it {should match '<mmlSm:outPatientCondition'}
|
173
|
+
it {should match 'mmlSm:first="true"'}
|
174
|
+
it {should match 'mmlSm:emergency="true"'}
|
175
|
+
it {should match '10A.M.the patient was put into the ambulance on a stretcher and driven to our hospital.</mmlSm:outPatientCondition>'}
|
176
|
+
it {should match '<mmlSm:staffs><mmlSm:staffInfo>'}
|
177
|
+
it {should match '<mmlPsi:PersonalizedInfo>'}
|
178
|
+
it {should match '<mmlNm:fullname>Hiroyuki Yoshihara</mmlNm:fullname>'}
|
179
|
+
it {should match '</mmlPsi:PersonalizedInfo>'}
|
180
|
+
it {should match '<mmlCi:creatorLicense mmlCi:tableId="MML0026">doctor</mmlCi:creatorLicense></mmlSm:staffInfo></mmlSm:staffs>'}
|
181
|
+
it {should match '</mmlSm:outPatientItem></mmlSm:outPatient>'}
|
182
|
+
it {should match '<mmlSm:inPatient>'}
|
183
|
+
it {should match '<mmlSm:inPatientItem>'}
|
184
|
+
it {should match '<mmlSm:admission>'}
|
185
|
+
it {should match '<mmlSm:date>2013-12-08</mmlSm:date>'}
|
186
|
+
it {should match '<mmlSm:admissionCondition mmlSm:emergency="true">Emergency admission by ambulance</mmlSm:admissionCondition>'}
|
187
|
+
it {should match '<mmlSm:referFrom><mmlPsi:PersonalizedInfo'}
|
188
|
+
it {should match '<mmlNm:given>Yoko</mmlNm:given>'}
|
189
|
+
it {should match '</mmlPsi:PersonalizedInfo></mmlSm:referFrom>'}
|
190
|
+
it {should match '</mmlSm:admission><mmlSm:discharge><mmlSm:date>2013-08-31</mmlSm:date>'}
|
191
|
+
it {should match '<mmlSm:dischargeCondition mmlSm:outcome="transferChronic">4 P.O.D, the patient was transferred to the chronic hospital.</mmlSm:dischargeCondition>'}
|
192
|
+
it {should match '<mmlSm:referTo><mmlPsi:PersonalizedInfo>'}
|
193
|
+
it {should match '<mmlNm:family>Tanaka</mmlNm:family>'}
|
194
|
+
it {should match '</mmlPsi:PersonalizedInfo></mmlSm:referTo></mmlSm:discharge>'}
|
195
|
+
it {should match '<mmlSm:staffs>'}
|
196
|
+
it {should match '<mmlSm:staffInfo><mmlPsi:PersonalizedInfo>'}
|
197
|
+
it {should match '<mmlNm:fullname>Kenji Araki</mmlNm:fullname>'}
|
198
|
+
it {should match '</mmlCi:creatorLicense></mmlSm:staffInfo></mmlSm:staffs></mmlSm:inPatientItem>'}
|
199
|
+
it {should match '</mmlSm:inPatient>'}
|
200
|
+
it {should match '</mmlSm:serviceHistory>'}
|
201
|
+
it {should match '<mmlRd:RegisteredDiagnosisModule>'}
|
202
|
+
it {should match '<mmlRd:diagnosis>right tibial fracture</mmlRd:diagnosis>'}
|
203
|
+
it {should match '</mmlRd:RegisteredDiagnosisModule>'}
|
204
|
+
it {should match '<mmlSm:deathInfo'}
|
205
|
+
it {should match 'mmlSm:date="2013-08-31"'}
|
206
|
+
it {should match 'mmlSm:autopsy="true"'}
|
207
|
+
it {should match '>The patient died of gastric cancer.</mmlSm:deathInfo>'}
|
208
|
+
it {should match '<mmlSg:SurgeryModule>'}
|
209
|
+
it {should match '<mmlSg:surgeryItem>'}
|
210
|
+
it {should match '<mmlSg:operation>right lobectomy</mmlSg:operation>'}
|
211
|
+
it {should match '</mmlSg:surgeryItem>'}
|
212
|
+
it {should match '</mmlSg:SurgeryModule>'}
|
213
|
+
it {should match '<mmlSm:chiefComplaints>Severe chest pain</mmlSm:chiefComplaints>'}
|
214
|
+
it {should match '<mmlSm:patientProfile>The patient is a 40-year-old married forester.</mmlSm:patientProfile>'}
|
215
|
+
it {should match '<mmlSm:history>On a background of good health, \(snip\)</mmlSm:history>'}
|
216
|
+
it {should match '<mmlSm:physicalExam>Heart sounds were clear'}
|
217
|
+
it {should match '<mmlCm:extRef mmlCm:href="http://chest/auscultation"/>'}
|
218
|
+
it {should match '</mmlSm:physicalExam>'}
|
219
|
+
it {should match '<mmlSm:clinicalCourse>'}
|
220
|
+
it {should match '<mmlSm:clinicalRecord mmlSm:date="2013-12-20">Emergency coronary angiography was carried out.'}
|
221
|
+
it {should match '<mmlCm:extRef mmlCm:href="img://file/angio/"/>'}
|
222
|
+
it {should match '</mmlSm:clinicalRecord>'}
|
223
|
+
it {should match '</mmlSm:clinicalCourse>'}
|
224
|
+
it {should match '<mmlSm:dischargeFindings>Symptoms free, no wound infection.'}
|
225
|
+
it {should match '<mmlCm:extRef mmlCm:href="ext:/summary/discharge"/>'}
|
226
|
+
it {should match '</mmlSm:dischargeFindings>'}
|
227
|
+
it {should match '<mmlSm:medication>Prescription on discharge'}
|
228
|
+
it {should match '<mmlCm:extRef mmlCm:href="patient1234/prescription003.HL7"/>'}
|
229
|
+
it {should match '</mmlSm:medication>'}
|
230
|
+
it {should match '<mmlSm:testResults>'}
|
231
|
+
it {should match '<mmlSm:testResult mmlSm:date="2013-12-22">Labo findings on discharge'}
|
232
|
+
it {should match '<mmlCm:extRef mmlCm:href="patient1234/prescription004.HL7"/>'}
|
233
|
+
it {should match '</mmlSm:testResult></mmlSm:testResults>'}
|
234
|
+
it {should match '<mmlSm:plan>Rehabilitation program and wound care will continue in the chronic hospital.'}
|
235
|
+
it {should match '<mmlCm:extRef mmlCm:href="patient1234/rehabilitationplan"/></mmlSm:plan>'}
|
236
|
+
it {should match '<mmlSm:remarks>Patient education: good. Appointment in outpatient department in 2 weeks.</mmlSm:remarks>'}
|
237
|
+
it {should match '</mmlSm:SummaryModule>'}
|
238
|
+
end
|
239
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
describe MML::SurgeryItem do
|
2
|
+
let(:surgical_department_name) {MML::DepartmentName.new(repCode: 'A', tableId: 'MML0025', value: 'Cardiovascular surgery')}
|
3
|
+
let(:surgical_department) {MML::Department.new(name: [surgical_department_name])}
|
4
|
+
let(:patient_department_name) {MML::DepartmentName.new(repCode: 'A', tableId: 'MML0025', value: 'Internal medicine')}
|
5
|
+
let(:patient_department) {MML::Department.new(name: [patient_department_name])}
|
6
|
+
let(:registered_diagnosis) {MML::RegisteredDiagnosis.new(diagnosis: 'Lung cancer')}
|
7
|
+
let(:operation_element_item) {MML::OperationElementItem.new(title: 'coronary artery bipass grafting', code: 'K552', system: 'MHLW')}
|
8
|
+
let(:procedure_item) {MML::ProcedureItem.new(operation: 'right lobectomy', code: 'K511', system: 'MHLW', operationElement: [operation_element_item], procedureMemo: 'off pump')}
|
9
|
+
let(:staff_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '00123')}
|
10
|
+
let(:staff_name) {MML::Name.new(repCode: 'A', fullname: 'Hiroyuki Yoshihara')}
|
11
|
+
let(:staff_info) {MML::PersonalizedInfo.new(id: staff_id, personName: [staff_name])}
|
12
|
+
let(:staff) {MML::SurgicalStaff.new(staffClass: 'assistant', superiority: 1, staffInfo: staff_info)}
|
13
|
+
let(:anesthesia_procedure){MML::AnesthesiaProcedure.new(title: 'general anesthesia', code: 'L002', system: 'MHLW')}
|
14
|
+
let(:anesthesiologist_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '00123')}
|
15
|
+
let(:anesthesiologist_name) {MML::Name.new(repCode: 'A', fullname: 'Kenji ARAKI')}
|
16
|
+
let(:anesthesiologist_info) {MML::PersonalizedInfo.new(id: staff_id, personName: [anesthesiologist_name])}
|
17
|
+
let(:anesthesiologist) {MML::Anesthesiologist.new(staffClass: 'main anesthesiologist', superiority: 1, staffInfo: anesthesiologist_info)}
|
18
|
+
let(:ext_ref) {MML::ExtRef.new(contentType: 'image/gif', medicalRole: 'surgicalFigure', title: 'skin incision', href: 'patient001/surgicalFigure001.gif')}
|
19
|
+
let(:surgery_item) {MML::SurgeryItem.new(type: 'elective', date: '2013-12-10', startTime: '08:30', duration: 'PT5H25M', surgicalDepartment: surgical_department, patientDepartment: patient_department, surgicalDiagnosis: [registered_diagnosis], surgicalProcedure: [procedure_item], surgicalStaffs: [staff],anesthesiaProcedure: [anesthesia_procedure], anesthesiologists: [anesthesiologist], anesthesiaDuration: 'PT6H25M', operativeNotes: 'Total bleeding: 380ml', referenceInfo: [ext_ref], memo: 'This operation was well performed.')}
|
20
|
+
|
21
|
+
it 'is an instance of MML::SurgicalItem' do
|
22
|
+
expect(surgery_item).to be_an_instance_of MML::SurgeryItem
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'type should be assigned properly' do
|
26
|
+
expect(surgery_item.type).to eq 'elective'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'type is optional' do
|
30
|
+
expect {surgery_item.type = nil}.not_to raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'date should be assigned properly' do
|
34
|
+
expect(surgery_item.date).to eq '2013-12-10'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'data is mandatory' do
|
38
|
+
expect{surgery_item.date = nil}.to raise_error ArgumentError
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'startTime should be assigned properly' do
|
42
|
+
expect(surgery_item.startTime).to eq '08:30'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'startTime should be assigned properly' do
|
46
|
+
expect {surgery_item.startTime = nil}.not_to raise_error
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'duration should be assigned properly' do
|
50
|
+
expect(surgery_item.duration).to eq 'PT5H25M'
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'duration is optional' do
|
54
|
+
expect {surgery_item.duration = nil}.not_to raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'surgicalDepartment should be assigned properly' do
|
58
|
+
expect(surgery_item.surgicalDepartment.name[0].value).to eq 'Cardiovascular surgery'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'surgicalDepartment is optional' do
|
62
|
+
expect {surgery_item.surgicalDepartment = nil}.not_to raise_error
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'patientDepartment should be assigned properly' do
|
66
|
+
expect(surgery_item.patientDepartment.name[0].value).to eq 'Internal medicine'
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'patientDepartment is optional' do
|
70
|
+
expect {surgery_item.patientDepartment = nil}.not_to raise_error
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'surgicalDiagnosis should be assigned properly' do
|
74
|
+
expect(surgery_item.surgicalDiagnosis[0].diagnosis).to eq 'Lung cancer'
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'surgicalDiagnosis is mandatory' do
|
78
|
+
expect {surgery_item.surgicalDiagnosis = nil}.to raise_error ArgumentError
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'surgicalProcedure is properly assigned' do
|
82
|
+
expect(surgery_item.surgicalProcedure[0].operation).to eq 'right lobectomy'
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'surgicalStaffs should be assigned properly' do
|
86
|
+
expect(surgery_item.surgicalStaffs[0].staffClass).to eq 'assistant'
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'anesthesiaProcedure should be assigned properly' do
|
90
|
+
expect(surgery_item.anesthesiaProcedure[0].title).to eq 'general anesthesia'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'anesthesiologists should be assigned properly' do
|
94
|
+
expect(surgery_item.anesthesiologists[0].staffInfo.personName[0].fullname).to eq 'Kenji ARAKI'
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'anesthesiologists is optional' do
|
98
|
+
expect {surgery_item.anesthesiologists = nil}.not_to raise_error
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'anesthesiaDuration should be assigned properly' do
|
102
|
+
expect(surgery_item.anesthesiaDuration).to eq 'PT6H25M'
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'anesthesiaDuration is optional' do
|
106
|
+
expect {surgery_item.anesthesiaDuration}.not_to raise_error
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'operativeNotes should be assigned properly' do
|
110
|
+
expect(surgery_item.operativeNotes).to eq 'Total bleeding: 380ml'
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'operativeNotes is optional' do
|
114
|
+
expect {surgery_item.operativeNotes = nil}.not_to raise_error
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'referenceInfo should be assigned properly' do
|
118
|
+
expect(surgery_item.referenceInfo[0].title).to eq 'skin incision'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'referenceInfo is optional' do
|
122
|
+
expect {surgery_item.referenceInfo = nil}.not_to raise_error
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'memo should be assigned properly' do
|
126
|
+
expect(surgery_item.memo).to eq 'This operation was well performed.'
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'memo is optional' do
|
130
|
+
expect {surgery_item.memo = nil}.not_to raise_error
|
131
|
+
end
|
132
|
+
end
|