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; } }