コード例 #1
0
 public function processNewPatientAction()
 {
     $params = $this->_getParam('patient');
     $patient = new Patient();
     $patient->populateWithArray($params);
     if (!strlen($patient->recordNumber) > 0) {
         $patient->recordNumber = WebVista_Model_ORM::nextSequenceId('record_sequence');
     }
     $patient->persist();
     $personId = (int) $patient->personId;
     // save addresses and phones
     $addresses = $this->_getParam('addresses');
     if (is_array($addresses)) {
         foreach ($addresses as $row) {
             $address = new Address();
             $address->populateWithArray($row);
             $address->personId = $personId;
             $address->persist();
         }
     }
     $phones = $this->_getParam('phones');
     if (is_array($phones)) {
         foreach ($phones as $row) {
             $phone = new PhoneNumber();
             $phone->populateWithArray($row);
             $phone->personId = $personId;
             $phone->persist();
         }
     }
     $ret = array();
     $ret['msg'] = 'Record Saved for Patient: ' . ucfirst($patient->firstName) . ' ' . ucfirst($patient->lastName);
     $ret['personId'] = $personId;
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($ret);
 }
コード例 #2
0
 public function processDetailsAction()
 {
     $retval = false;
     $params = $this->_getParam('patient');
     $patientId = (int) $params['personId'];
     if ($patientId > 0) {
         if (!(int) $params['person']['personId'] > 0) {
             $params['person']['personId'] = $patientId;
         }
         if (isset($params['person']['active']) && $params['person']['active']) {
             $params['person']['active'] = 1;
         } else {
             $params['person']['active'] = 0;
         }
         $patient = new Patient();
         $patient->person_id = $patientId;
         $patient->populate();
         $patient->populateWithArray($params);
         $patient->person->person_id = $patientId;
         $patient->person->populate();
         $patient->person->populateWithArray($params['person']);
         $patient->persist();
         $retval = true;
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $data = __('Record updated successfully.');
     if ($retval == false) {
         $data = __('There was an error attempting to update patient details.');
     }
     $json->direct($data);
 }
コード例 #3
0
 public function processSelectAction()
 {
     $teamId = preg_replace('/[^0-9_a-z-\\.]/i', '', $this->_getParam('teamId', ''));
     $patientId = (int) $this->_getParam("patientId");
     $patient = new Patient();
     $patient->personId = $patientId;
     $patient->populate();
     $patient->teamId = $teamId;
     $patient->persist();
     $data = array();
     $data['msg'] = __("Record saved successfully");
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
コード例 #4
0
 public function importPatientsAction()
 {
     $f = fopen('/tmp/Pacientes.csv', 'r');
     $counter = 0;
     //"recordNumber","lastName","firstName","middleName","gender (M, F, O)","initials","dateOfBirth (YYY-MM-DD)","email","defaultIdentifier","defaultIdentifierType (SHORT ALL CAPS IDENTIFIED FOR ID)","maritalStatus (S, M, D)"
     while (($data = fgetcsv($f)) !== FALSE) {
         if ($counter == 0) {
             $counter++;
             continue;
         }
         $patient = new Patient();
         $patient->_shouldAudit = false;
         $patient->confidentiality = "DEFAULT";
         $patient->recordNumber = $data[0];
         $patient->person->lastName = $data[1];
         $patient->person->firstName = $data[2];
         $patient->person->middleName = $data[3];
         $patient->person->gender = $data[4];
         $patient->person->initials = $data[5];
         $patient->person->dateOfBirth = $data[6];
         $patient->person->email = $data[7];
         $patient->person->defaultIdentifier = $data[8];
         $patient->person->defaultIdentifierType = $data[9];
         $patient->person->maritalStatus = $data[10];
         //echo "<pre>" . $patient->toString() . "<br /></pre>";
         echo $patient->person->firstName . " " . $patient->person->lastName . "<br />";
         $patient->persist();
         //echo $user->toString();
         $counter++;
     }
     fclose($f);
     exit;
 }
コード例 #5
0
 public function generateTestSsDemoDataAction()
 {
     $basePath = Zend_Registry::get('basePath');
     $xmlFile = $basePath . 'xml/ss-demo-data.xml';
     $xml = new SimpleXMLElement(file_get_contents($xmlFile));
     foreach ($xml as $key => $value) {
         switch ($key) {
             case 'prescriber':
                 $person = new Person();
                 $person->active = 1;
                 $person->lastName = (string) $value->PrescriberLastName;
                 $person->firstName = (string) $value->PrescriberFirstName;
                 $person->middleName = (string) $value->PrescriberMiddleName;
                 $person->suffix = (string) $value->PrescriberNameSuffix;
                 //$person->initials = (string)$value->PrescriberNamePrefix;
                 $provider = new Provider();
                 $provider->person = $person;
                 $provider->sureScriptsSPI = (string) $value->SPI;
                 $provider->deaNumber = (string) $value->DEANumber;
                 $provider->stateLicenseNumber = (string) $value->StateLicenseNumber;
                 $provider->persist();
                 //ProviderSpecialty, ClinicName
                 $phone = new PhoneNumber();
                 $phone->personId = $provider->personId;
                 $phone->name = 'Primary';
                 $phone->type = 4;
                 $phone->number = str_replace('-', '', (string) $value->PrescriberPhone);
                 $phone->persist();
                 $address = new Address();
                 $address->personId = $provider->personId;
                 $address->name = 'Main';
                 $address->type = 4;
                 $address->active = 1;
                 $address->line1 = (string) $value->ClinicAddressLine1;
                 $address->line2 = (string) $value->ClinicAddressLine2;
                 $address->city = (string) $value->ClinicCity;
                 $address->state = (string) $value->ClinicState;
                 $address->postalCode = (string) $value->ClinicZip;
                 $address->persist();
                 break;
             case 'pharmacy':
                 $pharmacy = new Pharmacy();
                 $pharmacy->NCPDPID = (string) $value->NCPDPID;
                 /*$pharmacy-> = (string)$value->ReferenceQualifier;
                 		$pharmacy-> = (string)$value->PharmacistLastName;
                 		$pharmacy-> = (string)$value->PharmacistFirstName;
                 		$pharmacy-> = (string)$value->PharmacistMiddleName;
                 		$pharmacy-> = (string)$value->PharmacistNamePrefix;
                 		$pharmacy-> = (string)$value->PharmacistNameSuffix;*/
                 $pharmacy->StoreName = (string) $value->PharmacyName;
                 $pharmacy->AddressLine1 = (string) $value->PharmacyAddressLine1;
                 $pharmacy->City = (string) $value->PharmacyCity;
                 $pharmacy->State = (string) $value->PharmacyState;
                 $pharmacy->Zip = (string) $value->PharmacyZip;
                 $pharmacy->PhonePrimary = (string) $value->PharmacyPhone;
                 $pharmacy->persist();
                 break;
             case 'patient':
                 $person = new Person();
                 $person->active = 1;
                 $person->lastName = (string) $value->PatientLastName;
                 $person->firstName = (string) $value->PatientFirstName;
                 $person->middleName = (string) $value->PatientMiddleName;
                 //$person->initials = (string)$value->PatientNamePrefix;
                 $person->identifier = (string) $value->PatientSS;
                 $address = new Address();
                 $address->name = 'Main';
                 $address->type = 4;
                 $address->active = 1;
                 $address->line1 = (string) $value->PatientAddressLine1;
                 $address->line2 = (string) $value->PatientAddressLine2;
                 $address->city = (string) $value->PatientCity;
                 $address->state = (string) $value->PatientState;
                 $address->postalCode = (string) $value->PatientZip;
                 $patient = new Patient();
                 $patient->person = $person;
                 $patient->homeAddress = $address;
                 $patient->persist();
                 $phone = new PhoneNumber();
                 $phone->personId = $patient->personId;
                 $phone->name = 'Primary';
                 $phone->type = 4;
                 $phone->number = str_replace('-', '', (string) $value->PatientPhone);
                 $phone->persist();
                 break;
             case 'medication':
                 break;
         }
     }
     echo 'Done';
     die;
 }
コード例 #6
0
    public static function generateTestTetanus()
    {
        $objects = array();
        $person = new Person();
        $person->last_name = 'ClearHealth';
        $person->first_name = 'Test';
        $person->middle_name = 'I';
        $person->active = 1;
        $person->persist();
        $objects['person'] = $person;
        $patient = new Patient();
        $patient->person->_cascadePersist = false;
        // to avoid persist() calls on person
        $patient->person_id = $person->person_id;
        $patient->recordNumber = 1000;
        $patient->persist();
        $objects['patient'] = $patient;
        $medication = new Medication();
        $medication->_shouldAudit = false;
        // do not audit
        $medication->hipaaNDC = 'hipaaNDC';
        $medication->personId = $patient->person_id;
        $medication->persist();
        $objects['medication'] = $medication;
        $audit = new Audit();
        $audit->_ormPersist = true;
        $audit->objectClass = get_class($medication);
        $audit->objectId = $medication->medicationId;
        $audit->dateTime = date('Y-m-d H:i:s');
        $audit->type = WebVista_Model_ORM::REPLACE;
        $audit->userId = (int) Zend_Auth::getInstance()->getIdentity()->personId;
        $audit->persist();
        $objects['audit'] = $audit;
        $handler = new HealthStatusHandler();
        $handler->name = 'Tetanus Shots Handler ' . NSDR::create_guid();
        $handler->active = 1;
        $handler->timeframe = '+1 month';
        //$handler->condition = $audit->auditId;
        $handlerName = Handler::normalizeHandlerName($handler->name);
        $handler->handlerObject = <<<EOL

class {$handlerName}HealthStatusHandlerObject extends HealthStatusHandlerObjectAbstract {
\t//abstract requires at least this method
\tpublic static function matchAudit(HealthStatusHandler \$handler,Audit \$auditOrm) {
\t\t// check if the patientId of the item referenced by the audit is subscribed to the handler, if not return false (no match)
\t\t\$objectClass = \$auditOrm->objectClass;
\t\t\$obj = new \$objectClass();
\t\tforeach (\$obj->_primaryKeys as \$key) {
\t\t\t\$obj->\$key = \$auditOrm->objectId;
\t\t}
\t\t\$obj->populate();
\t\t\$patientId = \$obj->personId;
\t\tif (!HealthStatusHandlerPatient::isPatientSubscribed(\$handler->healthStatusHandlerId,\$patientId)) {
\t\t\treturn false;
\t\t}
\t\tif (\$auditOrm->objectClass == '{$audit->objectClass}' && \$auditOrm->type == '{$audit->type}') {
\t\t\treturn true;
\t\t}
\t\treturn false;
\t}

\tpublic static function fulfill(HealthStatusHandler \$handler,\$patientId) {
\t\t// fulfill sees if current patient has any open alerts linked to this handler
\t\t\$alert = new HealthStatusAlert();
\t\t\$alert->populateByHandlerPatientId(\$handler->healthStatusHandlerId,\$patientId);
\t\t// if there are open alerts then calls patientMatch again
\t\tif (strlen(\$alert->status) > 0) {
\t\t\t// if patientMatch returns FALSE then marks alerts as fulfilled if patientMatch return non-false alerts stay as is
\t\t\t// sees if any alerts exist for the patient that are for this handler and marks then as fulfilled if the same condition in patientMatch is reversed
\t\t\tif (self::patientMatch(\$handler,\$patientId) === false) {
\t\t\t\t\$alert->status = 'fulfilled';
\t\t\t\t\$alert->persist();
\t\t\t}
\t\t}
\t}

\tpublic static function patientMatch(HealthStatusHandler \$handler,\$patientId) {
 \t\t// check if the patient does not have any record of a tetanus immunization (preferably by using NSDR)
\t\t// if it has, add the timeframe to the date of that immunization and check if that date is greater than today, if so then return true
\t\t// \$immunization = NSDR::populate(\$patientId.'::com.clearhealth.immunization');
\t\t// temporarily superseded NSDR
\t\t\$alert = new HealthStatusAlert();
\t\t\$alert->populateByHandlerPatientId(\$handler->healthStatusHandlerId,\$patientId);
\t\tif (!strlen(\$alert->status) > 0) {
\t\t\t// no existing alert, return true
\t\t\treturn true;
\t\t}
\t\t// would test to see if the date of a given patients last tetanus shot plus the timeframe is less than today
\t\t// if (strtotime(\$handler->timeframe,strtotime(\$alert->dateTime)) < strtotime(date('m/d/Y h:i A',strtotime('+1 month')))) {
\t\tif (\$alert->status == 'active') {
\t\t\tif (strtotime(\$alert->dateDue) < strtotime(date('m/d/Y h:i A',strtotime('+5 weeks')))) {
\t\t\t\t//self::fulfill(\$handler,\$patientId);
\t\t\t\treturn false;
\t\t\t}
\t\t\t// patientMatch checks if patient 1234 has NOT had a tetanus when date of last tetanus + timeframe < today and generates an alert
\t\t\treturn true;
\t\t}
\t\t/* \$alert->lastOccurence
\t\tif (\$alert->status == 'active' || \$alert->status == 'fulfilled' || \$alert->status == 'ignored') {
\t\t\t// would not match if patient already has an active, fulfilled or ignored alert
\t\t\treturn false;
\t\t}
\t\t*/
\t\treturn true;
\t}
}

EOL;
        $handler->datasource = $handler->generateDefaultDatasource();
        $handler->template = $handler->generateDefaultTemplate();
        $handler->persist();
        $objects['healthStatusHandler'] = $handler;
        // subscribe patient to handler
        $handlerPatient = new HealthStatusHandlerPatient();
        $handlerPatient->healthStatusHandlerId = $handler->healthStatusHandlerId;
        $handlerPatient->personId = $patient->personId;
        $handlerPatient->persist();
        $objects['healthStatusHandlerPatient'] = $handler;
        return $objects;
    }
コード例 #7
0
 public function generateTestDataAction()
 {
     // Patient Test Data
     $person = new Person();
     $person->lastName = 'Test';
     $person->firstName = 'One';
     $person->persist();
     $patient = new Patient();
     $patient->personId = $person->personId;
     $patient->person = $person;
     $patient->persist();
     // Provider Test Data
     $person = new Person();
     $person->lastName = 'Provider';
     $person->firstName = 'ClearHealth';
     $person->persist();
     $provider = new Provider();
     $provider->personId = $person->personId;
     $provider->person = $person;
     $provider->persist();
     // set provider as user
     $user = new User();
     $user->username = '******';
     $user->password = '******';
     $user->person = $person;
     $user->persist();
     echo 'Done.';
     die;
 }
コード例 #8
0
 protected static function _generatePatient()
 {
     $objects = array();
     $person = new Person();
     $person->last_name = 'ClearHealth';
     $person->first_name = 'Test';
     $person->middle_name = 'I';
     $person->active = 1;
     $person->persist();
     $objects['person'] = $person;
     $patient = new Patient();
     $patient->person->_cascadePersist = false;
     // to avoid persist() calls on person
     $patient->person_id = $person->person_id;
     $patient->recordNumber = 1000;
     $patient->persist();
     $objects['patient'] = $patient;
     return $objects;
 }
コード例 #9
0
 public function processDetailsAction()
 {
     $params = $this->_getParam('patient');
     $patientId = (int) $params['personId'];
     $data = __('There was an error attempting to update patient details.');
     if ($patientId > 0) {
         if (!(int) $params['person']['personId'] > 0) {
             $params['person']['personId'] = $patientId;
         }
         if (isset($params['person']['active']) && $params['person']['active']) {
             $params['person']['active'] = 1;
         } else {
             $params['person']['active'] = 0;
         }
         $patient = new Patient();
         $patient->person_id = $patientId;
         $patient->populate();
         $patient->populateWithArray($params);
         if (strlen($patient->recordNumber) > 0 && $patient->hasMRNDuplicates()) {
             $data = __('ERROR: MRN number already exists');
         } else {
             $patient->person->person_id = $patientId;
             $patient->person->populate();
             $patient->person->populateWithArray($params['person']);
             $patient->persist();
             $data = __('Record updated successfully.');
         }
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }