49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/health-data-standards/import/bulk_record_importer.rb', line 49
def self.import(xml_data, provider_map = {})
doc = Nokogiri::XML(xml_data)
providers = []
root_element_name = doc.root.name
if root_element_name == 'ClinicalDocument'
doc.root.add_namespace_definition('cda', 'urn:hl7-org:v3')
doc.root.add_namespace_definition('sdtc', 'urn:hl7-org:sdtc')
if doc.at_xpath("/cda:ClinicalDocument/cda:templateId[@root='2.16.840.1.113883.3.88.11.32.1']")
patient_data = C32::PatientImporter.instance.parse_c32(doc)
elsif doc.at_xpath("/cda:ClinicalDocument/cda:templateId[@root='2.16.840.1.113883.10.20.22.1.2']")
patient_data = CCDA::PatientImporter.instance.parse_ccda(doc)
elsif doc.at_xpath("/cda:ClinicalDocument/cda:templateId[@root='2.16.840.1.113883.10.20.24.1.2']")
patient_data = Cat1::PatientImporter.instance.parse_cat1(doc)
else
STDERR.puts("Unable to determinate document template/type of CDA document")
return {status: 'error', message: "Document templateId does not identify it as a C32 or CCDA", status_code: 400}
end
begin
providers = CDA::ProviderImporter.instance.(doc)
rescue Exception => e
STDERR.puts "error extracting providers"
end
else
return {status: 'error', message: 'Unknown XML Format', status_code: 400}
end
record = Record.update_or_create(patient_data)
record.provider_performances = providers
providers.each do |prov|
prov.provider.ancestors.each do |ancestor|
record.provider_performances.push(ProviderPerformance.new(start_date: prov.start_date, end_date: prov.end_date, provider: ancestor))
end
end
record.save
{status: 'success', message: 'patient imported', status_code: 201, record: record}
end
|