Régie, facturation, encaissement...
1. Migration des données
Points importants pour les bibliothèques qui utilisaient le code javascript spécifique mis en place par BibLibre :
1) les codes des types de crédits et des types de paiement utilisés dans les lignes de comptes sont repris à la mise à jour, et visibles dans les nouvelles tables Types de crédit et Types de débit. Les libellés correspondants ne sont pas repris automatiquement, et devront être mis à jour à la main, par BibLibre ou par le client, en reprenant pour chaque code le libellé défini dans le javascript.
2) le mode de fonctionnement, qui était particulier (on enregistrait un paiement dans l'onglet crédit, de façon à correspondre à une dette dans l'onglet débit), n'a plus lieu d'être : un paiement est enregistré directement en lien avec sa facturation. En conséquence, dans le tableau des comptes, une facture sera bien indiquée comme payée.
2. Configuration
2.1. Types de crédit et types de débit
Les types de crédit et de débit étaient définis jusqu'à présent dans des listes de valeurs autorisées (MANUAL_INV) ; désormais ils sont gérés, indépendamment les uns des autres, dans des tables distinctes account_credit_types et account_debit_types ; ils peuvent être limités à un ou plusieurs sites, ce qui est géré dans les tables account_credit_types_branches et account_debit_types_branches.
Le paramétrage des types de crédit et de débit se fait dans Administration / Comptabilité / Types de débit (ou Type de crédit, de façon parfaitement similaire).
Type de débit
- Ajouter un type de débit (type de facture) :
- Cliquer le bouton Nouveau type de débit
- Saisir le code : de préférence sans espace ni caractères accentués ; cette valeur sera enregistrée dans les lignes de comptes de la base de données
- Il est possible de définir un montant par défaut pour le type de débit, qui sera positionné automatiquement lors de la création d'une facture manuelle pour les adhérents (mais pourra être modifié)
- Description : ce qui sera affiché à l'écran
- Peut être ajouté manuellement : ce débit pourra être imputé à un lecteur manuellement.
- Limiter aux bibliothèques : sélectionner une ou plusieurs bibliothèques pour y limiter l'accès à ce type de débit ; par défaut sera accessible à tous les sites (de même que quand Tous les listes est sélectionné).
Certains types de débits peuvent être positionnés automatiquement, et ne sont pas dans la liste ci-dessus :
- ACCOUNT : inscription
- ACCOUNT_RENEW : renouvellement d'inscription
- RESERVE_EXPIRED : durée de mise à disposition d'une réservation expirée (quand ceci est soumis à pénalité)
- LOST : exemplaire perdu à re-payer
- sundry : ??
- NEW_CARD : nouvelle carte
- OVERDUE : amendes de retard
- PROCESSING :
- RENT : frais de location (les 3 suivantes liées aux frais de location)
- RENT_DAILY
- RENT_RENEW
- RENT_DAILY_RENEW
- RESERVE : frais de réservation (quand réservation payante)
Le tableau, triable et filtrable, affiche la liste des types de débit et leurs caractéristiques.
Type de crédit
L'ajout d'un type de crédit se fait selon une procédure similaire.
Certains types de crédit peuvent être positionnés automatiquement :
- CREDIT : crédit
- PAYMENT : paiement
- FORGIVEN : ??? différence avec perte et profit ?
- LOST_RETURN : exemplaire perdu rendu
- WRITEOFF : perte et profit
2.2. Préférences système
Les préférences système liées à la régie sont les suivantes (Administration / Préférences système / Comptabilité) :
AutoCreditNumber
: permet de définir une numérotation automatique des reçus, et de choisir le type de numérotationAccountAutoReconcile
: permet de tenir compte automatiquement des crédits et des débits à chaque transactionFinePaymentAutoPopup
: permet d'afficher un popup pour l'impression des reçus de paiement à chaque paiementUseCashRegisters
: permet de définir des caisses pour enregistrer les paiements. Une caisse peut être rattachée à un site ; un montant initial de caisse peut être saisi.
2.3. Valeurs autorisées
PAYMENT_TYPE : les types de paiements sont toujours dans cette liste de valeurs autorisées
Une valeur par défaut est : CASH (a priori requise pour l'usage des caisses?)
3. Fonctionnement
Les factures et encaissements sont gérés dans l'onglet Comptabilité de la fiche adhérent.
3.1. Onglet Transactions
Le tableau récapitule la liste des factures et des paiements, qu'ils aient été ajoutés manuellement ou automatiquement.
Le montant d'une facture est positif en rouge, le montant d'un paiement ou d'un crédit est négatif en vert.
Différentes actions sont possibles pour les factures ou les paiements, accessibles dans la colonne Actions du tableau, pour chaque ligne.
Pour une facture :
- Imprimer : ceci imprime la facture en suivant le modèle de notification paramétrable ACCOUNT_DEBIT
- Détails : affiche dans une page dédiée le détail de la facture ainsi que le paiement associé dans le cas où elle a été payée
- Payer : bascule vers l'onglet Encaisser pour cette facture
- Annuler la facture : permet d'annuler une facture manuelle (on ne peut pas annuler les factures automatiques comme les frais d'inscriptions ou les amendes de retard ; dans ce cas passer en Pertes et profits) ; dans ce cas la mention (Annulé) s'affiche dans la colonne Type de compte, et le montant dû passe à 0.
Pour un crédit :
- Imprimer : ceci imprime le reçu de paiement en suivant le modèle de notification paramétrable ACCOUNT_CREDIT
- Détails : affiche dans une page dédiée le détail du crédit / du paiement ainsi que le détail des frais payés
- Annuler le paiement : il est possible d'annuler un paiement, dans ce cas le montant total à recouvrer est mis à jour, et la ligne de paiement se voit affecter un montant de 0, et une mention (Annulé) dans la colonne Type de compte
3.2. Créer une facture manuelle
Aller dans l'onglet Créer facture manuelle
Choisir :
- le type de débit : les types sont définis dans Administration / types de débit, et sont limités par site : la bibliothèque ne voit que les types qui la concernent
- Code barre : facultatif, si le facture concerne un exemplaire
- Description : par défaut reprend le libellé du type de débit, peut être modifiée
- Note : note complémentaire
- Montant : le montant (ce montant peut être positionné par défaut s'il est défini dans le type de débit)
Une fois les informations saisies, il est possible :
- d'enregistrer : la ligne sera alors visible dans Transactions, et dans Encaisser
- d'enregistrer et payer directement dans la foulée
3.3. Créer un crédit manuel
A partir de l'onglet Créer crédit manuel
- Type de crédit : les types sont définis dans Administration / Types de crédit, et sont limités par site : la bibliothèque ne voit que les types qui la concernent
- Code barre : facultatif, si la facture concerne un exemplaire
- Description : pour préciser le crédit
- Note : note complémentaire
3.4. Encaisser
L'encaissement d'une facture est possible à partir de plusieurs points au choix :
1) Directement lors de la validation de la facture
2) Onglet Transactions : choisir le bouton Payer dans la colonne Actions de la facture correspondante
- bouton Payer pour une ligne de facture
- bouton Payer la sélection après avoir sélectionné les factures (la sélection de toutes les factures est faite par défaut), pour payer plusieurs factures en une seule opération.
Dans le tableau des factures à encaisser :
- si la préférence système
AccountAutoReconcile
est sur "Ne pas réconcilier automatiquement", les crédits s'il en existe ne sont pas automatiquement déduits de la somme à payer, mais visibles : pour les déduire, cliquer sur le bouton Appliquer (suivi de la somme à déduire). Vous pouvez ne pas les déduire.
Si le choix est fait d'Appliquer les crédits, il ne reste qu'une ligne à payer, avec le restant dû :
- si la préférence système
AccountAutoReconcile
est sur "Réconcilier automatiquement", les crédits sont automatiquement déduits et on ne voit que le total à facturer
Une fois la façon de payer choisie, on peut procéder au paiement :
3.5. Le paiement est en lien avec une facture
Dans l'onglet Transactions, il est possible de voir, pour chaque facture, la façon dont elle a été soldée, en cliquant sur le bouton Détails dans la colonne Action :
- Détail des frais : récapitule la facture
- Paiements : récapitule les paiements pour cette facture, en une fois ou en plusieurs fois, ou avec une déduction de crédits comme c'est le cas dans l'exemple ci-dessous :
3.6. Numérotation de facture
Si la préférence système "AutoCreditNumber" est activée avec le choix d'un modèle d'incrémentation, chaque facture se verra affecter un numéro unique, visible dans le tableau des Transactions, colonne Numéro de paiement.
A noter que si le paiement est annulé, il conserve son numéro.
Les numérotations actuellement possibles sont :
- <year>-0001 : 2020-0001, 2020-0002…
yyyymm0001 : CHY-JR2020040001, CHY-JR2020040002… CHY-JR20200450001…- numérotation incrémentale simple à partir de 1 : 1, 2, 3…
4. Notifications et tickets
Différentes notifications sont associées aux opérations de facturation et d'encaissement, et configurables dans Outils / Notifications et tickets.
Le reçu de facturation est ACCOUNT_CREDIT
à compléter
5. Rapports de régie
Notes : il faut tenir compte d'une nouvelle table [account_offsets] présente depuis la version 17.11 afin de pouvoir 'lier ' chaque type de facture à chaque encaissement.
Exemples de rapport :
Exemple 1 : Encaissement/Type facture/Catégorie Adherents/Dates/Nom Banque/N. Chèque/Id de l'agent
select date_format(a.date,'%d/%m/%y') as Date_Paiement, case when ac2.debit_type_code ='LOST' then 'Exemplaire perdu'/*<== CODE STANDARD de KOHA*/ when ac2.debit_type_code ='NEW_CARD' then 'Nouvelle carte'/*<== CODE STANDARD de KOHA*/ when ac2.debit_type_code ='MANUAL' then 'Divers'/*<== CODE STANDARD de KOHA*/ when ac2.debit_type_code ='ACCOUNT' then 'Inscription' /*Nouvelle inscription -CODE STANDARD de KOHA*/ when ac2.debit_type_code ='ACCOUNT_RENEW' then 'Inscription' /*Ré-inscription- CODE STANDARD de KOHA*/ when ac2.debit_type_code ='OVERDUE' then 'Pénalité de retard'/*<== CODE STANDARD de KOHA*/ else 'AUTRE' end as Type_facture, a.payment_type as Type_Paiement, b2.categorycode as Type_abonnement, concat(b2.surname, ' ',b2.firstname) as Nom_Prénom, b2.cardnumber as N_Carte, b4.value as 'Nom de la Banque', /*Valeur du champ supplémentaire 1*/ b5.value as 'Numéro du chèque',/*Valeur du champ supplémentaire 2*/ substring_index(convert((o.amount),DECIMAL(6,2)),'-',-1) as 'Montants encaissés' from account_offsets o LEFT JOIN accountlines a ON (o.credit_id=a.accountlines_id) LEFT JOIN accountlines ac2 ON (o.debit_id=ac2.accountlines_id) LEFT JOIN borrowers b2 ON (b2.borrowernumber=a.borrowernumber) LEFT JOIN additional_field_values b4 ON (b4.record_id=o.debit_id) LEFT JOIN additional_field_values b5 ON (b5.record_id=o.debit_id) LEFT JOIN authorised_values a2 ON (a.register_id=a2.authorised_value) LEFT JOIN authorised_values a4 ON (a.manager_id=a4.authorised_value) where o.amount like '-%' and a2.category='CAISSES' /*<==VA avec les codes Koha de chaque caisse.Cf Admin> gestion des caisses*/ and a4.category='CAISSES'/*<==VA avec les codes Koha de chaque agent.*/ and b4.field_id=1 /*<==Code Koha du champ supplémentaire.cf Admin>Champs supplémentaires*/ and b5.field_id=2 /*<==Code Koha du champ supplémentaire.cf Admin>Champs supplémentaires*/ and a.date >=<<date sup. égale à |date>> and a.date <=<<date inf. égale à|date>> and a2.authorised_value=<<CAISSES|Caisse>> and a4.authorised_value=<<AGENTS|Agent>> group by Type_facture,Type_Paiement,a.date,Nom_Prénom,b2.cardnumber
Exemple 2 : Encaissements/Type facture/Catégorie Adherents/Nom Banque/N. Chèque/Dates/Poste[caisse]
select date_format(a.date,'%d/%m/%y') as Date_Paiement, case when ac2.debit_type_code ='LOST' then 'Exemplaire perdu'/*<== CODE STANDARD de KOHA*/ when ac2.debit_type_code ='NEW_CARD' then 'Nouvelle carte'/*<== CODE STANDARD de KOHA*/ when ac2.debit_type_code ='MANUAL' then 'Divers'/*<== CODE STANDARD de KOHA*/ when ac2.debit_type_code ='ACCOUNT' then 'Inscription' /*Nouvelle inscription -CODE STANDARD de KOHA*/ when ac2.debit_type_code ='ACCOUNT_RENEW' then 'Inscription' /*Ré-inscription- CODE STANDARD de KOHA*/ when ac2.debit_type_code ='OVERDUE' then 'Pénalité de retard'/*<== CODE STANDARD de KOHA*/ else 'AUTRE' end as Type_facture, a.payment_type as Type_Paiement, b2.categorycode as Type_abonnement, concat(b2.surname, ' ',b2.firstname) as Nom_Prénom, b2.cardnumber as N_Carte, b4.value as 'Nom de la Banque', /*Valeur du champ supplémentaire 1*/ b5.value as 'Numéro du chèque',/*Valeur du champ supplémentaire 2*/ substring_index(convert((o.amount),DECIMAL(6,2)),'-',-1) as 'Montants encaissés' from account_offsets o LEFT JOIN accountlines a ON (o.credit_id=a.accountlines_id) LEFT JOIN accountlines ac2 ON (o.debit_id=ac2.accountlines_id) LEFT JOIN borrowers b2 ON (b2.borrowernumber=a.borrowernumber) LEFT JOIN additional_field_values b4 ON (b4.record_id=o.debit_id) LEFT JOIN additional_field_values b5 ON (b5.record_id=o.debit_id) LEFT JOIN authorised_values a2 ON (a.register_id=a2.authorised_value) where o.amount like '-%' and a2.category='CAISSES' /*<==VA avec les codes Koha de chaque caisse.Cf Admin> gestion des caisses*/ and b4.field_id=1 /*<==Code Koha du champ supplémentaire.cf Admin>Champs supplémentaires*/ and b5.field_id=2 /*<==Code Koha du champ supplémentaire.cf Admin>Champs supplémentaires*/ and a.date >=<<date sup. égale à |date>> and a.date <=<<date inf. égale à|date>> and a2.authorised_value=<<CAISSES|Caisse>> group by Type_facture,Type_Paiement,a.date,Nom_Prénom,b2.cardnumber
Exemple 3 : Exemple de régie d'amende pour un site donné, par type de paiement, avec total
SELECT ac.date AS "Date", b2.userid AS "Qui", CONCAT_WS(" ", b.cardnumber, b.surname, b.firstname, b.streetnumber, b.address, b.zipcode, b.city) AS "Identité", ad.debit_type_code AS "Motif", ac.timestamp AS "Date_encaissement", ad.Description, IF(ac.note!='',ac.note,IF(ac.credit_type_code='WRITEOFF','Perte et profit',ac.payment_type)) AS "Type de paiement", FORMAT(ad.amount,2,'fr_FR') AS "Dû", FORMAT(IF((ac.note="NUMERAIRE" OR ac.payment_type="NUMERAIRE"), -aof.amount, 0),2,'fr_FR') AS NUMERAIRE, FORMAT(IF((ac.note="CHEQUE" OR ac.payment_type="CHEQUE"), -aof.amount, 0),2,'fr_FR') AS CHEQUE, FORMAT(IF((ac.note="CB" OR ac.payment_type="CB"), -aof.amount, 0),2,'fr_FR') AS CB, FORMAT(IF((ac.note="ELEF" OR ac.payment_type="ELEF"), -aof.amount, 0),2,'fr_FR') AS ELEF, FORMAT(IF((ac.note="CHEQUEVACANCES" OR ac.payment_type="CHEQUEVACANCES"), -aof.amount, 0),2,'fr_FR') AS CHEQUEVACANCES FROM accountlines ad LEFT JOIN account_offsets aof ON aof.debit_id=ad.accountlines_id LEFT JOIN accountlines ac ON ac.accountlines_id=aof.credit_id LEFT JOIN borrowers b ON ad.borrowernumber = b.borrowernumber LEFT JOIN borrowers b2 ON b2.borrowernumber=ac.manager_id WHERE ac.date BETWEEN <<début|date>> and <<fin|date>> AND ad.debit_type_code in ('JR-A','JR-W','JR-M','OVERDUE') AND ac.branchcode='CHY-JR' /*ORDER BY b.cardnumber,ac.accountlines_id*/ UNION ALL ( SELECT '','ZZZ','','','',"<strong>Total</strong>",'',FORMAT(SUM(ad2.amount),2,'fr_FR'), FORMAT(SUM(IF((ac2.note="NUMERAIRE" OR ac2.payment_type="NUMERAIRE"), -aof2.amount, 0)),2,'fr_FR') AS NUMERAIRE, FORMAT(SUM(IF((ac2.note="CHEQUE" OR ac2.payment_type="CHEQUE"), -aof2.amount, 0)),2,'fr_FR') AS CHEQUE, FORMAT(SUM(IF((ac2.note="CB" OR ac2.payment_type="CB"), -aof2.amount, 0)),2,'fr_FR') AS CB, FORMAT(SUM(IF((ac2.note="ELEF" OR ac2.payment_type="ELEF"), -aof2.amount, 0)),2,'fr_FR') AS ELEF, FORMAT(SUM(IF((ac2.note="CHEQUEVACANCES" OR ac2.payment_type="CHEQUEVACANCES"), -aof2.amount, 0)),2,'fr_FR') AS CHEQUEVACANCES FROM accountlines ad2 LEFT JOIN account_offsets aof2 ON aof2.debit_id=ad2.accountlines_id LEFT JOIN accountlines ac2 ON ac2.accountlines_id=aof2.credit_id LEFT JOIN borrowers bb ON ad2.borrowernumber = bb.borrowernumber LEFT JOIN borrowers bb2 ON bb2.borrowernumber=ac2.manager_id WHERE ac2.date BETWEEN <<début|date>> and <<fin|date>> AND ad2.debit_type_code in ('JR-A','JR-W','JR-M','OVERDUE') AND ac2.branchcode='CHY-JR' ) ORDER BY Date_encaissement, Identité