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', false, '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', false, $e->getMessage());
30 operationOutcomeResourceService('fatal', 'invalid', false, 'resourceType Not Found');
32 $diff = array_diff_key($data, (array) $patientResource);
34 return $this->operationOutcomeResourceService(
37 "Invalid content " . array_key_first($diff) . " Found",
44 public function operationOutcomeResourceService(
49 $diagnostics_value = '',
52 $resource = new FHIROperationOutcome();
53 $issue = new FHIROperationOutcomeIssue();
54 $severity = new FHIRIssueSeverity();
55 $severity->setValue($severity_value);
56 $issue->setSeverity($severity);
57 $code = new FHIRIssueType();
58 $code->setValue($code_value);
59 $issue->setCode($code);
61 $details = new FHIRCodeableConcept();
62 $details->setText($details_value);
63 $issue->setDetails($details);
65 if ($diagnostics_value) {
66 $diagnostics = new FHIRString();
67 $diagnostics->setValue($diagnostics_value);
68 $issue->setDiagnostics($diagnostics);
70 if ($expression_value) {
71 $expression = new FHIRCodeableConcept();
72 $expression->setText($expression_value);
73 $issue->setExpression($expression);
75 $resource->addIssue($issue);
77 return json_encode($resource);