Hello tout le monde
Je dois concevoir un système et y a un composant qui me pose probleme.
Ce composant doit être capable de gérer un compte, un peu comme un compte de crédit: vous alimenter votre compte, p.ex. 50 crédit, mais ces crédit ont une durée de validité. Une fois cette periode passée, ce qui reste est perdu.
Autres règles:
- Je dois pouvoir avoir la balance du compte à n'importe quelle date (donc pouvoir dire qu'au 5/01/2010 la balance était de XX) et cette fonctionnalité sera quasiment autant utilisée que connaitre la balance "aujourd'hui"
- des modifications peuvent être faite dans le passé comme dans le futur. Càd qu'aujourd'hui, un process peut tourner et aller insérer/supprimer des crédit à la date du 21/09/2009 ou même dans le futur.
- Quand des crédits sont utilisés sur ce compte, les crédit avec une fin de validité la plus proche doivent être décomptés en 1er.
- Il doit être possible de rajouter des crédits sans date de validité (= toujours valide) et ça sera même l'utilisation principale.
Mon 1er design est très simple:
- 1 objet account (qui stocke les differents compte)
- 1 objet account_detail (qui stocke les mouvements du compte)
La balance d'un compte est toujours calculée dynamiquement (somme des details where date_detail <= date_demandée). Ca va fonctionner nickel pour les mouvements toujours valides.
Là où je bloque ... c'est comment implémenter la validité.
Exemple:
01/01/2009 +50cr (validité: 1 mois) --> balance: +50
06/01/2009 -15cr ---> balance: +35
18/01/2009 +20cr (validité: 5 jours) --> balance: +40
20/01/2009 -30cr ---> balance: +10
25/01/2009 -10cr --> REFUSE
La derniere transaction est refusée, car les 10cr restant au 20/01 venait du +20cr du 18/01 qui n'avait qu'une validité de 5jours, et donc le 25/01 les 10cr restant ne sont plus valides.
Et donc si je demande au systeme la balance au 22/01 il me dira +10cr (toujours valides), mais si je lui demande la balance au 23/01 il me dira 0cr.
Si vous avez des pistes, merci d'avance!
Partager