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']);
24 $patientResource = new $class($data);
25 } catch (\InvalidArgumentException
$e) {
27 operationOutcomeResourceService('fatal', 'invalid', $e->getMessage());
30 operationOutcomeResourceService('fatal', 'invalid', 'resourceType Not Found');
32 $diff = array_diff_key($data, (array) $patientResource);
34 return $this->operationOutcomeResourceService(
37 "Invalid content " . array_key_first($diff) . " Found",
43 public function operationOutcomeResourceService(
48 return UtilsService
::createOperationOutcomeResource($severity_value, $code_value, $details_value);