Paheko

Gestion d'association simple, complète et efficace

Tarif variable : formules de calcul pour les activités et cotisations

Dans les activités et cotisations, il est possible d’utiliser pour un tarif soit un montant fixe, soit une formule de calcul.

Les formules de calcul peuvent être de simples calculs arithmétiques, ou toute condition SQL, éventuellement liée aux données de la fiche du membre.

Dans le cas d’une formule, le montant renvoyé doit inclure les centimes, mais sans virgule. Par exemple un montant de 15,00 € sera exprimé 1500. De fait le plus simple est de multiplier le montant désiré par 100.

Voici quelques exemples utiles.

Tarif dégressif selon la date d’inscription dans l’année

Un exemple ou le tarif est de 50,00 € (donc 5000 sera utilisé), et la cotisation est valide du 1ᵉʳ septembre 2020 au 31 août 2021.

Nous calculons donc le nombre de jours entre la fin de la cotisation (julianday('2021-08-31')) et le nombre de jours correspondant à la date du jour (julianday('now')), puis rapportons cela sur le nombre de jours dans la période de cotisation.

50 * 100 * (
    (julianday('2021-08-31') - julianday('now'))
    / (julianday('2021-08-31') - julianday('2020-09-01'))
)

Cet exemple renverra pour une cotisation versée le 25 octobre 2020 : 4248, soit 42,48 €.

Si on souhaite arrondir à 5 € près (donc 500 pour la formule), il faut rajouter une division et un arrondi, comme ceci :

round(
    (50 * 100 * (
        (julianday('2021-08-31') - julianday('now'))
        / (julianday('2021-08-31') - julianday('2020-09-01'))
    ))/500, 0
)*500

Ce calcul renverra alors 4000, soit 40,00 €.

Tarif variable si le membre est résident de la ville

C’est une condition classique : si le membre n’habite pas dans la même ville, le tarif pourra être différent.

Ici nous partons donc du fait que les fiches membres ont un champ code_postal qui correspond au code postal de résidence. Nous voulons appliquer un tarif préférentiel de 15,00 € aux résidents de Dijon (21 000). Les résidents des autres villes de Côte d’Or paieront 20,00 € alors que ceux des autres départements paieront 30,00 €.

Nous allons donc utiliser une clause CASE.

CASE
    WHEN code_postal = '21000' THEN 15 * 100
    WHEN code_postal LIKE '21%' THEN 20 * 100
    ELSE 30 * 100
END

Tarif variable selon la tranche d’imposition

Nous voulons appliquer un tarif différencié selon la tranche d’imposition du membre.

Le tarif sera le suivant :

  • Entre 0 et 9 000 € de revenu : 70,50 €
  • Entre 9 001 et 13 000 € de revenu : 76,00 €
  • Entre 13 001 et 23 000 € de revenu : 83,00 €
  • Au-delà de 23 001 € de revenu : 88,50 €

Nous supposons que le revenu de référence du foyer a été renseigné dans la fiche du membre, dans un champ dénommé revenu_fiscal, sous la forme d’un nombre entier (donc 9000 = 9 000,00 €).

CASE
    WHEN revenu_fiscal BETWEEN 0 AND 9000 THEN 70.5 * 100
    WHEN revenu_fiscal BETWEEN 9001 AND 13000 THEN 76 * 100
    WHEN revenu_fiscal BETWEEN 13001 AND 23000 THEN 83 * 100
    ELSE 88.5 * 100
END

Tarif variable selon des tantièmes

Par exemple utile en copropriété. On suppose ici que le total des charges annuelles est de 4.200,00 € à répartir entre les co-propriétaires, et que chaque fiche de membre dispose d'un champ "tantiemes" qui contient la part de copropriété possédée par chaque copropriétaire, et que le total des parts est de 1000.

ROUND(100 * 4200 * (tantiemes / 1000.0))

Explications des spécificités :

  • ROUND permet d'arrondir la valeur (sinon elle sera simplement tronquée !)
  • 100 * permet de multiplier le résultat pour obtenir la valeur en centimes
  • 4200 la valeur des charges totales
  • * (tantiemes / 1000.0) on multiplie par le nombre de tantiemes, divisées par mille, en spécifiant bien 1000.0 (et non pas 1000) pour que la division se fasse après la virgule, car par défaut SQLite ne fait qu'une division euclidienne (qui s'arrête à la virgule)

Mis à jour le lundi 2 septembre 2024

Vous n'avez pas trouvé réponse à vos questions ?

N'hésitez pas à chercher ou poster dans le forum d'entraide :-)