Openemr fhir search (#4349)
[openemr.git] / src / Services / OrganizationService.php
blob15c957d2736ac2f1278447e79c6d693f5fb3c8d9
1 <?php
3 /**
4 * InsuranceService
6 * @package OpenEMR
7 * @link http://www.open-emr.org
8 * @author Vishnu Yarmaneni <vardhanvishnu@gmail.com>
9 * @copyright Copyright (c) 2021 Vishnu Yarmaneni <vardhanvishnu@gmail.com>
10 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
13 namespace OpenEMR\Services;
15 use OpenEMR\Common\Uuid\UuidRegistry;
16 use OpenEMR\Services\FacilityService;
17 use OpenEMR\Services\InsuranceCompanyService;
18 use OpenEMR\Validators\ProcessingResult;
20 class OrganizationService extends BaseService
23 /**
24 * @var \OpenEMR\Services\FacilityService
26 private $facilityService;
28 /**
29 * @var \OpenEMR\Services\InsuranceCompanyService
31 private $insuranceService;
33 /**
34 * Default constructor.
36 public function __construct()
38 $this->facilityService = new FacilityService();
39 $this->insuranceService = new InsuranceCompanyService();
43 public function getOne($uuid)
45 $facilityResult = $this->facilityService->getOne($uuid);
46 $insuranceResult = $this->insuranceService->getOne($uuid);
47 return $this->processResults($facilityResult, $insuranceResult);
50 /**
51 * Retrieves an organization representing a facility given the facility id. If the organization cannot be found
52 * it returns null.
53 * @param $facilityId The id of the facility to search on.
54 * @return array|null
56 public function getFacilityOrganizationById($facilityId)
58 $facilityResult = $this->facilityService->getById($facilityId);
59 if (!empty($facilityResult)) {
60 $facilityOrgs = $this->getFacilityOrg($facilityResult);
61 return array_pop($facilityOrgs); // return only one record
63 return null;
66 private function getFacilityOrg($facilityRecords)
68 $facilityOrgs = array();
69 foreach ($facilityRecords as $index => $org) {
70 if (isset($org['uuid'])) {
71 $org['uuid'] = UuidRegistry::uuidToString($org['uuid']);
73 $address = array();
74 if (isset($org['street'])) {
75 $org['line1'] = $org['street'];
77 $org['orgType'] = "facility";
78 array_push($facilityOrgs, $org);
80 return $facilityOrgs;
83 private function getInsuranceOrg($insuranceRecords)
85 $insuranceOrgs = array();
86 foreach ($insuranceRecords as $index => $org) {
87 if (isset($org['uuid'])) {
88 $org['uuid'] = UuidRegistry::uuidToString($org['uuid']);
90 if (isset($org['zip'])) {
91 $org['postal_code'] = $org['zip'];
93 if (isset($org['country'])) {
94 $org['country_code'] = $org['country'];
96 $org['orgType'] = "insurance";
97 // TODO: @adunsulag check with code reviewers to make sure this is the right value for an insurance org
98 // since the callers of this service are 'viewing' an organization which is a facade over insurance & facility
99 // we need to make sure both records have the same column.
100 $org['service_location'] = 0;
101 array_push($insuranceOrgs, $org);
103 return $insuranceOrgs;
106 private function processResults($facilityResult, $insuranceResult)
108 $processingResult = new ProcessingResult();
109 $facilityOrgs = $this->getFacilityOrg($facilityResult->getData());
110 $insuranceOrgs = $this->getInsuranceOrg($insuranceResult->getData());
111 $OrgRecords = array_merge($facilityOrgs, $insuranceOrgs);
112 if (count($OrgRecords) > 0) {
113 $processingResult->setData($OrgRecords);
114 } else {
115 $processingResult->setValidationMessages(array_merge($insuranceResult->getValidationMessages(), $facilityResult->getValidationMessages()));
116 $processingResult->setInternalErrors(array_merge($insuranceResult->getInternalErrors(), $facilityResult->getInternalErrors()));
120 return $processingResult;
123 public function getPrimaryBusinessEntity()
125 return $this->facilityService->getPrimaryBusinessEntity();
128 public function search($search = array(), $isAndCondition = true)
130 $facilityResult = $this->facilityService->search($search, $isAndCondition);
131 $insuranceResult = $this->insuranceService->search($search, $isAndCondition);
132 return $this->processResults($facilityResult, $insuranceResult);
135 public function getAll($search = array(), $isAndCondition = true)
138 $facilityResult = $this->facilityService->getAll($search, $isAndCondition);
139 $insuranceResult = $this->insuranceService->getAll($search, $isAndCondition);
140 return $this->processResults($facilityResult, $insuranceResult);
144 * Inserts a new Organization Based on Type of Organization record.
146 * @param $data The facility fields (array) to insert.
147 * @return ProcessingResult which contains validation messages, internal error messages, and the data
148 * payload.
150 public function insert($data)
152 if ($data['orgType'] == 'facility') {
153 $data = $this->prepareFacilitydata($data);
154 return $this->facilityService->insert($data);
156 if ($data['orgType'] == 'insurance') {
157 $data = $this->prepareInsurancedata($data);
158 return $this->insuranceService->insert($data);
163 * Updates an existing Organization record based on type of Organization.
165 * @param $uuid - The uuid identifier in string format used for update.
166 * @param $data - The updated Organization data fields
167 * @return ProcessingResult which contains validation messages, internal error messages, and the data
168 * payload.
170 public function update($uuid, $data)
172 if (empty($data)) {
173 $processingResult = new ProcessingResult();
174 $processingResult->setValidationMessages("Invalid Data");
175 return $processingResult;
178 if ($data['orgType'] == 'facility') {
179 $data = $this->prepareFacilitydata($data);
180 return $this->facilityService->update($uuid, $data);
182 if ($data['orgType'] == 'insurance') {
183 $data = $this->prepareInsurancedata($data);
184 return $this->insuranceService->update($uuid, $data);
188 private function prepareFacilitydata($data)
190 //For now return the data -- make modification based on how the Organization data is structured
191 unset($data['orgType']);
192 return $data;
195 private function prepareInsurancedata($data)
197 //For now return the data -- make modification based on how the Organization data is structured
198 unset($data['orgType']);
199 return $data;