Pricing management

From Openflyers

Jump to: navigation, search

Contents

Introduction

Le but de la gestion de la tarification est de permettre une tarification la plus souple possible en fonction de tous les critères utilisables en aéro-club.

Classiquement, voici la configuration que l'on peut rencontrer dans un club :

  • il existe plusieurs catégories de membres en fonction de leur CE de rattachement (ou du fait qu'ils n'appartiennent à aucun CE)
  • les tarifs peuvent varier en fonction de la catégorie d'appartenance du membre (on peut même imaginer une appartenance à plusieurs catégories pour un même membre)
  • les tarifs peuvent varier en fonction du type de vol (solo, double, nav, ifr, etc.)
  • les tarifs peuvent varier en fonction du type d'avion
  • les tarifs peuvent varier en fonction du nombre d'heures de vol effectuées dans l'année sur le même type d'avion ou tous les avions.
  • la ventilation comptable peut varier en fonction des mêmes paramètres (catégorie du membre, type de vol et type d'avion) et pour un seul vol faire intervenir plusieurs comptes au débit et/ou au crédit

Pour solutionner cela et permettre cette flexibilité, il suffit d'utiliser un système matriciel qui prenne en entrée le vecteur (catégorie du membre, type de vol, type d'avion) et qui en sortie donne d'autres vecteurs (compte à créditer, compte à débiter, formule à appliquer sur le temps de vol). Il peut y avoir plusieurs vecteurs en sortie (tableau de vecteurs).

Ce qui est simple à élaborer : la table qui fait la matrice.

Ce qui est plus compliqué : créer la catégorie de membre et gérer un lien "appartenance à une catégorie" et "existance d'un compte lié (si nécessaire).


Implémentation

situation actuelle

A l'heure actuelle il existe une table et une seule qui gère simplement la tarification. C'est la table aircrafttype_price

Cette table est vouée à disparaitre et à être remplacée par ce qui suit.

Tables

flight_hours_pricing

nom du champtypedescription
idINTEGERclé primaire définissant une "ligne tarifaire"
price_formulaTEXTformule à appliquer sur le temps de vol
account_member_type_idINTEGERclé externe vers la table account_member_type, type de compte à débiter
account_idINTEGERclé externe vers la table account, numéro de compte à créditer
member_debitedBOOLEANset if member is debited or not (=credited), an thus, if account_id is credited or credited
order_numINTEGERas usual

La composition de la formule doit respecter les mêmes règles de formatage que celle concernant le calcul du temps de vol. Cependant, elle doit pouvoir accepter d'autres fonctions compliquées comme par exemple une fonction TOTAL_HOURS(aircraft_type_list,flight_type_list,date_start) qui permettrait de connaitre le nombre d'heures de vols effectuées sur une liste de types d'avion pour une liste de type de vols depuis date_start. Si l'une des listes est vide alors tout le monde est concerné.

fhp_member_pool

nom du champtypedescription
fhp_idINTEGERclé externe vers l'id de flight_hours_pricing
member_pool_idINTEGERclé externe pointant sur la table member_pool

Cette table permet d'associer la liste des catégories de membres avec une ligne tarifaire. On peut envisager un "member_pool_id magique" de valeur 0 qui permet de considérer que cela concerne toutes les catégories de membre.

fhp_aircrafttype

nom du champtypedescription
fhp_idINTEGERclé externe vers l'id de flight_hours_pricing
aircrafttype_idINTEGERclé externe pointant sur la table aircraft_type

Cette table permet d'associer la liste des types d'avions avec une ligne tarifaire. On peut envisager un "aircrafttype_id magique" de valeur 0 qui permet de considérer que cela concerne tous les types d'avions. Utile pour la tarification de l'instruction en double commande par exemple.

fhp_flight_type

nom du champtypedescription
fhp_idINTEGERclé externe vers l'id de flight_hours_pricing
flight_type_idINTEGERclé externe pointant sur la table flight_type

Cette table permet d'associer la liste des types de vols avec une ligne tarifaire. On peut envisager un "flighttype_id magique" de valeur 0 qui permet de considérer que cela concerne tous les types de vols. Utile pour éviter de devoir créer une nouvelle tarification pour chaque type de vol.

account_member_type

nom du champtypedescription
idINTEGERclé primaire
nameTEXTdescription du type de compte

Cette table permet de lister les types de comptes qui peuvent être associés à un membre.

Ainsi le champ ACCOUNT_TYPE de la table account_member pointe vers cette table. C'est ainsi qu'on récupère l'intitulé du compte du membre.

Rmq : du coup, on peut se poser la question de l'utilité du champ MAIN dans la table account_member. Moi, je ne lui en vois plus...

member_pool

nom du champtypedescription
idINTEGERclé primaire
nameTEXTdescription de la catégorie
order_numINTEGERgroup number, unique
required_account_typeINTEGERclé externe vers la table account_member_type, indique le type de compte à créer (peut être 0)

Cette table permet de lister les différentes catégories de membres

member_pool_join

nom du champtypedescription
member_pool_idINTEGERclé externe vers la table member_pool
member_idINTEGERclé externe vers la table member (ou authentication ;-)

Cette table permet de lister les catégories auxquelles chaque membre appartient

Fonctions

getPricingFormula

En entrée :

  • type d'avion
  • catégorie de membre
  • type de vol

En sortie, une liste comprenant à chaque fois :

  • formule de calcul tarifaire à appliquer
  • type de compte à débit
  • compte à créditer

Exemple

Tarifs d'un club

  • le DR400 est à 100 €/h pour tout le monde en solo
  • la double commande est à 20 €/h pour tout le monde
  • le TB10 est à 140 €/h pour les membres du CE Airbus mais débité sur un compte spécial et à 150 €/h pour les autres

Traduction en base

flight_type

idname
1vol local
2navigation
4voltige
8instruction
16VSV
32Vol de nuit

aircraft_type

idname
1DR400
2TB10

account

idnameexport_account
1Recettes DR400706001
2Recettes TB10706002
3Recettes instruction710000

flight_hours_pricing

idprice_formuladebit_account_member_type_idcredit_account_id
1100*%FLIGHT_HOURS11
2140*%FLIGHT_HOURS22
3150*%FLIGHT_HOURS12
420*%FLIGHT_HOURS13

fhp_member_pool

fhp_idmember_pool_id
10
21
32
40

fhp_aircrafttype

fhp_idaircraft_type_id
11
22
32
40

fhp_flight_type

fhp_idflight_type_id
10
20
30
48

account_member_type

idname
1compte membre standard
2compte membre CE Airbus

member_pool

idnamerequired_account_type
1membre standard1
2membre CE Airbus2

member_pool_join

contient les comptes associés à chaque membre

Exemples de formules possible pour flight_hour_pricing

Aide du CE

Le CE verse 50% du prix de l'heure de vol pour les 10 premières heures effectuées sur tous types d'avions TOTAL_HOURS(aircraft_type_list,flight_type_list,date_start)

Dans ce cas, nous sommes obligé de créer une formule par avion. Pour l'un d'entre-eux si le prix de l'heure de vol est de 100 €, la formule est :

= (TOTAL_HOURS(0,0,2006-01-01)<10) ? 50 * %FLIGHT_HOURS : 0

La formule retourne :

  • soit la moitie du prix de l'heure de vol (qui sera créditée sur le compte pilote et débitée sur le compte du CE)
  • soit 0 (si le membre a déjà fait plus de 10 heures de vol).

On peut affiner la formule, pour le cas où le membre atteint la dixième heure au cours de ce vol là :

= min( (10 - TOTAL_HOURS(0,0,2006-01-01)) > 0 ? (10 - TOTAL_HOURS(0,0,2006-01-01)) : 0, %FLIGHT_HOURS) * 50

Vol de nuit avec taxe de balisage

Si le vol est de nuit, le club peut faire supporter un forfait éclairage de nuit de 50 € par exemple en plus du prix de l'heure de vol. La formule est :

= 100 * %FLIGHT_HOURS + 50

Une autre solution consiste à séparer en deux formules :

  • la ou les formules qui calculent le prix de l'heure de vol
  • la formule specifique au balisage

Dans ce cas, la formule du balisage est tout simplement :

= 50
Personal tools