Facturation des clients
Présentation
L'objet de cette page est de présenter les points généraux de la facturation des clients dans la version 4 d'OpenFlyers.
Il existe deux types de facturation :
- La facturation d'une activité qui s'effectue lors de la saisie d'une fermeture d'activité.
- La facturation d'une vente de produit qui s'effectue lors de la saisie d'un achat de produit.
En plus de la génération d'une ou plusieurs factures, des écritures comptables sont automatiquement générées. Le nombre d'écritures générées dépend de la fusion des écritures.
Suite à leur validation, les factures sont automatiquement générées et envoyées par email dans la minute qui suit et non immédiatement. Cela afin d'éviter un temps d'attente gênant pour l'utilisateur qui valide, du fait du temps d'exécution nécessaire pour la génération des factures PDF et de leur envoi par email.
Numérotation des factures : Dans la version 4 d'OpenFlyers, lors de la validation d'une facturation client (heures de vols, produits non stockés, etc.), la facture associée est créée avec un numéro de facture unique. Ce numéro de facture correspond au dernier numéro de facture client créé augmenté de 1. Ainsi, si la facture précédente avait le numéro 307, alors la nouvelle facture a le numéro 308. Cet algorithme est conforme à la législation française concernant la numérotation des factures qui prévoit que : la numérotation des factures est représentée par un numéro unique basé sur une séquence chronologique continue, sans rupture.
Alertes générées par le moteur de facturation
Les alertes suivantes sont générées lors de la saisie d'une activité.
L'utilisateur n'a pas de compte de type XXX
Cette alerte s'affiche lorsqu'une règle de facturation est applicable et que le compte XXX est manquant pour l'utilisateur concerné.
Une règle est considérée comme applicable à partir du moment où le domaine d'application de la règle la rend applicable pour la saisie considérée. Une règle peut être applicable sans générer forcément une écriture comptable. C'est le cas lorsque le montant de l'écriture comptable est nul.
Envoi automatique de chaque facture client
Il est possible de configurer l'envoi automatique de chaque facture client. Il faut pour cela activer le paramètre Envoyer un email pour chaque facture. Si ce paramètre n'est pas actif, l'utilisateur a la possibilité d'activer pour lui l'envoi automatique de chaque facture. Si le paramètre est actif, mais que l'utilisateur ne souhaite pas recevoir un e-mail pour chaque facture, celui-ci a la possibilité de désactiver cette fonctionnalité à condition que la structure le permette.
Suite à une validation, l'e-mail n'est pas envoyé immédiatement mais dans la minute qui suit l'opération. Cela afin d'éviter à l'utilisateur un potentiel temps d'attente qui serait causé par la génération des factures PDF et l'envoi des emails. L'opération se fait donc dans un processus indépendant qui s'exécute toutes les minutes.
Factures multiples
Les groupes de facturation permettent la séparation des écritures dans différentes factures. Cela permet ainsi de générer automatiquement plusieurs factures lors d'une seule saisie d'une vente de produit ou d'un vol.
L'affectation du groupe de facturation suit les contraintes suivantes :
- Pour un même groupe de facturation, il ne peut y avoir plusieurs comptes client ou utilisateur.
- Les comptes associés à un même groupe de facturation doivent tous être de la même comptabilité.
Mettre à jour les tarifs
Moteur de facturation
Cascade d'écritures comptables
Les moteurs de facturation des activités et des produits fonctionnent avec le concept d'écritures en cascade.
Introduction du principe :
- En général, dans une facturation, L'utilisateur final est normalement débité et le compte produit correspondant crédité
- Si l'utilisateur a droit à ce qu'une partie du coût de l'activité soit facturé à l'organisme dont il dépend, une autre écriture comptable vient créditer son compte utilisateur et débiter le compte client de l'organisme concerné
- Enfin, les écritures sont fusionnées de telle sorte que l'utilisateur ne sera finalement débité que du montant devant être réellement à sa charge.
Les détails du principe de fonctionnement sont les suivants :
- Les règles de facturation s'appliquent les unes après les autres, de la première à la dernière en partant du haut, lorsqu'elles sont applicables selon les critères de leur domaine
- Les domaines d'application pour la facturation des activités sont : Les profils en place gauche et/ou en place droite, les types de ressources, les types de vols, les types de vols exclus
- Les domaines d'application pour la facturation des produits sont : Les profils, les produits commandés
- Le symbole * dans un domaine signifie "N'importe quel domaine"
- Chaque règle peut donc générer un couple d'écriture débit/crédit
- Une fois que toutes les écritures sont générées elles sont fusionnées afin de diminuer leur nombre et de supprimer les écritures qui s'annulent.
L'objectif est de faciliter la construction des règles de facturation en partant du général pour aller vers le spécifique :
- Il faut d'abord créer une ou des règles de facturation générales. Ainsi, pour la facturation des activités, il faut d'abord définir les tarifs en "solo". Pour faire un parallèle avec la technique de façonnage de la poterie, on construit ainsi d'abord une forme homogène générale.
- Ensuite, on crée des règles de facturation spécifiques qui vont "détourner" les règles générales soit en redirigeant le débit ou le crédit, soit en l'annulant soit en en modifiant le montant. Toujours dans le parallèle avec la poterie, on façonne alors les particularités en rajoutant des trous ou des volumes spécifiques.
- Enfin, dans certains cas et notamment lorsque la structure est assujettie à la TVA, on calcule un montant net applicable et on en déduit la TVA.
Voici un exemple du résultat possible avec le fonctionnement en cascade :
Nous supposons que l'utilisateur effectue une activité dont le coût est de 200 €. La moitié de cette activité, soit 100 € est prise en charge par un organisme tiers.
- Dans un premier temps, grâce à une règle générale, l'utilisateur sera débité de 200 € et le compte produit crédité de 200 € :
Compte | Débit | Crédit |
---|---|---|
Utilisateur | 200.00 € | |
Compte produit | 200.00 € |
- Dans un second temps, une nouvelle règle particulière va identifier que l'utilisateur rentre dans le cadre où un organisme tiers doit prendre en charge la moitié du coût. Cette règle va générer une écriture qui va débiter le compte de l'organisme tiers de 100 € et créditer le compte de l'utilisateur de 100 €.
Compte | Débit | Crédit |
---|---|---|
Utilisateur | 200.00 € | |
Compte produit | 200.00 € | |
Organisme | 100.00 € | |
Utilisateur | 100.00 € |
- Dans un troisième et dernier temps, les écritures seront fusionnées.
Au final, les écritures comptables générées devraient être les suivantes s'il n'y a pas de gestion de la TVA :
Compte | Débit | Crédit |
---|---|---|
Utilisateur | 100.00 € | |
Organisme | 100.00 € | |
Compte produit | 200.00 € |
Au final, les écritures comptables générées devraient être les suivantes s'il y a gestion de la TVA (exemple avec une TVA à 20%) :
Compte | Débit | Crédit |
---|---|---|
Utilisateur | 100.00 € | |
Organisme | 100.00 € | |
Compte produit | 160.00 € | |
TVA collectée (445710) | 40.00 € |
Fonctionnement et nommage des variables associées aux formules de facturation
Attention : une limitation du moteur ne permet pas de nommer une variable avec un nom étant le complément d'un autre nom. Ainsi s'il existe une variable @variable alors il ne faut pas créer une autre variable ayant comme nom @variable2. Par contre, il est possible d'avoir @variable1 et @variable2.
Voici comment procéder pour configurer la notion de variable-formule dans le gestionnaire de facturation :
- Aller dans Admin > Ventes > Facturation > Activités ou Admin > Ventes > Facturation > Produits selon si l'on souhaite paramétrer la facturation des activités ou des produits.
- Choisir une des règles. Par exemple, la première en haut de la liste et éditer.
- Dans le champ Nom de variable associé à la formule, mettre "XYZ" et valider le formulaire.
- Choisir une autre règle. En particulier, une règle qui va se déclencher avec la première règle lors de la saisie d'une fermeture de vol ou d'une vente de produit puis éditer
- Dans le champ Nom de variable associé à la formule, laisser cela vide. Dans le champ formule, l'éditer pour rajouter la variable associée à la première formule.
- Par exemple, avant on a : $a/200
- Après, on aura : $a/200+@XYZ
- L'utilisation d'une variable associée à une formule se fait en le précédant d'un @.
- Cocher Formule seulement si la règle ne doit pas générer des entrées comptables. Cela est pratique pour créer des valeurs de variable-formule intermédiaire.
- Dans le cas d'une règle de facturation des activités, associer la règle à un champ additionnel de catégorie Entrée comptable ou à aucun champ.
- Tester une saisie d'une fermeture de vol ou d'une vente de produit.
Voici comment cela se procède techniquement du côté de l'application pour tarifier :
- Recherche de toutes les règles de facturation dont les critères correspondent pour la saisie et qui sont applicables à celle-ci. Par exemple, deux règles sont trouvées.
- Récupération de la première règle pour analyser la formule de facturation. Visualisation qu'une variable (@XYZ) est associée à la formule de la règle alors lancement du calcul de la formule de facturation qui donnera 66,50. Application d'un arrondi sur le nombre de chiffre après la virgule en fonction de la comptabilité du compte impacté. Ensuite, stockage en mémoire que la variable @XYZ vaut 66,50.
- Récupération de la seconde règle pour analyser la formule de facturation. Visualisation qu'il n'existe pas de variable associée à la formule.
- Vu que la variable @XYZ a été trouvé dans la formule, récupération de sa valeur qui a été mise en mémoire puis remplacement de @XYZ par cette valeur, ici 66,50 même si les domaines d'application de la première règle de facturation diffèrent de la seconde.
- Ensuite, lancement du calcul de la formule de facturation qui donnera 100+66,50. Application d'un arrondi sur le nombre de chiffre après la virgule en fonction de la comptabilité du compte impacté.
- Dans le cas où dans la première règle, il n'y avait pas de variable associé à la formule. Au niveau de la seconde règle, la variable @XYZ serait remplacée par 0 car elle n'était pas stockée en mémoire.
- Dans le cas où une règle de facturation a été associée à un champ additionnel :
- Le champ additionnel prendra comme valeur le résultat de la formule.
- Si plusieurs formules ont été appliquées pour le même champ additionnel alors c'est la dernière formules qui sera prise en compte.
- Lors de la génération des entrées comptables par le moteur, les champs additionnels vont être associés à ces entrées comptables.
Exemple d'application et de non-application pour la facturation des activités
Voici un exemple de liste de règles de facturation :
Formule | Variable | Nom de la règle | Ressources concernées | Types d'activités concernés | Compte à débiter | Compte à créditer |
---|---|---|---|---|---|---|
50 | X | Règle 1 | Ressource F-GAX | Local | Pilote | Ressource F-GAX |
@X+100 | Règle 2 | Ressource F-GAX | Instruction | Pilote | Ressource F-GAX | |
@X+150 | Règle 3 | Ressource F-TYH | Local | Pilote | Ressource F-TYH |
Saisie de vol avec comme types "Local" + "Instruction" et ressource "Ressource F-GAX"
Dans cet exemple, les règles 1 et 2 s'appliquent.
Au niveau du calcul du coût de vol, cela va procéder ainsi :
- Récupération de la règle 1, la formule donne 50
- Le compte "Pilote" est débité de 50 puis le compte "Ressource F-GAX" est crédité de 50 conformément à la règle 1
- Stockage en mémoire de 50 dans la variable X
- Récupération de la règle 2, la formule va donner X+100 soit 50+100
- Le compte "Pilote" est débité de 150 puis le compte "Ressource F-GAX" est crédité de 150 conformément à la règle 2
Saisie de vol avec comme type "Instruction" et ressource "Ressource F-GAX"
Dans cet exemple, seule la règle 2 s'applique.
Au niveau du calcul du coût de vol, cela va procéder ainsi :
- Récupération de la règle 2, la formule va donner donner X+100 soit 0+100 vu qu'il n'y a pas eu de stockage en mémoire de la variable X et que la règle 1 n'est pas applicable
- Le compte "Pilote" est débité de 100 puis le compte "Ressource F-GAX" est crédité de 100 conformément à la règle 2
Saisie de vol avec comme type "Instruction" et ressource "Ressource F-TYH"
Dans cet exemple, seule la règle 3 s'applique.
Au niveau du calcul du coût de vol, cela va procéder ainsi :
- Récupération de la règle 3, la formule va donner donner X+150 soit 0+150 vu qu'il n'y a pas eu de stockage en mémoire de la variable X
- Le compte "Pilote" est débité de 150 puis le compte "Ressource F-TYH" est crédité de 150 conformément à la règle 3
Exemple d'application et de non-application pour la facturation des produits
Voici un exemple de liste de règles de facturation :
Formule | Variable | Nom de la règle | Produits concernés | Compte à débiter | Compte à créditer |
---|---|---|---|---|---|
50 | X | Règle 1 | Bouquin | Principal | Boutique diverse |
@X+100 | Règle 2 | Bouquin Porte-clé |
Principal | Boutique diverse | |
@X+150 | Règle 3 | Carte | Principal | Boutique vol |
Saisie d'une vente de produit "Bouquin"
Dans cet exemple, les règles 1 et 2 s'appliquent.
Au niveau du calcul du coût de la vente, cela va procéder ainsi :
- Récupération de la règle 1, la formule donne 50
- Le compte "Principal" est débité de 50 puis le compte "Boutique diverse" est crédité de 50 conformément à la règle 1
- Stockage en mémoire 50 dans la variable X
- Récupération la règle 2, la formule va donner X+100 soit 50+100
- Le compte "Principal" est débité de 150 puis le compte "Boutique diverse" est crédité de 150 conformément à la règle 2
Saisie d'une vente de produit "Porte-clé"
Dans cet exemple, seule la règle 2 s'applique.
Au niveau du calcul du coût de la vente, cela va procéder ainsi :
- Récupération de la règle 2, la formule va donner donner X+100 soit 0+100 vu qu'il n'y a pas eu de stockage en mémoire de la variable X et que la règle 1 n'est pas applicable
- Le compte "Principal" est débité de 100 puis le compte "Boutique diverse" est crédité de 100 conformément à la règle 2
Saisie d'une vente de produit "Carte"
Dans cet exemple, seule la règle 3 s'applique.
Au niveau du calcul du coût de la vente, cela va procéder ainsi :
- Récupération de la règle 3, la formule va donner donner X+150 soit 0+150 vu qu'il n'y a pas eu de stockage en mémoire de la variable X
- Le compte "Principal" est débité de 150 puis le compte "Boutique vol" est crédité de 150 conformément à la règle 3
Variables correspondant à des champs métiers
Il est possible d'inclure dans les formules de calculs des variables qui représentent les valeurs de champs métiers.
Voir le chapitre Récupérer la valeur d'un champ métier dans les règles de tarification des activités.
Facturation client
Fonctionnement de la facturation client
Les lignes de facturation sont générées dans l'ordre d'application des règles de facturation, soit de la première à la dernière en partant du haut.
Seules les écritures de débit ou de débit ayant un Groupe de facturation sont utilisées en tant que ligne de facturation.
L'ordre des lignes sur une facture client correspond à celui des règles de facturation les ayant générées sauf pour les autres écritures dont le produit est TVA qui sont regroupées en fin de facture.
Mise en place de la facturation client
OpenFlyers est prévu pour que la saisie d'une vente (produit ou activité) génère une ou plusieurs factures client. Cela se paramètre au travers des règles de facturation.
Remplir les différents champs pour les formules :
- Quantité / taux
- Prix unitaire hors-taxe / TVA
Deux champs Groupe de facturation sont présents : l'un pour l'écriture de débit et l'autre pour le crédit. Y Associer un groupe de facturation permet que l'écriture générée par la règle soit incluse en tant qu'entrée de facture.
Les choix possibles sont :
- Non inclus dans une facture pour que l'écriture ne soit pas incluse dans la facture client.
- X : Un nombre indiquant dans quelle facture client l'écriture va être incluse.
Mettre en place une seule facture client pour la saisie
- Editer les règles de facturation applicables qui doivent figurer dans la facture client
- Y affecter le même groupe de facturation à ces règles. Par exemple 1.
Mettre en place plusieurs factures client pour la saisie
- Editer les règles de facturation applicables qui doivent figurer dans la première facture client.
- Y affecter un numéro de facturation à des règles. Par exemple 1.
- Editer les règles de facturation applicables qui doivent figurer dans la second facture client.
- Y affecter un groupe de facturation à des règles autre que 1. Par exemple 2.
- Editer les règles de facturation applicables qui doivent figurer dans la troisième facture client.
- Y affecter un groupe de facturation à des règles autre que 1 et 2. Par exemple 3.
- Répéter ce processus pour chacune des différentes factures à créer.
Facturation des activités
Nécessite le droit Paramétrage de la facturation.
Le résultat final dépend de la fusion des écritures.
Voir également le fonctionnement des variables associées aux formules de facturation.
Facturation périodique
Nécessite le droit Paramétrage de la facturation.
Fonctionnement de la facturation périodique
La facturation périodique se déclenche tous les jours aux alentours de minuit, fuseau Europe/Paris. Elle procède ainsi :
- Récupération de toutes les tâches de facturation périodique contenant l'évènement every(...)
- Analyse de l'évènement every(...) pour déterminer si la tâche doit être exécutée ou non pour ce jour. Si exécution :
- Analyse de la requête affectée à la tâche pour déterminer les éléments à facturer
- Récupération de toutes les règles de facturation rattachées à la tâche exécutée en faisant le lein entre la colonne Tâche de tableau Règles de facturation des activités et le nom de la tâche dans le tableau Liste des tâches de facturation périodique
- Traduction des règles et facturation
C'est le déclencheur qui détermine si les écritures comptables générées sont automatiquement validées.
Mise en place de la facturation périodique
Ajout d'un produit pour la facturation périodique
- Aller dans Admin > Ventes > Produits > Produits
- Créer un produit :
- Nom : Facturation périodique
- Type de vente : Produit périodique
- Les autres champs : A paramétrer selon les besoins
Ajout d'une tâche de facturation périodique
- Aller dans Admin > Ventes > Facturation > Périodique
- Ajouter une nouvelle ligne
- La colonne Evènement permet de définir quand va être lancée la tâche. Mettre l'un de ces textes à personnaliser :
- Pour une tâche lancée quotidiennement : every(* * *)
- Pour une tâche lancée le 1er de chaque mois : every(1 * *)
- Pour une tâche lancée tous les 1er de l'an : every(1 1 *)
- Pour une tâche lancée tous les 1er février : every(1 2 *)
- Pour une tâche lancée tous les 1er d'un mois : every(1 X *). Remplacer "X" par le numéro du mois
- Pour empêcher le lancement de la tâche, la pratique courante est de la configurer la tâche à se lancer le 1er de l'an ou un autre jour passé de l'année. Par exemple : every(1 1 *)
- Dans la colonne Requête, ajouter une requête SQL qui va permettre d'obtenir la liste des éléments à facturer
- Lorsque la cellule de la colonne Valider automatiquement les écritures est cochée, cela entraine la validation automatique des écritures créées et la génération des factures correspondantes sous format PDF.
Attention : la validation des écritures est irréversible pour respecter le principe d'inaltérabilité des données.
- La colonne Regrouper les ventes permet de regrouper les ventes par client en une seule facture ou facture pro-forma.
Lorsque les cellules des colonnes Valider automatiquement les écritures et Regrouper les ventes sont toutes les 2 cochées, les écritures sont d'abord regroupées et ensuite les factures PDF sont créées. Ce mécanisme permet de ne générer qu'une facture par client pour une période donnée.
Requête SQL de facturation périodique
Les requêtes SQL permettent de définir la liste d'éléments sur lesquels les règles de facturation périodique devront s'appliquer.
Les requêtes doivent être de type SELECT et le nom de chaque colonne doit être unique. Il est possible d'aliaser ces colonnes à un nom de variable.
Le résultat retourné doit être le suivant, peu importe l'ordre :
Donnée attendue | Présence obligatoire | Variable affectée | Valeur par défaut |
---|---|---|---|
Id de la personne en première place | OUI | %PILOT | |
Id de la personne en seconde place | NON | %PILOT2 | 0 |
Données métier : Nombre de jour entier d'une réservation | NON | %BOOKING_FULL_DAYS | 0 |
Données métier : Id de la réservation. Lorsque l'id est un nombre supérieur à zéro, un traitement spécifique est réalisé | NON | %BOOKING | |
Données métier | NON | Consulter la liste des variables |
Exemple de requête pour facturer les utilisateurs ayant une réservation le jour de l'exécution de la requête : <sql>SELECT booking_person.person_id AS '%PILOT', booking.id AS '%BOOKING' RIGHT JOIN booking_person ON (booking_person.booking_id=booking.id) WHERE DATE(booking.start_date) = UTC_DATE() AND (booking_person.place_num=0);</sql>
Exemple de requête pour facturer les utilisateurs : <sql>SELECT person.id AS '%PILOT' FROM person WHERE person.activated=1</sql>
Exemple de requête pour facturer les réservations :
- des utilisateurs ayant la place 0
- dont la date est antérieure à 3 jours inclus
- dont le type de ressource a pour id 1 ou 2
- dont l'activité a pour id 2, 4 ou 8 :
<sql>SELECT booking_person.person_id AS '%PILOT', booking.id AS '%BOOKING' FROM booking RIGHT JOIN booking_person ON (booking_person.booking_id=booking.id) RIGHT JOIN booking_resource ON (booking_resource.booking_id=booking.id) RIGHT JOIN resource ON (resource.id=booking_resource.resource_id) RIGHT JOIN booking_activity_type ON (booking_activity_type.booking_id=booking.id) WHERE (DATE(start_date) <= UTC_DATE() - INTERVAL 3 DAY) AND (booking_person.place_num=0) AND (resource.resource_type_id IN (1, 2)) AND (booking_activity_type.activity_type_id IN (2, 4, 8,));</sql>
Ajout de règles de facturation pour la tâche de facturation
- Aller dans Admin > Ventes > Facturation > Activités
- Ajouter une règle de facturation des activités
- Dans le champ Produit, sélectionner le produit périodique créé.
Dans le cas d'un Produit périodique, le champ Requête est désactivé.
- Dans le champ Tâche, choisir la tâche de facturation périodique qui déclenchera la règle de facturation. Il n'est pas possible de sélectionner la tâche "Close flight" à une règle de facturation affectée à un produit périodique.
Lancer manuellement une tâche de facturation périodique
- Aller dans Admin > Ventes > Facturation > Périodique
- Cliquer sur le bouton Exécuter à droite de chaque tâche
- Une fenêtre s'ouvre lorsque la tâche s'est réalisée ou en cas d'erreur
Les écritures générées ne sont pas automatiquement validées. Il faut les valider manuellement.
Cela permet notamment d'effectuer des tests en générant des écritures qui pourront être supprimées.
Cependant, il faut faire attention au fait que la suppression des écritures ne peut se faire que flux par flux. Aussi, s'il y a un risque de générer un nombre important d'écritures, il est préférable d'effectuer ses tests sur une recopie de la plateforme de production.
Traitement spécifique de la facturation périodique
La présence de la variable %BOOKING dans la requête SQL d'une tâche déclenche un traitement supplémentaire qui rattache les écritures générées aux réservations afin de :
- Facturer les réservations qui n'ont pas été déjà facturées
- Facturer le surplus pour les réservations qui ont été modifiées pour rallonger la durée de réservation
Regrouper les ventes par client
Dans plusieurs situations les ventes d'un client peuvent être regroupées :
- à la suite de la facturation périodique,
- lors de la validation des activités,
- lors de la validation d'un panier par l'utilisateur ou par un gestionnaire.
Le mécanisme est le suivant :
- Les écritures de ventes non validées (c'est à dire les factures pro-formas) sont regroupées par compte client-utilisateur sous un même numéro de référence
- Les écritures sont validées et pour chaque client une facture au format PDF est générée
- Pour la facturation périodique, l'option Valider automatiquement les écritures doit être cochée pour que cette étape soit réalisée
- Les factures de comptabilité différentes ne sont pas regroupées.