/** * @param $PortionData * @param $CompleteData * @return array|Exception */ public static function Insert($PortionData, $CompleteData) { try { // Validate first self::Validate($PortionData); $Entry = ['observation' => ['@attributes' => ['classCode' => 'OBS', 'moodCode' => 'EVN'], 'templateId' => Component::templateId('2.16.840.1.113883.10.20.24.3.90.2'), 'id' => Component::id(Utilities::UUIDv4()), 'code' => ['@attributes' => ['code' => 'ASSERTION', 'codeSystem' => '2.16.840.1.113883.5.4']], 'statusCode' => Component::statusCode('completed'), 'effectiveTime' => Component::time($PortionData['onsetDate'], $PortionData['resolutionDate'])]]; // SHOULD contain zero or more [0..*] Author Participation (NEW) if (count($PortionData['Author']) > 0) { foreach ($PortionData['Author'] as $Author) { $Entry['observation']['author'][] = LevelOther\authorParticipation::Insert($Author, $CompleteData); } } // SHALL contain at least one [1..*] entryRelationship // SHALL contain exactly one [1..1] Reaction Observation (V2) if (count($PortionData['ReactionObservation']) > 0) { foreach ($PortionData['ReactionObservation'] as $ReactionObservation) { $Entry['observation']['entryRelationship'][] = reactionObservation::Insert($ReactionObservation, $CompleteData); } } // SHALL contain at least one [1..*] entryRelationship // SHALL contain exactly one [1..1] Severity Observation (V2) if (count($PortionData['SeverityObservation']) > 0) { foreach ($PortionData['SeverityObservation'] as $SeverityObservation) { $Entry['observation']['entryRelationship'][] = severityObservation::Insert($SeverityObservation, $CompleteData); } } return $Entry; } catch (Exception $Error) { return $Error; } }
/** * @return array */ public static function Structure() { return ['TextObservation' => ['onsetDate' => 'SHALL contain exactly one [1..1] effectiveTime', 'resolutionDate' => 'SHALL contain exactly one [1..1] effectiveTime', LevelOther\authorParticipation::Structure(), reactionObservation::Structure(), severityObservation::Structure(), sopInstanceObservation::Structure(), quantityMeasurementObservation::Structure()]]; }
/** * @param $PortionData * @param $CompleteData * @return array|Exception */ public static function Insert($PortionData, $CompleteData) { try { // Validate first self::Validate($PortionData); $Entry = ['observation' => ['@attributes' => ['classCode' => 'OBS', 'moodCode' => 'EVN'], 'templateId' => Component::templateId('2.16.840.1.113883.10.20.22.4.9.2'), 'id' => Component::id(Utilities::UUIDv4()), 'code' => ['@attributes' => ['code' => 'ASSERTION', 'codeSystem' => '2.16.840.1.113883.5.4']], 'statusCode' => Component::statusCode('completed'), 'value' => ['@attributes' => ['xsi:type' => 'CD', 'code' => $PortionData['problemCode'], 'codeSystem' => Utilities::CodingSystemId($PortionData['problemCodeSystemName']), 'displayName' => $PortionData['problemDisplayName'], 'codeSystemName' => $PortionData['problemCodeSystemName']]]]]; // SHOULD contain zero or one [0..1] effectiveTime (CONF:7332). // The effectiveTime, if present, SHOULD contain zero or one [0..1] low (CONF:7333) // The effectiveTime, if present, SHOULD contain zero or one [0..1] high (CONF:7334). if (isset($PortionData['from_effectiveTime'])) { $fromEntry['observation']['effectiveTime'] = ['low' => ['@attributes' => ['value' => $PortionData['from_effectiveTime']]]]; } else { $toEntry['observation']['effectiveTime'] = []; } if (isset($PortionData['to_effectiveTime'])) { $toEntry['observation']['effectiveTime'] = ['high' => ['@attributes' => ['value' => $PortionData['to_effectiveTime']]]]; } else { $toEntry['observation']['effectiveTime'] = []; } $Entry['observation']['effectiveTime'] = array_merge_recursive($fromEntry, $toEntry); // MAY contain zero or one [0..1] entryRelationship // SHALL contain exactly one [1..1] Procedure Activity Procedure (V2) if (count($PortionData['ProcedureActivityProcedure']) > 0) { foreach ($PortionData['ProcedureActivityProcedure'] as $ProcedureActivityProcedure) { $Entry['observation']['entryRelationship'][] = ['@attributes' => ['typeCode' => 'RSON'], procedureActivityProcedure::Insert($ProcedureActivityProcedure, $CompleteData)]; } } // MAY contain zero or one [0..1] entryRelationship // SHALL contain exactly one [1..1] Medication Activity (V2) if (count($PortionData['MedicationActivity']) > 0) { foreach ($PortionData['MedicationActivity'] as $MedicationActivity) { $Entry['observation']['entryRelationship'][] = ['@attributes' => ['typeCode' => 'RSON'], medicationActivity::Insert($MedicationActivity, $CompleteData)]; } } // MAY contain zero or one [0..1] entryRelationship // SHALL contain exactly one [1..1] Severity Observation (V2) if (count($PortionData['SeverityObservation']) > 0) { foreach ($PortionData['SeverityObservation'] as $SeverityObservation) { $Entry['observation']['entryRelationship'][] = ['@attributes' => ['typeCode' => 'SUBJ'], severityObservation::Insert($SeverityObservation, $CompleteData)]; } } return $Entry; } catch (Exception $Error) { return $Error; } }