/interface/modules/zend_modules/module/Carecoordination/src/Carecoordination/Model/EncounterccdadispatchTable.php
PHP | 2574 lines | 2004 code | 262 blank | 308 comment | 132 complexity | dc025a64b99cd19d539b4f84e70f047b MD5 | raw file
Possible License(s): Apache-2.0, AGPL-1.0, GPL-2.0, LGPL-3.0, BSD-3-Clause, Unlicense, MPL-2.0, GPL-3.0, LGPL-2.1
Large files files are truncated, but you can click here to view the full file
- <?php
- /**
- * interface/modules/zend_modules/module/Carecoordination/src/Carecoordination/Model/EncounterccdadispatchTable.php
- *
- * @package OpenEMR
- * @link https://www.open-emr.org
- * @author Vinish K <vinish@zhservices.com>
- * @author Riju K P <rijukp@zhservices.com>
- * @copyright Copyright (c) 2014 Z&H Consultancy Services Private Limited <sam@zhservices.com>
- * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
- */
- namespace Carecoordination\Model;
- use Application\Listener\Listener;
- use Application\Model\ApplicationTable;
- use Carecoordination\Model\CarecoordinationTable;
- use CouchDB;
- use Laminas\Db\Adapter\Driver\Pdo\Result;
- use Laminas\Db\TableGateway\AbstractTableGateway;
- use Matrix\Exception;
- use OpenEMR\Common\Crypto\CryptoGen;
- use OpenEMR\Common\Uuid\UuidRegistry;
- require_once(__DIR__ . "/../../../../../../../../custom/code_types.inc.php");
- require_once(__DIR__ . "/../../../../../../../forms/vitals/report.php");
- class EncounterccdadispatchTable extends AbstractTableGateway
- {
- public function __construct()
- {
- }
- /*Fetch Patient data from EMR
- * @param $pid
- * @param $encounter
- * @return $patient_data Patient Data in XML format
- */
- public function getPatientdata($pid, $encounter)
- {
- $query = "select patient_data.*, l1.notes AS race_code, l1.title as race_title, l2.notes AS ethnicity_code, l2.title as ethnicity_title, l3.title as religion, l3.notes as religion_code, l4.notes as language_code, l4.title as language_title
- from patient_data
- left join list_options as l1 on l1.list_id=? AND l1.option_id=race
- left join list_options as l2 on l2.list_id=? AND l2.option_id=ethnicity
- left join list_options AS l3 ON l3.list_id=? AND l3.option_id=religion
- left join list_options AS l4 ON l4.list_id=? AND l4.option_id=language
- where pid=?";
- $appTable = new ApplicationTable();
- $row = $appTable->zQuery($query, array('race', 'ethnicity', 'religious_affiliation', 'language', $pid));
- foreach ($row as $result) {
- $patient_data = "<patient>
- <id>" . xmlEscape($result['pid']) . "</id>
- <encounter>" . xmlEscape($encounter) . "</encounter>
- <prefix>" . xmlEscape($result['title']) . "</prefix>
- <fname>" . xmlEscape($result['fname']) . "</fname>
- <mname>" . xmlEscape($result['mname']) . "</mname>
- <lname>" . xmlEscape($result['lname']) . "</lname>
- <suffix>" . xmlEscape($result['suffix']) . "</suffix>
- <birth_fname>" . xmlEscape($result['birth_fname']) . "</birth_fname>
- <birth_mname>" . xmlEscape($result['birth_mname']) . "</birth_mname>
- <birth_lname>" . xmlEscape($result['birth_lname']) . "</birth_lname>
- <street>" . xmlEscape($result['street']) . "</street>
- <city>" . xmlEscape($result['city']) . "</city>
- <state>" . xmlEscape($result['state']) . "</state>
- <postalCode>" . xmlEscape($result['postal_code']) . "</postalCode>
- <country>" . xmlEscape($result['country_code']) . "</country>
- <ssn>" . xmlEscape($result['ss'] ?: '') . "</ssn>
- <dob>" . xmlEscape(str_replace('-', '', $result['DOB'])) . "</dob>
- <gender>" . xmlEscape($result['sex']) . "</gender>
- <gender_code>" . xmlEscape(strtoupper(substr($result['sex'], 0, 1))) . "</gender_code>
- <status>" . xmlEscape($result['status'] ?: "") . "</status>
- <status_code>" . xmlEscape($result['status'] ? strtoupper(substr($result['status'], 0, 1)) : 0) . "</status_code>
- <phone_home>" . xmlEscape(($result['phone_home'] ?: '')) . "</phone_home>
- <phone_mobile>" . xmlEscape(($result['phone_home'] ? $result['phone_cell'] : '')) . "</phone_mobile>
- <email>" . xmlEscape(($result['email'] ?: '')) . "</email>
- <religion>" . xmlEscape(Listener::z_xlt($result['religion'] ?: "")) . "</religion>
- <religion_code>" . xmlEscape($result['religion_code'] ?: '') . "</religion_code>
- <race>" . xmlEscape(Listener::z_xlt($result['race_title'])) . "</race>
- <race_code>" . xmlEscape($result['race_code']) . "</race_code>
- <ethnicity>" . xmlEscape(Listener::z_xlt($result['ethnicity_title'])) . "</ethnicity>
- <ethnicity_code>" . xmlEscape($result['ethnicity_code']) . "</ethnicity_code>
- <language>" . xmlEscape(Listener::z_xlt($result['language_title'])) . "</language>
- <language_code>" . xmlEscape($result['language_code']) . "</language_code>
- </patient>
- <guardian>
- <fname>" . xmlEscape($result['']) . "</fname>
- <lname>" . xmlEscape($result['']) . "</lname>
- <code>" . xmlEscape($result['']) . "</code>
- <relation>" . xmlEscape($result['guardianrelationship']) . "</relation>
- <display_name>" . xmlEscape($result['guardiansname']) . "</display_name>
- <street>" . xmlEscape($result['guardianaddress']) . "</street>
- <city>" . xmlEscape($result['guardiancity']) . "</city>
- <state>" . xmlEscape($result['guardianstate']) . "</state>
- <postalCode>" . xmlEscape($result['guardianpostalcode']) . "</postalCode>
- <country>" . xmlEscape($result['guardiancountry']) . "</country>
- <telecom>" . xmlEscape($result['guardianphone']) . "</telecom>
- </guardian>";
- }
- return $patient_data;
- }
- public function getProviderDetails($pid, $encounter)
- {
- $provider_details = '';
- if (!$encounter) {
- $query_enc = "SELECT encounter FROM form_encounter WHERE pid=? ORDER BY date DESC LIMIT 1";
- $appTable = new ApplicationTable();
- $res_enc = $appTable->zQuery($query_enc, array($pid));
- foreach ($res_enc as $row_enc) {
- $encounter = $row_enc['encounter'];
- }
- }
- $query = "SELECT * FROM form_encounter as fe
- JOIN users AS u ON u.id = fe.provider_id
- JOIN facility AS f ON f.id = u.facility_id
- WHERE fe.pid = ? AND fe.encounter = ?";
- $appTable = new ApplicationTable();
- $row = $appTable->zQuery($query, array($pid, $encounter));
- foreach ($row as $result) {
- $provider_details = "<encounter_provider>
- <facility_id>" . xmlEscape($result['id']) . "</facility_id>
- <facility_npi>" . xmlEscape($result['facility_npi']) . "</facility_npi>
- <facility_oid>" . xmlEscape($result['oid']) . "</facility_oid>
- <facility_name>" . xmlEscape($result['name']) . "</facility_name>
- <facility_phone>" . xmlEscape(($result['phone'] ? $result['phone'] : 0)) . "</facility_phone>
- <facility_fax>" . xmlEscape($result['fax']) . "</facility_fax>
- <facility_street>" . xmlEscape($result['street']) . "</facility_street>
- <facility_city>" . xmlEscape($result['city']) . "</facility_city>
- <facility_state>" . xmlEscape($result['state']) . "</facility_state>
- <facility_postal_code>" . xmlEscape($result['postal_code']) . "</facility_postal_code>
- <facility_country_code>" . xmlEscape($result['country_code']) . "</facility_country_code>
- </encounter_provider>
- ";
- }
- return $provider_details;
- }
- public function getAuthor($pid, $encounter)
- {
- $author = '';
- $details = $this->getDetails('hie_author_id');
- $author = "
- <author>
- <streetAddressLine>" . xmlEscape($details['street']) . "</streetAddressLine>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <postalCode>" . xmlEscape($details['zip']) . "</postalCode>
- <country>" . xmlEscape($details['']) . "</country>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- <npi>" . xmlEscape($details['npi']) . "</npi>
- </author>";
- return $author;
- }
- public function getDataEnterer($pid, $encounter)
- {
- $data_enterer = '';
- $details = $this->getDetails('hie_data_enterer_id');
- $data_enterer = "
- <data_enterer>
- <streetAddressLine>" . xmlEscape($details['street']) . "</streetAddressLine>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <postalCode>" . xmlEscape($details['zip']) . "</postalCode>
- <country>" . xmlEscape($details['']) . "</country>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- </data_enterer>";
- return $data_enterer;
- }
- public function getInformant($pid, $encounter)
- {
- $informant = '';
- $details = $this->getDetails('hie_informant_id');
- $personal_informant = $this->getDetails('hie_personal_informant_id');
- $informant = "<informer>
- <streetAddressLine>" . xmlEscape($details['street']) . "</streetAddressLine>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <postalCode>" . xmlEscape($details['zip']) . "</postalCode>
- <country>" . xmlEscape($details['']) . "</country>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- <personal_informant>" . xmlEscape($this->getSettings('Carecoordination', 'hie_personal_informant_id')) . "</personal_informant>
- </informer>";
- return $informant;
- }
- public function getCustodian($pid, $encounter)
- {
- $custodian = '';
- $details = $this->getDetails('hie_custodian_id');
- $custodian = "<custodian>
- <streetAddressLine>" . xmlEscape($details['street']) . "</streetAddressLine>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <postalCode>" . xmlEscape($details['zip']) . "</postalCode>
- <country>" . xmlEscape($details['']) . "</country>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <name>" . xmlEscape($details['organization']) . "</name>
- <organization>" . xmlEscape($details['organization']) . "</organization>
- </custodian>";
- return $custodian;
- }
- public function getInformationRecipient($pid, $encounter, $recipients, $params)
- {
- $information_recipient = '';
- $field_name = array();
- $details = $this->getDetails('hie_recipient_id');
- $appTable = new ApplicationTable();
- if ($recipients == 'hie') {
- $details['fname'] = 'MyHealth';
- $details['lname'] = '';
- $details['organization'] = '';
- } elseif ($recipients == 'emr_direct') {
- $query = "select fname, lname, organization, street, city, state, zip, phonew1 from users where email = ?";
- $field_name[] = $params;
- } elseif ($recipients == 'patient') {
- $query = "select fname, lname from patient_data WHERE pid = ?";
- $field_name[] = $params;
- } else {
- if (!$params) {
- $params = $_SESSION['authUserID'];
- }
- $query = "select fname, lname, organization, street, city, state, zip, phonew1 from users where id = ?";
- $field_name[] = $params;
- }
- if ($recipients != 'hie') {
- $res = $appTable->zQuery($query, $field_name);
- $result = $res->current();
- $details['fname'] = $result['fname'];
- $details['lname'] = $result['lname'];
- $details['organization'] = $result['organization'];
- $details['street'] = $result['street'];
- $details['city'] = $result['city'];
- $details['state'] = $result['state'];
- $details['zip'] = $result['zip'];
- $details['phonew1'] = $result['phonew1'];
- }
- $information_recipient = "<information_recipient>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- <organization>" . xmlEscape($details['organization']) . "</organization>
- <street>" . xmlEscape($details['street']) . "</street>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <zip>" . xmlEscape($details['zip']) . "</zip>
- <phonew1>" . xmlEscape($details['phonew1']) . "</phonew1>
- </information_recipient>";
- return $information_recipient;
- }
- public function getLegalAuthenticator($pid, $encounter)
- {
- $legal_authenticator = '';
- $details = $this->getDetails('hie_legal_authenticator_id');
- $legal_authenticator = "<legal_authenticator>
- <streetAddressLine>" . xmlEscape($details['street']) . "</streetAddressLine>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <postalCode>" . xmlEscape($details['zip']) . "</postalCode>
- <country>" . xmlEscape($details['']) . "</country>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- </legal_authenticator>";
- return $legal_authenticator;
- }
- public function getAuthenticator($pid, $encounter)
- {
- $authenticator = '';
- $details = $this->getDetails('hie_authenticator_id');
- $authenticator = "<authenticator>
- <streetAddressLine>" . xmlEscape($details['street']) . "</streetAddressLine>
- <city>" . xmlEscape($details['city']) . "</city>
- <state>" . xmlEscape($details['state']) . "</state>
- <postalCode>" . xmlEscape($details['zip']) . "</postalCode>
- <country>" . xmlEscape($details['']) . "</country>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- </authenticator>";
- return $authenticator;
- }
- public function getPrimaryCareProvider($pid, $encounter)
- {
- // primary from demo
- $getprovider = $this->getProviderId($pid);
- if (!empty($getprovider)) { // from patient_data
- $details = $this->getUserDetails($getprovider);
- } else { // get from CCM setup
- $details = $this->getDetails('hie_primary_care_provider_id');
- }
- // Note for NPI: Many times a care team member may not have an NPI so instead of
- // an NPI OID use facility/document unique OID with user table reference for extension.
- $get_care_team_provider = explode("|", $this->getCareTeamProviderId($pid));
- $primary_care_provider = "
- <primary_care_provider>
- <provider>
- <prefix>" . xmlEscape($details['title']) . "</prefix>
- <fname>" . xmlEscape($details['fname']) . "</fname>
- <lname>" . xmlEscape($details['lname']) . "</lname>
- <speciality>" . xmlEscape($details['specialty']) . "</speciality>
- <organization>" . xmlEscape($details['organization']) . "</organization>
- <telecom>" . xmlEscape(($details['phonew1'] ? $details['phonew1'] : 0)) . "</telecom>
- <addr>" . xmlEscape($details['']) . "</addr>
- <table_id>" . xmlEscape("provider-" . $getprovider) . "</table_id>
- <npi>" . xmlEscape($details['npi'] ?: '') . "</npi>
- <physician_type>" . xmlEscape($details['physician_type']) . "</physician_type>
- <physician_type_code>" . xmlEscape($details['physician_type_code']) . "</physician_type_code>
- <taxonomy>" . xmlEscape($details['taxonomy']) . "</taxonomy>
- <taxonomy_description>" . xmlEscape($details['taxonomy_desc']) . "</taxonomy_description>
- </provider>
- </primary_care_provider>";
- $care_team_provider = "<care_team>";
- foreach ($get_care_team_provider as $team_member) {
- if ((int)$getprovider === (int)$team_member) {
- // primary should be a part of care team but just in case
- // I've kept primary separate. So either way, primary gets included.
- // in this case, we don't want to duplicate the provider.
- continue;
- }
- $details2 = $this->getUserDetails($team_member);
- if (empty($details2)) {
- continue;
- }
- $care_team_provider .= "<provider>
- <prefix>" . xmlEscape($details2['title']) . "</prefix>
- <fname>" . xmlEscape($details2['fname']) . "</fname>
- <lname>" . xmlEscape($details2['lname']) . "</lname>
- <speciality>" . xmlEscape($details2['specialty']) . "</speciality>
- <organization>" . xmlEscape($details2['organization']) . "</organization>
- <telecom>" . xmlEscape(($details2['phonew1'] ?: '')) . "</telecom>
- <addr>" . xmlEscape($details2['']) . "</addr>
- <table_id>" . xmlEscape("provider-" . $team_member) . "</table_id>
- <npi>" . xmlEscape($details2['npi']) . "</npi>
- <physician_type>" . xmlEscape($details2['physician_type']) . "</physician_type>
- <physician_type_code>" . xmlEscape($details2['physician_type_code']) . "</physician_type_code>
- <taxonomy>" . xmlEscape($details2['taxonomy']) . "</taxonomy>
- <taxonomy_description>" . xmlEscape($details2['taxonomy_desc']) . "</taxonomy_description>
- </provider>
- ";
- }
- $care_team_provider .= "</care_team>
- ";
- return $primary_care_provider . $care_team_provider;
- }
- /*
- #******************************************************#
- # CONTINUITY OF CARE #
- #******************************************************#
- */
- public function getAllergies($pid, $encounter)
- {
- $allergies = '';
- $query = "SELECT l.id, l.title, l.begdate, l.enddate, lo.title AS observation,
- SUBSTRING(lo.codes, LOCATE(':',lo.codes)+1, LENGTH(lo.codes)) AS observation_code,
- SUBSTRING(l.`diagnosis`,1,LOCATE(':',l.diagnosis)-1) AS code_type_real,
- l.reaction, l.diagnosis, l.diagnosis AS code
- FROM lists AS l
- LEFT JOIN list_options AS lo ON lo.list_id = ? AND lo.option_id = l.severity_al
- WHERE l.type = ? AND l.pid = ?";
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, array('severity_ccda', 'allergy', $pid));
- $allergies = "<allergies>";
- foreach ($res as $row) {
- $split_codes = explode(';', $row['code']);
- foreach ($split_codes as $key => $single_code) {
- $code = $code_text = $code_rx = $code_text_rx = $code_snomed = $code_text_snomed = $reaction_text = $reaction_code = '';
- $get_code_details = explode(':', $single_code);
- if ($get_code_details[0] == 'RXNORM' || $get_code_details[0] == 'RXCUI') {
- $code_rx = $get_code_details[1];
- $code_text_rx = lookup_code_descriptions($single_code);
- } elseif ($get_code_details[0] == 'SNOMED' || $get_code_details[0] == 'SNOMED-CT') {
- $code_snomed = $get_code_details[1];
- $code_text_snomed = lookup_code_descriptions($row['code']);
- } else {
- $code = $get_code_details[1];
- $code_text = lookup_code_descriptions($single_code);
- }
- $active = $status_table = '';
- if ($row['enddate']) {
- $active = 'completed';
- $allergy_status = 'completed';
- $status_table = 'Resolved';
- $status_code = '73425007';
- } else {
- $active = 'completed';
- $allergy_status = 'active';
- $status_table = 'Active';
- $status_code = '55561003';
- }
- if ($row['reaction']) {
- $reaction_text = (new CarecoordinationTable())->getListTitle($row['reaction'], 'reaction', '');
- $reaction_code = (new CarecoordinationTable())->getCodes($row['reaction'], 'reaction');
- $reaction_code = explode(':', $reaction_code);
- }
- $allergies .= "<allergy>
- <id>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['id'] . $single_code)) . "</id>
- <sha_id>" . xmlEscape("36e3e930-7b14-11db-9fe1-0800200c9a66") . "</sha_id>
- <title>" . xmlEscape($row['title']) . ($single_code ? " [" . xmlEscape($single_code) . "]" : '') . "</title>
- <diagnosis_code>" . xmlEscape(($code ? $code : 0)) . "</diagnosis_code>
- <diagnosis>" . xmlEscape(($code_text ? Listener::z_xlt($code_text) : "")) . "</diagnosis>
- <rxnorm_code>" . xmlEscape(($code_rx ? $code_rx : 0)) . "</rxnorm_code>
- <rxnorm_code_text>" . xmlEscape(($code_text_rx ? Listener::z_xlt($code_text_rx) : "")) . "</rxnorm_code_text>
- <snomed_code>" . xmlEscape(($code_snomed ? $code_snomed : 0)) . "</snomed_code>
- <snomed_code_text>" . xmlEscape(($code_text_snomed ? Listener::z_xlt($code_text_snomed) : "")) . "</snomed_code_text>
- <status_table>" . ($status_table ? xmlEscape($status_table) : "") . "</status_table>
- <status>" . ($active ? xmlEscape($active) : "") . "</status>
- <allergy_status>" . ($allergy_status ? xmlEscape($allergy_status) : "") . "</allergy_status>
- <status_code>" . ($status_code ? xmlEscape($status_code) : 0) . "</status_code>
- <outcome>" . xmlEscape(($row['observation'] ? Listener::z_xlt($row['observation']) : "")) . "</outcome>
- <outcome_code>" . xmlEscape(($row['observation_code'] ? $row['observation_code'] : 0)) . "</outcome_code>
- <startdate>" . xmlEscape($row['begdate'] ? preg_replace('/-/', '', $row['begdate']) : "00000000") . "</startdate>
- <enddate>" . xmlEscape($row['enddate'] ? preg_replace('/-/', '', $row['enddate']) : "00000000") . "</enddate>
- <reaction_text>" . xmlEscape($reaction_text ? Listener::z_xlt($reaction_text) : "") . "</reaction_text>
- <reaction_code>" . xmlEscape($reaction_code[1] ?: '') . "</reaction_code>
- <reaction_code_type>" . xmlEscape(str_replace('-', ' ', $reaction_code[0]) ?: '') . "</reaction_code_type>
- <RxNormCode>" . xmlEscape($code_rx) . "</RxNormCode>
- <RxNormCode_text>" . xmlEscape(!empty($code_text_rx) ? $code_text_rx : $row['title']) . "</RxNormCode_text>
- </allergy>";
- }
- }
- $allergies .= "</allergies>";
- return $allergies;
- }
- public function getMedications($pid, $encounter)
- {
- $medications = '';
- $query = "select l.id, l.date_added, l.start_date, l.drug, l.dosage, l.quantity, l.size, l.substitute, l.drug_info_erx, l.active, SUBSTRING(l3.codes, LOCATE(':',l3.codes)+1, LENGTH(l3.codes)) AS route_code,
- l.rxnorm_drugcode, l1.title as unit, l1.codes as unit_code,l2.title as form,SUBSTRING(l2.codes, LOCATE(':',l2.codes)+1, LENGTH(l2.codes)) AS form_code, l3.title as route, l4.title as `interval`,
- u.title, u.fname, u.lname, u.mname, u.npi, u.street, u.streetb, u.city, u.state, u.zip, u.phonew1, l.note
- from prescriptions as l
- left join list_options as l1 on l1.option_id=unit AND l1.list_id = ?
- left join list_options as l2 on l2.option_id=form AND l2.list_id = ?
- left join list_options as l3 on l3.option_id=route AND l3.list_id = ?
- left join list_options as l4 on l4.option_id=`interval` AND l4.list_id = ?
- left join users as u on u.id = l.provider_id
- where l.patient_id = ? and l.active = 1";
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, array('drug_units', 'drug_form', 'drug_route', 'drug_interval', $pid));
- $medications = "<medications>";
- foreach ($res as $row) {
- if (!$row['rxnorm_drugcode']) {
- $row['rxnorm_drugcode'] = $this->generate_code($row['drug']);
- }
- $unit = $str = $active = '';
- if ($row['size'] > 0) {
- $unit = $row['size'] . " " . Listener::z_xlt($row['unit']) . " ";
- }
- $str = $unit . " " . Listener::z_xlt($row['route']) . " " . $row['dosage'] . " " . Listener::z_xlt($row['form'] . " " . $row['interval']);
- if ($row['active'] > 0) {
- $active = 'active';
- } else {
- $active = 'completed';
- }
- if ($row['start_date']) {
- $start_date = str_replace('-', '', $row['start_date']);
- $start_date_formatted = \Application\Model\ApplicationTable::fixDate($row['start_date'], $GLOBALS['date_display_format'], 'yyyy-mm-dd');
- ;
- }
- $medications .= "<medication>
- <id>" . xmlEscape($row['id']) . "</id>
- <extension>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['id'])) . "</extension>
- <sha_extension>" . xmlEscape("cdbd33f0-6cde-11db-9fe1-0800200c9a66") . "</sha_extension>
- <performer_name>" . xmlEscape($row['fname'] . " " . $row['mname'] . " " . $row['lname']) . "</performer_name>
- <fname>" . xmlEscape($row['fname']) . "</fname>
- <mname>" . xmlEscape($row['mname']) . "</mname>
- <lname>" . xmlEscape($row['lname']) . "</lname>
- <title>" . xmlEscape($row['title']) . "</title>
- <npi>" . xmlEscape($row['npi']) . "</npi>
- <address>" . xmlEscape($row['street']) . "</address>
- <city>" . xmlEscape($row['city']) . "</city>
- <state>" . xmlEscape($row['state']) . "</state>
- <zip>" . xmlEscape($row['zip']) . "</zip>
- <work_phone>" . xmlEscape($row['phonew1']) . "</work_phone>
- <drug>" . xmlEscape($row['drug']) . "</drug>
- <direction>" . xmlEscape($str) . "</direction>
- <dosage>" . xmlEscape($row['dosage']) . "</dosage>
- <size>" . xmlEscape(($row['size'] ? $row['size'] : 0)) . "</size>
- <unit>" . xmlEscape(($row['unit'] ? preg_replace('/\s*/', '', Listener::z_xlt($row['unit'])) : '')) . "</unit>
- <unit_code>" . xmlEscape(($row['unit_code'] ? $row['unit_code'] : 0)) . "</unit_code>
- <form>" . xmlEscape(Listener::z_xlt($row['form'])) . "</form>
- <form_code>" . xmlEscape(Listener::z_xlt($row['form_code'])) . "</form_code>
- <route_code>" . xmlEscape($row['route_code'] ?: $row['route']) . "</route_code>
- <route>" . xmlEscape($row['route']) . "</route>
- <interval>" . xmlEscape(Listener::z_xlt($row['interval'])) . "</interval>
- <start_date>" . xmlEscape($start_date) . "</start_date>
- <start_date_formatted>" . xmlEscape($row['start_date']) . "</start_date_formatted>
- <end_date>" . xmlEscape('') . "</end_date>
- <status>" . xmlEscape($active) . "</status>
- <indications>" . xmlEscape(($row['pres_erx_diagnosis_name'] ? $row['pres_erx_diagnosis_name'] : "")) . "</indications>
- <indications_code>" . xmlEscape(($row['pres_erx_diagnosis'] ? $row['pres_erx_diagnosis'] : 0)) . "</indications_code>
- <instructions>" . xmlEscape($row['note']) . "</instructions>
- <rxnorm>" . xmlEscape($row['rxnorm_drugcode']) . "</rxnorm>
- <provider_id></provider_id>
- <provider_name></provider_name>
- </medication>";
- }
- $medications .= "</medications>";
- return $medications;
- }
- public function getProblemList($pid, $encounter)
- {
- UuidRegistry::createMissingUuidsForTables(['lists']);
- $problem_lists = '';
- $query = "select l.*, lo.title as observation, lo.codes as observation_code, l.diagnosis AS code
- from lists AS l
- left join list_options as lo on lo.option_id = l.outcome AND lo.list_id = ?
- where l.type = ? and l.pid = ? AND l.outcome != ?"; // patched out /* AND l.id NOT IN(SELECT list_id FROM issue_encounter WHERE pid = ?)*/
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, array('outcome', 'medical_problem', $pid, 1));
- $problem_lists .= '<problem_lists>';
- foreach ($res as $row) {
- $row['uuid'] = UuidRegistry::uuidToString($row['uuid']);
- $split_codes = explode(';', $row['code']);
- foreach ($split_codes as $key => $single_code) {
- $get_code_details = explode(':', $single_code);
- $code_type = $get_code_details[0];
- $code_type = ($code_type == 'SNOMED' || $code_type == 'SNOMED-CT') ? "SNOMED CT" : "ICD-10-CM";
- $code = $get_code_details[1];
- $code_text = lookup_code_descriptions($single_code);
- $age = $this->getAge($pid, $row['begdate']);
- $start_date = str_replace('-', '', $row['begdate']);
- $end_date = str_replace('-', '', $row['enddate']);
- $status = $status_table = '';
- $start_date = $start_date ?: '0';
- $end_date = $end_date ?: '0';
- //Active - 55561003 Completed - 73425007
- if ($end_date) {
- $status = 'completed';
- $status_table = 'Resolved';
- $status_code = '73425007';
- } else {
- $status = 'active';
- $status_table = 'Active';
- $status_code = '55561003';
- }
- $observation = $row['observation'];
- $observation_code = explode(':', $row['observation_code']);
- $observation_code = $observation_code[1];
- $problem_lists .= "<problem>
- <problem_id>" . ($code ? xmlEscape($row['$id']) : '') . "</problem_id>
- <extension>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['id'])) . "</extension>
- <sha_extension>" . xmlEscape($row['uuid']) . "</sha_extension>
- <title>" . xmlEscape($row['title']) . ($single_code ? " [" . xmlEscape($single_code) . "]" : '') . "</title>
- <code>" . ($code ? xmlEscape($code) : '') . "</code>
- <code_type>" . ($code ? xmlEscape($code_type) : '') . "</code_type>
- <code_text>" . xmlEscape(($code_text ?: '')) . "</code_text>
- <age>" . xmlEscape($age) . "</age>
- <start_date_table>" . xmlEscape($row['begdate']) . "</start_date_table>
- <start_date>" . xmlEscape($start_date) . "</start_date>
- <end_date>" . xmlEscape($end_date) . "</end_date>
- <status>" . xmlEscape($status) . "</status>
- <status_table>" . xmlEscape($status_table) . "</status_table>
- <status_code>" . xmlEscape($status_code) . "</status_code>
- <observation>" . xmlEscape(($observation ? Listener::z_xlt($observation) : "")) . "</observation>
- <observation_code>" . xmlEscape(($observation_code ?: '')) . "</observation_code>
- <diagnosis>" . xmlEscape($code ?: '') . "</diagnosis>
- </problem>";
- }
- }
- $problem_lists .= '</problem_lists>';
- return $problem_lists;
- }
- public function getMedicalDeviceList($pid, $encounter)
- {
- $medical_devices = '';
- $query = "select l.*, lo.title as observation, lo.codes as observation_code, l.diagnosis AS code
- from lists AS l
- left join list_options as lo on lo.option_id = l.outcome AND lo.list_id = ?
- where l.type = ? and l.pid = ? AND l.outcome != ? AND l.id NOT IN(SELECT list_id FROM issue_encounter WHERE pid = ?)";
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, array('outcome', 'medical_device', $pid, 1, $pid));
- $medical_devices .= '<medical_devices>';
- foreach ($res as $row) {
- $split_codes = explode(';', $row['code']);
- foreach ($split_codes as $key => $single_code) {
- $get_code_details = explode(':', $single_code);
- $code_type = $get_code_details[0];
- $code_type = ($code_type == 'SNOMED' || $code_type == 'SNOMED-CT') ? "SNOMED CT" : "ICD-10-CM";
- $code = $get_code_details[1];
- $code_text = lookup_code_descriptions($single_code);
- $start_date = str_replace('-', '', $row['begdate']);
- $end_date = str_replace('-', '', $row['enddate']);
- $status = $status_table = '';
- $start_date = $start_date ?: '';
- $end_date = $end_date ?: '';
- //Active - 55561003 Completed - 73425007
- if ($end_date) {
- $status = 'completed';
- $status_table = 'Resolved';
- $status_code = '73425007';
- } else {
- $status = 'active';
- $status_table = 'Active';
- $status_code = '55561003';
- }
- $observation = $row['observation'];
- $observation_code = explode(':', $row['observation_code']);
- $observation_code = $observation_code[1];
- $medical_devices .= "<device>
- <extension>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['id'])) . "</extension>
- <sha_extension>" . xmlEscape($this->formatUid($_SESSION['site_id'] . $row['udi'])) . "</sha_extension>
- <title>" . xmlEscape($row['title']) . ($single_code ? " [" . xmlEscape($single_code) . "]" : '') . "</title>
- <code>" . ($code ? xmlEscape($code) : '') . "</code>
- <code_type>" . ($code ? xmlEscape($code_type) : '') . "</code_type>
- <code_text>" . xmlEscape(($code_text ?: '')) . "</code_text>
- <udi>" . xmlEscape($row['udi']) . "</udi>
- <start_date_table>" . xmlEscape($row['begdate']) . "</start_date_table>
- <start_date>" . xmlEscape($start_date) . "</start_date>
- <end_date>" . xmlEscape($end_date) . "</end_date>
- <status>" . xmlEscape($status) . "</status>
- <status_table>" . xmlEscape($status_table) . "</status_table>
- <status_code>" . xmlEscape($status_code) . "</status_code>
- <observation>" . xmlEscape(($observation ? Listener::z_xlt($observation) : "")) . "</observation>
- <observation_code>" . xmlEscape(($observation_code ?: '')) . "</observation_code>
- <diagnosis>" . xmlEscape($code ?: '') . "</diagnosis>
- </device>";
- }
- }
- $medical_devices .= '</medical_devices>';
- return $medical_devices;
- }
- public function getImmunization($pid, $encounter)
- {
- $immunizations = '';
- $query = "SELECT im.*, cd.code_text, DATE(administered_date) AS administered_date,
- DATE_FORMAT(administered_date,'%Y%m%d') AS administered_formatted, lo.title as route_of_administration,
- u.title, u.fname, u.mname, u.lname, u.npi, u.street, u.streetb, u.city, u.state, u.zip, u.phonew1,
- f.name, f.phone, SUBSTRING(lo.codes, LOCATE(':',lo.codes)+1, LENGTH(lo.codes)) AS route_code
- FROM immunizations AS im
- LEFT JOIN codes AS cd ON cd.code = im.cvx_code
- JOIN code_types AS ctype ON ctype.ct_key = 'CVX' AND ctype.ct_id=cd.code_type
- LEFT JOIN list_options AS lo ON lo.list_id = 'drug_route' AND lo.option_id = im.route
- LEFT JOIN users AS u ON u.id = im.administered_by_id
- LEFT JOIN facility AS f ON f.id = u.facility_id
- WHERE im.patient_id=? AND added_erroneously = 0";
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, array($pid));
- $immunizations .= '<immunizations>';
- foreach ($res as $row) {
- $immunizations .= "
- <immunization>
- <extension>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['id'])) . "</extension>
- <sha_extension>" . xmlEscape("e6f1ba43-c0ed-4b9b-9f12-f435d8ad8f92") . "</sha_extension>
- <id>" . xmlEscape($row['id']) . "</id>
- <cvx_code>" . xmlEscape($row['cvx_code']) . "</cvx_code>
- <code_text>" . xmlEscape($row['code_text']) . "</code_text>
- <reaction>" . xmlEscape($row['reaction']) . "</reaction>
- <npi>" . xmlEscape($row['npi']) . "</npi>
- <administered_by>" . xmlEscape($row['administered_by']) . "</administered_by>
- <fname>" . xmlEscape($row['fname']) . "</fname>
- <mname>" . xmlEscape($row['mname']) . "</mname>
- <lname>" . xmlEscape($row['lname']) . "</lname>
- <title>" . xmlEscape($row['title']) . "</title>
- <address>" . xmlEscape($row['street']) . "</address>
- <city>" . xmlEscape($row['city']) . "</city>
- <state>" . xmlEscape($row['state']) . "</state>
- <zip>" . xmlEscape($row['zip']) . "</zip>
- <work_phone>" . xmlEscape($row['phonew1']) . "</work_phone>
- <administered_on>" . xmlEscape($row['administered_date']) . "</administered_on>
- <administered_formatted>" . xmlEscape($row['administered_formatted']) . "</administered_formatted>
- <note>" . xmlEscape($row['note']) . "</note>
- <route_of_administration>" . xmlEscape(Listener::z_xlt($row['route_of_administration'])) . "</route_of_administration>
- <route_code>" . xmlEscape($row['route_code']) . "</route_code>
- <status>completed</status>
- <facility_name>" . xmlEscape($row['name']) . "</facility_name>
- <facility_phone>" . xmlEscape($row['phone']) . "</facility_phone>
- </immunization>";
- }
- $immunizations .= '</immunizations>';
- return $immunizations;
- }
- public function getProcedures($pid, $encounter)
- {
- $wherCon = '';
- $sqlBindArray = [];
- if ($encounter) {
- $wherCon = " b.encounter = ? AND ";
- $sqlBindArray[] = $encounter;
- }
- $procedure = '';
- $query = "select b.id, b.date as proc_date, b.code_text, b.code, fe.date,
- u.fname, u.lname, u.mname, u.npi, u.street, u.city, u.state, u.zip,
- f.id as fid, f.name, f.phone, f.street as fstreet, f.city as fcity, f.state as fstate, f.postal_code as fzip, f.country_code, f.phone as fphone
- from billing as b
- LEFT join code_types as ct on ct.ct_key
- LEFT join codes as c on c.code = b.code AND c.code_type = ct.ct_id
- LEFT join form_encounter as fe on fe.pid = b.pid AND fe.encounter = b.encounter
- LEFT JOIN users AS u ON u.id = b.provider_id
- LEFT JOIN facility AS f ON f.id = fe.facility_id
- where $wherCon b.pid = ? and b.activity = ?";
- array_push($sqlBindArray, $pid, 1);
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, $sqlBindArray);
- $procedure = '<procedures>';
- foreach ($res as $row) {
- $procedure .= "<procedure>
- <extension>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['id'])) . "</extension>
- <sha_extension>" . xmlEscape("d68b7e32-7810-4f5b-9cc2-acd54b0fd85d") . "</sha_extension>
- <description>" . xmlEscape($row['code_text']) . "</description>
- <code>" . xmlEscape($row['code']) . "</code>
- <date>" . xmlEscape(substr($row['date'], 0, 10)) . "</date>
- <npi>" . xmlEscape($row['npi']) . "</npi>
- <fname>" . xmlEscape($row['fname']) . "</fname>
- <mname>" . xmlEscape($row['mname']) . "</mname>
- <lname>" . xmlEscape($row['lname']) . "</lname>
- <address>" . xmlEscape($row['street']) . "</address>
- <city>" . xmlEscape($row['city']) . "</city>
- <state>" . xmlEscape($row['state']) . "</state>
- <zip>" . xmlEscape($row['zip']) . "</zip>
- <work_phone>" . xmlEscape($row['phonew1']) . "</work_phone>
- <facility_extension>" . xmlEscape(base64_encode($_SESSION['site_id'] . $row['fid'])) . "</facility_extension>
- <facility_sha_extension>" . xmlEscape("c2ee9ee9-ae31-4628-a919-fec1cbb58686") . "</facility_sha_extension>
- <facility_name>" . xmlEscape($row['name']) . "</facility_name>
- <facility_address>" . xmlEscape($row['fstreet']) . "</facility_address>
- <facility_city>" . xmlEscape($row['fcity']) . "</facility_city>
- <facility_state>" . xmlEscape($row['fstate']) . "</facility_state>
- <facility_country>" . xmlEscape($row['country_code']) . "</facility_country>
- <facility_zip>" . xmlEscape($row['fzip']) . "</facility_zip>
- <facility_phone>" . xmlEscape($row['fphone']) . "</facility_phone>
- <procedure_date>" . xmlEscape(preg_replace('/-/', '', substr($row['proc_date'], 0, 10))) . "</procedure_date>
- </procedure>";
- }
- $procedure .= '</procedures>';
- return $procedure;
- }
- public function getResults($pid, $encounter)
- {
- $wherCon = '';
- $sqlBindArray = [];
- if ($encounter) {
- $wherCon = " po.encounter_id = ? AND ";
- $sqlBindArray[] = $encounter;
- }
- $results = '';
- $query = "SELECT prs.result AS result_value, prs.units, prs.range, prs.result_text as order_title, prs.result_code, prs.procedure_result_id,
- prs.result_text as result_desc, prs.procedure_result_id AS test_code, poc.procedure_code, poc.procedure_name, poc.diagnoses, po.date_ordered, prs.date AS result_time, prs.abnormal AS abnormal_flag,po.order_status AS order_status
- FROM procedure_order AS po
- JOIN procedure_order_code as poc on poc.procedure_order_id = po.procedure_order_id
- JOIN procedure_report AS pr ON pr.procedure_order_id = po.procedure_order_id
- JOIN procedure_result AS prs ON prs.procedure_report_id = pr.procedure_report_id
- WHERE $wherCon po.patient_id = ? AND prs.result NOT IN ('DNR','TNP')";
- array_push($sqlBindArray, $pid);
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, $sqlBindArray);
- $results_list = array();
- foreach ($res as $row) {
- if (empty($row['result_code']) && empty($row['abnormal_flag'])) {
- continue;
- }
- $results_list[$row['test_code']]['test_code'] = $row['test_code'];
- $results_list[$row['test_code']]['order_title'] = $row['order_title'];
- $results_list[$row['test_code']]['order_status'] = $row['order_status'];
- $results_list[$row['test_code']]['date_ordered'] = substr(str_replace("-", '', $row['date_ordered']), 0, 8);
- $results_list[$row['test_code']]['date_ordered_table'] = $row['date_ordered'];
- $results_list[$row['test_code']]['procedure_code'] = $row['procedure_code'];
- $results_list[$row['test_code']]['procedure_name'] = $row['procedure_name'];
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['result_code'] = ($row['result_code'] ? $row['result_code'] : 0);
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['result_desc'] = $row['result_desc'];
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['units'] = $row['units'];
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['range'] = $row['range'];
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['result_value'] = $row['result_value'];
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['result_time'] = substr(preg_replace('/-/', '', $row['result_time']), 0, 8);
- $results_list[$row['test_code']]['subtest'][$row['procedure_result_id']]['abnormal_flag'] = $row['abnormal_flag'];
- }
- $results = '<results>';
- foreach ($results_list as $row) {
- $order_status = $order_status_table = '';
- if ($row['order_status'] == 'complete') {
- $order_status = 'completed';
- $order_status_table = 'completed';
- } elseif ($row['order_status'] == 'pending') {
- $order_status = 'active';
- $order_status_table = 'pending';
- } else {
- $order_status = 'completed';
- $order_status_table = '';
- }
- $results .= '<result>
- <extension>' . xmlEscape(base64_encode($_SESSION['site_id'] . $row['test_code'])) . '</extension>
- <root>' . xmlEscape("7d5a02b0-67a4-11db-bd13-0800200c9a66") . '</root>
- <date_ordered>' . xmlEscape($row['date_ordered']) . '</date_ordered>
- <date_ordered_table>' . xmlEscape($row['date_ordered_table']) . '</date_ordered_table>
- <title>' . xmlEscape($row['order_title']) . '</title>
- <test_code>' . xmlEscape($row['procedure_code']) . '</test_code>
- <test_name>' . xmlEscape($row['procedure_name']) . '</test_name>
- <order_status_table>' . xmlEscape($order_status_table) . '</order_status_table>
- <order_status>' . xmlEscape($order_status) . '</order_status>';
- foreach ($row['subtest'] as $row_1) {
- $units = $row_1['units'] ?: '';
- $highlow = preg_split("/[\s,-\--]+/", $row_1['range']);
- $results .= '
- <subtest>
- <extension>' . xmlEscape(base64_encode($_SESSION['site_id'] . $row['result_code'])) . '</extension>
- <root>' . xmlEscape("7d5a02b0-67a4-11db-bd13-0800200c9a66") . '</root>
- <range>' . xmlEscape($row_1['range']) . '</range>
- <low>' . xmlEscape(trim($highlow[0])) . '</low>
- <high>' . xmlEscape(trim($highlow[1])) . '</high>
- <unit>' . xmlEscape($units) . '</unit>
- <result_code>' . xmlEscape($row_1['result_code']) . '</result_code>
- <result_desc>' . xmlEscape($row_1['result_desc']) . '</result_desc>
- <result_value>' . xmlEscape(($row_1['result_value'] ? $row_1['result_value'] : 0)) . '</result_value>
- <result_time>' . xmlEscape($row_1['result_time']) . '</result_time>
- <abnormal_flag>' . xmlEscape($row_1['abnormal_flag']) . '</abnormal_flag>
- </subtest>';
- }
- $results .= '
- </result>';
- }
- $results .= '</results>';
- return $results;
- }
- /*
- #**************************************************#
- # ENCOUNTER HISTORY #
- #**************************************************#
- */
- public function getEncounterHistory($pid, $encounter)
- {
- $wherCon = '';
- $sqlBindArray = [];
- if ($encounter) {
- $wherCon = " fe.encounter = ? AND ";
- $sqlBindArray[] = $encounter;
- }
- $results = "";
- $query = "SELECT fe.date, fe.encounter,fe.reason,
- f.id as fid, f.name, f.phone, f.street as fstreet, f.city as fcity, f.state as fstate, f.postal_code as fzip, f.country_code, f.phone as fphone, f.facility_npi as fnpi,
- f.facility_code as foid, u.fname, u.mname, u.lname, u.npi, u.street, u.city, u.state, u.zip, u.phonew1, cat.pc_catname, lo.title AS physician_type, lo.codes AS physician_type_code,
- SUBSTRING(ll.diagnosis, LENGTH('SNOMED-CT:')+1, LENGTH(ll.diagnosis)) AS encounter_diagnosis, ll.diagnosis as raw_diagnosis, ll.title, ll.begdate, ll.enddate
- FROM form_encounter AS fe
- LEFT JOIN facility AS f ON f.id=fe.facility_id
- LEFT JOIN users AS u ON u.id=fe.provider_id
- LEFT JOIN openemr_postcalendar_categories AS cat ON cat.pc_catid=fe.pc_catid
- LEFT JOIN list_options AS lo ON lo.list_id = 'physician_type' AND lo.option_id = u.physician_type
- LEFT JOIN issue_encounter AS ie ON ie.encounter=fe.encounter AND ie.pid=fe.pid
- LEFT JOIN lists AS ll ON ll.id=ie.list_id AND ll.pid=fe.pid
- WHERE $wherCon fe.pid = ? ORDER BY fe.date";
- array_push($sqlBindArray, $pid);
- $appTable = new ApplicationTable();
- $res = $appTable->zQuery($query, $sqlBindArray);
- $results = "<encounter_list>";
- foreach ($res as $row) {
- $tmp = explode(":", $row['physician_type_code']);
- $physician_code_type = str_replace('-', ' ', $tmp[0]);
- $row['physician_type_code'] = $tmp[1];
- $encounter_reason = '';
- if ($row['reason'] !== '') {
- $encounter_reason = "<encounter_reason>" . xmlEscape($this->date_format(substr($row['date'], 0, 10)) . " - " . $row['reason']) . "</encounter_reason>";
- }
- $codes = "";
- $query_procedures = "SELECT c.code, c.code_text FROM billing AS b
- JOIN code_types AS ct ON ct.ct_key = ?
- JOIN codes AS c ON c.code = b.code AND c.code_type = ct.ct_id
- WHERE b.pid = ? AND b.code_type = ? AND activity = 1 AND b.encounter = ?";
- $appTable_procedures = new ApplicationTable();
- $res_procedures = $appTable_procedures->zQuery($query_procedures, array('CPT4', $pid, 'CPT4', $row['encounter']));
- foreach ($res_procedures as $row_procedures) {
- …
Large files files are truncated, but you can click here to view the full file