forked from openemr/openemr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInsuranceRestController.php
127 lines (114 loc) · 5.39 KB
/
InsuranceRestController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
/**
* InsuranceRestController
*
* @package OpenEMR
* @link http://www.open-emr.org
* @author Matthew Vita <[email protected]>
* @author Stephen Nielson <[email protected]>
* @copyright Copyright (c) 2018 Matthew Vita <[email protected]>
* @copyright Copyright (c) 2024 Care Management Solutions, Inc. <[email protected]>
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
*/
namespace OpenEMR\RestControllers;
use OpenEMR\Common\Uuid\UuidRegistry;
use OpenEMR\Services\InsuranceService;
use OpenEMR\Services\PatientService;
use OpenEMR\Services\Search\TokenSearchField;
use OpenEMR\Validators\ProcessingResult;
class InsuranceRestController
{
private $insuranceService;
public function __construct()
{
$this->insuranceService = new InsuranceService();
}
public function getAll($searchParams)
{
if (isset($searchParams['uuid'])) {
$searchParams['uuid'] = new TokenSearchField('uuid', $searchParams['uuid'], true);
}
if (isset($searchParams['puuid'])) {
$searchParams['puuid'] = new TokenSearchField('puuid', $searchParams['puuid'], true);
}
$serviceResult = $this->insuranceService->search($searchParams);
return RestControllerHelper::handleProcessingResult($serviceResult, null, 200);
}
public function getOne($insuranceUuid, $puuid)
{
$searchParams = [];
// we do this again cause we have to handle the 404 result here.
$searchParams['uuid'] = new TokenSearchField('uuid', $insuranceUuid, true);
$searchParams['puuid'] = new TokenSearchField('puuid', $puuid, true);
$processingResult = $this->insuranceService->search($searchParams);
if (!$processingResult->hasErrors() && count($processingResult->getData()) == 0) {
return RestControllerHelper::handleProcessingResult($processingResult, 404);
}
return RestControllerHelper::handleProcessingResult($processingResult, 200, false);
}
public function put($puuid, $insuranceUuid, $data)
{
$data['uuid'] = $insuranceUuid;
$data['type'] = $data['type'] ?? 'primary';
$processingResult = new ProcessingResult();
$validationMessages = ['puuid::INVALID_PUUID' => 'Patient uuid invalid'];
$processingResult->setValidationMessages($validationMessages);
if (!UuidRegistry::isValidStringUUID($puuid)) {
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
$puuid = UuidRegistry::uuidToBytes($puuid);
$patientService = new PatientService();
$pid = $patientService->getPidByUuid($puuid);
if (empty($pid)) {
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
$data['pid'] = $pid;
$updatedResults = $this->insuranceService->update($data);
return RestControllerHelper::handleProcessingResult($updatedResults, 200, false);
}
public function post($puuid, $data)
{
$data['type'] = $data['type'] ?? 'primary';
$processingResult = new ProcessingResult();
$validationMessages = ['puuid::INVALID_PUUID' => 'Patient uuid invalid'];
$processingResult->setValidationMessages($validationMessages);
if (!UuidRegistry::isValidStringUUID($puuid)) {
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
$puuid = UuidRegistry::uuidToBytes($puuid);
$patientService = new PatientService();
$pid = $patientService->getPidByUuid($puuid);
if (empty($pid)) {
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
$data['pid'] = $pid;
$insertedResult = $this->insuranceService->insert($data);
if (!$insertedResult->isValid()) {
return RestControllerHelper::handleProcessingResult($insertedResult, 200, false);
} else if (empty($insertedResult->hasData())) {
$insertedResult = new ProcessingResult();
$insertedResult->addInternalError('Insurance Policy record not found after insert');
return RestControllerHelper::handleProcessingResult($insertedResult, 200);
}
$insertedUuid = $insertedResult->getData()[0]['uuid'];
$processingResult = $this->insuranceService->getOne($insertedUuid);
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
public function operationSwapInsurance(string $puuid, string $type, string $insuranceUuid)
{
$processingResult = new ProcessingResult();
$validationMessages = ['puuid::INVALID_PUUID' => 'Patient uuid invalid'];
$processingResult->setValidationMessages($validationMessages);
if (!UuidRegistry::isValidStringUUID($puuid)) {
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
$puuid = UuidRegistry::uuidToBytes($puuid);
$patientService = new PatientService();
$pid = $patientService->getPidByUuid($puuid);
if (empty($pid)) {
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
$processingResult = $this->insuranceService->swapInsurance($pid, $type, $insuranceUuid);
return RestControllerHelper::handleProcessingResult($processingResult, 200);
}
}