fix: x12837 billing 5 or 9 digit zip check (#7760)
[openemr.git] / src / Services / FHIR / FhirValidationService.php
blobbdc79dec29f2a870b6b921dfc3a9ccb80008f282
1 <?php
3 namespace OpenEMR\Services\FHIR;
5 use OpenEMR\Services\FhirOperationOutcomeResourceService;
6 use OpenEMR\FHIR\R4\FHIRDomainResource\FHIROperationOutcome;
7 use OpenEMR\FHIR\R4\FHIRDomainResource\FHIRPatient;
8 use OpenEMR\FHIR\R4\FHIRResource\FHIROperationOutcome\FHIROperationOutcomeIssue;
9 use OpenEMR\FHIR\R4\FHIRElement\FHIRIssueSeverity;
10 use OpenEMR\FHIR\R4\FHIRElement\FHIRIssueType;
11 use OpenEMR\FHIR\R4\FHIRElement\FHIRCodeableConcept;
13 class FhirValidationService
15 public function validate($data)
17 if (!array_key_exists('resourceType', $data)) {
18 return $this->operationOutcomeResourceService('error', 'invalid', 'resourceType Not Found');
20 if ($data['resourceType']) {
21 $class = 'OpenEMR\FHIR\R4\FHIRDomainResource\FHIR' . $data['resourceType'];
22 unset($data['resourceType']);
23 try {
24 $patientResource = new $class($data);
25 } catch (\InvalidArgumentException $e) {
26 return $this->
27 operationOutcomeResourceService('fatal', 'invalid', $e->getMessage());
28 } catch (\Error $e) {
29 return $this->
30 operationOutcomeResourceService('fatal', 'invalid', 'resourceType Not Found');
32 $diff = array_diff_key($data, (array) $patientResource);
33 if ($diff) {
34 return $this->operationOutcomeResourceService(
35 'error',
36 'invalid',
37 "Invalid content " . array_key_first($diff) . " Found",
43 public function operationOutcomeResourceService(
44 $severity_value,
45 $code_value,
46 $details_value
47 ) {
48 return UtilsService::createOperationOutcomeResource($severity_value, $code_value, $details_value);