<commit_before><?php

class DRMValidation extends DocumentValidation {

    protected $isTeledeclarationDrm = false;

    public function __construct($document, $isTeledeclarationDrm = false, $options = null) {
        $this->isTeledeclarationDrm = $isTeledeclarationDrm;
        parent::__construct($document, $options);
    }

    public function configure($isTeledeclarationDrm = false) {
        $this->addControle('erreur', 'repli', "La somme des replis en entrée et en sortie n'est pas la même");
        $this->addControle('erreur', 'declassement', "La somme des déclassements en entrée et en sortie n'est pas la même");
        $this->addControle('erreur', 'regime_crd', "Le régime CRD n'a pas été rempli");
        $this->addControle('erreur', 'transfert_appellation', "La somme des transferts d'appellation en entrée et en sortie n'est pas la même");
        $this->addControle('vigilance', 'revendique_sup_initial', "Le stock revendiqué ne peut pas être supérieur au stock récolté");
        if (!$this->isTeledeclarationDrm) {
            $this->addControle('vigilance', 'vrac_detail_nonsolde', "Le contrat est soldé (ou annulé)");
            $this->addControle('erreur', 'vrac_detail_exist', "Le contrat n'existe plus");
        }
        $this->addControle('vigilance', 'total_negatif', "Le stock revendiqué théorique fin de mois est négatif");
        $this->addControle('vigilance', 'vrac_detail_negatif', "Le volume qui sera enlevé sur le contrat est supérieur au volume restant");
        $this->addControle('vigilance', 'crd_negatif', "Le nombre de CRD ne dois pas être négatif");
        $this->addControle('vigilance', 'documents_annexes_erreur', "Les numéros de document d'accompagnement saisis en annexe sont mal renseignés.");
        $this->addControle('vigilance', 'siret_absent', "Le numéro de siret n'a pas été renseigné");
        $this->addControle('erreur', 'no_accises_absent', "Le numéro d'accise n'a pas été renseigné");
        $this->addControle('vigilance', 'frequence_paiement_absent', "La fréquence de paiement aux douanes n'a pas été renseigné");

        $this->addControle('erreur', 'observations', "Les observations n'ont pas été renseignées");
        $this->addControle('erreur', 'replacement_date', "Pour tout replacement, la date de sortie du produit est nécessaire. Vous ne l'avez pas saisi");

    }

    public function controle() {
        $total_entrees_replis = 0;
        $total_sorties_replis = 0;
        $total_entrees_declassement = 0;
        $total_sorties_declassement = 0;
        $total_entrees_transfert_appellation = 0;
        $total_sorties_transfert_appellation = 0;
        $total_entrees_excedents = 0;
        $total_entrees_manipulation = 0;
        $total_sorties_destructionperte = 0;

        $total_mouvement_absolu = 0;
        foreach ($this->document->getProduitsDetails() as $detail) {

            $total_mouvement_absolu += $detail->total_entrees + $detail->total_sorties;

            $entrees_excedents = ($detail->entrees->exist('excedents'))? $detail->entrees->excedents : 0.0;
            $entrees_retourmarchandisetaxees = ($detail->entrees->exist('retourmarchandisetaxees'))? $detail->entrees->retourmarchandisetaxees : 0.0;
            $entrees_retourmarchandiseacquitte = ($detail->entrees->exist('retourmarchandiseacquitte'))? $detail->entrees->retourmarchandiseacquitte : 0.0;
            $entrees_retourmarchandisesanscvo = ($detail->entrees->exist('retourmarchandisesanscvo'))? $detail->entrees->retourmarchandisesanscvo : 0.0;
            $entrees_autre = ($detail->entrees->exist('autre'))? $detail->entrees->autre : 0.0;

            $sorties_destructionperte = ($detail->sorties->exist('destructionperte'))? $detail->sorties->destructionperte : 0.0;
            $sorties_autre = ($detail->sorties->exist('autre'))? $detail->sorties->autre : 0.0;

            $total_observations_obligatoires = $entrees_excedents + $entrees_retourmarchandisetaxees + $entrees_retourmarchandisesanscvo + $sorties_destructionperte + $entrees_autre + $sorties_autre;

            $produitLibelle = " pour le produit ".$detail->getLibelle();

            if ($this->isTeledeclarationDrm) {
              if($total_observations_obligatoires && (!$detail->exist('observations') || !trim($detail->observations)))
              {
                if($entrees_excedents){
                  $this->addPoint('erreur', 'observations', "Entrée excédents (".sprintf("%.2f",$entrees_excedents)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($entrees_retourmarchandisetaxees){
                  $this->addPoint('erreur', 'observations', "Entrée retour de marchandises taxées (".sprintf("%.2f",$entrees_retourmarchandisetaxees)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if ($entrees_retourmarchandiseacquitte) {
                  $this->addPoint('erreur', 'observations', "Entrée retour de marchandises acquittées (".sprintf("%.2f",$entrees_retourmarchandiseacquitte)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($entrees_retourmarchandisesanscvo){
                  $this->addPoint('erreur', 'observations', "Entrée retour de marchandises sans CVO (".sprintf("%.2f",$entrees_retourmarchandisesanscvo)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($sorties_destructionperte){
                  $this->addPoint('erreur', 'observations', "Sortie manquant (".sprintf("%.2f",$sorties_destructionperte)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($entrees_autre){
                  $this->addPoint('erreur', 'observations', "Entrée autre (".sprintf("%.2f",$entrees_autre)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($sorties_autre){
                  $this->addPoint('erreur', 'observations', "Sortie autre (".sprintf("%.2f",$sorties_autre)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
              }
              if(($entrees_retourmarchandisetaxees + $entrees_retourmarchandiseacquitte + $entrees_retourmarchandisesanscvo) && (!$detail->exist('replacement_date') || !$detail->replacement_date)) {
                $this->addPoint('erreur', 'replacement_date', $produitLibelle, $this->generateUrl('drm_annexes', $this->document));
              }
            }

            if ($detail->total < 0) {
                $this->addPoint('vigilance', 'total_negatif', $detail->getLibelle(), $this->generateUrl('drm_edition_detail', $detail));
            }

            if (!$detail->getConfig()->entrees->exist('declassement') && !$detail->getConfig()->entrees->exist('repli')) {
                continue;
            }
            if($detail->entrees->exist('repli') && $detail->sorties->exist('repli')){
              $total_entrees_replis += $detail->entrees->repli;
              $total_sorties_replis += $detail->sorties->repli;
            }

            $total_entrees_declassement += $detail->entrees->declassement;
            $total_sorties_declassement += $detail->sorties->declassement;

            $total_entrees_excedents += ($detail->entrees->exist('excedents')) ? $detail->entrees->excedents : 0;
            $total_entrees_manipulation += ($detail->entrees->exist('manipulation')) ? $detail->entrees->manipulation : 0;

            $total_sorties_destructionperte += ($detail->sorties->exist('destructionperte')) ? $detail->sorties->destructionperte : 0;

            if (!$detail->getConfig()->entrees->exist('transfertsrecolte')) {
                continue;
            }

            $total_entrees_transfert_appellation += $detail->entrees->transfertsrecolte;
            $total_sorties_transfert_appellation += $detail->sorties->transfertsrecolte;
            if($detail->total_revendique  > $detail->total){
                $this->addPoint('vigilance', 'revendique_sup_initial', $detail->getLibelle(), $this->generateUrl('drm_edition_detail', $detail));
            }
        }

        $volumes_restant = array();
        if (!$this->isTeledeclarationDrm && !DRMConfiguration::getInstance()->isVracCreation()) {
            foreach ($this->document->getMouvementsCalculeByIdentifiant($this->document->identifiant, $this->isTeledeclarationDrm) as $mouvement) {
                if ($mouvement->isVrac()) {
                    $vrac = $mouvement->getVrac();
                    if (!$vrac) {<commit_msg>renforcement du code pour les entrees/sorties declassement/repli conditionnées à leur existance en conf<commit_after><?php

class DRMValidation extends DocumentValidation {

    protected $isTeledeclarationDrm = false;

    public function __construct($document, $isTeledeclarationDrm = false, $options = null) {
        $this->isTeledeclarationDrm = $isTeledeclarationDrm;
        parent::__construct($document, $options);
    }

    public function configure($isTeledeclarationDrm = false) {
        $this->addControle('erreur', 'repli', "La somme des replis en entrée et en sortie n'est pas la même");
        $this->addControle('erreur', 'declassement', "La somme des déclassements en entrée et en sortie n'est pas la même");
        $this->addControle('erreur', 'regime_crd', "Le régime CRD n'a pas été rempli");
        $this->addControle('erreur', 'transfert_appellation', "La somme des transferts d'appellation en entrée et en sortie n'est pas la même");
        $this->addControle('vigilance', 'revendique_sup_initial', "Le stock revendiqué ne peut pas être supérieur au stock récolté");
        if (!$this->isTeledeclarationDrm) {
            $this->addControle('vigilance', 'vrac_detail_nonsolde', "Le contrat est soldé (ou annulé)");
            $this->addControle('erreur', 'vrac_detail_exist', "Le contrat n'existe plus");
        }
        $this->addControle('vigilance', 'total_negatif', "Le stock revendiqué théorique fin de mois est négatif");
        $this->addControle('vigilance', 'vrac_detail_negatif', "Le volume qui sera enlevé sur le contrat est supérieur au volume restant");
        $this->addControle('vigilance', 'crd_negatif', "Le nombre de CRD ne dois pas être négatif");
        $this->addControle('vigilance', 'documents_annexes_erreur', "Les numéros de document d'accompagnement saisis en annexe sont mal renseignés.");
        $this->addControle('vigilance', 'siret_absent', "Le numéro de siret n'a pas été renseigné");
        $this->addControle('erreur', 'no_accises_absent', "Le numéro d'accise n'a pas été renseigné");
        $this->addControle('vigilance', 'frequence_paiement_absent', "La fréquence de paiement aux douanes n'a pas été renseigné");

        $this->addControle('erreur', 'observations', "Les observations n'ont pas été renseignées");
        $this->addControle('erreur', 'replacement_date', "Pour tout replacement, la date de sortie du produit est nécessaire. Vous ne l'avez pas saisi");

    }

    public function controle() {
        $total_entrees_replis = 0;
        $total_sorties_replis = 0;
        $total_entrees_declassement = 0;
        $total_sorties_declassement = 0;
        $total_entrees_transfert_appellation = 0;
        $total_sorties_transfert_appellation = 0;
        $total_entrees_excedents = 0;
        $total_entrees_manipulation = 0;
        $total_sorties_destructionperte = 0;

        $total_mouvement_absolu = 0;
        foreach ($this->document->getProduitsDetails() as $detail) {

            $total_mouvement_absolu += $detail->total_entrees + $detail->total_sorties;

            $entrees_excedents = ($detail->entrees->exist('excedents'))? $detail->entrees->excedents : 0.0;
            $entrees_retourmarchandisetaxees = ($detail->entrees->exist('retourmarchandisetaxees'))? $detail->entrees->retourmarchandisetaxees : 0.0;
            $entrees_retourmarchandiseacquitte = ($detail->entrees->exist('retourmarchandiseacquitte'))? $detail->entrees->retourmarchandiseacquitte : 0.0;
            $entrees_retourmarchandisesanscvo = ($detail->entrees->exist('retourmarchandisesanscvo'))? $detail->entrees->retourmarchandisesanscvo : 0.0;
            $entrees_autre = ($detail->entrees->exist('autre'))? $detail->entrees->autre : 0.0;

            $sorties_destructionperte = ($detail->sorties->exist('destructionperte'))? $detail->sorties->destructionperte : 0.0;
            $sorties_autre = ($detail->sorties->exist('autre'))? $detail->sorties->autre : 0.0;

            $total_observations_obligatoires = $entrees_excedents + $entrees_retourmarchandisetaxees + $entrees_retourmarchandisesanscvo + $sorties_destructionperte + $entrees_autre + $sorties_autre;

            $produitLibelle = " pour le produit ".$detail->getLibelle();

            if ($this->isTeledeclarationDrm) {
              if($total_observations_obligatoires && (!$detail->exist('observations') || !trim($detail->observations)))
              {
                if($entrees_excedents){
                  $this->addPoint('erreur', 'observations', "Entrée excédents (".sprintf("%.2f",$entrees_excedents)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($entrees_retourmarchandisetaxees){
                  $this->addPoint('erreur', 'observations', "Entrée retour de marchandises taxées (".sprintf("%.2f",$entrees_retourmarchandisetaxees)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if ($entrees_retourmarchandiseacquitte) {
                  $this->addPoint('erreur', 'observations', "Entrée retour de marchandises acquittées (".sprintf("%.2f",$entrees_retourmarchandiseacquitte)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($entrees_retourmarchandisesanscvo){
                  $this->addPoint('erreur', 'observations', "Entrée retour de marchandises sans CVO (".sprintf("%.2f",$entrees_retourmarchandisesanscvo)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($sorties_destructionperte){
                  $this->addPoint('erreur', 'observations', "Sortie manquant (".sprintf("%.2f",$sorties_destructionperte)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($entrees_autre){
                  $this->addPoint('erreur', 'observations', "Entrée autre (".sprintf("%.2f",$entrees_autre)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
                if($sorties_autre){
                  $this->addPoint('erreur', 'observations', "Sortie autre (".sprintf("%.2f",$sorties_autre)." hl)".$produitLibelle, $this->generateUrl('drm_annexes', $this->document));
                }
              }
              if(($entrees_retourmarchandisetaxees + $entrees_retourmarchandiseacquitte + $entrees_retourmarchandisesanscvo) && (!$detail->exist('replacement_date') || !$detail->replacement_date)) {
                $this->addPoint('erreur', 'replacement_date', $produitLibelle, $this->generateUrl('drm_annexes', $this->document));
              }
            }

            if ($detail->total < 0) {
                $this->addPoint('vigilance', 'total_negatif', $detail->getLibelle(), $this->generateUrl('drm_edition_detail', $detail));
            }

            if($detail->getConfig()->entrees->exist('repli') && $detail->entrees->exist('repli') && $detail->sorties->exist('repli')){
                  $total_entrees_replis += $detail->entrees->repli;
                  $total_sorties_replis += $detail->sorties->repli;
            }
            if($detail->getConfig()->entrees->exist('declassement')){
                $total_entrees_declassement += $detail->entrees->declassement;
                $total_sorties_declassement += $detail->sorties->declassement;
            }

            $total_entrees_excedents += ($detail->entrees->exist('excedents')) ? $detail->entrees->excedents : 0;
            $total_entrees_manipulation += ($detail->entrees->exist('manipulation')) ? $detail->entrees->manipulation : 0;

            $total_sorties_destructionperte += ($detail->sorties->exist('destructionperte')) ? $detail->sorties->destructionperte : 0;

            if (!$detail->getConfig()->entrees->exist('transfertsrecolte')) {
                continue;
            }

            $total_entrees_transfert_appellation += $detail->entrees->transfertsrecolte;
            $total_sorties_transfert_appellation += $detail->sorties->transfertsrecolte;
            if($detail->total_revendique  > $detail->total){
                $this->addPoint('vigilance', 'revendique_sup_initial', $detail->getLibelle(), $this->generateUrl('drm_edition_detail', $detail));
            }
        }

        $volumes_restant = array();
        if (!$this->isTeledeclarationDrm && !DRMConfiguration::getInstance()->isVracCreation()) {
            foreach ($this->document->getMouvementsCalculeByIdentifiant($this->document->identifiant, $this->isTeledeclarationDrm) as $mouvement) {
                if ($mouvement->isVrac()) {
                    $vrac = $mouvement->getVrac();
                    if (!$vrac) {
{'fraction_non_alphanumeric': 0.1467895191477109, 'fraction_numerical': 0.004031097034264325, 'mean_word_length': 3.366607995976867, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 275, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2497354', 'n_tokens_mistral': 5690, 'n_tokens_neox': 5516, 'n_words': 884}