/**
  * 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);
 }