/** * Récupère les INS du patient * * @param DOMNode $node PID3 * @param CPatient $patient Patient * * @return void */ function getINS(DOMNode $node, CPatient $patient) { if (!$patient->_id) { return; } $list_ins = $this->query("PID.3[CX.5[text() = 'INS-C' or text() = 'INS-A']]", $node); $ins = new CINSPatient(); $ins->patient_id = $patient->_id; foreach ($list_ins as $_ins) { $ins->ins_patient_id = null; $ins->date = null; $ins->provider = null; $valeur = $this->queryTextNode("CX.1", $_ins); $date = $this->queryTextNode("CX.7", $_ins); $type = $this->queryTextNode("CX.5", $_ins); if (!$valeur) { continue; } $type = substr($type, -1); $ins->ins = $valeur; $ins->type = $type; $ins->loadMatchingObject(); if ($date && $ins->date < $date) { $ins->date = CMbDT::dateTime($date); $ins->provider = $this->_ref_sender->nom; } $ins->store(); } }
/** * Sauvegarde des INSC * * @param CPatient $patient Patient * @param DOMNode $node Elément NumeroIdentifiantSante * * @return void */ function storeINSC(CPatient $patient, DOMNode $node) { $xpath = new CHPrimXPath($node->ownerDocument); $list_insc = $xpath->query("insC", $node); $insc = new CINSPatient(); $insc->type = "C"; $insc->patient_id = $patient->_id; foreach ($list_insc as $_insc) { $ins = $xpath->queryTextNode("valeur", $_insc); $date = $xpath->queryTextNode("dateEffet", $_insc); if (!$ins) { continue; } $insc->ins_patient_id = null; $insc->date = null; $insc->provider = null; $insc->ins = $ins; $insc->loadMatchingObject(); if ($insc->date < $date) { $insc->date = $date; $insc->provider = $this->_ref_sender->nom; } $insc->store(); } }
/** * Create INSC * * @param CPatient $patient patient * * @return null|string */ static function createINSC(CPatient $patient) { if (!$patient->_vitale_nir_certifie) { return "Ce patient ne possède pas de numéro de sécurité sociale qui lui est propre"; } list($nir_carte, $nir_carte_key) = explode(" ", $patient->_vitale_nir_certifie); $name_carte = mb_strtoupper(CMbString::removeAccents($patient->_vitale_lastname)); $prenom_carte = mb_strtoupper(CMbString::removeAccents($patient->_vitale_firstname)); $name_patient = mb_strtoupper(CMbString::removeAccents($patient->nom)); $prenom_patient = mb_strtoupper(CMbString::removeAccents($patient->prenom)); if ($name_carte !== $name_patient || $prenom_carte !== $prenom_patient) { return "Le bénéficiaire de la carte vitale ne correspond pas au patient en cours"; } $firstName = self::formatString($patient->_vitale_firstname); $insc = self::calculInsc($nir_carte, $nir_carte_key, $firstName, $patient->_vitale_birthdate); if (strlen($insc) !== 22) { return "Problème lors du calcul de l'INSC"; } if (!$insc) { return "Impossible de calculer l'INSC"; } $last_ins = $patient->loadLastINS(); if ($last_ins && $last_ins->ins === $insc) { return null; } $ins = new CINSPatient(); $ins->patient_id = $patient->_id; $ins->ins = $insc; $ins->type = "C"; $ins->date = "now"; $ins->provider = "Mediboard"; if ($msg = $ins->store()) { return $msg; } return null; }