2015-02-03 11:20:41 +00:00
|
|
|
<?php
|
2016-01-27 21:10:45 +00:00
|
|
|
class Metier_Partenaires_MBilansInput
|
2015-02-03 11:20:41 +00:00
|
|
|
{
|
|
|
|
public $CtrlEcartMax = 10;
|
|
|
|
|
|
|
|
public $Ctrl = array (
|
|
|
|
// --- Bilan Simplifié
|
|
|
|
'S' => array(
|
|
|
|
// Actif Simplifié
|
|
|
|
'010-012=013'=>'Fonds commercial (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'014-016=017'=>'Immos incorpo. autres (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'028-030=031'=>'Immos corpo. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'040-042=043'=>'Immos finan. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'044-048=049'=>'Total (I) Actif Immos (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'010+014+028+040=044'=>'Total Actif immobilisé Brut',
|
|
|
|
'012+016+030+042=048'=>'Total Actif immobilisé Amor/Prov',
|
|
|
|
'013+017+031+043=049'=>'Total Actif immobilisé Net',
|
|
|
|
'050-052=053'=>'Stocks MP (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'060-062=063'=>'Stocks Marchandises (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'064-066=067'=>'Avances et acomptes/cmds (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'068-070=071'=>'Créances clients et CR (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'072-074=075'=>'Autres créances (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'080-082=083'=>'VMP (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'084-086=087'=>'Disponibilités (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'088-090=091'=>' (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'092-094=095'=>'Ch. constatées d\'avance (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'096-098=099'=>'Total (II) Actif Circulant (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'110-112=113'=>'Total ACTIF (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'050+060+064+068+072+080+084+088+092=096'=>'Total Actif circulant Brut',
|
|
|
|
'052+062+066+070+074+082+086+090+094=098'=>'Total Actif circulant Amor/Prov',
|
|
|
|
'053+063+067+071+075+083+087+091+092=099'=>'Total Actif circulant Net',
|
|
|
|
'044+096=110'=>'Total ACTIF Brut',
|
|
|
|
'048+098=112'=>'Total ACTIF Amor/Prov',
|
|
|
|
'049+099=113'=>'Total ACTIF Net',
|
|
|
|
// Passif Simplifié
|
|
|
|
'120+124+126+130+132+134+136+140=142'=>'Total Capitaux Propres',
|
|
|
|
'156+164+166+172+174=176'=>'Total Dettes',
|
|
|
|
'142+154+176=180'=>'Total Passif',
|
|
|
|
'113=180'=>'Actif=Passif',
|
|
|
|
// CDR Simplifié
|
|
|
|
'210+214+218+222+224+226+230=232'=>'Total des produits d\'exploitation',
|
|
|
|
'234+236+238+240+242+244+250+252+254+256+262=264'=>'Total des charges d\'exploitation',
|
|
|
|
'210+214+218+222+224+226+230=232'=>'Total des produits d\'exploitation',
|
|
|
|
'232-264=270'=>'Résultat d\'exploitation',
|
|
|
|
'232+280+290-264-294-300-306=310'=>'Résultat d\'exploitation',
|
|
|
|
),
|
|
|
|
// --- Bilan Réel Normal
|
|
|
|
'N' => array(
|
|
|
|
// Actif immobilisé
|
|
|
|
'AA=AA2'=>'Capital souscrit non appelé',
|
|
|
|
'AB-AC=AC1'=>'Frais d\'étab. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AD-AE=AE1'=>'Frais de R&D (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AF-AG=AG1'=>'Brevets (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AH-AI=AI1'=>'Fonds commercial (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AJ-AK=AK1'=>'Autres immo inc. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AL-AM=AM1'=>'Acomptes immo inc. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AN-AO=AO1'=>'Terrains (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AP-AQ=AQ1'=>'Constructions (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AR-AS=AS1'=>'Installations (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AT-AU=AU1'=>'Autres immo corp. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AV-AW=AW1'=>'Immos en cours (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AX-AY=AY1'=>'Acomptes immo corp. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CS-CT=CT1'=>'Immo Fi participations/équiv. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CU-CV=CV1'=>'Autres participations (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BB-BC=BC1'=>'Créances rattachées à des particip. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BD-BE=BE1'=>'Autres titres immo. (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BF-BG=BG1'=>'Prêts (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BH-BI=BI1'=>'Autres Immo Financières (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BJ-BK=BK1'=>'Total de l\'Actif Immobilisé (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AB+AD+AF+AH+AJ+AL+AN+AP+AR+AT+AV+AX+CS+CU+BB+BD+BF+BH=BJ'=>'Total des Immobilisations (Brut)',
|
|
|
|
'AC+AE+AG+AI+AK+AM+AO+AQ+AS+AU+AW+AY+CT+CV+BC+BE+BG+BI=BK'=>'Total des Immobilisations (Amor.)',
|
|
|
|
'AC1+AE1+AG1+AI1+AK1+AM1+AO1+AQ1+AS1+AU1+AW1+AY1+CT1+CV1+BC1+BE1+BG1+BI1=BK1'=>'Total des Immobilisations (Net)',
|
|
|
|
// Actif circulant
|
|
|
|
'BL-BM=BM1'=>'Stocks de MP (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BN-BO=BO1'=>'Stocks en cours de prod. biens (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BP-BQ=BQ1'=>'Stocks en cours de prod. services (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BR-BS=BS1'=>'Stocks produits finis (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BT-BU=BU1'=>'Stocks de marchandises (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BV-BW=BW1'=>'Avances et acomptes/cmds (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BX-BY=BY1'=>'Créances clients (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BZ-CA=CA1'=>'Autres créances (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CB-CC=CC1'=>'Capital souscrit appelé non versé (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CD-CE=CE1'=>'VMP (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CF-CG=CG1'=>'Disponibilités (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CH-CI=CI1'=>'Charges Const. d\'avance(Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'CJ-CK=CK1'=>'Total de l\'Actif Circulant (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'BL+BN+BP+BR+BT+BV+BX+BZ+CB+CD+CF+CH=CJ'=>'Total l\'Actif Circulant (Brut)',
|
|
|
|
'BM+BO+BQ+BS+BU+BW+BY+CA+CC+CE+CG+CI=CK'=>'Total l\'Actif Circulant (Amor.)',
|
|
|
|
'BM1+BO1+BQ1+BS1+BU1+BW1+BY1+CA1+CC1+CE1+CG1+CI1=CK1'=>'Total l\'Actif Circulant (Net)',
|
|
|
|
'CL=CL2'=>'Charges / plus. ex. (Brut<>Net)',
|
|
|
|
'CM=CM2'=>'Primes de Rbt obligations (Brut<>Net)',
|
|
|
|
'CN=CN2'=>'Ecarts de conversion d\'actif (Brut<>Net)',
|
|
|
|
'CO-1A=1A1'=>'Total Actif (Brut,Amor/Prov et Net incohérents)',
|
|
|
|
'AA+BJ+CJ+CL+CM+CN=CO'=>'Total Actif Brut',
|
|
|
|
'BK+CK=1A'=>'Total Actif (Amor.)',
|
|
|
|
'AA2+BK1+CK1+CL2+CM2+CN2=1A1'=>'Total Actif Net',
|
|
|
|
// PASSIF
|
|
|
|
'DA+DB+DC+DD+DE+DF+DG+DH+DI+DJ+DK=DL'=>'Passif : s/total I (Capitaux Propres)',
|
|
|
|
'DM+DN=DO'=>'Passif : s/total II (Autres fonds propres)',
|
|
|
|
'DP+DQ=DR'=>'Passif : s/total III (Provisions)',
|
|
|
|
'DS+DT+DU+DV+DW+DX+DY+DZ+EA+EB=EC'=>'Passif : s/total IV (Dettes+Cpt régul. PCA)',
|
|
|
|
'DL+DO+DR+EC+ED=EE'=>'Total Passif',
|
|
|
|
'EE=1A1'=>'Total Actif=Total Passif',
|
|
|
|
// CDR
|
|
|
|
'FA+FB=FC'=>'Total Ventes de marchandises',
|
|
|
|
'FD+FE=FF'=>'Total Production vendue de biens',
|
|
|
|
'FG+FH=FI'=>'Total Production vendue de services',
|
|
|
|
'FJ+FK=FL'=>'Total Chiffe d\'Affaires France+Export',
|
|
|
|
'FA+FD+FG=FJ'=>'Total C.A. France',
|
|
|
|
'FB+FE+FH=FK'=>'Total C.A. Export',
|
|
|
|
'FC+FF+FI=FL'=>'Total C.A. Total (Vtes+Biens+Services)',
|
|
|
|
'FL+FM+FN+FO+FP+FQ=FR'=>'Total I : Produits d\'Exploitation',
|
|
|
|
'FS+FT+FU+FV+FW+FX+FY+FZ+GA+GB+GC+GD+GE=GF'=>'Total II :Charges d\'Exploitation',
|
|
|
|
'FR-GF=GG'=>'1 - Résultat d\'Exploitation',
|
|
|
|
'GJ+GK+GL+GM+GN+GO=GP'=>'Total V : Produits Financiers',
|
|
|
|
'GQ+GR+GS+GT=GU'=>'Total VI : Charges Financières',
|
|
|
|
'GP-GU=GV'=>'2 - Résultat Financier',
|
|
|
|
'GG+GH-GI+GV=GW'=>'3 - R.C.A.I.',
|
|
|
|
'HA+HB+HC=HD'=>'Total VII : Produits Exceptionnels',
|
|
|
|
'HE+HF+HG=HH'=>'Total VIII : Charges Exceptionnels',
|
|
|
|
'HD-HH=HI'=>'4 - Résultat Exceptionnel',
|
|
|
|
'FR+GH+GP+HD=HL'=>'CDR : Total des Produits',
|
|
|
|
'GF+GI+GU+HH+HJ+HK=HM'=>'CDR : Total des Charges',
|
|
|
|
'HL-HM=HN'=>'5 - Résultat de l\'exercice',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
public $LibCodeCtrl = array(
|
|
|
|
'_0' => '-',
|
|
|
|
'_1' => 'Corrigé',
|
|
|
|
'_3' => 'Capital',
|
|
|
|
'_5' => 'Calculs', // Anciennement 2 mais maintenant >=5 correspond à une erreur grave
|
|
|
|
'_7' => 'Effectif',
|
|
|
|
'_9' => 'Unité',
|
|
|
|
);
|
|
|
|
|
|
|
|
public $LibCodeSaisie = array(
|
|
|
|
// Code Saisie Bilans par Infogreffe
|
|
|
|
'_00' => 'Bilan saisi sans anomalie',
|
|
|
|
'_01' => 'Bilan saisi avec des incohérences comptables à la source du document (issues du remettant)',
|
|
|
|
'_02' => 'Bilan avec Actif, Passif ou Compte de Résultat nul',
|
|
|
|
'_03' => 'Bilan incomplet (des pages manquent)',
|
|
|
|
'_04' => 'Bilan complet non détaillé (seuls les totaux et sous totaux sont renseignés)',
|
|
|
|
'_05' => 'Bilan reçu en double exemplaire',
|
|
|
|
'_06' => 'Bilan intermédiaire - Situation provisoire',
|
|
|
|
'_07' => 'Bilan illisible',
|
|
|
|
'_A7' => 'Bilan illisible, présentant un cadre gris très foncés (dans lesquels sont inscrits en général les totaux)',
|
|
|
|
'_B7' => 'Bilan manuscrits',
|
|
|
|
'_C7' => 'Bilan illisible, présentant des caractères trop gras',
|
|
|
|
'_D7' => 'Bilan scanné en biais ou qui présentent des pages rognées',
|
|
|
|
'_E7' => 'Bilan numérisés trop clairement (comme une imprimante dont la cartouche est presque vide)',
|
|
|
|
'_F7' => 'Bilan illisible',
|
|
|
|
'_08' => 'Bilan consolidé',
|
|
|
|
'_09' => 'Déclaration d\'impôts',
|
|
|
|
'_10' => 'Document autre que bilan',
|
|
|
|
'_11' => 'Bilan de clôture de liquidation',
|
|
|
|
'_12' => 'Bilan de Société financière',
|
|
|
|
'_13' => 'Bilan de Société d\'assurance',
|
|
|
|
'_14' => 'Bilan de Société immobilière',
|
|
|
|
'_15' => 'Bilan de Société étrangère',
|
|
|
|
// Codes saisie de Bilans spécifique às S&D
|
|
|
|
'_70' => 'Document relatif à une autre société',
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Décompose le tableau de controle
|
|
|
|
* @param string $type (S | N)
|
|
|
|
* Type du bilan
|
|
|
|
* @return array
|
|
|
|
* Retourne un tableau
|
|
|
|
* [
|
|
|
|
* operation => Chaine de caractère contenant l'operation à effectuer sur les postes
|
|
|
|
* total => Code du poste résultant de l'operation pour comparaison
|
|
|
|
* ]
|
|
|
|
*/
|
|
|
|
protected function formules($type)
|
|
|
|
{
|
|
|
|
$formules = array();
|
|
|
|
if ( array_key_exists($type, $this->Ctrl) ) {
|
|
|
|
foreach ( $this->Ctrl[$type] as $formule => $lib ) {
|
|
|
|
$posEgal = strpos($formule, '=');
|
|
|
|
$partLeft = substr($formule, 0, $posEgal);
|
|
|
|
preg_match_all('/([A-Z0-9]+|(\+|\-))/', $partLeft, $matches);
|
|
|
|
$total = substr($formule, $posEgal+1);
|
|
|
|
$formules[] = array(
|
|
|
|
'operation' => $matches[0],
|
|
|
|
'total' => $total,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $formules;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Control les postes
|
|
|
|
* @param string $type (S | N)
|
|
|
|
* Type du bilan
|
|
|
|
* @param array $postes
|
|
|
|
* Tableau des postes d'un bilan Code => Valeur
|
|
|
|
* @throws Exception
|
|
|
|
* @return boolean
|
|
|
|
*/
|
|
|
|
public function control($type, $postes = array() )
|
|
|
|
{
|
|
|
|
$formules = $this->formules($type);
|
|
|
|
|
|
|
|
if ( count($formules) > 0 ) {
|
|
|
|
foreach ( $formules as $formule ) {
|
|
|
|
$checkPostes = array();
|
|
|
|
|
|
|
|
// --- Réaliser le calcul
|
|
|
|
$calc = 0;
|
|
|
|
$signe = null;
|
|
|
|
foreach ( $formule['operation'] as $operation ) {
|
|
|
|
if ( $operation == '-' ) {
|
|
|
|
$signe = '-';
|
|
|
|
} elseif ( $operation == '+' ) {
|
|
|
|
$signe = '+';
|
|
|
|
} else {
|
|
|
|
$checkPostes[] = $operation;
|
|
|
|
// --- Vérification valeur poste
|
|
|
|
if ( !array_key_exists($operation, $postes) ) {
|
|
|
|
$postes[$operation] = 0;
|
|
|
|
}
|
|
|
|
// --- Calcul
|
|
|
|
if ( empty($signe) ) {
|
|
|
|
$calc = $postes[$operation];
|
|
|
|
} elseif ( $signe == '+' ) {
|
|
|
|
$calc+= $postes[$operation];
|
|
|
|
} elseif ( $signe == '-' ) {
|
|
|
|
$calc-= $postes[$operation];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$checkPostes[] = $formule['total'];
|
|
|
|
// --- Effecteur la vérification avec le total
|
|
|
|
if ( !array_key_exists($formule['total'], $postes) ) {
|
|
|
|
$total = 0;
|
|
|
|
} else {
|
|
|
|
$total = $postes[$formule['total']];
|
|
|
|
}
|
|
|
|
if ($calc != $total && !( ($calc - $this->CtrlEcartMax < $total) && ($calc + $this->CtrlEcartMax > $total) ) ) {
|
|
|
|
throw new Exception(join(';',$checkPostes));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|