batch/1.1/old/extraction.php
2013-06-19 08:24:49 +00:00

479 lines
18 KiB
PHP

<?php
$argv=$_SERVER['argv'];
$argc=$_SERVER['argc'];
print_r($argv);
function echoHeader() {
echo ($argv[0]);?> v0.1 Extraction d'informations HyperBIL en ligne de commande.
Usage: <?=$argv[0]?> <type of data> <fileIn> <fileInFmt> <fileOut> <fileOutFmt>
Where <type of data> is :
id Fiche d'identité (source BIL, RNCS puis INSEE)
idi Fiche d'identité (source INSEE pure)
pf Partenaires Financiers
ann Annonces Légales
dir Liste des dirigeants
lbil Bilans disponibles
bil Bilan complet (à la date de cloture demandée ou dernier dispo)
nof Notation financière (à la date de cloture demandée ou dernier dispo)
ch Score Conan & Holder (à la date de cloture demandée ou dernier dispo)
sv1 SolvaBil 1
sv2 SolvaBil 2
sv3 SolvaBil 3
usertest Test un user password uniquement; syntaxe : <user> <password>
Where <fileInFmt> is :
csv Fichier IN au format CSV (; ou ,) SIREN;NIC;DATE_BILAN;REF
plat Fichier IN au format plat (blancs significatifs) SIREN_____NIC__JJ/MM/AAAA
UNISUR2 To Do
Where <fileOutFmt> is : csv / SO2000
Le fichier en entrée doit être au format <fileInFmt> et contenir le SIREN en première colonne.
Si les informations demandées sont relatives à un bilan, la date de clôture précise du bilan peut être passée au format JJ/MM/AAAA.
<?php
}
include('automate.class.php');
include('includes/ICotation.inc');
$bil=&new Automate('array', false);
if ($argc < 7 && $argv[1]!='usertest') {echoHeader();die('Erreur : Vous n\'avez saisit que '. $argc .' paramètre(s) !');}
elseif ($argv[1]=='usertest' && $argc==4) {
$bil->setDebug(true);
if ($bil->connect($argv[2], $argv[3]))
{ echo 'User = "'. $argv[2].'" - Password = "'. $argv[3].'"'." - Connexion OK !\r\n";
$bil->setRetour('csv');
echo $bil->getFicheIdentite('552144503', '', 'c', '', 'Test', 'SO2000');
}
else
echo 'User = "'. $argv[2].'" - Password = "'. $argv[3].'" - Connexion Impossible : '. $bil->getLastError() ."\r\n";
$bil->printTrace();
die();
}
elseif (!in_array($argv[1], array('id', 'idi', 'pf', 'ann', 'dir', 'lbil', 'bil', 'nof', 'ch', 'sv1','sv2','sv3'))) {echoHeader();die('Erreur : Produit inexistant !');}
$fileIN=@file($argv[2]);
if ($fileIN==false) {echoHeader();die('Erreur : Impossible de lire le fichier "'. $argv[2] .'" !');}
$nbLignes=sizeof($fileIN);
if (!in_array($argv[3], array('csv', 'plat'))) {echoHeader();die('Erreur : Format IN inexistant !');}
$fpOUT=@fopen($argv[4], 'w');
if ($fpOUT==false) {echoHeader();die('Erreur : Impossible d\'ouvrir le fichier "'. $argv[3] .'" !');}
if (!in_array($argv[5], array('csv', 'so2000'))) {echoHeader();die('Erreur : Format OUT inexistant !');}
$fileOutFmt=$argv[5];
$ligneDebutLecture=$argv[6];
if ($ligneDebutLecture>$nbLignes) {echoHeader();die('Erreur : Le fichier IN contient seulement "'. $nbLignes .'" lignes !');}
set_time_limit(0);
$bil->setRetour('csv');
if ($argv[1]=='nof')
fwrite($fpOUT, "SIREN;RAISON SOCIALE;CODE POSTAL;VILLE;DATE DE CLOTURE;DUREE DE L'EXERCICE;NAF;SECTEUR;NOF;NOF Moyenne;R1 Numérateur;R1 Dénominateur;R1 Note;R1 Note bornée;R2 Numérateur;R2 Dénominateur;R2 Note;R2 Note bornée;R3 Numérateur;R3 Dénominateur;R3 Note;R3 Note bornée;R4 Numérateur;R4 Dénominateur;R4 Note;R4 Note bornée;R5 Numérateur;R5 Dénominateur;R5 Note;R5 Note bornée;R6 Numérateur;R6 Dénominateur;R6 Note;R6 Note bornée;Equiv. BDF;Equiv. Grades Moody's;Equiv. Grades S&P;Probabilité de défaillance;Postes du bilan;\r\n");
elseif ($argv[1]=='ch')
fwrite($fpOUT, "SIREN;RAISON SOCIALE;CODE POSTAL;VILLE;DATE DE CLOTURE;DUREE DE L'EXERCICE;NAF;SCORE CONAN-HOLDER;SCORE/20;SITUATION;R1;R2;R3;R4;R5;\r\n");
foreach ($fileIN as $key => $ligne) {
//die("Position = $key, NbLignes=$nbLignes, Lire à la ligne $ligneDebutLecture");
if ($key<$ligneDebutLecture)
continue;
if ($argv[3]=='csv'){
$tabLigne=explode(';', $ligne);
$siren=substr(trim($tabLigne[0]), 0, 9);
$nic=substr(trim($tabLigne[1]), 0, 5);
$dateCloture=substr(trim($tabLigne[2]), 0, 10);
$ref=substr(trim($tabLigne[3]), 0, 30);
}else{
$siren=substr($ligne, 0, 9);
$nic=trim(substr($ligne, 9, 5));
$dateCloture=substr($ligne, 14, 10);
$ref=substr($ligne, 24, 30);
}
if ($dateCloture=='' && (in_array($argv[1], array('bil', 'nof', 'ch'))))
{
// Recherche de la dernière date de clôture de bilan disponible !
$derCloture=$bil->getDatesClotures($siren, '', 'array');
$dateCloture=$derCloture[0]['RBDTCN'];
$dureCloture=$derCloture[0]['RDDURN'];
}
if ($argv[1]=='idi'){
$bil->connect('900000174', 'CHANT');
//$bil->connect('900000179', 'SOUPE');
$typeFiche='ci';
/*
hbilsoid Requête IDENTITE FORMAT SO2000
hbilsoids
hbilsoidci Fiche identité Complete INSEE SO2000
hbilsoidc Fiche identité Complete SO2000
*/
$retour=$bil->getFicheIdentite($siren, $nic, $typeFiche, '', $ref, $fileOutFmt);
}
else
{
// $bil->connect('900000183', 'CONGE'); // SVB1 Spé Bouygues Tél
//$bil->connect('900000182', 'XXXX'); // CA-LEASING Séparateur Nom/Prénom + Filtre annonces
$bil->connect('900000114', 'CHANT');
if ($argv[1]=='id')
$retour=$bil->getFicheIdentite($siren, $nic, 'c', '', $ref, $fileOutFmt);
elseif (substr($argv[1],0,2)=='sv')
$retour=$bil->getSolvaBil($siren, substr($argv[1],2,1), 450, $ref, '');
elseif ($argv[1]=='pf')
$retour=$bil->getActionnaires($siren);
elseif ($argv[1]=='ann')
$retour=$bil->getAnnoncesLegales($siren);
elseif ($argv[1]=='dir')
$retour=$bil->getDirigeants($siren);
elseif ($argv[1]=='lbil')
//echo "Bilans disponibles :<br/>";
$retour=$bil->getDatesClotures($siren);
elseif ($argv[1]=='bil') {
//echo "Bilans disponibles :<br/>";
$retour=$bil->getBilan($siren, $dateCloture);
}
elseif ($argv[1]=='nof') {
$tabIdentite=$bil->getFicheIdentite($siren, '', '', '', $ref, 'array');
$tabBilan=array();
$tabBilan=$bil->getBilan($siren, $dateCloture, '', 'array');
$icotation = new ICotation($tabBilan, true);
$secteur=$icotation->getSecteurActivite($tabIdentite['SOAPET']);
$libSecteur=$icotation->tabLibActivite[$secteur];
$suite='';
if (count($tabBilan)>0)
{
unset($note); unset($noteB); unset($numerateur); unset($denominateur);
$note[0]=$noteB[0]=$numerateur[0]=$denominateur[0]=$noteTot=0;
$tabTmp = $icotation->noteCapitalisation();
$numerateur[1] = number_format($tabTmp['NUMERATEUR']/100, 0, ',', '');
$denominateur[1]= number_format($tabTmp['DENOMINATEUR']/1, 0, ',', '');
$note[1] = number_format($tabTmp['NOTE'], 2, ',', ' ');
$noteB[1] = $icotation->getNoteBorne($tabTmp['NOTE'], 1, $secteur, $numerateur[1], $denominateur[1]);
$noteTot+=$noteB[1];
$tabTmp = $icotation->noteLevierEndettement();
$numerateur[2] = number_format($tabTmp['NUMERATEUR']/1, 0, ',', '');
$denominateur[2]= number_format($tabTmp['DENOMINATEUR']/1, 0, ',', '');
$note[2] = number_format($tabTmp['NOTE'], 2, ',', ' ');
$noteB[2] = $icotation->getNoteBorne($tabTmp['NOTE'], 2, $secteur, $numerateur[2], $denominateur[2]);
$noteTot+=$noteB[2];
$tabTmp = $icotation->noteCapaciteRemboursement();
$numerateur[3] = number_format($tabTmp['NUMERATEUR']/1, 0, ',', '');
$denominateur[3]= number_format($tabTmp['DENOMINATEUR']/1, 0, ',', '');
$note[3] = number_format($tabTmp['NOTE'], 2, ',', ' ');
$noteB[3] = $icotation->getNoteBorne($tabTmp['NOTE'], 3, $secteur, $numerateur[3], $denominateur[3]);
$noteTot+=$noteB[3];
$tabTmp = $icotation->noteCouvChargesFi();
$numerateur[4] = number_format($tabTmp['NUMERATEUR']/1, 0, ',', '');
$denominateur[4]= number_format($tabTmp['DENOMINATEUR']/1, 0, ',', '');
$note[4] = number_format($tabTmp['NOTE'], 2, ',', ' ');
$noteB[4] = $icotation->getNoteBorne($tabTmp['NOTE'], 4, $secteur, $numerateur[4], $denominateur[4]);
$noteTot+=$noteB[4];
$tabTmp = $icotation->noteTresorerie();
$numerateur[5] = number_format($tabTmp['NUMERATEUR']/(360*1), 0, ',', '');
$denominateur[5]= number_format($tabTmp['DENOMINATEUR']/1, 0, ',', '');
$note[5] = number_format($tabTmp['NOTE'], 0, ',', '');
$noteB[5] = $icotation->getNoteBorne($tabTmp['NOTE'], 5, $secteur, $numerateur[5], $denominateur[5]);
$noteTot+=$noteB[5];
$tabTmp = $icotation->noteMargeExploitation();
$numerateur[6] = number_format($tabTmp['NUMERATEUR']/100, 0, ',', '');
$denominateur[6]= number_format($tabTmp['DENOMINATEUR']/1, 0, ',', '');
$note[6] = number_format($tabTmp['NOTE'], 2, ',', ' ');
$noteB[6] = $icotation->getNoteBorne($tabTmp['NOTE'], 6, $secteur, $numerateur[6], $denominateur[6]);
$noteTot+=$noteB[6];
$noteMoy=number_format($noteTot/6, 2, ',', ' ');
$noteFinanciere = $icotation->getNotationFin($noteTot/6);
$libNoteFinanciere = $icotation->getInfosNotation($noteFinanciere);
$suite = $noteFinanciere .';'. // Notation Financière
$noteMoy .';'; // Note Moyenne
for ($i=1; $i<7; $i++)
$suite.=$numerateur[$i].';'.
$denominateur[$i].';'.
$note[$i].';'.
$noteB[$i].';';
$suite.=$icotation->getInfosNotation($noteFinanciere, true);
$suite.=implode_with_options($tabBilan, '', '=', '"', ', ').';';
}
$retour = $siren .';'.
$tabIdentite['SONOM'] .';'. // Raison sociale
$tabIdentite['SOCP'] .';'. // Code Postal
$tabIdentite['SOCOM'] .';'. // Ville
$dateCloture .';'. // Date de clôture du bilan
$dureCloture .';'. // Durée du bilan en mois
$tabIdentite['SOAPET'] .';'. // NAF
$secteur .'-'. $libSecteur .';'. // Libellé du secteur d'activité
$suite ."\n";
}
elseif ($argv[1]=='ch') {
$tabIdentite=$bil->getFicheIdentite($siren, '', '', '', '', 'array' );
$tabBilan=array();
$tabBilan=$bil->getBilan($siren, $dateCloture, '', 'array');
$suite='';
if (count($tabBilan)>0)
{
$n1=($tabBilan['FL'] + $tabBilan['FM'] + $tabBilan['FN'] + $tabBilan['FO'] - $tabBilan['FS'] - $tabBilan['FT'] - $tabBilan['FU'] - $tabBilan['FV'] - $tabBilan['FW'] - $tabBilan['FX'] - $tabBilan['FY'] - $tabBilan['FZ']);
$d1=($tabBilan['EC'] - $tabBilan['EB'] + $tabBilan['YS']);
$r1=$n1/$d1;
$n2=($tabBilan['DL'] + $tabBilan['DO'] + $tabBilan['DR'] + $tabBilan['DS'] + $tabBilan['DT'] + $tabBilan['DU'] + $tabBilan['DV'] - $tabBilan['EH']);
$d2=$tabBilan['EE'];
$r2=$n2/$d2;
$n3=($tabBilan['BV'] + $tabBilan['BX'] + $tabBilan['BZ'] + $tabBilan['CB'] + $tabBilan['CD'] + $tabBilan['CF'] - $tabBilan['BW'] - $tabBilan['BY'] - $tabBilan['CA'] - $tabBilan['CC'] - $tabBilan['CE'] - $tabBilan['CG']);
$d3=$tabBilan['EE'];
$r3=$n3/$d3;
$n4=$tabBilan['GR'];
$d4=$tabBilan['FL'];
$r4=$n4/$d4;
$n5=($tabBilan['FY'] + $tabBilan['FZ']);
$d5=($tabBilan['FL'] + $tabBilan['FM'] + $tabBilan['FN'] - $tabBilan['FU'] - $tabBilan['FV'] - $tabBilan['FW'] - $tabBilan['FS'] - $tabBilan['FT']);
$r5=$n5/$d5;
$n=24*$r1+22*$r2+16*$r3-87*$r4-10*$r5;
if ($n>16.5) { $s=20; $situation="Excellente"; }
elseif ($n>16) { $s=19; $situation="Excellente"; }
elseif ($n>15) { $s=18; $situation="Très bonne"; }
elseif ($n>14) { $s=17; $situation="Très bonne"; }
elseif ($n>13) { $s=16; $situation="Bonne"; }
elseif ($n>12) { $s=15; $situation="Bonne"; }
elseif ($n>11) { $s=14; $situation="Bonne"; }
elseif ($n>10) { $s=13; $situation="Correcte"; }
elseif ($n>09) { $s=12; $situation="Correcte"; }
elseif ($n>08) { $s=11; $situation="Prudence"; }
elseif ($n>07) { $s=10; $situation="Prudence"; }
elseif ($n>06) { $s=09; $situation="Prudence"; }
elseif ($n>05) { $s=08; $situation='Prudence'; }
elseif ($n>04) { $s=07; $situation='Difficile'; }
elseif ($n>02) { $s=06; $situation='Difficile'; }
elseif ($n>00) { $s=05; $situation='Difficile'; }
elseif ($n>-2) { $s=04; $situation='Danger'; }
elseif ($n>-4) { $s=03; $situation='Danger'; }
else { $s=02; $situation='Danger'; }
/*
elseif ($n>13) { $s=02; $situation=''; }
elseif ($n>13) { $s=01; $situation='Redressement judiciaire'; }
elseif ($n>13) { $s=00; $situation='Liquidation judiciaire'; }
*/
$suite= $n .';'.
$s .';'.
$situation .';'.
$r1 .';'.
$r2 .';'.
$r3 .';'.
$r4 .';'.
$r5 .';';
}
$retour = $siren .';'.
$tabIdentite['SONOM'] .';'. // Raison sociale
$tabIdentite['SOCP'] .';'. // Code Postal
$tabIdentite['SOCOM'] .';'. // Ville
$dateCloture .';'. // Date de clôture du bilan
$dureCloture .';'. // Durée du bilan en mois
$tabIdentite['SOAPET'] .';'. // NAF
$suite ."\n";
}
}
$num=$key+1;
echo "Ligne $num/$nbLignes : $siren $nic\r\n";
fwrite($fpOUT, $retour);
}
fclose($fpOUT);
die();
/*
//echo "Recherche :<br/>";
//$tab=$bil->getRecherche('552144503');
//echo "Produits disponibles :<br/>";
//print_r($bil->getListeProduits('552144503'));
// echo "Fiche d'identité :<br/>";
$fp=fopen('identites.csv', 'w');
foreach ($tab as $key=>$siren) {
$ret=$bil->getFicheIdentite($siren);
fwrite($fp, $ret['SORCS'] .';'.
$ret['RETOUR'] .';'.
$ret['SONUME'] .';'.
$ret['SONOM'] .';'.
$ret['SONRU'] .' '. $ret['SOBTQ'] .' '. $ret['SORUE'] .';'.
$ret['SOCP'] .';'.
$ret['SOCOM'] .';'.
$ret['SOETEL'] .';'.
$ret['SOEFAX'] .';'.
$ret['SOEWEB'] .';'.
$ret['SODTCT'] .';'.
$ret['SOCJEN'] .';'.
$ret['SONBET'] .';'.
$ret['SOAPET'] .";\r\n");
}
fclose($fp);
//$tab=$bil->getFicheIdentite('552144503');
//echo array_to_xml($tab);
//echo "Bilans disponibles :<br/>";
$fp=fopen('bilans.csv', 'w');
$tab=file('sirenbi.csv');
foreach ($tab as $key=>$siren) {
$ret=$bil->getDatesClotures($siren);
fwrite($fp, $ret[0]['RISIR'] .';'.
$ret[0]['RETOUR'] .';'.
$ret[0]['RINUME'] .';'.
$ret[0]['RBDTCN'] .';'.
$ret[0]['RDDURN'] .';'.
$ret[1]['RBDTCN'] .';'.
$ret[1]['RDDURN'] .';'.
$ret[2]['RBDTCN'] .';'.
$ret[2]['RDDURN'] .";\r\n");
}
fclose($fp);
*/
echo "Solvabil 3 :<br/>";
//print_r($bil->getSolvaBil('552144503',3,450,'test','','csv'));
echo array2xml($bil->getSolvaBil('552144503',3,450,'test','','csv'));
die();
echo "Actionnaires :<br/>";
//print_r();
echo "<pre>";
echo array2xml($bil->getActionnaires('552144503'));
echo "</pre>";
function array2xml($array,$level=0){
if (!is_array($array))
return 0;
if ($level==0)
{
$tab0=$array[0];
print_r($tab0);
echo "<xml>\n<". $tab0['PRODUIT'] .">\n";
}
reset($array);
while ( list($key, $value) = each($array) ) {
if (is_array($value)) {
if (!is_integer($key))
echo "<$key>\n";
array2xml($value,$level+1);
if (!is_integer($key))
echo "</$key>\n";
} else {
if (is_integer($key))
$key="DATA_$key";
if ($key!='RETOUR' && $key!='PRODUIT')
echo "<$key>$value</$key>\n";
}
}
if ($level==0)
{
$tab0=$array[0];
echo "</". $tab0['PRODUIT'] .">\n</xml>\n";
}
}
$tabCJ=array(
'10'=>'Personne physique',
'11'=>'Artisan Commerçant',
'12'=>'Commerçant',
'13'=>'Artisan (civil)',
'14'=>'Officier public ou ministériel',
'15'=>'Profession libérale',
'16'=>'Exploitant agricole',
'17'=>'Agent commercial',
'18'=>'Associé-Gérant de société',
'19'=>'Personne Physique',
'21'=>'Indivision',
'22'=>'Sté créée de Fait',
'23'=>'Sté en Participation',
'27'=>'Paroisse hors zone concordataire',
'29'=>'Groupement droit privé,n/pers.morale',
'31'=>'P.M.droit étranger immatriculé RCS',
'32'=>'P.M.droit étranger n/immat.RCS',
'41'=>'Ets public-régie indus/commerciale',
'51'=>'Sté coopérative commerciale',
'52'=>'Sté en nom collectif',
'53'=>'Sté en commandite',
'54'=>'S.A.R.L',
'55'=>'S.A à conseil d\'administration',
'56'=>'S.A à directoire',
'57'=>'SA par action simplifiée',
'61'=>'Caisse d\'Epargne & Prévoyance',
'62'=>'G.I.E',
'63'=>'Sté coopérative agricole',
'64'=>'Sté n/commerciale d\'assurance',
'65'=>'Société Civile',
'69'=>'Autres PM de droit privé inscrites au R',
'71'=>'Administration d\'Etat',
'72'=>'Collectivité Territoriale',
'73'=>'Ets Public Administratif',
'74'=>'P.M. de droit public,administration',
'81'=>'Organisme de protection sociale',
'82'=>'Organisme mutualiste',
'83'=>'Comité d\'Entreprise',
'84'=>'Organisme Professionnel',
'85'=>'Org.de retraite adh. n/obligatoire',
'91'=>'Syndicat de Propriétaires',
'92'=>'Association 1901 ou Assimilé',
'93'=>'Fondation',
'99'=>'P.M. de droit privé',
);
$tabCJbilans=array('54','55','56','57');
function implode_with_options($assoc_array, $prefix = '', $k_v_glue = '', $vwrap = '', $seperator = '')
{
foreach ($assoc_array as $k => $v)
{
$tmp[] = $k . $k_v_glue . $vwrap . $v . $vwrap;
}
return $prefix . implode($seperator, $tmp);
}
/**
$items = array('Apples', 'number' => 3, 'Vehicle' => '');
// For a query string:
echo implode_with_options($items, '?', '=', '', '&');
/**
* Produces
* ?0=Apples&number=3&Vehicle=
// For a SQL query
echo implode_with_options($items, '', '=', '"', ', ');
*/
?>