Mise à jour de la classe RNVP

This commit is contained in:
Michael RICOIS 2015-07-21 09:32:31 +00:00
parent 03c6a7f37f
commit a73f9c7b05

View File

@ -3,12 +3,31 @@ class MRnvp
{ {
protected $iDb; protected $iDb;
protected $iInsee; protected $iInsee;
public $tabDevises=array(); public $tabDevises=array();
public $nomTronque=0; public $nomTronque=0;
function __construct() protected $tabAdrCQ=array(
{ 10=>'Adresse correcte',
20=>'Adresse correcte (Voie non reconue dans un CEDEX ou BP)',
21=>'Adresse correcte mais numéro de facade hors borne (petite ville)',
22=>'Adresse correcte mais numéro de facade absent (petite ville)',
23=>'Adresse correcte mais numéro de facade hors borne (grande ville)',
24=>'Adresse correcte mais numéro de facade absent (grande ville)',
30=>'Voie non reconnue (petite ville)',
31=>'Voie non reconnue (petite ville, quartier reconnu)',
40=>'Voie absente (petite ville, quartier reconnu)',
41=>'Voie absente (petite ville)',
50=>'Voie non reconnue (grande ville)',
51=>'Voie non reconnue (grande ville, quartier reconnu)',
60=>'Voie absente (grande ville, quartier reconnu)',
61=>'Voie absente (grande ville)',
70=>'Voie présente mais Cp/Ville non corrigeable',
80=>'Voie absente et Cp/Ville non corrigeable',
90=>'Adresse à l\'étranger',
);
function __construct() {
$this->iDb = new WDB(); $this->iDb = new WDB();
$this->iInsee = new MInsee($this->iDb); $this->iInsee = new MInsee($this->iDb);
} }
@ -23,10 +42,10 @@ class MRnvp
$tabDevises=array(); $tabDevises=array();
foreach($rep as $k=>$dev) foreach($rep as $k=>$dev)
$tabDevises[$dev['devInpi']*1]=$dev['devIso']; $tabDevises[$dev['devInpi']*1]=$dev['devIso'];
return $tabDevises; return $tabDevises;
} }
/** /**
* Récupération du code ISO de la devise numérique de l'Inpi * Récupération du code ISO de la devise numérique de l'Inpi
* @param integer $numDeviseInpi * @param integer $numDeviseInpi
@ -39,7 +58,7 @@ class MRnvp
else else
return ''; return '';
} }
/** /**
* @todo Corriger les adresses présentes dans CEDEXA (toutes les lignes) * @todo Corriger les adresses présentes dans CEDEXA (toutes les lignes)
* @todo Ligne 3, acheter HEXALIGNE3 * @todo Ligne 3, acheter HEXALIGNE3
@ -83,19 +102,26 @@ class MRnvp
// Ligne 3, acheter HEXALIGNE3 // Ligne 3, acheter HEXALIGNE3
$L3=$adrL3; $L3=$adrL3;
// Ligne 5 et 7 par défaut // Ligne 5 et 7 par défaut
$L7=$adrL7; $L7=$adrL7;
$L5=$adrL5; $L5=$adrL5;
// Ligne 6 : CP + Localité // Ligne 6 : CP + Localité
$idAdr56=false; $idAdr56=false;
$tabAdr56k=$tabAdr56L=array(); $tabAdr56k=$tabAdr56L=array();
$cp=substr(trim($adrL6),0,5); $cp=substr(trim($adrL6),0,5);
$cp2=substr($cp,0,2); if ($cp*1>0) {
$ville=trim(strtr(substr($adrL6,5),array(' SAINT '=>' ST ',' SAINTE '=>' STE '))); $cp2=substr($cp,0,2);
$ville=trim(strtr(substr($adrL6,5),array(' SAINT '=>' ST ',' SAINTE '=>' STE ')));
} else {
$cp=$cp2='';
$ville=trim(strtr($adrL6,array(' SAINT '=>' ST ',' SAINTE '=>' STE ')));
}
$ville=preg_replace('/ CEDEX\s?.*$/ui','',$ville); $ville=preg_replace('/ CEDEX\s?.*$/ui','',$ville);
$tabRetI=array( $tabRetI=array(
'operateurRnvp'=>'SED',
'in_cp'=>$cp, 'in_cp'=>$cp,
'in_dep'=>$cp2, 'in_dep'=>$cp2,
'in_ville'=>$ville, 'in_ville'=>$ville,
@ -107,7 +133,7 @@ class MRnvp
'in_L6'=>$adrL6, 'in_L6'=>$adrL6,
'in_L7'=>$adrL7); 'in_L7'=>$adrL7);
//$dureeM=round(microtime(1)-$tDeb,3); //$dureeM=round(microtime(1)-$tDeb,3);
$tD=microtime(1); $tD=microtime(1);
$ret=$this->iDb->select('villes.hexaviaVilles', $ret=$this->iDb->select('villes.hexaviaVilles',
"idAdr56, codeInseeCom, libCom$norme, codeInseeGlobal, indPluridis, libLigne5n$norme, indRoudis, codePostal, libLigne6n$norme, codeInseePre, codeMaj$norme, dateMaj$norme, MATCH (codePostal, libCom38) AGAINST ('$cp $ville' IN NATURAL LANGUAGE MODE) AS score", "idAdr56, codeInseeCom, libCom$norme, codeInseeGlobal, indPluridis, libLigne5n$norme, indRoudis, codePostal, libLigne6n$norme, codeInseePre, codeMaj$norme, dateMaj$norme, MATCH (codePostal, libCom38) AGAINST ('$cp $ville' IN NATURAL LANGUAGE MODE) AS score",
@ -117,8 +143,7 @@ class MRnvp
$tabRetE=array( $tabRetE=array(
'dureeV'=> round(microtime(1)-$tD,3), 'dureeV'=> round(microtime(1)-$tD,3),
'errRNVPcode'=>'V0', 'errRNVPcode'=>'V0',
'errRNVPlib'=>'Aucune correspondance CP VILLE' 'errRNVPlib'=> "Aucune correspondance CP VILLE (cp=$cp, ville=$ville)");
);
$erreur=true; $erreur=true;
} else { } else {
foreach($ret as $i=>$iRet) { foreach($ret as $i=>$iRet) {
@ -194,7 +219,7 @@ class MRnvp
} }
} }
if ($erreur) return array_merge($tabRetI,$tabRetE); if ($erreur) return array_merge($tabRetI,$tabRetE);
// Ligne 4 : Découpage N° Répétition TypeVoie et LibelléVoie // Ligne 4 : Découpage N° Répétition TypeVoie et LibelléVoie
$tD=microtime(1); $tD=microtime(1);
$matriculeHexavia=false; $matriculeHexavia=false;
@ -258,9 +283,9 @@ class MRnvp
if ($iRet['score']>17 && isset($ret[$i+1]) && $iRet['score']>$ret[$i+1]['score']) break; if ($iRet['score']>17 && isset($ret[$i+1]) && $iRet['score']>$ret[$i+1]['score']) break;
} }
} }
$dureeR=round(microtime(1)-$tD,3); $dureeR=round(microtime(1)-$tD,3);
if (!$matriculeHexavia) { if (!$matriculeHexavia) {
if ($debug) print_r($ret); if ($debug) print_r($ret);
if ($debug) echo ("Plusieurs correspondances Voies pour $adrL4 $adrL6 dans cette commune ('$strAdr56') !".EOL); if ($debug) echo ("Plusieurs correspondances Voies pour $adrL4 $adrL6 dans cette commune ('$strAdr56') !".EOL);
@ -268,13 +293,13 @@ class MRnvp
$tabRetE=array( 'dureeRnvp'=>round(microtime(1)-$tDeb,3), $tabRetE=array( 'dureeRnvp'=>round(microtime(1)-$tDeb,3),
'errRNVPcode'=>'R2', 'errRNVPcode'=>'R2',
'errRNVPlib'=>"Plusieurs correspondances Voies pour $adrL4 $adrL6 dans cette commune ('$strAdr56')"); 'errRNVPlib'=>"Plusieurs correspondances Voies pour $adrL4 $adrL6 dans cette commune ('$strAdr56')");
return array_merge($tabRetI,$tabRetV,$tabRetE); return array_merge($tabRetI,$tabRetV,$tabRetE);
} }
} }
if (!$matriculeHexavia && @strlen($L4)==0) $L4=$adrL4; if (!$matriculeHexavia && @strlen($L4)==0) $L4=$adrL4;
$tD=microtime(1); $tD=microtime(1);
$tabLen=$tabMaxLen=array(); $tabLen=$tabMaxLen=array();
$tabLen[1]=strlen($L1); $tabLen[1]=strlen($L1);
@ -317,7 +342,7 @@ class MRnvp
} }
} }
$dureeN=round(microtime(1)-$tD,3); $dureeN=round(microtime(1)-$tD,3);
$tabRetR = array( $tabRetR = array(
'L1'=>$L1, 'L1'=>$L1,
'L2'=>$L2, 'L2'=>$L2,
@ -338,12 +363,12 @@ class MRnvp
'dureeRnvp'=>round(microtime(1)-$tDeb,3), 'dureeRnvp'=>round(microtime(1)-$tDeb,3),
'dureeM'=>$dureeM*1.0, 'dureeM'=>$dureeM*1.0,
); );
$tabRet = array_merge($tabRetI,$tabRetV,$tabRetR,$tabRetE); $tabRet = array_merge($tabRetI,$tabRetV,$tabRetR,$tabRetE);
return $tabRet; return $tabRet;
} }
/** Retourne le tableau des abbréviations existantes par type d'abréviation /** Retourne le tableau des abbréviations existantes par type d'abréviation
*/ */
function getAbreviations($typeAbrev) function getAbreviations($typeAbrev)
@ -377,12 +402,12 @@ class MRnvp
//print_r($tabRet);die(); //print_r($tabRet);die();
return $tabRet; return $tabRet;
} }
/** Normalise une raison sociale ou un nom /** Normalise une raison sociale ou un nom
**/ **/
function normaliseRS($nomLong, $taille=38, $debug=false) function normaliseRS($nomLong, $taille=38, $debug=false)
{ {
$nomCourt=preg_replace('/[^A-Z0-9%\'\"\-&\*\/\s]/','',trim(strtoupper($nomLong))); $nomCourt=preg_replace('/[^A-Z0-9%@&\'\(\)\"\-\*\/\s\+]/','',trim(strtoupper($nomLong)));
$tabMots=split("[^[:alpha:]]+", $nomCourt); $tabMots=split("[^[:alpha:]]+", $nomCourt);
$passage=0; $passage=0;
$this->nomTronque=0; $this->nomTronque=0;
@ -399,7 +424,7 @@ class MRnvp
} }
if ($debug) echo "1-Voies=$nomCourt".EOL; if ($debug) echo "1-Voies=$nomCourt".EOL;
if (strlen($nomCourt)<=$taille) break; if (strlen($nomCourt)<=$taille) break;
//print_r($tabMots); //print_r($tabMots);
// 2. Remplacement des Titres par leurs abréviation // 2. Remplacement des Titres par leurs abréviation
$tabTmp=$this->getAbreviations('T'); $tabTmp=$this->getAbreviations('T');
@ -412,14 +437,14 @@ class MRnvp
} }
if ($debug) echo "2a-Titres=$nomCourt".EOL; if ($debug) echo "2a-Titres=$nomCourt".EOL;
if (strlen($nomCourt)<=$taille) break; if (strlen($nomCourt)<=$taille) break;
// 2. Remplacement des Formes Juridiques // 2. Remplacement des Formes Juridiques
$tabTmp=$this->getAbreviations('J'); $tabTmp=$this->getAbreviations('J');
foreach ($tabTmp as $lib=>$abr) foreach ($tabTmp as $lib=>$abr)
$nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt ")); $nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt "));
if ($debug) echo "2b-FJ=$nomCourt".EOL; if ($debug) echo "2b-FJ=$nomCourt".EOL;
if (strlen($nomCourt)<=$taille) break; if (strlen($nomCourt)<=$taille) break;
// 4. Suppression des articles // 4. Suppression des articles
$tabTmp=$this->getAbreviations('A'); $tabTmp=$this->getAbreviations('A');
foreach ($tabTmp as $lib=>$abr) { foreach ($tabTmp as $lib=>$abr) {
@ -451,10 +476,10 @@ class MRnvp
} }
if ($debug) echo "5-Autres Noms=$nomCourt".EOL; if ($debug) echo "5-Autres Noms=$nomCourt".EOL;
if (strlen($nomCourt)<=$taille) break; if (strlen($nomCourt)<=$taille) break;
$nomCourt=substr($nomCourt,0,$taille); $nomCourt=substr($nomCourt,0,$taille);
$this->nomTronque=1; $this->nomTronque=1;
//die($nomCourt); //die($nomCourt);
/** @todo A finir /** @todo A finir
Tronquer ou abréger dans cette ordre Tronquer ou abréger dans cette ordre
@ -465,21 +490,21 @@ class MRnvp
- tronquer à 4 caractères les types de voie non normalisés - tronquer à 4 caractères les types de voie non normalisés
- tronquer les extensions de voie - tronquer les extensions de voie
- réduire le nom de la voie en supprimant les mots de la gauche vers la droite - réduire le nom de la voie en supprimant les mots de la gauche vers la droite
Gérer les pluriels pour les voies, nom, titres, et formes juridiques Gérer les pluriels pour les voies, nom, titres, et formes juridiques
**/ **/
$passage++; $passage++;
} }
return $nomCourt; return $nomCourt;
} }
// Code Insee de la commune libCom32 Libellé de la commune (Ancienne norme 32) libCom38 Libellé // Code Insee de la commune libCom32 Libellé de la commune (Ancienne norme 32) libCom38 Libellé
function getLibCommune($codeInsee, $norme=38) { function getLibCommune($codeInsee, $norme=38) {
if ($norme<>32 && $norme<>38) { if ($norme<>32 && $norme<>38) {
return 'La norme doit être 32 ou 38 caractères (38 par défaut)'.EOL; return 'La norme doit être 32 ou 38 caractères (38 par défaut)'.EOL;
} }
$ret=$this->iDb->select('villes.hexaviaVilles', $ret=$this->iDb->select('villes.hexaviaVilles',
"libCom32 , libCom38", "libCom32 , libCom38",
"codeInseeCom='$codeInsee' LIMIT 0,1",false, MYSQL_ASSOC); "codeInseeCom='$codeInsee' LIMIT 0,1",false, MYSQL_ASSOC);
@ -496,6 +521,16 @@ class MRnvp
else return $ret[0]['libCom38']; else return $ret[0]['libCom38'];
} }
function getCPCommune($codeInsee)
{
$ret=$this->iDb->select('villes.hexaviaVilles',
"codePostal",
"codeInseeCom='$codeInsee' GROUP BY codePostal",false, MYSQL_ASSOC);
$nbRet=count($ret);
if ($nbRet==1) return $ret[0]['codePostal'];
return false;
}
function getCodCommune($libelleCommune, $depOuCp='', $debug=false) function getCodCommune($libelleCommune, $depOuCp='', $debug=false)
{ {
$norme=38; $norme=38;
@ -529,10 +564,32 @@ class MRnvp
} }
return $codeCommune; return $codeCommune;
} }
function normaliseAdresse76310($L1,$L2,$L3,$L4,$L5,$L6,$L7='') { function normaliseAdresse76310($L1,$L2,$L3,$L4,$L5,$L6,$L7='')
//ini_set('soap.wsdl_cache_enabled', 0); {
$client = new SoapClient('http://www.rnvp-en-ligne.com/service.asmx?wsdl'); $tDeb=microtime(1);
$tabRetR=$tabRetE=array();
$cp=substr(trim($L6),0,5);
$cp2=substr($cp,0,2);
$ville=trim(strtr(substr($L6,5),array(' SAINT '=>' ST ',' SAINTE '=>' STE ')));
$ville=preg_replace('/ CEDEX\s?.*$/ui','',$ville);
$tabRetI=array( 'operateurRnvp'=>'76310WEB',
'in_cp'=>$cp,
'in_dep'=>$cp2,
'in_ville'=>$ville,
'in_L1'=>trim($L1),
'in_L2'=>trim($L2),
'in_L3'=>trim($L3),
'in_L4'=>trim($L4),
'in_L5'=>trim($L5),
'in_L6'=>trim($L6),
'in_L7'=>trim($L7));
//$client = new SoapClient('http://www.rnvp-en-ligne.com/service.asmx?wsdl');
$client = new SoapClient('http://www.rnvp-en-ligne.com/service_v5.asmx?wsdl');
$nbEssais=1;
$array = array ( $array = array (
'pi_session' => '-1', 'pi_session' => '-1',
'pi_user' => 'SDPROD', 'pi_user' => 'SDPROD',
@ -550,21 +607,109 @@ class MRnvp
'pio_cpville' => utf8_encode($L6), // Ligne 6 'pio_cpville' => utf8_encode($L6), // Ligne 6
'pio_pays' => utf8_encode($L7), // Ligne 7 'pio_pays' => utf8_encode($L7), // Ligne 7
/* 'po_tnp' => '', /* 'po_tnp' => '',
'po_sex' => '', 'po_sex' => '',
'po_civlong' => '', 'po_civlong' => '',
'po_cp' => '', 'po_cp' => '',
'po_ville' => '', 'po_ville' => '',
'po_insee' => '', 'po_insee' => '',
'po_cqtnp' => '', 'po_cqtnp' => '',
'po_cqadrs' => '', 'po_cqadrs' => '',
'po_risquerestru' => '', 'po_risquerestru' => '',
'po_poidsmodif' => '', 'po_poidsmodif' => '',
'po_rejet' => '', 'po_rejet' => '',
'po_etranger' => ''*/ 'po_etranger' => ''*/
); );
$result = $client->Elfyweb_RNVP_Standard($array); while(1) {
return ($result); try {
//$result = $client->Elfyweb_RNVP_Standard($array);
$result = $client->Elfyweb_RNVP_Expert_V50($array);
//print_r($result);
$tabRetR=array( 'L1'=>$L1,
'L2'=>$L2,
'L3'=>strtoupper(utf8_decode($result->pio_cadrs)),
'L4'=>strtoupper(utf8_decode($result->pio_adresse)),
'L5'=>strtoupper(utf8_decode($result->pio_lieudit)),
'L6'=>strtoupper(utf8_decode($result->pio_cpville)),
/* [po_risquerestru] => 0
[po_poidsmodif] => 0
[po_rejet] =>
[po_etranger] =>*/
'Cp'=>$result->po_cp,
'Ville'=>$result->po_ville,
'Insee'=>$result->po_insee,
/*'CQadrs'=>$result->po_cqadrs,
'CQadrsLib'=>$this->tabAdrCQ[$result->po_cqadrs],
'CQAdrRnvp'=>$this->getLibQualiteAdresse76310($result->po_cqadrs, $result->rejet),*/
'dureeRnvp'=>round(microtime(1)-$tDeb,3),
);
if (@$result->pio_pays<>'FRA') $tabRet['L7']=$result->pio_pays;
break;
} catch (SoapFault $fault) {
$nbEssais++;
if ($nbEssai<5) continue;
$tabRetE=array( 'dureeRnvp'=>round(microtime(1)-$tDeb,3),
'errRNVPcode'=>'S0',
'errRNVPlib'=>"Erreur SOAP : ".print_r($fault,1));
}
}
$tabRet=array_merge($tabRetI,$tabRetR,$tabRetE);
return $tabRet;
}
function getLibQualiteAdresse76310($cqadrs, $correctionDouteuse)
{
switch ($cqadrs*1) {
case 10: // Adresse correcte
case 20: // Adresse correcte (Voie non reconue dans un CEDEX ou BP)
case 21: // Adresse correcte mais numéro de facade hors borne (petite ville)
case 22: // Adresse correcte mais numéro de facade absent (petite ville)
case 23: // Adresse correcte mais numéro de facade hors borne (grande ville)
case 24: // Adresse correcte mais numéro de facade absent (grande ville)
$cqRnvpSed=1;
break;
case 31: // Voie non reconnue (petite ville, quartier reconnu)
case 51: // Voie non reconnue (grande ville, quartier reconnu)
$cqRnvpSed=2;
break;
case 30: // Voie non reconnue (petite ville)
case 50: // Voie non reconnue (grande ville)
$cqRnvpSed=3;
break;
case 40: // Voie absente (petite ville, quartier reconnu)
case 41: // Voie absente (petite ville)
case 60: // Voie absente (grande ville, quartier reconnu)
case 61: // Voie absente (grande ville)
$cqRnvpSed=4;
break;
case 70: // Voie présente mais Cp/Ville non corrigeable
case 80: // Voie absente et Cp/Ville non corrigeable
$cqRnvpSed=5;
break;
default:
$cqRnvpSed=0;
break;
}
if ($correctionDouteuse=='D') $cqRnvpSed=0;
return $cqRnvpSed;
}
function getAdresseRnvpSource($source, $source_id, $num=0)
{
$ret=$this->iDb->select(
'villes.rnvpSources',
'id, source, source_id, num, L1rnvp, L2rnvp, L3rnvp, L4rnvp, L5rnvp, L6rnvp, L7rnvp, Pays, dateInsert,
operateurRnvp, dateEnvoiRnvp, dateRetourRnvp, codeRetour, NumVoie, BisTer, TypeVoieCourt, TypeVoieLong, LibVoie,
Cp, Ville, Insee, CQadrs, CorrectionImportante, CorrectionDouteuse, HexaCle, CQL3, InseeGlobal, OldInsee,
IsInseeReconstitue, NumDept, IdHexavia, IdHexaposte, Iris_Rivoli, Iris_Ilot99, Iris_CodeIris, Iris_Canton,
Iris_Zus, Iris_Zfu, CqIris, dateUpdate',
"source=$source AND source_id=$source_id AND num=$num LIMIT 0,1",false, MYSQL_ASSOC);
$tabRet=$ret[0];
$tabRet['CQadrsLib']=$this->tabAdrCQ[$tabRet['CQadrs']];
$tabRet['CQAdrRnvp']=$this->getLibQualiteAdresse76310($tabRet['CQadrs'], $tabRet['CorrectionDouteuse']);
return $tabRet;
} }
} }
?> ?>