ERP en LOGICIEL LIBRE dédié aux PME-PMI

           Devenez partenaire Principal ou Majeur de Neogia

Ayez l'esprit Libre, partagez vos connaissances!!

Cet espace est communautaire et est basé sur les contributions de chacun. N'hésitez pas a créer de nouveaux documents en suivant les bonnes pratiques.

Documentation technique Lettrage automatiques factures paiments


Contents

Principe

Dans un système configuré, les factures et paiements se génèrent au travers de l'évolution des commandes et des expéditions. L'intégration comptable récupère ces évènements pour les transformer en évènement comptable.

Or, pour vérifier depuis la comptabilité que les factures sont bien payées, il est nécessaire d'effectuer un lettrage des écritures de vente. Ce travail devient vite fastidieux lorsque nous sommes dans un système automatisé.

La solution est donc d'analyser la gestion et d'en ressortir les factures et le paiement correspondant afin d'effectuer les lettrages des écritures de vente et des écritures de banque associées.

Cette opération est idéalement à effectuer après chaque intégration, afin de vérifier quand une facture ou un paiement est passé en comptabilité, s'il clôture une facture ou un paiement.

Algo

Déclenchement du lettrage

Le lettrage est à effectuer après chaque intégration dans la comptabilité. Afin d'être sûr de travailler sur l'ensemble des écritures intégrées, le déclenchement s'effectue par le biais d'un seca sur le service d'intégration.

Lors de son déclenchement, la fonction appelée récupère les paramêtres de recherche d'intégration, puis, re-effectue dans le cache cette recherche en y appliquant un autre filtre seulement sur les écritures d'intégration, avec pour évènement, une facture ou un paiement.

Pour chaque écriture récupérée, il faut lister les paiements applications associés. Ensuite, trois cas se présentent :

  1. Le PA est en double dans la liste et la F et le P en relation ne sont associés qu'à un PA et PA.amout = F.amount = P.amount => La F et le P sont bien associés entre eux et sont présents tous les deux dans l'intégration.
  2. Le PA est présent une fois dans la liste et la F et le P en relation ne sont associés que à un PA et PA.amout = F.amount = P.amount => La F et le P sont bien associés entre eux mais seulement un est présent dans l'intégration.
  3. Le PA est associé à une F ou un P composé de plusieurs PA. Le problème de lettrage passe sur une problèmatique de graphe car la lettre ne peut s'effectuer que si le graphe dans son ensemble est équilibré.

Lettrage

Pour chaque écriture d'intégration associée à un lettrage, on récupère les lignes d'écriture comptable et on les hash par leur compte. Deux tables de hashage :

[ ${aType}_${account} | List<GlEntry> ]
[ ${aType}_${account} | amount ]

Le premier comporte la liste des lignes d'écriture associées au compte. Le deuxième reprend le montant de ces dernières. Si le montant == 0 et que la liste est non vide, on lettre l'ensemble.


Algorythme

listInt <- écritures d'intégration d'évènement Facture ou Paiement venant d'être intégré
listPASimple <- nouvelle liste
listPAComplex <- nouvelle liste
pour chaque listInt
  si Int d'évènement Facture
    si Int.Facture.getPAs() == 1
     listPASimple.add( Int.Facture.getPAs() )
    sinon
     listPAComplex.addAll( Int.Facture.getPAs() )
  sinon si Int d'évènement Paiement
    si Int.Paiement.getPAs() == 1
     listPASimple.add( Int.Paiement.getPAs() )
    sinon
     listPAComplex.addAll( Int.Paiement.getPAs() )

A_lettrer <- nouvelle liste
doublons <- supprimer_doublons( listPASimple )
pour chaque doublon
 si PA.montant = PA.Facture.montant = PA.Paiement.montant
    A_lettrer.add( Facture.Int )
    A_lettrer.add( Paiement.Int )
   
pour chaque listPASimple 
 si PA.Paiement.getPAs() == 1 && PA.Facture.getPAs() == 1
    si PA.montant = PA.Facture.montant = PA.Paiement.montant
     && PA.Paiement.Int.status = PA.Facture.Int.status = "Intégré"
      A_lettrer.add( Facture.Int )
      A_lettrer.add( Paiement.Int )
 sinon
    listPAComplex.add( PA )

pour chaque listPAComplexe
  //Implementer recherche graphe, valide que si le graphe est équilibré

pour chaque A_lettrer
 pour chaque element.Ligne_ecritures
  hashligne_ecriture( ligne_ecriture)

pour chaque élément de la table de hashage
 si montant = 0 && nb de ligne_ecriture > 0
   lettrer( element )