/** * Gestion des débiteurs d'une venue de patient * * @param CHPrimXMLAcquittementsPatients $dom_acq Acquittement * @param CPatient $newPatient Patient * @param array $data Datas * * @return CHPrimXMLAcquittementsPatients $msgAcq **/ function debiteursVenue($dom_acq, $newPatient, $data) { $echg_hprim = $this->_ref_echange_hprim; $sender = $echg_hprim->_ref_sender; $sender->loadConfigValues(); $this->_ref_sender = $sender; // Traitement du patient $domEnregistrementPatient = new CHPrimXMLEnregistrementPatient(); $domEnregistrementPatient->_ref_echange_hprim = $echg_hprim; $msgAcq = $domEnregistrementPatient->enregistrementPatient($dom_acq, $newPatient, $data); if ($echg_hprim->statut_acquittement != "OK") { return $msgAcq; } $dom_acq = new CHPrimXMLAcquittementsPatients(); $dom_acq->_identifiant_acquitte = $data['identifiantMessage']; $dom_acq->_sous_type_evt = $this->sous_type; $dom_acq->_ref_echange_hprim = $echg_hprim; $codes = array(); $avertissement = $commentaire = null; // Si CIP if (!CAppUI::conf('sip server')) { $sender = $echg_hprim->_ref_sender; // Mapping des mouvements $newPatient = $this->mappingDebiteurs($data['debiteurs'], $newPatient); $newPatient->repair(); $msgPatient = CEAIPatient::storePatient($newPatient, $sender); $commentaire = CEAIPatient::getComment($newPatient); $codes = array($msgPatient ? "A003" : "I002"); if ($msgPatient) { $avertissement = $msgPatient . " "; } } return $echg_hprim->setAck($dom_acq, $codes, $avertissement, $commentaire, $newPatient); }
/** * Secondary mapping person * * @param array $data Datas * @param CPatient $newPatient Person * * @return string */ function secondaryMappingPatient($data, CPatient $newPatient) { $sender = $this->_ref_sender; // Possible seulement dans le cas où le patient if (!$newPatient->_id) { return; } // Correspondants médicaux if (array_key_exists("ROL", $data)) { foreach ($data["ROL"] as $_ROL) { $this->getROL($_ROL, $newPatient); } } // Correspondances // Possible ssi le patient est déjà enregistré if (array_key_exists("NK1", $data)) { foreach ($data["NK1"] as $_NK1) { $this->getNK1($_NK1, $newPatient); } } // Constantes du patient if (array_key_exists("OBX", $data)) { foreach ($data["OBX"] as $_OBX) { $this->getOBX($_OBX, $newPatient, $data); } } // On store le patient return CEAIPatient::storePatient($newPatient, $sender); }
/** * Recording a patient with an IPP in the system * * @param CHPrimXMLAcquittementsPatients $dom_acq Acquittement * @param CPatient &$newPatient Patient * @param array $data Datas * * @return CHPrimXMLAcquittementsPatients $msgAcq **/ function enregistrementPatient($dom_acq, &$newPatient, $data) { // Traitement du message des erreurs $codes = array(); $commentaire = $avertissement = $msgID400 = $msgIPP = ""; $_modif_patient = false; $echg_hprim = $this->_ref_echange_hprim; $sender = $echg_hprim->_ref_sender; $sender->loadConfigValues(); $this->_ref_sender = $sender; if ($msg = $this->check($dom_acq, $newPatient, $data)) { return $msg; } $idSourcePatient = $data['idSourcePatient']; $idCiblePatient = $data['idCiblePatient']; // Si CIP if (!CAppUI::conf('sip server')) { $IPP = CIdSante400::getMatch("CPatient", $sender->_tag_patient, $idSourcePatient); // idSource non connu if (!$IPP->_id) { // idCible fourni if ($idCiblePatient) { if ($newPatient->load($idCiblePatient)) { // Le patient trouvé est-il différent ? if ($commentaire = $this->checkSimilarPatient($newPatient, $data['patient'])) { return $echg_hprim->setAckError($dom_acq, "E016", $commentaire, $newPatient); } // Mapping du patient $newPatient = $this->mappingPatient($data['patient'], $newPatient); // On store le patient $msgPatient = CEAIPatient::storePatient($newPatient, $sender); $commentaire = CEAIPatient::getComment($newPatient); $_code_IPP = "I021"; $_modif_patient = true; } else { $_code_IPP = "I020"; } } else { $_code_IPP = "I022"; } // Mapping du patient $newPatient = $this->mappingPatient($data['patient'], $newPatient); if (!$newPatient->_id) { // Patient retrouvé if ($newPatient->loadMatchingPatient()) { // Mapping du patient $newPatient = $this->mappingPatient($data['patient'], $newPatient); // On store le patient $msgPatient = CEAIPatient::storePatient($newPatient, $sender); $commentaire = CEAIPatient::getComment($newPatient); $_code_IPP = "A021"; $_modif_patient = true; } else { // On store le patient $msgPatient = CEAIPatient::storePatient($newPatient, $sender); $commentaire = CEAIPatient::getComment($newPatient); } } $msgIPP = CEAIPatient::storeIPP($IPP, $newPatient, $sender); $codes = array($msgPatient ? $_modif_patient ? "A003" : "A002" : ($_modif_patient ? "I002" : "I001"), $msgIPP ? "A005" : $_code_IPP); if ($msgPatient || $msgIPP) { $avertissement = $msgPatient . " " . $msgIPP; } else { $commentaire .= "IPP créé : {$IPP->id400}."; } } else { $newPatient->load($IPP->object_id); if ($commentaire = $this->checkSimilarPatient($newPatient, $data['patient'])) { return $echg_hprim->setAckError($dom_acq, "E016", $commentaire, $newPatient); } // Mapping du patient $newPatient = $this->mappingPatient($data['patient'], $newPatient); // idCible non fourni if (!$idCiblePatient) { $_code_IPP = "I023"; } else { $tmpPatient = new CPatient(); // idCible connu if ($tmpPatient->load($idCiblePatient)) { if ($tmpPatient->_id != $IPP->object_id) { $commentaire = "L'identifiant source fait référence au patient : {$IPP->object_id} "; $commentaire .= "et l'identifiant cible au patient : {$tmpPatient->_id}."; return $echg_hprim->setAckError($dom_acq, "E004", $commentaire, $newPatient); } $_code_IPP = "I024"; } else { $_code_IPP = "A020"; } } // On store le patient $msgPatient = CEAIPatient::storePatient($newPatient, $sender); $commentaire = CEAIPatient::getComment($newPatient); if ($newPatient->_id && $sender->_configs["insc_integrated"]) { $this->storeINSC($newPatient, $data["numeroSante"]); } $codes = array($msgPatient ? "A003" : "I002", $_code_IPP); if ($msgPatient) { $avertissement = $msgPatient . " "; } } } return $echg_hprim->setAck($dom_acq, $codes, $avertissement, $commentaire, $newPatient); }