mml-ruby 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -13,4 +13,11 @@ describe MML::CreatorLicense do
|
|
13
13
|
it 'value should be doctor' do
|
14
14
|
expect(creator_license.value).to eq 'doctor'
|
15
15
|
end
|
16
|
+
|
17
|
+
describe "#to_xml" do
|
18
|
+
subject {creator_license.to_xml}
|
19
|
+
|
20
|
+
it {should match '<mmlCi:creatorLicense mmlCi:tableId="MML0026">'}
|
21
|
+
it {should match '>doctor</mmlCi:creatorLicense>'}
|
22
|
+
end
|
16
23
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
describe MML::Death do
|
2
|
+
let(:death) {MML::Death.new(flag: true, date: '2013-11-21')}
|
3
|
+
|
4
|
+
it 'flag should be assigned properly' do
|
5
|
+
expect(death.flag).to be_true
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'date should be assigned properly' do
|
9
|
+
expect(death.date).to eq '2013-11-21'
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
describe MML::DeathInfo do
|
2
|
+
let(:death_info) {MML::DeathInfo.new(date: '2013-08-31', autopsy: true, value: 'The patient died of gastric cancer.')}
|
3
|
+
|
4
|
+
it 'is an instance of MML::DeathInfo' do
|
5
|
+
expect(death_info).to be_an_instance_of MML::DeathInfo
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'date should be assigned properly' do
|
9
|
+
expect(death_info.date).to eq '2013-08-31'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'autopsy should be assgined properly' do
|
13
|
+
expect(death_info.autopsy).to be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'value should be assigned properly' do
|
17
|
+
expect(death_info.value).to eq 'The patient died of gastric cancer.'
|
18
|
+
end
|
19
|
+
end
|
data/spec/mml/department_spec.rb
CHANGED
@@ -18,9 +18,9 @@ describe MML::Department do
|
|
18
18
|
expect {department.name = nil}.to raise_error ArgumentError
|
19
19
|
end
|
20
20
|
|
21
|
-
it 'name should not be empty' do
|
22
|
-
|
23
|
-
end
|
21
|
+
# it 'name should not be empty' do
|
22
|
+
# expect {department.name = []}.to raise_error ArgumentError
|
23
|
+
# end
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'id should be properyl assigned' do
|
@@ -0,0 +1,23 @@
|
|
1
|
+
describe MML::DiagnosticCategory do
|
2
|
+
let(:diagnostic_category) {MML::DiagnosticCategory.new(value: 'mainDiagnosis', tableId: 'MML0012')}
|
3
|
+
|
4
|
+
it 'is an instance of DiagnosticCategory' do
|
5
|
+
expect(diagnostic_category).to be_an_instance_of MML::DiagnosticCategory
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'value should be assigned properly' do
|
9
|
+
expect(diagnostic_category.value).to eq 'mainDiagnosis'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'value is mandatory' do
|
13
|
+
expect{diagnostic_category.value = nil}.to raise_error ArgumentError
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'tableId should be assigned properly' do
|
17
|
+
expect(diagnostic_category.tableId).to eq 'MML0012'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'tableId is mandatory' do
|
21
|
+
expect{diagnostic_category.tableId = nil}.to raise_error ArgumentError
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
describe MML::Discharge do
|
2
|
+
let(:refer_to_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '55234567')}
|
3
|
+
let(:refer_to_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Tanaka', given: 'Fujiko', degree: 'M.D.')}
|
4
|
+
let(:refer_to_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Heisei Hospital')}
|
5
|
+
let(:refer_to_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '32354678')}
|
6
|
+
let(:refer_to_facility) {MML::Facility.new(id: refer_to_facility_id, name: [refer_to_facility_name])}
|
7
|
+
let(:refer_to) {MML::PersonalizedInfo.new(id: refer_to_id, personName: [refer_to_name], facility: refer_to_facility)}
|
8
|
+
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)}
|
9
|
+
|
10
|
+
it 'is an instance of MML::Discharge' do
|
11
|
+
expect(discharge).to be_an_instance_of MML::Discharge
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'date should be assigned properly' do
|
15
|
+
expect(discharge.date).to eq '2013-08-31'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'dischargeCondition should be assigned properly' do
|
19
|
+
expect(discharge.dischargeCondition).to eq '4 P.O.D, the patient was transferred to the chronic hospital.'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'outcome should be assigned properly' do
|
23
|
+
expect(discharge.outcome).to eq 'transferChronic'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'referTo should be assigned properly' do
|
27
|
+
expect(discharge.referTo.personName[0].family).to eq 'Tanaka'
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
describe MML::DxItem do
|
2
|
+
let(:dx_item) {MML::DxItem.new(name: 'atrial fibrilation', code: 'I48', system: 'ICD10')}
|
3
|
+
|
4
|
+
it 'is an instance of MML::DxItem' do
|
5
|
+
expect(dx_item).to be_an_instance_of MML::DxItem
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'name should be assigned properly' do
|
9
|
+
expect(dx_item.name).to eq 'atrial fibrilation'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'code should be assigned properly' do
|
13
|
+
expect(dx_item.code).to eq 'I48'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'system should be assigned properly' do
|
17
|
+
expect(dx_item.system).to eq 'ICD10'
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe MML::FamilyHistoryItem do
|
2
|
+
let(:registered_diagnosis) {MML::RegisteredDiagnosis.new(diagnosis: 'gastric cancer', code: 'C169-.007', system: 'ICD10', endDate: '1989-08-25', outcome: 'died')}
|
3
|
+
let(:family_history_item) {MML::FamilyHistoryItem.new(relation: 'motherInLaw', registeredDiagnosis: registered_diagnosis, age: 'P40Y', memo: 'scirrhous type')}
|
4
|
+
|
5
|
+
it 'is an instance of MML::FamilyHistoryItem' do
|
6
|
+
expect(family_history_item).to be_an_instance_of MML::FamilyHistoryItem
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'relation should be assigned properly' do
|
10
|
+
expect(family_history_item.relation).to eq 'motherInLaw'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'relation is mandatory' do
|
14
|
+
expect {family_history_item.relation = nil}.to raise_error ArgumentError
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'regsiteredDiagnosis should be assigned properly' do
|
18
|
+
expect(family_history_item.registeredDiagnosis.diagnosis).to eq 'gastric cancer'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'registeredDiagnosis is mandatory' do
|
22
|
+
expect {family_history_item.registeredDiagnosis = nil}.to raise_error ArgumentError
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'age should be assigned properly' do
|
26
|
+
expect(family_history_item.age).to eq 'P40Y'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'age is optional' do
|
30
|
+
expect {family_history_item.age = nil}.not_to raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'memo should be assigned properly' do
|
34
|
+
expect(family_history_item.memo).to eq 'scirrhous type'
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
describe MML::FirstClinic do
|
2
|
+
let(:registered_diagnosis) {MML::RegisteredDiagnosis.new(diagnosis: 'gastric cancer', code: 'C169-.007', system: 'ICD10', endDate: '1989-08-25', outcome: 'died')}
|
3
|
+
let(:family_history_item) {MML::FamilyHistoryItem.new(relation: 'motherInLaw', registeredDiagnosis: registered_diagnosis, age: 'P40Y', memo: 'scirrhous type')}
|
4
|
+
let(:id) { MML::Id.new(value: '12345', type: 'facility', tableId: 'MML0024', checkDigit: 5, checkDigitSchema: 'MML0001') }
|
5
|
+
let(:name) { MML::FacilityName.new(value: 'New Millenium Medical College Hospital', repCode: 'A', tableId: 'MML0025') }
|
6
|
+
let(:facility) { MML::Facility.new(name: [name], id: id) }
|
7
|
+
let(:birth_info) {MML::BirthInfo.new(facility: facility, deliveryWeeks: 'P38W', deliveryMethod: 'cesarean section', bodyWeight: 3370, bodyWeightUnit: 'g', bodyHeight: 50, bodyHeightUnit: 'cm', chestCircumference: 31.1, chestCircumferenceUnit: 'cm', headCircumference: 32.8, headCircumferenceUnit: 'cm', memo: 'intact')}
|
8
|
+
let(:vaccination_item1) {MML::VaccinationItem.new(vaccine: 'polio', injected: true, age: 'P6M', memo: 'first administration')}
|
9
|
+
let(:vaccination_item2) {MML::VaccinationItem.new(vaccine: 'flu', injected: false, age: 'P1M', memo: 'second administration')}
|
10
|
+
let(:past_history_item1) {MML::PastHistoryItem.new(timeExpression: '6 years old', eventExpression: ['appendectomy'])}
|
11
|
+
let(:past_history_item2) {MML::PastHistoryItem.new(timeExpression: '5 years ago', eventExpression: ['hypertension'])}
|
12
|
+
let(:past_history) {MML::PastHistory.new(freeNote: 'Appendectomy (6 years old), hypertension (5 years ago)', pastHistoryItem: [past_history_item1, past_history_item2])}
|
13
|
+
let(:first_clinic) {MML::FirstClinic.new(familyHistory: [family_history_item], birthInfo: birth_info, vaccination: [vaccination_item1, vaccination_item2],pastHistory: past_history, chiefComplaints: 'fever', presentIllnessNotes: 'fever up from 2 days ago, nasal discharge from 1day ago, sore throat, today.')}
|
14
|
+
|
15
|
+
it 'is an instance of MML::FirstClinc' do
|
16
|
+
expect(first_clinic).to be_an_instance_of MML::FirstClinic
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'familyHistory should be recorded properly' do
|
20
|
+
expect(first_clinic.familyHistory[0].registeredDiagnosis.code).to eq 'C169-.007'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'familyHistory is optional' do
|
24
|
+
expect {first_clinic.familyHistory = nil}.not_to raise_error
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'birthInfo should be assigned properly' do
|
28
|
+
expect(first_clinic.birthInfo.bodyWeight).to eq 3370
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'birthInfo is optional' do
|
32
|
+
expect {first_clinic.birthInfo = nil}.not_to raise_error
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'vaccination should be assigned properly' do
|
36
|
+
expect(first_clinic.vaccination[1].vaccine).to eq 'flu'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'vaccination is optional' do
|
40
|
+
expect {first_clinic.vaccination = nil}.not_to raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'pastHistory should be assigned properly' do
|
44
|
+
expect(first_clinic.pastHistory.freeNote).to eq 'Appendectomy (6 years old), hypertension (5 years ago)'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'pastHistory is optional' do
|
48
|
+
expect {first_clinic.pastHistory = nil}.not_to raise_error
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'chiefComplaints should be assigned properly' do
|
52
|
+
expect(first_clinic.chiefComplaints).to eq 'fever'
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'chiefComplaints is optional' do
|
56
|
+
expect {first_clinic.chiefComplaints = nil}.not_to raise_error
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'presentIllnessNotes should be assigned properly' do
|
60
|
+
expect(first_clinic.presentIllnessNotes).to eq 'fever up from 2 days ago, nasal discharge from 1day ago, sore throat, today.'
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'presentIllnessNotes is optional' do
|
64
|
+
expect {first_clinic.presentIllnessNotes = nil}.not_to raise_error
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#to_xml' do
|
68
|
+
subject {first_clinic.to_xml}
|
69
|
+
|
70
|
+
it {should match '<mmlFcl:FirstClinicModule>'}
|
71
|
+
it {should match '<mmlFcl:familyHistory>'}
|
72
|
+
it {should match '<mmlFcl:familyHistoryItem>'}
|
73
|
+
it {should match '<mmlFcl:relation>motherInLaw</mmlFcl:relation>'}
|
74
|
+
it {should match '<mmlRd:RegisteredDiagnosisModule>'}
|
75
|
+
it {should match '>gastric cancer</mmlRd:diagnosis>'}
|
76
|
+
it {should match '</mmlRd:RegisteredDiagnosisModule>'}
|
77
|
+
it {should match '<mmlFcl:age>P40Y</mmlFcl:age>'}
|
78
|
+
it {should match '<mmlFcl:memo>scirrhous type</mmlFcl:memo>'}
|
79
|
+
it {should match '</mmlFcl:familyHistoryItem>'}
|
80
|
+
it {should match '</mmlFcl:familyHistory>'}
|
81
|
+
it {should match '<mmlFcl:childhood><mmlFcl:birthInfo>'}
|
82
|
+
it {should match '<mmlFc:Facility'}
|
83
|
+
it {should match '>New Millenium Medical College Hospital</mmlFc:name>'}
|
84
|
+
it {should match '</mmlFc:Facility>'}
|
85
|
+
it {should match '<mmlFcl:deliveryWeeks>P38W</mmlFcl:deliveryWeeks>'}
|
86
|
+
it {should match '<mmlFcl:deliveryMethod>cesarean section</mmlFcl:deliveryMethod>'}
|
87
|
+
it {should match '<mmlFcl:bodyWeight mmlFcl:unit="g">3370</mmlFcl:bodyWeight>'}
|
88
|
+
it {should match '<mmlFcl:bodyHeight mmlFcl:unit="cm">50</mmlFcl:bodyHeight>'}
|
89
|
+
it {should match '<mmlFcl:chestCircumference mmlFcl:unit="cm">31.1</mmlFcl:chestCircumference>'}
|
90
|
+
it {should match '<mmlFcl:headCircumference mmlFcl:unit="cm">32.8</mmlFcl:headCircumference>'}
|
91
|
+
it {should match '<mmlFcl:memo>intact</mmlFcl:memo>'}
|
92
|
+
it {should match '</mmlFcl:birthInfo><mmlFcl:vaccination>'}
|
93
|
+
it {should match '<mmlFcl:vaccinationItem><mmlFcl:vaccine>polio</mmlFcl:vaccine><mmlFcl:injected>true</mmlFcl:injected><mmlFcl:age>P6M</mmlFcl:age><mmlFcl:memo>first administration</mmlFcl:memo></mmlFcl:vaccinationItem>'}
|
94
|
+
it {should match '<mmlFcl:vaccinationItem><mmlFcl:vaccine>flu</mmlFcl:vaccine><mmlFcl:injected>false</mmlFcl:injected><mmlFcl:age>P1M</mmlFcl:age><mmlFcl:memo>second administration</mmlFcl:memo></mmlFcl:vaccinationItem>'}
|
95
|
+
it {should match '</mmlFcl:vaccination></mmlFcl:childhood>'}
|
96
|
+
it {should match '<mmlFcl:pastHistory>'}
|
97
|
+
it {should match '<mmlFcl:freeNote>Appendectomy \(6 years old\), hypertension \(5 years ago\)</mmlFcl:freeNote>'}
|
98
|
+
it {should match '<mmlFcl:pastHistoryItem><mmlFcl:timeExpression>6 years old</mmlFcl:timeExpression><mmlFcl:eventExpression>appendectomy</mmlFcl:eventExpression>'}
|
99
|
+
it {should match '<mmlFcl:pastHistoryItem><mmlFcl:timeExpression>5 years ago</mmlFcl:timeExpression><mmlFcl:eventExpression>hypertension</mmlFcl:eventExpression>'}
|
100
|
+
it {should match '</mmlFcl:pastHistory>'}
|
101
|
+
it {should match '<mmlFcl:chiefComplaints>fever</mmlFcl:chiefComplaints>'}
|
102
|
+
it {should match '<mmlFcl:presentIllnessNotes>fever up from 2 days ago, nasal discharge from 1day ago, sore throat, today.</mmlFcl:presentIllnessNotes>'}
|
103
|
+
it {should match '</mmlFcl:FirstClinicModule>'}
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
describe MML::InfectionItem do
|
2
|
+
let(:infection_item) {MML::InfectionItem.new(factor: 'Influenza', examValue: 'A+B-', identifiedDate: '2013-12-03', memo: 'drug resistance(-)')}
|
3
|
+
|
4
|
+
it 'is an instance of MML::InfectionItem' do
|
5
|
+
expect(infection_item).to be_an_instance_of MML::InfectionItem
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'factor should be assigned properly' do
|
9
|
+
expect(infection_item.factor).to eq 'Influenza'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'factor is mandatory' do
|
13
|
+
expect {infection_item.factor = nil}.to raise_error ArgumentError
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'examValue should be assigned properly' do
|
17
|
+
expect(infection_item.examValue).to eq 'A+B-'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'examValue is mandatory' do
|
21
|
+
expect {infection_item.examValue = nil}.to raise_error ArgumentError
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'identifiedDate should be assigned properly' do
|
25
|
+
expect(infection_item.identifiedDate).to eq '2013-12-03'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'identifiedDate is optional' do
|
29
|
+
expect {infection_item.identifiedDate = nil}.not_to raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'memo should be assigned properly' do
|
33
|
+
expect(infection_item.memo).to eq 'drug resistance(-)'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'memo is optional' do
|
37
|
+
expect {infection_item.memo = nil}.not_to raise_error
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
describe MML::InpatientItem do
|
2
|
+
let(:referer_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '23234567')}
|
3
|
+
let(:referer_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Ono', given: 'Yoko', degree: 'M.D.')}
|
4
|
+
let(:referer_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Medical College Hospital')}
|
5
|
+
let(:referer_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '801.006.3')}
|
6
|
+
let(:referer_facility) {MML::Facility.new(id: referer_facility_id, name: [referer_facility_name])}
|
7
|
+
let(:referer) {MML::PersonalizedInfo.new(id: referer_id, personName: [referer_name], facility: referer_facility)}
|
8
|
+
let(:admission) {MML::Admission.new(date: '2013-12-08', admissionCondition: 'Emergency admission by ambulance', emergency: true, referFrom: referer)}
|
9
|
+
|
10
|
+
let(:refer_to_id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '55234567')}
|
11
|
+
let(:refer_to_name) {MML::Name.new(repCode: 'A', tableId: 'MML0025', family: 'Tanaka', given: 'Fujiko', degree: 'M.D.')}
|
12
|
+
let(:refer_to_facility_name) {MML::FacilityName.new(repCode: 'A', tableId: 'MML0025', value: 'New Millenium Heisei Hospital')}
|
13
|
+
let(:refer_to_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '32354678')}
|
14
|
+
let(:refer_to_facility) {MML::Facility.new(id: refer_to_facility_id, name: [refer_to_facility_name])}
|
15
|
+
let(:refer_to) {MML::PersonalizedInfo.new(id: refer_to_id, personName: [refer_to_name], facility: refer_to_facility)}
|
16
|
+
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)}
|
17
|
+
|
18
|
+
let(:id) {MML::Id.new(type: 'facility', tableId: 'MML0024', value: '23456789')}
|
19
|
+
let(:name) {MML::Name.new(repCode: 'A', fullname: 'Kenji Araki')}
|
20
|
+
let(:personalized_info) {MML::PersonalizedInfo.new(id: id, personName: [name])}
|
21
|
+
let(:creator_license) { MML::CreatorLicense.new(tableId: 'MML0026', value: 'doctor')}
|
22
|
+
let(:staff_info) {MML::StaffInfo.new(personalizedInfo: personalized_info, creatorLicense: [creator_license])}
|
23
|
+
|
24
|
+
let(:inpatient_item) {MML::InpatientItem.new(admission: admission, discharge: discharge, staffs: [staff_info])}
|
25
|
+
|
26
|
+
it 'is an instance of MML::InpatientItem' do
|
27
|
+
expect(inpatient_item).to be_an_instance_of MML::InpatientItem
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'admission should be assigned properly' do
|
31
|
+
expect(inpatient_item.admission.date).to eq '2013-12-08'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'admission is mandatory' do
|
35
|
+
expect {inpatient_item.admission = nil}.to raise_error ArgumentError
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'discharge should be assigned properly' do
|
39
|
+
expect(inpatient_item.discharge.outcome).to eq 'transferChronic'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'discharge is mandatory' do
|
43
|
+
expect {inpatient_item.discharge = nil}.to raise_error ArgumentError
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'staffs should be assigned properly' do
|
47
|
+
expect(inpatient_item.staffs[0].personalizedInfo.personName[0].fullname).to eq 'Kenji Araki'
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
describe MML::InsuranceClass do
|
3
|
+
let(:insurance_class) { MML::InsuranceClass.new(classCode: '01', tableId: 'MML0031', value: '国保') }
|
4
|
+
|
5
|
+
it 'is an instance of MML::InsuranceClass' do
|
6
|
+
expect(insurance_class).to be_an_instance_of MML::InsuranceClass
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'value should be assigned properly' do
|
10
|
+
expect(insurance_class.value).to eq '国保'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'value is mandatory' do
|
14
|
+
expect {insurance_class.value = nil}.to raise_error ArgumentError
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'classCode should be assigned properly' do
|
18
|
+
expect(insurance_class.classCode).to eq '01'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'tableId should be assigned properly' do
|
22
|
+
expect(insurance_class.tableId).to eq 'MML0031'
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe MML::InsuranceClient do
|
2
|
+
|
3
|
+
let(:name) { MML::Name.new(repCode: 'A', fullname: 'Shinji KOBAYASHI')}
|
4
|
+
let(:address) { MML::Address.new(repCode: 'A', addressClass: 'business', tableId: 'MML0025', full: '506, Dept. 9, Kyoto Research Park (KRP), Awata-cho 91, Chudoji, Shimogyo-ku, Kyoto-city')}
|
5
|
+
let(:phone) { MML::Phone.new(telEquipType: 'PH', area: '075', city: '874', number: '7030') }
|
6
|
+
|
7
|
+
let(:insurance_client) {MML::InsuranceClient.new(personName: [name], addresses: [address], phones: [phone])}
|
8
|
+
|
9
|
+
it 'is an instance of MML::InsuranceClient' do
|
10
|
+
expect(insurance_client).to be_an_instance_of MML::InsuranceClient
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'personName should be assigned properly' do
|
14
|
+
expect(insurance_client.personName[0].fullname).to eq 'Shinji KOBAYASHI'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'personName is optional' do
|
18
|
+
expect {insurance_client.personName = nil}.not_to raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'addresses should be assigned properly' do
|
22
|
+
expect(insurance_client.addresses[0].addressClass).to eq 'business'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'addresses is optional' do
|
26
|
+
expect {insurance_client.addresses = nil}.not_to raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'phones should be properly assigned' do
|
30
|
+
expect(insurance_client.phones[0].city).to eq '874'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'phones is optional' do
|
34
|
+
expect{insurance_client.phones = nil}.not_to raise_error
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
describe MML::Insurance do
|
3
|
+
let(:insurance_class) { MML::InsuranceClass.new(classCode: '01', tableId: 'MML0031', value: '国保') }
|
4
|
+
let(:master_id) { MML::Id.new(value: '0001', type: 'facility', repCode: 'A', tableId: 'MML0024') }
|
5
|
+
let(:name) { MML::Name.new(repCode: 'A', fullname: 'Shinji KOBAYASHI')}
|
6
|
+
let(:address) { MML::Address.new(repCode: 'A', addressClass: 'business', tableId: 'MML0025', full: '506, Dept. 9, Kyoto Research Park (KRP), Awata-cho 91, Chudoji, Shimogyo-ku, Kyoto-city')}
|
7
|
+
let(:phone) { MML::Phone.new(telEquipType: 'PH', area: '075', city: '874', number: '7030') }
|
8
|
+
let(:client) {MML::InsuranceClient.new(personName: [name], addresses: [address], phones: [phone])}
|
9
|
+
let(:insured_facility_id) {MML::Id.new(type: 'insurance', tableId: 'MML0027', value: '12345')}
|
10
|
+
let(:insured_facility_name) {MML::FacilityName.new(repCode: 'A', value: '宮崎市広域連合')}
|
11
|
+
let(:insured_facility_address) { MML::Address.new(repCode: 'A', prefecture: 'Miyazaki')}
|
12
|
+
let(:insured_facility_phone) {MML::Phone.new(telEquipType: 'PH', full: '075-123-4567')}
|
13
|
+
let(:insured_facility) {MML::Facility.new(id: insured_facility_id, name: [insured_facility_name])}
|
14
|
+
let(:insured_info) {MML::OrganizationInfo.new(facility: insured_facility, addresses: [insured_facility_address], phones: [insured_facility_phone])}
|
15
|
+
let(:work_facility_name) {MML::FacilityName.new(repCode: 'A', value: 'Miyazaki Univ.')}
|
16
|
+
let(:work_facility_id) {MML::Id.new(type: 'business', tableId: 'MML0027', value: '56789')}
|
17
|
+
let(:work_facility) {MML::Facility.new(id: work_facility_id, name: [work_facility_name])}
|
18
|
+
let(:work_address) {MML::Address.new(repCode: 'A', town: 'Kiyotake-cho')}
|
19
|
+
let(:work_phone) {MML::Phone.new(telEquipType: 'PH', area: '0985')}
|
20
|
+
let(:work_info) {MML::OrganizationInfo.new(facility: work_facility, addresses: [work_address], phones: [work_phone])}
|
21
|
+
let(:public_insurance_item) {MML::PublicInsuranceItem.new(priority: '1', providerName: '公費', provider: '15450034', recipient: '0009043', startDate: '1997-09-30', expiredDate: '1999-09-30', paymentRatio: 10_000, ratioType: 'fix')}
|
22
|
+
let(:insurance) { MML::Insurance.new(countryType: 'JPN', insuranceClass: insurance_class, insuranceNumber: '8001', group: '宮市みへし', number: '421', familyClass: false, clientInfo: client, continuedDiseases: ['diabetes mellitus'], startDate: '2013-10-01', expiredDate: '2018-03-31', paymentInRatio: 0.2, paymentOutRatio: 0.3, insuredInfo: insured_info, workInfo: work_info, publicInsurance: [public_insurance_item]) }
|
23
|
+
|
24
|
+
it 'should be an instance of MML::Insurance' do
|
25
|
+
expect(insurance).to be_an_instance_of MML::Insurance
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'country type should be assigned properly' do
|
29
|
+
expect(insurance.countryType).to eq 'JPN'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'insuranceClass should be assigned properly' do
|
33
|
+
expect(insurance.insuranceClass.value).to eq '国保'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'insuranceNumber should be assigned properly' do
|
37
|
+
expect(insurance.insuranceNumber).to eq '8001'
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'group should be assigned properly' do
|
41
|
+
expect(insurance.group).to eq '宮市みへし'
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'group is mandatory' do
|
45
|
+
expect {insurance.group = nil}.to raise_error ArgumentError
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'number should be assigned properly' do
|
49
|
+
expect(insurance.number).to eq '421'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'family class should be assigned properly' do
|
53
|
+
expect(insurance.familyClass).to be_false
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'family class is mandatory' do
|
57
|
+
expect {insurance.familyClass = nil }.to raise_error ArgumentError
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'clientInfo should be assigned properly' do
|
61
|
+
expect(insurance.clientInfo.personName[0].fullname).to eq 'Shinji KOBAYASHI'
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'clientInfo is optional' do
|
65
|
+
expect{insurance.clientInfo = nil}.not_to raise_error
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'continuedDiseases should be assigned properly' do
|
69
|
+
expect(insurance.continuedDiseases[0]).to eq 'diabetes mellitus'
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'continuedDiseases is optional' do
|
73
|
+
expect{insurance.continuedDiseases = nil}.not_to raise_error
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'startDate should be assigned properly' do
|
77
|
+
expect(insurance.startDate).to eq '2013-10-01'
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'startDate is mandatory' do
|
81
|
+
expect{insurance.startDate = nil}.to raise_error ArgumentError
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'expiredDate should be assigned properly' do
|
85
|
+
expect(insurance.expiredDate).to eq '2018-03-31'
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'expiredDate is mandatory' do
|
89
|
+
expect{insurance.expiredDate = nil}.to raise_error ArgumentError
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'paymentInRatio should be assigned properly' do
|
93
|
+
expect(insurance.paymentInRatio).to eq 0.2
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'paymentOutRatio should be assigned properly' do
|
97
|
+
expect(insurance.paymentOutRatio).to eq 0.3
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'insured info should be assigned properly' do
|
101
|
+
expect(insurance.insuredInfo.facility.id.value).to eq '12345'
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'work info should be assined properly' do
|
105
|
+
expect(insurance.workInfo.facility.id.value).to eq '56789'
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'public insurance item should assigned properly' do
|
109
|
+
expect(insurance.publicInsurance[0].provider).to eq '15450034'
|
110
|
+
end
|
111
|
+
|
112
|
+
context '#to_xml' do
|
113
|
+
subject {insurance.to_xml}
|
114
|
+
|
115
|
+
it {should match '<mmlHi:HealthInsuranceModule'}
|
116
|
+
it {should match 'mmlHi:countryType="JPN">'}
|
117
|
+
it {should match '<mmlHi:insuranceClass'}
|
118
|
+
it {should match 'mmlHi:ClassCode="01"'}
|
119
|
+
it {should match 'mmlHi:tableId="MML0031"'}
|
120
|
+
it {should match '国保</mmlHi:insuranceClass>'}
|
121
|
+
it {should match '<mmlHi:insuranceNumber>8001</mmlHi:insuranceNumber>'}
|
122
|
+
it {should match '<mmlHi:clientId>'}
|
123
|
+
it {should match '<mmlHi:group>宮市みへし</mmlHi:group>'}
|
124
|
+
it {should match '<mmlHi:number>421</mmlHi:number>'}
|
125
|
+
it {should match '</mmlHi:clientId>'}
|
126
|
+
it {should match '<mmlHi:familyClass>false</mmlHi:familyClass>'}
|
127
|
+
it {should match '<mmlHi:clientInfo>'}
|
128
|
+
it {should match '<mmlHi:personName>'}
|
129
|
+
it {should match '<mmlNm:Name mmlNm:repCode="A">'}
|
130
|
+
it {should match '<mmlNm:fullname>Shinji KOBAYASHI</mmlNm:fullname>'}
|
131
|
+
it {should match '</mmlNm:Name>'}
|
132
|
+
it {should match '</mmlHi:personName>'}
|
133
|
+
it {should match '<mmlHi:addresses>'}
|
134
|
+
it {should match '<mmlAd:Address'}
|
135
|
+
it {should match 'mmlAd:addressClass="business"'}
|
136
|
+
it {should match '<mmlAd:full>506, Dept. 9'}
|
137
|
+
it {should match '</mmlAd:Address>'}
|
138
|
+
it {should match '</mmlHi:addresses>'}
|
139
|
+
it {should match '<mmlHi:phones>'}
|
140
|
+
it {should match '<mmlPh:area>075</mmlPh:area>'}
|
141
|
+
it {should match '</mmlHi:phones>'}
|
142
|
+
it {should match '</mmlHi:clientInfo>'}
|
143
|
+
it {should match '<mmlHi:continuedDiseases>'}
|
144
|
+
it {should match '<mmlHi:disease>diabetes mellitus</mmlHi:disease>'}
|
145
|
+
it {should match '</mmlHi:continuedDiseases>'}
|
146
|
+
it {should match '<mmlHi:startDate>2013-10-01</mmlHi:startDate>'}
|
147
|
+
it {should match '<mmlHi:expiredDate>2018-03-31</mmlHi:expiredDate>'}
|
148
|
+
it {should match '<mmlHi:paymentInRatio>0.2</mmlHi:paymentInRatio>'}
|
149
|
+
it {should match '<mmlHi:paymentOutRatio>0.3</mmlHi:paymentOutRatio>'}
|
150
|
+
it {should match '<mmlHi:insuredInfo>'}
|
151
|
+
it {should match '<mmlHi:facility>'}
|
152
|
+
it {should match '<mmlFc:Facility>'}
|
153
|
+
it {should match '<mmlFc:name mmlFc:repCode="A">宮崎市広域連合</mmlFc:name>'}
|
154
|
+
it {should match '</mmlFc:Facility>'}
|
155
|
+
it {should match '</mmlHi:facility>'}
|
156
|
+
it {should match '<mmlHi:addresses>'}
|
157
|
+
it {should match '<mmlAd:prefecture>Miyazaki</mmlAd:prefecture>'}
|
158
|
+
it {should match '</mmlHi:addresses>'}
|
159
|
+
it {should match '<mmlHi:phones>'}
|
160
|
+
it {should match '<mmlPh:full>075-123-4567</mmlPh:full>'}
|
161
|
+
it {should match '</mmlHi:phones>'}
|
162
|
+
it {should match '</mmlHi:insuredInfo>'}
|
163
|
+
it {should match '<mmlHi:workInfo><mmlHi:facility>'}
|
164
|
+
it {should match '<mmlFc:name mmlFc:repCode="A">Miyazaki Univ.</mmlFc:name>'}
|
165
|
+
it {should match '<mmlHi:addresses><mmlAd:Address'}
|
166
|
+
it {should match '<mmlAd:town>Kiyotake-cho</mmlAd:town>'}
|
167
|
+
it {should match '</mmlAd:Address></mmlHi:addresses'}
|
168
|
+
it {should match '<mmlHi:phones><mmlPh:Phone mmlPh:telEquipType="PH"><mmlPh:area>0985</mmlPh:area></mmlPh:Phone></mmlHi:phones>'}
|
169
|
+
it {should match '</mmlHi:workInfo>'}
|
170
|
+
it {should match '<mmlHi:publicInsurance>'}
|
171
|
+
it {should match '<mmlHi:publicInsuranceItem mmlHi:priority="1">'}
|
172
|
+
it {should match '<mmlHi:providerName>公費</mmlHi:providerName>'}
|
173
|
+
it {should match '<mmlHi:provider>15450034</mmlHi:provider'}
|
174
|
+
it {should match '<mmlHi:recipient>0009043</mmlHi:recipient>'}
|
175
|
+
it {should match '<mmlHi:startDate>1997-09-30</mmlHi:startDate>'}
|
176
|
+
it {should match '<mmlHi:expiredDate>1999-09-30</mmlHi:expiredDate>'}
|
177
|
+
it {should match '<mmlHi:paymentRatio mmlHi:ratioType="fix">10000</mmlHi:paymentRatio>'}
|
178
|
+
it {should match '</mmlHi:publicInsuranceItem>'}
|
179
|
+
it {should match '</mmlHi:publicInsurance>'}
|
180
|
+
it {should match '</mmlHi:HealthInsuranceModule>'}
|
181
|
+
end
|
182
|
+
end
|