Home

Academic project report - LibOFX

image

Contents

1. brief The callback function for the OfxAccountData stucture The ofx proc account event is always generated first to allow the application to create accounts or ask the user to match an existing account before the ofx proc statement and ofx proc transaction event are received An OfxAccountData is passed to this event Note however that this OfxAccountData structure will also be available as part of OfxStatementData structure passed to ofx proc statement event Af CFCT int ofx proc account struct OfxAccountData data brief An abstraction of a transaction in an account 55 The OfxTransactionData stucture contains all available information about an actual transaction in an account a struct OfxTransactionDataf name OFX mandatory elements The OFX spec defines the following elements as mandatory The associated variables should all contain valid data but you should not trust the servers Check if the associated _valid is true before using them char account_id OFX_ACCOUNT_ID_LENGTH lt Use this for matching with the relevant account in your application int account_id_valid enum TransactionType OFX_CREDIT lt Generic credit OFX_DEBIT lt Generic debit OFX_INT lt Interest earned or paid Note Depends on signage of amount OFX_DIV lt Dividend OFX_FEE lt FI fee OFX
2. SUPPORT DE LA NORME OFX POUR LOGICIELS LIBRES PROJET DE FIN D TUDES INF4199 et INF4196 D PARTEMENT DE G NIE INFORMATIOUE Benoit Gr goire 1018168 t 2002 2 ECOLE POLYTECHNIQUE DE MONTREAL DEPARTEMENT DE GENIE INFORMATIQUE SUPPORT DE LA NORME OFX POUR LOGICIELS LIBRES Rapport de projet de fin d tudes soumis comme condition partielle l obtention du dipl me de baccalaur at en ing nierie Pr sent par Benoit Gr goire Matricule 1018168 Directeur de projet Michel Dagenais Date 18 8 2002 1 Sommaire La norme OFX permet la communication de donn es comptables entre une institution financi re et un client Elle est populaire pour t l charger des relev s de compte afin d effectuer une conciliation bancaire mais aucun logiciel libre supportant cette norme n est disponible Ce projet consiste donc ajouter les fonctionnalit s n cessaires un logiciel de finances personnelles existant Le logiciel choisi est GnuCash le logiciel de finances personnelles le plus en vue du monde du logiciel libre Il est distribu sous licence GPL tant donn le processus ouvert employ il a t n cessaire d utiliser en plus des m thodes habituelles de conception et de programmation propres au g nie informatique diff rents moyens de communication et m thodes propres aux projets ouverts Ce projet a donc t fait en collaboration avec d autres d veloppeurs que je n ai jamais rencont
3. gnc_import_add_ trans Le module n a aucune interface usager qui lui est propre mais voici le r sultat final ompte Ch gue Register OFX ext info Trans type Generic debitMemo 4DM OFX ext info Trans type Generic debit Memo PWW OFX ext info Trans type Generic debit Memo 1AGA OFX ext info Trans typ Genere crediMemo DSL eae a pan SIETE info Trans type Check Memo DCN st CR Trans type Generic debit Mema ACH int es Coot nas BEX ext Es Teis petens credit Memo IDGA vy inf fans ons debit Mema PWW OFX ext info Trans type Generic credit Memo vwW Trans type Generic debit Memo Figure 8 5 Exemple de transactions OFX t l charg es 31 9 Discussion et conclusion 9 1 Les r sultats du projet Globalement ce projet a permis de g n rer un grand nombre d l ments utiles et fonctionnels Il convient d en faire ici la liste e LibOFX La librairie devant permettre n importe quelle application utilisant la licence GPL de supporter les conciliations bancaires utilisant le protocole OFX C est ma connaissance la premi re fois que la norme OFX partie client a t impl ment e avec succ s dans le monde du logiciel libre 12 versions du projet publi es ce jour e ofxdump L utilitaire C de d verminage et test de la librairie ofx2qif Un convertisseur de fichier OFX gt QIF crit en C permettant d utiliser les logiciels ne supportant pas encore la librairie
4. lost the paper international transaction not always fast etc void gnc_ import add trans Transaction trans should return as soon as possible BEFORE user interaction so that for systems that maintain a connection such as HBCI the user won t run into timeouts For example gnc import add trans could check if it s main dialog is open and open it if it isn t add to the list and return immediately The dialog is closed automatically once the list is empty We may want to implement the function in such a way that it won t match any transaction that have been added as part of the current import process flag them volatile or something This will solve the problems of multiple interac withdrawals in the same day for QIF possibly HBCI too The transaction passed to gnc_import_add_trans will have only one split for OFX and HBC but 1 or more for QIF 47 11 3 Annexe 3 Document de pr sentation et de planification original Proposition de PFE Module de conciliation bancaire OFX R sum Ce projet consiste crire et int grer un module de conciliation bancaire pour le logiciel financier GnuCash Le logiciel GnuCash est un logiciel de finances personnelles similaire Quicken mais imposant les pratiques comptables de la double entr e Il est distribu sous licence GPL Le projet L criture d un module de communication OFX g n ral avait t tent e par les d veloppeurs de GnuCash Celui ci tait pr v
5. long int standard industrial code lt The standard industrial code can have at most 6 digits int standard industrial code valid char payee id OFX SVRTID2 LENGTH lt The identifier of the payee int payee id valid char name OFX TRANSACTION NAME LENGTH lt Can be the name of the pay or the description of the transaction int name valid char memo OFX MEMO2 LENGTH lt Extra information not included in name int memo valid KKKKKKKK KKK E E FIII kkk k k k kkkk k kk k k NOT YET COMPLETE brief The callback function for the OfxTransactionData stucture An ofx proc transaction event is generated for every transaction in the ofx response An OfxTransactionData structure is passed to this event CFCT int ofx_proc_transaction struct OfxTransactionData data brief An abstraction of an account statement The OfxStatementData structure contains information about your account at the time the ofx response was generated including the balance A client should check that the total of his recorded transactions matches the total given here and warn the user if they dont struct OfxStatementData name OFX mandatory elements The OFX spec defines the following elements as mandatory The associated variables should all contain valid data but you should not t
6. s peu d institutions financi res l ayant d ploy e Sans doute dans le but de rendre OFX plus populaire le consortium a publi la version 2 01 de la norme une version simplifi e et au go t du jour bas e sur XML un sous ensemble de SGML La norme 2 01 ne supporte donc pas les versions pr c dentes Structured Generalised Markup Language eXtensible Markup Language Fort heureusement je n ai ce jour trouv aucune incompatibilit importante emp chant les fichiers bas s sur la norme 2 01 d tre trait s par un logiciel bas sur la version 1 6 x Tous les fichiers peuvent donc tre support es partir d une m me base de code construite partir de la norme 1 6 avec quelques ajustements mineurs Il me faut imp rativement un moyen de me g n rer des fichiers tests mais je pourrai utiliser ceux de mon institution financi re le service Acc s D de Desjardins qui exporte ses fichiers dans le format OFX 1 02 Mon module est donc testable et utile la majorit des utilisateurs en le basant sur la norme OFX 1 6 la plus compl te galement la plus complexe 659 pages 6 4 Structure du document L volution de ce projet s est poursuivie au del de certains des objectifs que je m tais fix s Il a donn naissance plusieurs l ments reli s mais distincts Afin d viter un discours d cousu la suite de ce rapport suivra la structure des diff rents modules qui composent le projet final Je di
7. sentement 538 fichiers c ou scm dans les sources de GnuCash on peut se douter que je me suis souvent fait dire Oh mais il y avait d j une fonction qui fait exactement a mais il fallait le savoir Il est n cessaire de prendre ici le temps de d finir plusieurs termes utilis s pour d crire le mod le financier et les structures de donn es de GnuCash 18 Livre Book Contient des comptes et des transactions Compte Account Contient des entr e de journal dont la somme doit tre 0 Entr e de livre Transaction Contient des entr es de journal dont la somme doit galement tre 0 Entr e de journal Split Mouvement d argent d un compte un autre Les quatre structures pr c dentes peuvent contenir des structures de donn es arbitraires nomm es KVP frames qui permettent de stocker des donn es suppl mentaires sans devoir modifier tout le code d entr e sortie et les prototypes de fonctions Commodit Commodity l ment pouvant tre fractionn de fa on finie Cel peut tre de l argent la plus petite fraction est 1 100 et elle vaut 0 01 ou autre chose comme une action GnuCash ne m morise jamais de valeurs num riques comme telle Il m morise le nombre de fractions et sa valeur 19 Accounting Data Structurss Support the Accounting Eguatior 0 sum total of all splits in txn Ledger En or Journal En or Pesaran Split uy Date Description n LAME a De
8. 1 n3 1 18 htm 41 11 Annexes 11 1 Annexe 1 R sum des fichiers et principales fonctions du projet LibOFX Voici une description sommaire des fichiers composant le projet LibOFX Notez gue ce n est pas un substitut pour le manuel du programmeur que l on retrouve plus loin l annexe 5 Description Fichier d inclusion principal il contient l API Il doit tre inclus par les logiciels client Toutes les fonctions qu il d finit except ofx proc file sont des fonctions visiteurs qui doivent tre implant es par le code du client mais qui peuvent tre vides Principales int ofx proc file int argc char argv fonctions D marre le processus de traitement int ofx proc status struct OfxStatusData data La structure contient un message de la part du serveur OFX int ofx proc account struct OfxAccountData data La structure contient les informations de base permettant d identifier un compte et ses caract ristiques no d identification devise type de compte Il y aura un appel pour chaque compte avant les transactions et le relev afin de permettre l application d identifier le compte ou d en cr er un nouveau int ofx proc _transaction struct OfxTransactionData data La structure contient toutes les informations disponibles pour une transaction particuli re Un appel par transaction int ofx proc statement struct OfxStatementData data La structure contient un relev des informations sur l ta
9. 158850 o nn Re RE a a A podl et te rate eas IV 4y ASUS KISS TESTS sub Bola sent Aa ca stale zbo nec oo o ah ooo D oo V 5 Liste des tableaux stereo RAR pod avoz nr oat nn diet dan nov oldes V 6 Introduchonctprobl matg 6353 Rs ner v e es 300 ea ne 6 G1 a PrODleMmigui US sass ssa cotta lize cu he pon se anes eam iare aaa sa cheat ns 6 STA EE OKO Je ko adds o vola lo oa nds Soe ac E dokonal eae 6 62 Quelque mots surla n rme OPX z s TE dd od an cada cade vgs S 7 6 4 Structure du document sense esse ianea ari i ai Ro nan neon n 8 7 Les m thodes et contraintes propres au processus de d veloppement ouvert 9 7 1 Communication avec les autres d veloppeurs et les usagers 10 7 2 Publication aupr s des d veloppeurs et des usagers 11 73 La documentation 25 8 ei ies sveses suave suet EE EENS 11 7 4 La compatibilit aux environnements diversifi s 13 0 LES composantes du projel Tores irain ns RE st ST RE es 14 SL L parer SGML ooo eine a nt A T ea 15 6 2 Lelogicieltcible GNUCash oiite ee aee eee arr EEES NaS 17 8 3 LalibrarneparaseeLIbOEX nn ibn nn tn er cinetese 20 Oi Soll WLW PE Re nine nent a gte nt te 20 8 3 2 Le fonctionnement 2 n ral ssa see tnt inerte noie 21 8 4 L utilitaire OLX CUI Dnes eunen ore g e ege sites tn 23 8 5 L utilitaire ofx2gi fse TR TS PS E E eae 25 8 6 Le module gnucash gnc generic import RR R R 26 8 6 1 La pro
10. Created OfxDummyContainer to hold unsupported aggregate STMTTRNRS ofx_proc_status Ofx entity this status is relevent to STMTTRNRS Severity INFO Code 0 name Success Description The server successfully processed the request Server Message OK ofx_proc_account Account ID 70000010000234210023421815 30480 0023421 EOP Account type CHECKING Currency CAD ofx_proc_transaction Account ID Transaction type DEBIT Date posted Thu Jan 24 08 00 00 2002 Amount 140 00 Extra transaction information memo 70000010000234210023421815 30480 0023421 1 Generic debit EST Financial institution s ID for this transaction Name of payee or transaction description IAGA GI OP jhKbOAQ3v Retrait au GA H Let 24 25 8 5 L utilitaire ofx2gif Il est difficile de stimuler l int r t pour une nouvelle librairie En effet moins d tre utilis e par un logiciel celle ci ne fait strictement rien Il est donc utile de distribuer avec la librairie un ou des logiciels qui sont directement utiles pour l usager Ceux ci peuvent galement servir d exemple de code Ofx2qif a donc t crit dans ce but Ofx2qif est un convertisseur de fichiers du format OFX vers le format OIF Il a t originalement crit en C pour stimuler l int r t pour la librairie Il a subs quemment t r crit en C afin de servir d exemple de code en C et assurer que la compatibilit C soit main
11. Je suis finalement parvenu crire une fonction d terminant cette taille en inspectant les premier octets d une cha ne de caract re et qui fonctionne pour les cha nes de toutes tailles Ensuite une version relativement ancienne de OpenSP est commun ment distribu e avec la suite OpenJade dans un seul paguetage RPM Or cette version 1 3 1 est incapable de traiter correctement le DTD OFX II faut donc que l usager installe une version plus r cente ce qui peut causer des probl mes tant donn que le paquetage RPM de OpenJade est ins cable un seul RPM du moins sur Linux Mandrake J ai finalement r ussi a assurer une certaine compatibilit avec cette version mais ce n est pas tr s fiable et il n est pas certain que cela soit maintenu dans le futur Finalement au d but de ce projet OpenSP avait un d faut d une ligne dans les source corrig depuis qui emp chait la compilation sur les compilateurs r cents gcc gt 2 96 17 8 2 Le logiciel cible GnuCash GnuCash est un logiciel extr mement complet et beaucoup plus complexe que j avais pr vu au d but du projet Pour ne nommer que quelques unes de ses possibilit s il offre la comptabilit double entr e les comptes d actions et de fonds mutuels l importation de fichiers QIF supporte une quinzaine de langues le t l chargement sur le web de la valeur des actions et fonds mutuels l impression de ch ques personnalis s la possibilit d enregistrer
12. accomplir La premi re est l identification et la cr ation des comptes GnuCash correspondant aux comptes import s Dans le cas d OFX ceux ci sont identifi s par leur num ro de transit mais tout autre identificateur unique peut tre utilis Si le num ro de transit du compte en question n existe pas dans les autres comptes le logiciel offre l usager de choisir le compte utiliser ou d en cr er un nouveau Il ajoute le num ro de transit au compte choisi Si deux comptes ont le m me num ro de transit un message doit tre affich La seconde et plus importante fonction commune des processus d importation est la fusion des transactions import es avec les transactions existantes J esp rais pouvoir r cup rer des fonctions de GnuCash pour la r aliser mais ce fut en bonne partie impossible Cette fusion consiste d abord prendre les transactions obtenues du module d importation et trouver le compte correspondant Une fois le compte identifi pour chaque transaction le module cherche une transaction ayant le m me identificateur la m me date et le m me 9 Home Banking Computer Interface 27 montant S il en trouve une et une seule il consid re l op ration comme concili e s il nen a pas trouv il cherche une transaction ayant le m me identificateur et le m me montant dans les 4 jours pr c dant l op ration concili e ou une op ration ayant le m me montant et la m me date S i
13. d veloppeurs de GnuCash et j ai t bien re u Implantation et temps pr vu Familiarisation avec le code source du logiciel et la norme OFX cette tape je pr vois galement discuter des modifications au logiciel actuel afin de faciliter l int gration aux derni res tapes Je pr vois 20 h pour cette tape pr liminaire Ajout du num ro de transit aux structures de donn es des comptes de GnuCash L importation de fichiers OFX dans le populaire logiciel Quicken a des faiblesses qui laissent une ambigu t quant au compte que l on d sire concilier si l on met jour le logiciel ou si notre service bancaire en ligne fait certaines modifications Je ne veux pas r p ter ce probl me Le num ro de transit tant unique il n y aura plus d ambiguit quant au compte concilier Cependant les comptes de cartes de cr dit n ont pas de num ro de transit un autre identificateur unique devra tre utilis Je devrai aussi ajouter l interface usager et interface programmeur pour acc der et modifier ces donn es Le changement devrait tre relativement trivial Temps pr vu 7h Parseur du fichier OFX C est bien s r le travail le plus complexe et le plus important de ce projet Plusieurs approches sont possibles Il serait possible de simplement parcourir lin airement le fichier la recherche des jetons d finissant un compte bancaire puis d interpr ter directement les jetons qui suivent Ce serait proba
14. donc plus judicieux d investir du temps pour ajouter les fonctionnalit s mentionn es la section 8 4 que de l investir dans une optimisation pr coce 35 9 3 Retour sur la planification M me si ce projet a beaucoup chang depuis sa planification originale il reste utile de faire un retour sur le temps initialement allou aux diff rentes t ches Le document de planification original est disponible l annexe 3 v Familiarisation avec le code source du logiciel et la norme OFX Il s agissait de prendre contact avec les d veloppeurs de GnuCash et de discuter des modifications n cessairea au logiciel actuel afin de faciliter l int gration Je pr voyais 20 heures pour cette tape pr liminaire Ce temps a t respect mais les objectifs n ont pas t rencontr s Il est clairement apparu que ma familiarit avec le fonctionnement interne du logiciel tait encore insuffisante cette tape et que les modifications apporter au logiciel taient plus grandes que pr vues v Ajout du num ro de transit aux structures de donn es des comptes de GnuCash Il s agissait d ajouter les structures de donn es n cessaires et l interface programmeur pour acc der et modifier ces donn es C est le seul changement GnuCash qui a t r alis dans le temps pr vu soit ici sept heures v Parseur du fichier OFX Ce devait tre le travail le plus complexe et le plus important de ce projet Si l on exclut le d ve
15. fichier lisez moi libofx README et d un manuel d installation libofx INSTALL incluant une foire aux questions Documentation pour les d veloppeurs J ai eu beaucoup me plaindre du manque de documentation jour pour les d veloppeurs du logiciel GnuCash J essaie donc de ne pas r p ter la m me erreur La documentation est pr sentement constitu e de libofx README de notes d implantation d une liste de bugs connus du fichier libofx h qui documente tr s bien l API du code source ofxdump cpp et ofx2gif c qui servent respectivement d exemples de code C et C Mais surtout j ai r dig m me le code source une documentation compl te et jour de l API de la structure interne de la librairie et des utilitaires ofxdump et ofx2qif Cette documentation est ensuite extraite par l excellent logiciel Doxygen un outil vaguement semblable JavaDoc Celui ci comprend la syntaxe d un logiciel en C C Java ou PHP et si l on suit certaines r gles g n re une documentation facile parcourir des fonctions structures de donn es et fichiers du logiciel Il peut la g n rer en plusieurs formats Le r sultat en format PostScript de ce travail est le manuel du programmeur qui est disponible l annexe 5 Trop de programmeurs assument que lire les sources d un logiciel est suffisant pour que leurs coll gues int ress s au projet parvienne rapidement les comprendre C est peut tre parfois vrai pour un d veloppeu
16. plus d sir e de la norme OFX soit de concilier un compte de GnuCash avec les transactions fournies par une institution financi re partir d un compte bancaire ou d un compte de carte de cr dit 6 3 Quelque mots sur la norme OFX La norme OFX Open Financial eXchange est une norme labor e par un consortium form de CheckFree Intuit et Microsoft en 1997 Elle vise supporter toutes les op rations financi res susceptibles d tre effectu es en ligne entre un consommateur et une banque ou une entreprise Quelques exemples sont le t l chargement de relev s d op rations la pr sentation et le paiement de factures ainsi que la gestion de comptes d actions C est une norme client serveur couvrant la totalit des interactions incluant le protocole de transfert et la s curit Cependant il est rare qu une banque permette d envoyer directement des requ tes OFX G n ralement une interface WWW permet de param trer les informations demand es et la banque nous transf re un fichier contenant la r ponse OFX Cette norme est une norme complexe la sp cification que j ai utilis e fait 659 pages qui existe en plusieurs versions La version 1 02 bas e sur SGML est la plus couramment implant e par les banques La version 1 6 galement bas e sur SGML est la version la plus compl te et la plus complexe Elle supporte toutes les fonctionnalit s de la norme 1 02 Il semble cependant qu elle n a pas connu un grand succ
17. que la 37 voie facile sera employ e simplement traduire par un traitement textuel les structures de donn es et les entourer des marqueurs pr alablement m moris s Le client n aurait alors qu remplir chacune des structures de donn es de libofx h autant de fois que n cessaire puis appeler une fonction pour g n rer le fichier Dans tous les cas c est un projet int ressant mais il est peu pertinent tant que LibOFX ou du moins le support de la norme OFX n est pas implant dans une grand nombre d applications e Support de l exportation directe de fichiers QIF Analogue au pr c dent mais presque trivial r aliser puisque la majeure partie du code n cessaire se trouve d j dans ofx2qif e Support de l importation de fichiers QIF Malgr tous ses d fauts la norme QIF est pr sentement tr s utilis e par une panoplie de logiciels divers Or cette norme pourrait tre support e par les clients l aide le l API actuel de LibOFX Conjug aux deux propositions pr c dentes cala ferait de LibOFX une solution compl te d importation exportation de fichiers Certaines applications financi res simples pourraient m me utiliser LibOFX pour leurs propres donn es plut t que de d finir leur propre format e Permettre d enregistrer les fonctions visiteurs appeler par la libraire plut t que de forcer les usagers implanter toutes les fonctions en utilisant les prototypes de libofx h C est plus l gant d un poi
18. sera pas encore d tect e comme correspondant a la transaction t l charg e Dans ce domaine je n ai donc pas atteint les objectifs originaux de mon projet Il est possible de t l charger ses relev s de banque mais il n est pas encore possible de concilier des transactions existantes 29 8 7 Le module gnucash gnc ofx Le module gnc ofx permet de faire le pont entre la librairie LibOFX et les structures internes de GnuCash Bien gue son d veloppement ait t assez complexe maintenant gue le module g n rigue est fonctionnel son r le et son fonctionnement sont conceptuellement tr s simples Au d marrage GnuCash tente de charger le module Si le chargement r ussit le module ajoute une entr e OFX OFX import dans la section import export du menu File de Gnucash Une bonne part des difficult s se sont situ es ce niveau l architecture de chargement des modules de GnuCash n tant pas encore compl t e Lorsqu il re oit un v nement ofx proc account de LibOFX il appelle la fonction gnc_import_select_account du module g n rique afin de s assurer qu un compte est cr ou identifi pour recevoir les transactions venir Lorsqu il re oit un v nement ofx proc transaction de LibOFX il cr e une transaction gnucash convertit les informations en une r partition gnuCash associe la r partition au compte gnucash appropri et passe le tout au module g n rique l aide de la fonction
19. ses donn es dans un syst me SQL multi usagers et la g n ration d une quantit norme de rapports diff rents Au total l int gration GnuCash allait prendre encore plus de temps que l criture du parseur OFX lui m me alors qu il devait tre la partie la plus courte Tout d abord le logiciel tait en plein changement d architecture interne pour les modules ce que je ne pouvais pas savoir et qui ne m a gu re facilit la t che La nouvelle architecture n tait pas encore vraiment document e Je ne disposait d aucun exemple de code car les autres modules d importation ne l utilisaient pas Heureusement les d veloppeurs taient tr s disponibles pour r pondre mes diff rentes questions Un second probl me tait au niveau des langages de programmation utilis s Je croyais que le logiciel tait crit en C Le moteur l est effectivement mais la majorit du reste du logiciel dont l interface graphique et l importation de fichiers est crit en Scheme un langage semblable Lisp avec lequel je ne suis pas familier Sans vouloir valuer les m rites et d fauts de ce langage par lequel jurent la majorit des d veloppeurs il a tout le moins un d faut majeur pour quelqu un qui est un nouveau d veloppeur il n y a pas un quivalent des fichiers h ce qui fait en sorte que la majorit des fonctions ne sont pas document es pas m me leur existence autrement que par le code source Consid rant qu il y a pr
20. 1 n3 1 18 htm Outils OpenSP Suite d outils SGML http openjade sourceforge net doc index htm Free SGML Tools Christopher Browne http www ntlug org cbbrowne sgmlfreestuff html PSGML Edition de fichiers SGML avec Emacs http www lysator liu se projects about_psgml html 92 11 4 Annexe 4 Le fichier Ibofx h d finissant l API KKkk k k k k k k k k k k k k k k k A k k k k k k k k k k kc libofx h Main header file for the libofx API copyright C 2002 by Benoit Gr goire email bock step polymtl ca FRR AK AK AK KR KR KR AK KR KR KR KR KR KR KR KR KR KR KR KR KR KR KR KR KR KR A KR KR KR KR KR AK AK KR XX file brief Main header file containing the LibOfx API This file should be included for all applications who use this API This header file will work with both C and C programs The entire API is made of the following structures and functions All of the following ofx proc functions are callbacks Except ofx proc file which is the entry point They must be implemented by your program but can be left empty if not needed They are called each time the associated structure is filled by the library Important note The variables associated with every data element have a valid companion Always check that data valid true before using Not only will you ensure that the data is meaningfull but also that pointers are valid an
21. C est partir du nom et du type de chaque l ment SGML re u que LibOFX est en mesure de savoir quel objet cr er d truire ou remplir 22 OfsGenericContainer OfxAccountContainer OfxBalanceContainer OfxDummyContainer OfxStatementContainer OfxStatusContainer OfxTransactionContainer Figure 8 3 Hi rarchie des conteneurs d finis dans ofx proc rs cpp Le fichier ofx proc rs d finit plusieurs objets gui servent de conteneurs pour les diff rents l ments ofx support s Lorsgue ofx proc sgml rencontre un l ment auguel correspond un conteneur il cr e une nouvelle instance de l objet appropri Tous les objets implantent la m thode add atribute Chaque objet doit savoir quoi faire avec les diff rents l ments de donn es qu il est susceptible de recevoir L objet sp cial OfxDummyContainer est utilis pour les l ments inconnus Un fois que l l ment SGML ayant men l instanciation d un objet est ferm l v nement appropri d fini dans libofx h est g n r avec la structure de donn es remplie par l objet puis l objet est d truit 23 8 4 L utilitaire ofxdump Ofxdump imprime sur la console tout ce que la librairie arrive comprendre d un fichier de r ponse OFX Il envoie galement la sortie de messages d erreurs stderr les diff rents messages transmis par la librairie x Ofxdump est la fois le principal outil de d verminage une d monstration des po
22. Essayer d utiliser les abstractions les plus larges possibles Par exemple il devrait tre possible de supporter des comptes bancaires de cartes de cr dit ou d actions avec la m me structure e Tenter de faire toutes les conversions de donn es possibles l int rieur de la librairie conversion entre deux monnaies conversion des dates au fuseau horaire local etc e Il est impossible de savoir exactement de quel format de donn es les logiciels utilisant la librairie auront besoin Afin de leur simplifier la t che toutes les donn es sont dans une repr sentation directement utilisable dans le langage C et C Une date est un time_t un montant d argent est un double float une cha ne de caract res est un char etc C est en suivant ces principes que j ai cr l interface d finie dans libofx h disponible 21 x l annexe 4 voir galement le manuel du programmeur l annexe 5 Cette interface d finit plusieurs structures de donn es correspondant une entit financi re logique tel un tat de compte un compte bancaire ou une transaction Ces structures sont envoy es au client l aide de fonctions visiteurs Ceci a l avantage que la majorit des clients n auront pas besoin de mettre l information dans un tampon ou de g rer le flux de contr le 8 3 2 Le fonctionnement g n ral Pour faciliter la compr hension de cette section je vous recommande de vous r f rer au r sum des principales foncti
23. FCT int ofx proc status struct OfxStatusData data brief An abstraction of an account The OfxAccountData structure gives information about a specific account including it s type currency and unigue id x struct OfxAccountData name OFX mandatory elements The OFX spec defines the following elements as mandatory The associated variables should all contain valid data but you should not trust the servers Check if the associated _valid is true before using them The account_id is actually a concatenation of lt BANKID gt lt BRANCHID gt lt ACCTID gt for a bank account and lt ACCTID gt lt ACCTKEY gt for a credit card account Together they form a worldwide OFX unique identifier wich can be used for account matching even in system with multiple users char account id OFX ACCOUNT ID LENGTH int account id valid account type tells you what kind of account this is See the AccountType enum enum AccountType OFX_CHECKING lt A standard checking account OFX_SAVINGS lt A standard savings account OFX_MONEYMRKT lt A money market account OFX CREDITLINE lt A line of credit OFX CMA lt Cash Management Account OFX CREDITCARD lt A credit card account account type int account type valid char currency OFX CURRENCY LENGTH lt The currency is a string in ISO 4217 format int currency valid
24. Le manuel du programmeur crit m me les sources afin d tre toujours maintenue jour Disponible en ligne en format HTML plus pratique que la version PostScript l annexe 5 http step polymtl ca bock libofx Le site www du projet pour distribuer et faire conna tre LibOFX e Un document de design pour une architecture d importation g n rique pour le logiciel Gnucash gnc generic import Le module d importation g n rique de GnuCash e Gnc ofx import Un client de LibOFX pour le logiciel GnuCash e Bon nombre de Makefiles fichiers lisez moi et autres l ments appr ci s mais souvent oubli s 32 9 2 Statistigues et performance 9 2 1 Taille du code Module Lignes de code LibOFX 1387 ofxdump 220 ofx2qif 171 gnc_generic_import 345 gnc_ofx 269 Total 2392 Tableau 1 Taille du code source e Les statistiques sur la taille du code sont g n r e par l utilitaire sloccount Ce logiciel saute les commentaires et les lignes vides e J ai jug qu il n tait pas pertinent de compter les lignes des fichiers XML de description d interface graphique g n r s par l outil Glade e titre de comparaison l arbre de d veloppement complet de GnuCash repr sente 254 244 lignes de code http www dwheeler com sloccount 9 2 2 Performance 33 Afin de mesurer la performance de la librairie j ai produit diff rents fichiers de test par copier
25. _SRVCHG lt Service charge OFX_DEP lt Deposit OFX_ATM lt ATM debit or credit Note Depends on signage of amount OFX_POS lt Point of sale debit or credit Note Depends on signage of amount OFX_XFER lt Transfer OFX_CHECK lt Check OFX_PAYMENT lt Electronic payment OFX_CASH lt Cash withdrawal OFX_DIRECTDEP lt Direct deposit OFX DIRECTDEBIT lt Merchant initiated debit OFX REPEATPMT lt Repeating payment standing order OFX_OTHER lt Somer other type of transaction transactiontype int transactiontype_valid time_t date_posted lt Date the transaction took effect ex date it appeared on your credit card bill int date_posted_valid double amount lt Actual money amount of the transaction signage will determine if money went in or out int amount_valid char fi_id 256 lt Generated by the financial institution fi unique id of the transaction to be used to detect duplicate downloads int fi_id_valid name OFX optional elements The OFX spec defines the following elements as optional If the associated _valid is true the corresponding element is present and the associated variable contains valid data time_t date_initiated lt Date the transaction was initiated not always provided ex date you bought something in a store int date_initiated_valid
26. account char account_online_id_value char account_human_description gnc_commodity new_account_default_commodity GNCAccountType new_account_default_type If no account is found with a matching online_id the generic module gives the user the option to select an existing account from a list or create a new one The account online id is then stored in the selected or created account s kvp frame The last 3 parameters of the function are defaults for new account creation and are optionnal The Online System specific module is then responsible for creating a GnuCash transaction and adding the source split associated with the source account possibly created above and filling it with as much information as it has as it s disposal much info is available for ofx little for qif If a unique transaction id is available from the online system is is stored in the splits kvp frame using key transaction online id No transaction matching or duplicate detection is done at this stage The generic module then receives the Transaction for the online system specific module using function void gnc_import_add_trans Transaction trans We do not use GUID because in all cases the transaction was just created The functions defines the following enum enum gnc_match_probability CERTAIN 45 PROBABLE LIKELY POSSIBLE UNLIKELY IMPOSSIBLE Here is the pseudocode of the gnc_import_add_trans function Variables matches a list
27. ang s au cours de ce projet e Les listes de diffusion Elles permettent de discuter de fa on publique du d veloppement du logiciel Ainsi les autres d veloppeurs et les utilisateurs qui le d sirent peuvent tre tenus au courant du travail de chacun changer leurs id es sur l volution future du projet et rapporter des d fectuosit s e CVS Un syst me de contr le de versions Contrairement aux logiciels classiques comme PVCS et RCS il ne fonctionne pas sous un mod le verrouiller le fichier gt modifier gt d verrouiller Il fonctionne plut t sur un mod le modifier gt 11 fusionner C est ce logiciel qui permet en pratique de travailler plusieurs sur une m me base de code sans avoir de communication directe r guli re e Bugzilla Un outil de gestion des d fauts e enucash Un canal IRC sur GIMPnet Il permet la communication non structur e 8 P et en temps r el Au d but de ce projet j ai contact la communaut de d veloppeurs de GnuCash et j y ai t bien re u LibOFX est encore jeune mais une quinzaine de personnes ont d j envoy des rapports de d fauts ou des suggestions De plus les d veloppeurs des logiciels de finances personnelles Grisbi et KmyMoney2 ont manifest leur int r t utiliser la librairie 7 2 Publication aupr s des d veloppeurs et des usagers Depuis que j ai d cid de cr er un projet ind pendant pour LibOFX il est devenu essentiel d
28. bl matique des modules d importation 26 9 6 2 La solut1ONs zzs bi mnt its qua ne nn ten te rte vs 27 8 7 Le mod le sn cash OR nn A6 ere ne nt nn dette 29 9 Disc sston t CONCIUSION ibn M8 ddl da dua tint n a sortes ar RL 31 91 Les r sultats d projet his ns s dan sans igen ah ne 31 9 2 Statistiques et performances denninrnmmennendintedasdendainiie 32 921 Taille du cod s ins tn Re ee ent ne le oo Joo 32 922 P tformance session seit d el an nn et cdi An sa tin 33 9 3 Retour sur la plamification seen rniiaitninintaitsltiese 35 9 4 Travaux r aliser dans les prochaines versions 36 9 5 Conclusions fr te aia ane ne at a abet enr de glee Posed east au 37 PO Bibliographies ent nadia 40 TAS ANNEX CS nee ne ae tebe tee nn died et bo do do bobo obou hue ne 41 11 1 Annexe 1 R sum des fichiers et principales fonctions du projet LibOFX 41 11 2 Annexe 2 Document de design pr sent aux d veloppeurs de GnuCash M 11 3 Annexe 3 Document de pr sentation et de planification original 47 11 4 Annexe 4 Le fichier Ibofx h d finissant API 52 11 5 Annexe 5 Manuel du programmeur 59 IV 3 Remerciements Michel Dagenais directeur de projet de fin d tudes pour ce projet Christian Stimmings d veloppeur du module HBCI de GnuCash pour son aide et ses commentaires Christian Stimmings Derek Atkins et Linas Vepstas pour la confiance qu ils m ont accord e La commu
29. blement une approche assez rapide mais extr mement risqu e car elle rendrait quasi impossible la d tection d erreurs De plus le nombre d exceptions g rer serait tr s lev et la maintenance tr s difficile Il vaudrait probablement mieux utiliser une librairie SGML ou XML existante Vutiliser pour parser le DTD et acc der ensuite aux l ments du fichier en parcourant l arbre g n r Cette approche offre la validation et donnera galement une excellente base pour que d autres d veloppeurs puissent ventuellement tendre mon module pour ajouter d autres fonctions que la conciliation bancaire paiement en ligne etc Un bon nombre d heures d analyse restent passer pour choisir la meilleure implantation de cette fonction Ce module transformera les donn es contenues dans le fichier OFX en un compte temporaire de GnuCash et affichera les autres donn es d int r t Version date banque 49 transit etc 125h pr vues Fonction de fusion La fusion des donn es import es devrait tre s par e de l importation elle m me pour des raisons de robustesse et de lisibilit du code Ainsi on ne fera pas des op rations de copie et de comparaison sur des structures de donn es diff rentes et on pourra utiliser les fonctions de copie et de recherche qui font d j partie du logiciel De plus ce module a d autres utilisations potentielles et pourra tre r utilis dans d autres parties du logiciel La fu
30. chaine version stable de GnuCash 1 8 d autant plus qu elle se fera en commun avec Christian Stimmings le d veloppeur du module HBCI de GnuCash 39 On pourrait galement tenter de mesurer le succ s en fonction des nouveaux objectifs que j ai fix s pour ce projet soit de faire de LibOFX le standard de facto pour l importation de fichiers OFX il est trop t t pour se prononcer Il m apparait vident que j ai pr sentement une excellente base pour r ussir L architecture est mon avis structur e et document e et je n ai pas eu de commentaires n gatifs au sujet de l API II reste maintenant voir si un effet d entra nement se cr era que d autres logiciels int greront LibOFX et que d autres d veloppeurs y contribueront Si cela ne se produit pas tous les efforts suppl mentaires mis dans l API dans l architecture et dans la documentation auront t inutiles Les v nements des prochaines semaines risquent d tre d terminants pour le succ s futur de LibOFX Tout d abord il y aura la publication de GnuCash 1 8 qui devrait donner beaucoup d exposition la librairie Ensuite une fonctionnalit tr s attendue de la librairie est le support des comptes d investissements Si celui ci arrive trop tard ce manque sera sans doute lorigine de plus de critiques que celles engendr es par d ventuels d fauts dans la librairie ou son API Finalement les logiciels Grisby et KmyMoney2 on manifest leur int r t pour l int
31. coller ofxdump pour diff rents nombres de transactions La commande time permet ensuite de calculer le temps d ex cution de Nb de transactions Temps usager s Temps syst me s Temps coul s 0 0 13 0 02 0 23 200 0 59 0 14 2 01 2090 4 66 0 94 16 08 20900 45 92 9 37 156 52 Tableau 2 Temps d ex cution de ofxdump pour diff rents fichiers Le 0 13 seconde n cessaire pour traiter le fichier vide repr sente le co t fixe de traitement du DTD et d initialisation de la librairie Le test suivant avec 200 transactions repr sente mon avis une borne sup rieure repr sentative d une utilisation normale puisqu il faudrait faire 100 transactions par mois et attendre 2 mois avant de les x t l charger pour arriver un tel fichier Le temps r el coul de 2 01 secondes m apparait donc acceptable On peux constater par les tests suivants que l augmentation de temps est lin aire Il aurait t fort surprenant qu il n en soit pas ainsi puisque chaque transaction est d truite une fois trait e J ai tent de raffiner ces r sultats par profilage En recompilant ofxdump avec la librairie incluse de fa on statique il devient possible de faire un profilage avec l option de compilation pg et l utilitaire gproc premi re vue les r sultats sont quelque peu surprenants Le temps d UCT rapport pour les fonctions profil es avec le fichier de test de 20900 transactions est de 2 83 seco
32. d strings point to a null terminated string Elements listed as mandatory are for information purpose only do not trust the bank not to send you non conforming data 7 KKK k k k k k k k k k k k k k k k k K AA k k k k k k k k k k k k k k A This program is free software you can redistribute it and or modify 3 it under the terms of the GNU General Public License as published by the Free Software Foundation either version 2 of the License or i at your option any later version K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK ifndef LIBOFX_H define LIBOFX_H include lt time h gt ifdef __ cplusplus define CFCT extern C else define CFCT define true 1 define false 0 endif define OFX ELEMENT NAME LENGTH 100 define OFX SVRTID2 LENGTH 36 define OFX CHECK UMBER LENGTH 12 define OFX REFERENCE NUMBER LENGTH 32 define OFX FITID LENGTH 29o L define OFX TOKEN2 LENGTH 36 define OFX MEMO2 LENGTH 390 1 define OFX BALANCE NAME LENGTH 32 define OFX BALANCE DESCRIPTION LENGTH 80 1 define OFX CURRENCY LENGTH 3 1 In IS0 4217 format define OFX BANKID LENGTH 9 define OFX BRANCHID LENGTH 22 define OFX ACCTID LENGTH 22 def
33. de sp cifique au parseur OpenSP En th orie pour changer de parseur presque tous les changements seraient dans ce fichier C est ici que sont construits les diff rents objets de ofx proc rs cpp en fonction des l ments et des donn es SGML rencontr s Principales void startElement const StartElementEvent sevent m thodes D but d un l ment SGML void endElement const EndElementEvent amp event Fin d un l ment SGML void data const DataEvent amp event Donn es ASCII provenant d un l ment SGML void error const ErrorEvent event Erreurs du parseur Description Une s rie d objets des contenants repr sentant plus ou moins l un des l ments SGML OFX Ils sont construits et d truits au fur et mesure par ofx proc sgml cpp Ces objets incluent les fonctions n cessaires pour remplir les structure de donn es correspondantes de libofx h 43 Principaux OfxGenericContainer Tous les autres contenants en h ritent objets Attributs et m thodes communes dont la tr s importante fonction virtuelle add attribute const string identifier const string value qui permet d ajouter les donn es brutes SGML d une mani re g n rique OfxDummyContainer Sert contenir les l ments OFX SGML que la librairie ne connait pas Permet aussi de ne pas avoir supporter explicitement des l ments ne contenant pas eux m mes de donn es lt OFX gt par exe
34. e tenir les usagers au courant des progr s de son d veloppement De plus dans le but de d velopper une communaut et que le projet attire vers lui la majorit des d veloppeurs qui s int ressent la question il faut en faire la publicit aupr s des auteurs de logiciels et de leurs usagers x Les moyens utilis s pour ce faire sont la cr ation et la mise jour d un site web http step polymtl ca bock libofx la cr ation d une archive ordonn e des diff rentes r visions il y en a 12 de publi es ce jour la mise en ligne de la documentation l annonce des nouvelles versions sur le site tr s fr quent http www freshmeat net et finalement contacter directement les auteurs de diff rents logiciels afin que nous ne soyons pas plusieurs travailler ind pendamment un m me objectif 7 3 La documentation La documentation de mauvaise qualit est souvent l une des principales raisons pour 10 Internet Relay Chat 1 http www grisbi org 12 laquelle les projets ouverts chouent Ces projets sont souvent d marr s par des b n voles dans leur temps libre et il arrive souvent que la documentation soit compl tement ignor e ou remise plus tard Deux types de documentation sont pourtant mon avis essentiels Documentation pour l usager Constitu e des diff rents fichiers Lisez mol des instructions de compilation du manuel de l usager s il y a lieu Dans mon cas elle est constitu e d un
35. es contributeurs est plus mauvais que celui d un projet classique Ce n est donc que si un bon nombre de personnes mettent en commun leurs ressources qu il y aura un gain d efficacit pour chacun des participants le r sultat ne se divise pas mais l effort si Il est d ailleurs trop t t pour dire quel point l usage d un processus ouvert aura contribu au succ s de ce projet Bien que plusieurs personnes aient donn des suggestions utiles et r gl quelques d fauts il est vident que jusqu maintenant le processus ouvert a jusqu un certain point ralenti sa progression Pour ne citer qu un exemple 90 de la documentation qui a t produite aurait t parfaitement inutile si j tais demeur seul On pourrait mesurer son succ s en fonction des objectifs nonc s dans la planification originale De ce point de vue les objectifs ont t en grande partie rencontr s Cependant il reste une partie manquante la d tection des transaction correspondantes entr es la main Il est noter qu il avait d j t discut avec le superviseur peu apr s le d but du projet que l emphase plus grande mise sur la documentation et la librairie risquait d avoir des cons quences sur la partie interface graphique Cependant le design de cette partie est d j avanc les prototypes sont complets ainsi qu une partie de l interface Il est probable qu elle sera achev e au cours des prochaines semaines avant la sortie de la pro
36. gration de LibOFX Si cela se fait rapidement l annonce par trois logiciels diff rents du support de la norme OFX par une m me librairie assurera presque certainement que celle ci deviendra le standard de facto 40 10 Bibliographie 1 CheckFree Corp et al Open Financial Exchange Specification 1 6 18 octobre 1999 2 Browne Christopher B Finances Linux and Stuff http cbbrowne com info finances html juin 2002 3 Intuit Inc QIF Definition http www respmech com mym2gifw gif new htm 1996 4 Projet GnuCash OIF file format http www gnucash org Ixr gnucash source src import export gif 1mport file format txt 5 Sperberg McQueen C M et Lou Burnard A Gentle Introduction to SGML http www tei uic edu orgs tei sgml teip3sg index html 6 World Wide Web Consortium Comparison of SGML and XML 1 http www w3 org TR NOTE sgml xml 5 12 1997 7 World Wide Web Consortium Extensible Markup Language XML http www w3 org XML 8 Lepp nen Marko Differences between SGML XML and HTML http matwww ee tut fi onykane courses prj xmlsem2000 ht leppanen htm 9 O Reilly amp amp Associates Inc XML from the inside Out http www xml com 2002 10 OASIS Open inc XML White Papers http www xml org xml resources whitepapers shtml 11 Walsh Norman Converting an SGML DTD to XML http www xml com pub a 98 07 dtd 8 juillet 1998 12 Bosak Jon XML Questions amp Answers http www isgmlug org n3
37. ine OFX ACCTKEY LENGTH 22 Must be MAX of lt BANKID gt lt BRANCHID gt lt ACCTID gt or lt ACCTID gt lt ACCTKEY gt 53 define OFX_ACCOUNT_ID_LENGTH OFX_BANKID_LENGTH OFX BRANCHID LENGTH OFX ACCTID LENGTH 1 define OFX MARKETING INFO LENGTH 360 1 define OFX TRANSACTION NAME LENGTH 32 1 brief ofx_proc_file is the entry point of the library ofx proc file must be called by the client with a list of 1 or more OFX files to be parsed in command line format x CFCT int ofx proc file int argc char argv brief An abstraction of an OFX STATUS element The OfxStatusData structure represents a STATUS OFX element sent by the OFX server Be carefull you do not have much context except th ntity name so your application should probably ignore this status if code 0 However you should display a message if the status in non zero since an error probably occurred on the server side In a future version of this API OfxStatusData structures might be linked from the OFX structures they are related to 2j struct OfxStatusData name Additional information To give a minimum of context the name of the OFX SGML elemet where this lt STATUS gt is located is available x char ofx element name OFX ELEMENT NAME 4 ENGTH Name of the OFX element this status is relevant to int ofx_e
38. l en trouve une il offre de faire correspondre S I nen a pas trouv ou si l utilisateur a refus la correspondance il offre d ajouter V op ration au compte La gestion des duplicatas est importante Si le module trouve plus d une op ration correspondant une op ration t l charg e le module informera l usager d une erreur potentielle Quicken a une faiblesse ce niveau Il fait correspondre toute op ration t l charg e avec la plus r cente op ration ayant le m me identificateur et le m me montant m me si elle est plus vieille de plusieurs mois Il ne faudrait pas reproduire ce probl me Limiter un certain nombre de jours comme je ai fait plus haut r gle une partie du probl me mais j aimerais aussi r gler le probl me pos par deux retraits d un m me montant dans un guichet automatique faits la m me journ e Mais je ne suis pas s r qu il y ait une solution plus l gante dans ce cas que d offrir l usager d ajouter les deux op rations De plus il ne faut pas rejeter compl tement l approche de Quicken car pour les cartes de cr dit il peut arriver de recevoir la transaction plusieurs semaines apr s un achat J ai d j pay un repas dans un a roport d Europe et la transaction est apparue plus d un mois plus tard 8 6 2 La solution Afin de r gler ce probl me j ai d cid de soumettre une proposition de design pour une architecture g n rique sur la liste des diffusion des d ve
39. l soit plus simple de convertir le DTD au format XML et qu il soit x ensuite simple de supporter les deux normes Mais cette tape pr liminaire je n ai 7 GNU General Public License http www gnu org licenses licenses html TOCGPL Open Financial Exchange http www ofx net ofx default asp Standard Generalized Markup Language Extensible Markup Language a Comparison of SGML and XML World Wide Web Consortium Note 15 12 1997 http www w3 org TR NOTE sgml xml 24 25 48 aucun moyen de le savoir sans une tude plus approfondie des deux normes et des diff rents outils De plus mon institution financi re le service Acc s D de Desjardins exporte ses fichiers dans le format OFX 1 02 et il me faut imp rativement un moyen de me g n rer des fichiers tests Donc pour que mon module soit utile la majorit des utilisateurs et que je puisse le tester je m en tiendrai priori OFX1 6 dans le cadre de ce PFE Mon projet devra tre int gr un logiciel existant Il faudra donc que je travaille avec les personnes pr sentement en charge et que je me conforme certaines de leurs normes et proc d s De plus le mod le de d veloppement ouvert utilis par les logiciels libres implique que je devrai demander des modifications ou liminer des erreurs dans des modules maintenus par d autres d veloppeurs et que d autres feront sans doute de m me pour les miens J ai d j contact la communaut de
40. lement_name_valid name OFX mandatory elements The OFX spec defines the following elements as mandatory The associated variables should all contain valid data but you should not trust the servers Check if the associated _valid is true before using them int code lt Status code char name lt Code short name char description lt Code long description from ofx error msg h int code valid lt If code valid is true so is name and description They are obtained from a lookup table Severity of the error enum Severity INFO lt The status is an informational message WARN lt The status is a warning ERROR lt The status is a true error severity int severity valid name OFX optional elements The OFX spec defines the following elements as optional If the associated valid is true the corresponding element is present and the associated variable contains valid data char server message lt Explanation given by the server for the Status Code Especially important for generic errors int server message valid X 54 brief The callback function for the OfxStatusData stucture An ofx_proc_status event is sent everytime the server has generated a OFX STATUS element As such it could be received at any time but not during other events An OfxStatusData structure is passed to this even A C
41. loppement d un API structure et tout le travail n cessaire pour rendre la librairie ind pendante et dans un format distribuable les 125 heures pr vues ont probablement t respect es avant l atteinte d un fonctionnement de base Par contre beaucoup plus de temps a en r alit t consacr la librairie au cours de l t v Fonction de fusion Il s agissait plus ou moins de d velopper les fonctionnalit s aujourd hui contenues dans gnc generic import et gnc ofx peine 75 heures taient pr vues Les probl mes d int gration au logiciel GnuCash ont fait en sorte que ce temps a t d pass simplement pour la cr ation des modules leur int gration dans les sources et l environnement de compilation et les menus de GnuCash Donc 75 heures ont t br l es avant m me l criture des fonctionnalit s Le temps total consacr approche probablement les 200 heures et les fonctionnalit s n ont pas encore atteint le 36 niveau originalement d sir v Documentation 10 heures devaient tre consacr es la documentation Cependant la publication ind pendante de LibOFX et le design et la cr ation de gnc generic import ont fortement augment les besoins en docuemntation v Tests et d verminage Cette activit tant r partie sur toute la dur e du projet il est difficile de dire si les 25h pr vues ont t respect es v Rapport 20 heures taient pr vues tant donn l augmentation de la taille du
42. loppeurs de GnuCash Cette proposition a t bien re ue Vous pouvez lire la troisi me version de ce document l Annexe 2 J ai implant une partie de cette proposition Pr sentement toute la partie sur la s lection de comptes est implant e Lorsqu un module d importation appelle la fonction gnc_import_select_account avec en param tre un identificateur unique le module 28 g n rique cherche dans le libre GnuCash un compte comportant ce num ro d identification dans son KVP frame online id Si un tel compte est trouv le compte GnuCash est retourn imm diatement Dans le cas contraire l usager se fait pr senter le dialogue suivant gt Select Account The following online account is currently unknown to GnuCash Account ID 70000010000234210023421815 30480 0023421 E54 Please select or create the matching Gnucash account Type Jonne 10 New Account child of selected AX Gee Figure 8 4 Dialogue de s lection de compte Si aucun compte GnuCash ne correspond au compte a partir duquel on a t l charg un relev l usager a l option d en cr er un nouveau Malheureusement la correspondance entre les transactions n est pas encore totalement implant e L ajout des transactions est fonctionnel et le module d tecte les transactions t l charg e deux fois et ne cr era pas de duplicatas Par contre si une transaction a t entr e pr c demment a la main elle ne
43. mes SAX ou DOM ce qui permet d crire un logiciel ind pendamment du parseur utilis L interface SAX est une interface simple qui appelle des fonctions visiteurs mesure que les diff rents l ments sont rencontr s tandis que la norme DOM construit un arbre de donn es et offre les fonctions n cessaires pour le parcourir Malheureusement dans le petit monde SGML je n ai r ussi qu trouver un seul parseur qui remplisse les deux conditions que je jugeais essentielles soit d tre activement maintenu et de supporter galement les fichiers XML Le parseur choisi est OpenSP descendant de sgmls crit par James Clark Il est noter Document Type Definition S Simple API for XML Document Object Model http openjade sourceforge net 16 que ce dernier est une sommit du monde SGML XML il est pr sentement technical lead du comit d finissant la norme XML OpenSP inclut une interface C g n rigue et document e similaire SAX La suite OpenSP n est malheureusement pas sans d fauts Tout d abord son interface a t con ue pour tre incluse dans un logiciel au moment de la compilation Or la taille d un caract re pour OpenSP peut tre de 1 2 ou 4 octets selon les option de compilation choisies Or il n y a aucune fonction permettant de conna tre cette taille au moment de l ex cution ce qui a occasion d important maux de t te aux personnes qui ont test la librairie au d but du projet
44. mple fxAccountContainer Une abstraction d un compte bancaire cr e partir de lt BANKACCTFROM gt compte bancaire or lt CCACCTFROM gt compte de cartes de cr dit fxStatementContainer Une abstraction d un relev de compte r e a partir d un lt STMTRS gt relev de compte bancaire ou un CCSTMTRS gt relev de compte de cartes de cr dit fxTransactionContainer Permet de supporter les transactions elles quelles Cr partir d un lt STMTTRN gt Fichier ofx_utilities cpp fonctionnement de la librairie Description Diff rentes fonctions utilitaires n cessaires Principales ostream amp operator lt lt ostream amp os fonctions SGMLApplication CharString s wchar t CharStringtowchar_t SGMLApplication CharString source wchar t dest string CharStringtostring const SGMLApplication CharString source string dest string AppendCharStringtostring const SGMLApplication CharString source string amp dest Diff rentes fonctions permettant de convertir les chaines de caract res OpenSP en cha nes STL time t ofxdate to time t const string ofxdate Convertit une cha ne de caract res contenant une date en format OFX en une structure C time t La conversion est pr cise jusqu la seconde OFX permet une pr cision jusqu une milliseconde double ofxamount to double const string ofxamount Conversion d un montant d argent en repr sentation point flottant
45. naut de d veloppeurs de GnuCash pour leur accueil chaleureux John Klar Scot Drenan Neil B Cohen Jake Gibbons qui ont test et ou corrig des d fauts de la librairie 4 Liste des figures Figure 8 1 Composantes du projet 14 Figure 8 2 Structures de donn es de GnuCash 19 Figure 8 3 Hi rarchie des conteneurs d finis dans ofx_proc_rs cpp 22 Figure 8 4 Dialogue de s lection de compte 28 Figure 8 5 Exemple de transactions OFX t l charg es 30 5 Liste des tableaux Tableau 1 Taille du code source 32 Tableau 2 Temps d ex cution de ofxdump pour diff rents fichiers 33 6 Introduction et probl matigue 6 1 La probl matigue La norme OFX est un standard permettant la communication de donn es comptables entre une institution financi re et un client Elle est particuli rement populaire pour t l charger des relev s de compte afin d effectuer une conciliation bancaire C est cette norme qu utilise g n ralement les logiciels Quicken Intuit Money Microsoft et Personnel Makisoft pour effectuer ces op rations Malheureusement aucun logiciel libre supportant cette norme n tait disponible Le seul logiciel qui poss dait cette fonctionnalit et tournant sur Linux ou les diff rents BSD est un logiciel propri taire Kapital theKompany com Or le manque d un logiciel personnel per u comme complet par le grand public est consid r comme un obstacle l adoption de Linux pour les ordinateurs de
46. ndes au total soit 6 2 des 45 92 secondes de temps d UCT usager donn par time Cela laisse entendre que la majorit du temps est pass dans les fonctions non profil es soit donc celles d OpenSP Ayant de la difficult faire confiance ces chiffres j ai utilis nsgmls l outil de OpenSP sur le DTD et le fichier de 20900 transactions et selon time seulement 2 05 secondes d UCT usager sont utilis es au 34 total Certes les auteurs d OpenSP mentionnent que l interface g n rique de OpenSP occasionnait une l g re perte de performance mais 1l est difficile de croire que l norme manque gagner de 45 92 2 05 2 83 41 04 secondes est du seulement l interface Il appara t donc clairement que la granularit du profilage 0 01 secondes entre les chantillons selon le rapport soit nettement insuffisante pour prendre en compte avec une erreur acceptable tout le temps pass dans les diff rentes courtes fonctions de conversion de texte de la librairie Le profilage nous apprends tout de m me que la fonction la plus co teuse 33 du temps rapport est sanitize proprietary tags Comme elle est appel e sur chaque ligne du fichier en entr e et ne sera qu a liminer quelques ligne il est probable qu une ronde d optimisation sur cette fonction serait tr s profitable pour la performance g n rale En r sum la performance est pr sentement ad quate pour une utilisation normale de la librairie Il serait
47. neric import module gnucash gnc ofx import module gnucash LibOFX librairie partagee OpensP parseur SGML OFX DTD Ficher OFX Figure 8 1 Composantes du projet 15 8 1 Le parseur SGML Un document SGML est compos d un DTD d crivant la structure du document et du document lui m me Ce dernier contient des l ments on dirait des tags en HTML repr sentant des entit s logiques Un DTD pour la norme OFX 1 6 est fourni par le consortium Celui ci fait pr s de 5000 lignes II me fallait donc trouver ou programmer un parseur capable de parcourir ce monstre Il aurait certes t envisageable d crire partir de la sp cification un parseur manuel recherchant lin airement dans le document les l ments support s Cependant cette approche aurait donn naissance un logiciel fragile incomplet et difficile maintenir et tendre La premi re question architecturale r gler tait donc de choix du parseur SGML capable d interpr ter le DTD et de servir de base un parseur OFX XML tant un sous produit de SGML la norme OFX 2 0 bas e sur XML devrait pouvoir tre support e par le m me parseur Il aurait t tr s facile de trouver un tel logiciel si la norme tait bas e uniquement sur XML XML tant pr sentement la grande mode il existe une multitude d outils et de parseurs pour la traiter Encore mieux l interface avec les parseurs XML est g n ralement r gie par l une de deux nor
48. nt de vue architectural et cela permettrait plus de flexibilit aux clients entre autre en permettant d appeler plus d une fonction e Chargement dynamique de la librairie par le module gnc ofx afin de permettre de cr er des ex cutables de GnuCash qui fonctionneront m me sans la librairie install e 9 5 Conclusion Sur le plan technique ce projet est clairement un succ s Il est maintenant possible de traiter d une fa on fiable les fichiers OFX Le parseur OFX est tol rant des malformations des fichiers Non seulement il ne plante pas il est m me souvent capable d extraire tout de m me la majorit des informations d un fichier endommag 38 Ce projet de fin d tudes a acquis une vie propre Bien des ajustements ont du tre apport s la planification originale en fonction des besoins exprim s par ses futurs usagers des contraintes du d veloppement de GnuCash et des nouveaux objectifs que je lui ai donn s Mais c est l la nature m me des projets ouverts Contrairement aux projets classiques o les objectifs sont fixes ainsi qu en th orie le temps et le budget disponibles les projets ouverts sont influenc s par les objectifs ressources talents et opinions diff rentes et fluides de ses usagers et d veloppeurs Il n est donc pas possible de faire une planification rigide tre flexible est bien s r un avantage mais il m appara t vident que le ratio r sultat obtenu sur mois personne investi par tous l
49. of possible match with likelyhood split_to_match trans s first split In split_to_match s parent account for each split where date gt split_to_match date 2 months if transaction_online_id match add to matches using CERTAIN if preferences dictate end search here if amount match if transaction_online_id exists but doesn t match add to matches using UNLIKELY not IMPOSSIBLE could be protocol change or prior error eles if memo match and date within 4 days add to matches using PROBABLE else if date within 24 hours add to matches using LIKELY else if date within 10 days add to matches using POSSIBLE else add to matches using UNLIKELY Present the list of matches to the user in decreasing order of likelyhood User has the option of selecting one of the match or creating a new transaction Add transaction_online_id to selected split Erase from other CERTAIN splits if transaction not balanced TODO gnc_balance_transaction Transaction trans commit changes return gne balance transaction Transaction trans add s or matches other splits until the transaction is balanced using whatever user interaction and heuristics are appropriate Since I haven t really used gnucash s current transaction matching before I would like someone else to contribute the description of the process to match unbalanced transactions Remarks and things to remember Credit card transactions can sometimes appear over a month after the purchase clerk 46
50. ons et fichiers disponibles l annexe 1 Ce n est cependant pas un substitut au manuel du programmeur complet disponible l annexe 5 En d butant le nom fichier OFX traiter est re u en param tre par la fonction ofx proc file Les en t tes OFX sont limin es pour ne laisser que le contenu SGML Les l ments OFX propri taires sont ensuite limin s La norme OFX pr voit un format pour les extensions propri taires une compagnie Celles ci sont dans le format lt PRE NOM gt o PRE est un pr fixe de trois lettres enregistr par la compagnie aupr s du consortium et NOM est le nom de l l ment Or ceux ci provoquent des probl mes de parsage car ces l ments ne font pas partie du DTD et sont de toute fa on inutiles pour LibOFX puisqu ils ne sont pas document s Le r sultat de ces pr traitements est ensuite crit dans un fichier temporaire Finalement la librairie trouve le fichier DTD appropri et envoie celui ci et le fichier temporaire la fonction ofx proc sgml Celle ci passe les deux fichiers la librairie OpenSP qui prend en charge le flux de contr le jusqu la fin du processus L interface g n rique de cette librairie d finit diff rents objets que l on peut implanter pour recevoir les v nements de la librairie C est ce que fait le fichier ofx_sgml cpp Les v nements qu il traite sont les suivants ouverture d un l ment fermeture d un l ment r ception de donn es et erreur
51. projet ce temps va probablement doubler 9 4 Travaux r aliser dans les prochaines versions Il est bien vident qu un projet de cette nature ne se termine jamais Voici quelques unes des am liorations susceptibles d tre apport es dans un futur plus ou moins loign e LibOFX Passer un environnement de compilation GNU complet pour libofx et ses utilitaires en utilisant les logiciels automake autoconf et libtool est n cessaire court terme Ce changement devrait permettre une plus grande portabilit du projet un meilleur environnement pour accueillir les contributions des futurs d veloppeurs et surtout permettre la g n ration facile de paquetages binaires LibOFX Implanter le support des transactions d actions et des comptes de placements C est une fonctionnalit tr s demand e et probablement mon prochain projet pour la librairie Fonctionnalit d exportation de fichiers OFX Fonctionnalit sugg r e par des d veloppeurs de GnuCash Pr sentement les fichiers QIF sont g n ralement utilis s pour transf rer des donn es financi res entre les applications Or le format QIF bien que populaire n est pas document et souffre d une importante carence au niveau de l identification des transactions Ce projet pourrait donner l occasion de faire les changements architecturaux la librairie pour permettre ventuellement la communication OFX bidirectionelle Cependant il est beaucoup plus probable
52. r s et situ s sur trois continents Peu apr s le d but du projet il est devenu vident qu il valait mieux implanter les fonctionnalit s OFX comme telles dans une librairie partag e afin de maximiser sa valeur pour la communaut et faciliter le d verminage Ce projet a donc donn naissance un logiciel ind pendant LibOFX Ce projet a t couronn de succ s Les l ments qui ont t produits sont entre autres la librairie LibOFX con ue pour permettre n importe quelle application de supporter la norme OFX l utilitaire ofxdump permet le d verminage de la librairie l utilitaire ofx2qif un convertisseur de fichiers OFX gt QIF le site http step polymtl ca bock libofx un manuel du programmeur gnc ofx import un module d importation OFX pour le logiciel GnuCash et gnc generic import une architecture g n rique d importation pour GnuCash Ceux ci permettent pour la premi re fois au logiciel GnuCash et bient t plusieurs autres logiciels d importer avec succ s des relev s bancaires utilisant la norme OFX Open Financial Exchange http www ofx net ofx default asp Http www gnucash org GNU General Public License http www gnu org licenses licenses html TOCGPL Ouicken Interchange Format Rw nN e II 2 Table des mati res 1 Sommaire tee ees ak ete das n nes ob od doo oo tenis walla I 2 Table d s mati res 3278 28 moe a 8 6k ood Tide i Wee ER bd TD ve Be aad Il 3 Remerci ments
53. r tr s motiv d sirant ajouter des fonctionnalit s majeures au projet mais ce ne l est g n ralement pas pour un programmeur simplement int ress r gler un d faut mineur adapter le logiciel son syst me ou ajouter des fonctionnalit s mineures 2 http www stack nl dimitri doxygen 13 7 4 La compatibilit aux environnements diversifi s Malgr tous les efforts des d veloppeurs et la disponibilit de la suite d outils standard GNU il reste souvent tr s difficile de produire un logiciel facile compiler et installer dans les environnements divers des usagers Les principal probl mes que j ai rencontr s sont de subtiles diff rences au niveau des compilateurs gcc 3 0 et 2 96 Afin d viter ces probl mes je compile maintenant ma librairie syst matiquement une fois avec chaque compilateur Un autre probl me d installation important est en fait un d faut commun des distributions Linux Celui ci fait en sorte que les librairies install es dans usr lib ont priorit sur celles install es dans usr local lib m me si ces derni res sont plus r centes L usager devra donc parfois s assurer d installer les librairies de soutien dans usr lib 5 GNU s Not Unix un organisme ombrelle pour un grand nombre de projets libres 14 8 Les composantes du projet Voici l architecture finale du projet La majorit de ces l ments sont d crits dans les sections gui suivent applications gno ge
54. re utile plusieurs logiciels J ai donc d cid 10 de rendre toute la partie s occupant de la norme OFX comme telle ind pendante Ainsi est n le projet LibOFX Aucune librairie partag e n tait pr vue dans la planification d origine La d cision de rendre ce projet ind pendant et l ambition d en faire le standard de facto pour supporter la norme OFX a rendu beaucoup plus importante la charge de travail reli e plusieurs des t ches suivantes typiques des projets ouverts 7 1 Communication avec les autres d veloppeurs et les usagers Mon projet doit tre int gr un logiciel existant Il faut donc que je travaille avec les personnes pr sentement en charge et que je me conforme certaines de leurs normes et proc d s De plus le mod le de d veloppement ouvert utilis par les logiciels libres implique que je dois demander des modifications implanter de nouvelles fonctionnalit s ou liminer des erreurs dans des modules maintenus par d autres d veloppeurs et que d autres ont faire de m me pour mes modules Le travail collaboratif entre plusieurs d veloppeurs loign s g ographiquement et qui ne se sont Jamais rencontr s est rendu possible par l utilisation de plusieurs outils Voici ceux que j ai utilis mais 1l en existe bien s r une multitude d autres e Le courrier lectronique Il permet de discuter en priv et d changer des fichiers Plus d une centaine de messages ont t ch
55. rt int date start valid The end time of this statement If provided the user can use this date as the start date of his next statement request He is then assured not to miss any transactions time t date end int date end valid marketing info could be special offers or messages from the bank or just about anything else char marketing info OFX MARKETING INFO LENGTH int marketing info valid brief The callback function for the OfxStatementData stucture The ofx proc statement event is sent after all ofx proc transaction events have been sent An OfxStatementData is passed to this event x CFCT int ofx proc statement struct OfxStatementData data brief NOT YET SUPPORTED Aa struct OfxCurrency char currency OFX CURRENCY LENGTH lt Currency in ISO 4217 format doubl xchange_rate lt Exchange rate from the normal currency of the account int must_convert lt true or false endif 58 59 11 5 Annexe 5 Manuel du programmeur Version PostScript du Manuel Pour une version jour en format HTML avec les liens aux sources voir http step polymtl ca bock libofx html index html
56. rust the servers Check if the associated _valid is true before using them AY char currency OFX CURRENCY LENGTH lt The currency is a string in ISO 4217 57 format int currency valid char account id OFX ACCOUNT ID LENGTH lt Use this for matching this statement with the relevant account in your application A struct OfxAccountData account lt Full account structure see OfxAccountData x int account id valid The actual balance according to the FI The user should be warned of any discrepency between this and the balance in the application double ledger balance int ledger balance valid time t ledger balance date lt Time of the ledger balance snapshot int ledger balance date valid name OFX optional elements The OFX spec defines the following elements as optional If the associated valid is true the corresponding element is present and the associated variable contains valid data double available balance lt Amount of money available from the account Could be the credit left for a credit card or amount that can be withdrawn using INTERAC int available balance valid time t available balance date Time of the available balance snapshot int available balance date valid The start time of this statement All the transactions between date start and date end should have been provided time t date sta
57. s particuliers L une des fonctionnalit s souvent demand e par les usagers avant d utiliser les logiciels disponibles actuellement est justement le support de la norme OFX Ce projet visait donc ajouter les fonctionnalit s n cessaires un logiciel de finances personnelles existant Le logiciel choisi est GnuCash le logiciel de finances personnelles le plus en vue du monde du logiciel libre Il est distribu sous licence GPL 6 2 Le projet L criture d un module de communication OFX g n ral avait t tent par les d veloppeurs de GnuCash Il tait pr vu que le module implante la norme OFX presque au complet conciliation bancaire paiement de factures transferts bancaires transactions boursi res etc Ce projet a malheureusement chou il y a d j deux ans L estimation du temps n cessaire par les d veloppeurs tait de 12 mois personnes Le projet ne comptant que sur des b n voles il n avan ait plus 5 Open Financial Exchange http www ofx net ofx default asp Http www gnucash org 7 GNU General Public License http www gnu org licenses licenses html TOCGPL Je me suis donc lanc dans un projet un peu moins ambitieux une implantation partielle de la norme OFX soit la partie n cessaire pour le traitement de ce qui est commun ment appel un fichier OFX soit un fichier de conciliation bancaire en format SGML suivant la norme OFX Cela permet d implanter la fonction la plus courante et la
58. scription Commodity Key Val Pairs 1 L oceobu 2000 alnar veprcar Figure 8 2 Structures de donn es de GnuCash Le logiciel GnuCash est organis en plusieurs sous syst mes Les sous syst mes avec lesguels j ai eu a interagir sont e Le moteur e L interface de cr ation et d dition de comptes e Les fonctions utilitaires pour les interfaces graphiques 20 8 3 La librairie partag e LibOFX La librairie LibOFX est l l ment principal du projet l origine il n tait pas pr vu de cr er une librairie partag e Cependant en cours de d veloppement il est rapidement devenu n cessaire d avoir un ex cutable ind pendant afin de tester et ajouter des fonctionnalit s au code faisant l interpr tation des donn es OFX proprement dites ce r le est maintenant rempli par l utilitaire ofxdump Comme il tait n cessaire d avoir une librairie il tait ensuite facile de la rendre partag e 8 3 1 L API La facilit d utilisation par le programmeur est le but de toute librairie partag e Voici donc quelques crit res que j ai tent de suivre e OFX est une norme tr s complexe mais peu de logiciels ont besoin de toute cette complexit Dans la mesure du possible il faut viter de forcer l utilisation de structure de donn es hi rarchiques Un seule structure devrait correspondre un compte une transaction etc Dans cette structure toutes les donn es devraient tre disponibles directement e
59. scuterai d abord globalement de la m thodologie propre aux projets ouverts que j ai employ e Suivra ensuite une section pour chacun des l ments importants du projet Chacune de ces sections contiendra une description plus ou moins br ve de la probl matique r soudre de la m thodologie employ e et une description du r sultat final le logiciel ou le document produit Finalement je discuterai plus globalement des r sultats de ce projet des probl mes encore r soudre ainsi que de ses suites probables J esp re que cette l g re d viation de la structure habituelle des rapports de projets de fin d tudes permettra au lecteur une lecture plus facile 9 7 Les m thodes et contraintes propres au processus de d veloppement ouvert Le processus de d veloppement choisi pour ce projet est un processus ouvert Le concept consiste publier le logiciel accompagn de son code source Une licence est accord e toute personne d sirant se le procurer Dans ce cas ci c est la licence GPL qui est utilis e Celle ci permet toute personne de modifier le produit mais toute distribution du logiciel modifi doit tre accompagn e du code source des modifications Le but est de cr er une communaut d int r ts autour du logiciel afin que les personnes et organismes qui la constitue partagent leurs ressources pour d velopper et d verminer le logiciel Cette philosophie laquelle je crois fermement permet lorsq
60. sion consiste prendre le compte temporaire et le fusionner avec le compte correspondant identifi par son no de transit de GnuCash Si le no de transit du compte en question n existe pas dans les autres comptes le logiciel offre l usager de choisir le compte utiliser ou en cr er un nouveau Il ajoute le num ro de transit au compte choisi Si deux comptes ont le m me num ro de transit un message d erreur est affich Un fois le compte identifi pour chaque transaction le module cherche une transaction ayant le m me identificateur la m me date et le m me montant S il en trouve une et une seule il consid re l op ration comme concili e S il n en a pas trouv il cherche une transaction ayant le m me identificateur et le m me montant dans les 4 jours pr c dent l op ration concili e ou une op ration ayant le m me montant et la m me date S il en trouve une il offre de faire correspondre S il n en a pas trouv ou si l utilisateur a refus la correspondance il offre d ajouter l op ration au compte La gestion des duplicatas est importante C est l une autre faiblesse du logiciel Quicken que je ne voudrais pas reproduire S il trouve plus d une op ration correspondante une op ration t l charg e le module informera l usager d une erreur potentielle Par d faut Quicken fait correspondre toute op ration t l charg e avec la r cente op ration ayant le m me identificate
61. ssibilit s de la librairie et un exemple de code en C Il utilise toutes les fonctions et structures de donn es de l API de LibOFX Utilisation ofxdump chemin fichier ofx fichier ofx Exemple de fonctionnement trongu bock bock fichiers ofx ofxdump selrelevc_2 cmd LibOFX INFO sanitize proprietary tags removed lt INTU BID gt 00012 LiboFX STATUS find dtd DTD found usr local share libofx dtd ofx160 dtd LiboFX ERROR OpenSP parser otherError misc parse error Error msg usr local share libofx dtd ofx160 dtd 3058 5 E content model is ambiguous when no tokens have been matched both the lst and 3rd occurrences of SIGNONMSGSET are possible LibOFX ERROR OpenSP parser otherError misc parse error Error msg usr local share libofx dtd ofx160 dtd 3058 5 E content model is ambiguous when no tokens have been matched both the 2nd and 4th occurrences of PROFMSGSET are possible LibOFX INFO Created OfxDummyContainer to hold unsupported aggregate OFX LibOFX INFO Created OfxDummyContainer to hold unsupported aggregate SIGNONMSGSRSV1 LibOFX INFO Created OfxDummyContainer to hold unsupported aggregate SONRS ofx_proc_status Ofx entity this status is relevent to SONRS Severity INFO Code 0 name Success Description The server successfully processed the request Server Message OK LibOFX INFO Created OfxDummyContainer to hold unsupported aggregate BANKMSGSRSV1 LibOFX INFO
62. string strip whitespace const string para string Permet d liminer les espaces blancs et une s rie de caract res ASCII tranges pouvant tre m l s aux cha nes de caract res de OpenSP retour arri re tabulation fin de ligne etc 21 Standard Template Library 44 11 2 Annexe 2 Document de design pr sent aux d veloppeurs de GnuCash This a draft of a design proposal for a generic import architecture The objective is to maximize code sharing between the OIF HBCI and OFX modules The most important area of potential code sharing is the account and transaction matching code This code has 3 distinct roles Finding the source account Finding and eliminating transactions downloaded twice in the source account Finding the destination account s and finding the matching tansactions s if it they exist s The Online System specific module is responsible for any steps necessary for obtaining and processing the data During this process it must use the generic import module to Identify and if necessary create the source account The account is identified using the account number for OFX and HBCI and the account name or description for gif if available The account number or identifier is stored in a kvp_string with key account_online_id The online system can use and format this frame however it sees fit but it must be a kvp_string The account can be found using the function Account gnc_import_select_
63. t actuel d un compte 1 solde 1 montant disponible pour retrait les dates de validit des transactions qui viennent d tr nvoy es etc Gestion des diff rents messages envoy s l usager Principales int message out OfxMsgType type const string message fonctions OfxMsgType est une num ration permettant de pr ciser le type de message DEBUG2 STATUS INFO etc Ceux ci seront ou ne seront pas affich s l usager selon la configuration de la variable associ e ce type de message Description Information sur les diff rents codes d erreurs OFX Contient toutes les erreurs connues pass es et pr sentes 42 Principales const ErrorMsg find error msg int param _ code fonctions Prend un num ro d erreur en param tre et retourne une description d taill e Description Contient le code n cessaire pour le traitement des fichiers avant de les envoyer au parseur SGML Re oit le fichier en param tre trouve le fichier DTD appropri liminer les en t te les l ments OFX propri taires et les commentaires Principales int ofx proc file int argc char argv fonctions Point d entr e de la librairie voir libofx h string sanitize proprietary tags string input string Elimine les l ments OFX propri taires et les commentaires string find dtd const int reguested version 160 Trouve le DTD appropri au fichier Fichier ofx proc sgml cpp Description Co
64. tenue Le format QIF est malheureusement tr s limit ce qui fait que la conversion est incompl te Ce n est donc pas une bonne fa on de supporter la norme OFX Cependant il permet des usagers utilisant un logiciel ne supportant pas la librairie mais supportant le format QIF de se d panner Utilisation ofx2qif chemin fichier ofx fichier ofx gt fichier sortie gif Exemple de fonctionnement trongu bock bock fichiers ofx ofx2gif selrelevc_2 cmd Account 70000010000234210023421815 30480 0023421 EOP TBank DOFX online account 5806 69 Type Bank D24 1 2002 T 140 00 PRetrait au GA H E C MIAGA LGeneric debit A 18 Quicken Interchange Format 26 8 6 Le module gnucash gnc generic import 8 6 1 La probl matigue des modules d importation Lorsque j ai d but ce projet Gnucash ne comportait qu un seul module d importation op rationnel le module gnc qif import Cependant plusieurs autres sont en d veloppement Tout d abort gif 10 core un module plus sophistiqu cens remplacer ventuellement qif import mais dont le d veloppement est pr sentement arr t Ensuite il y a bien s r gnc ofx dont je parlerai dans la prochaine section et gnc hbci d velopp par Christian Stimmings pour supporter la norme allemande HBCIT Or plusieurs fonctions d un module d importation de donn es financi res sont communes Voici les t ches qu un un tel module devrait id alement tre en mesure d
65. time_t date_funds_available lt Date the funds are available not always provided ex the date you are allowed to withdraw a deposit int date funds available valid IMPORTANT if fi id corrected is present this transaction is meant to replace or delete the transaction with this fi id See OfxTransactionData fi id correction action to know what to do char fi id corrected 256 56 int fi id corrected valid The OfxTransactionData FiIdCorrectionAction enum contains the action to be taken enum FiIdCorrectionAction DELETE lt The transaction with a fi id matching fi id corrected should be deleted REPLACE lt The transaction with a fi id matching fi id corrected should be replaced with this one fi id correction action int fi id correction action valid Used for user initiated transaction such as payment or funds transfer Can be seen as a confirmation number char server transaction id OFX SVRTID2 LENGTH int server transaction id valid The check number is most likely an integer and can probably be converted properly with atoi However the spec allows for up to 12 digits so it is not garanteed to work char check number OFX CHECK NUMBER LENGTH int check number valid Might present in addition to or instead of a check number Not necessarily a number char reference number OFX REFERENCE NUMBER LENGTH int reference number valid
66. tions du module de fusion particuli rement pour la v rification des duplicatas Les tests fonctionnels seront tr s limit s puisque je n ai qu une source de fichiers OFX pour l instant il est cependant possible que d autres d veloppeurs acceptent de me fournir des fichiers OFX Je ne pr vois pas g n rer une campagne de tests automatis s 25h pr vues Rapport Une partie de la documentation produite et de la correspondance chang e pourra tre r cup r e pour r diger le rapport j y alloue donc peu de temps 20h pr vues Total 282 heures 51 Liens et r f rences GnuCash Le logiciel GnuCash http www gnucash org OFX Le consortium OFX http www ofx net ofx default asp XML et SGML A Gentle Introduction to SGML C M Sperberg McQueen and Lou Burnard http www tei uic edu orgs tei sgml teip3sg index html Comparison of SGML and XML World Wide Web Consortium Note 15 12 1997 http www w3 org TR NOTE sgml xml Differences between SGML XML and HTML avec graphiques http matwww ee tut fi onykane courses prj xmlsem2000 ht leppanen htm Extensible Markup Language XML http www w3 org XML XML from the inside Out http www xml com XML White Papers http www xml org xml resources whitepapers shtml Converting an SGML DTD to XML Norman Walsh July 08 1998 http www xml com pub a 98 07 dtd XML Questions amp Answers Jon Bosak Sun Microsystems http www isgmlug org n3
67. u elle fonctionne la cr ation d un logiciel plus stable et plus complet que tous ceux qui auraient pu tre produits par chacun des membres de la communaut travaillant en isolation L id e est donc de ne pas r inventer continuellement la roue videmment pour que ce portrait idylique se r alise il faut d abord cr er la communaut D innombrables projets tentent de d marrer avec cette philosophie mais avortent parce que la communaut n a jamais t plus grande que la ou les personnes ayant lanc le projet Plusieurs facteurs aident rallier une telle communaut Tout d abord il faut qu il y ait un int r t commun Id alement le logiciel doit r pondre un besoin d j exprim Ensuite il faut viter l effet de dilution Le logiciel ne doit donc pas tre le quinzi me logiciel similaire Le logiciel doit avoir quelque chose offrir id alement on doit donc le pr senter la communaut dans un tat tout le moins partiellement fonctionnel afin d offrir une base sur laquelle d autres pourront poursuivre le d veloppement Il faut faciliter au maximum l entr e dans la communaut e par une installation facile un processus de compilation structur une bonne documentation etc x Il est noter qu l origine je d sirais simplement me joindre une communaut existante celle du logiciel GnuCash Mais en cours de route je me suis rendu compte que ce que j tais en train de cr er pouvait t
68. u pour supporter la norme OFX au complet conciliation bancaire paiement de factures transferts bancaires transactions boursi res etc Ce projet a chou Les d veloppeurs estimaient 12 mois personnes le travail n cessaire Le projet ne comptant que sur des b n voles il n avan ait plus Je propose donc un projet moins ambitieux n implanter qu une partie de la norme OFX L importation de ce gui est commun ment appel un fichier OFX soit un fichier de conciliation bancaire suivant la norme OFX Cela permet d implanter la fonction la plus d sir e de la norme OFX soit de concilier un compte GnuCash avec des transactions t l charg es partir d un compte bancaire ou d une carte de cr dit Je crois ce projet r alisable comme un PFE de 6 cr dits Consid rations techniques Mon module sera bas sur la norme OFX 1 6 C est la version la plus r cente des anciennes normes OFX bas es sur SGML et elle est compatible avec les versions pr c dentes Il existe une nouvelle norme OFX2 01 mais celle ci est bas e sur XML et est encore tr s peu d ploy e par les institutions financi res Utiliser OFX2 01 poserait probablement des probl mes de compatibilit arri re Par contre les deux normes sont des cousines rapproch es et il est possible de passer de l une l autre Comme il existe une multitude d outils pour travailler avec XML et moins pour SGML il est envisageable qu i
69. ur et le m me montant m me si elle est plus vieille de plusieurs mois Limiter un certain nombre de jours comme je ai fait plus haut r gle une partie du probl me mais j aimerais aussi r gler le probl me pos par deux retraits d un m me montant dans un guichet automatique faits la m me journ e Mais je ne suis pas s r qu il y ait une solution plus l gante dans ce cas que d offrir l usager d ajouter les deux op rations De plus il ne faut pas rejeter compl tement l approche de Quicken car pour les cartes de cr dit il peut arriver de recevoir la transaction plusieurs semaines apr s un achat R cemment j ai pay un repas dans un a roport d Europe et j ai re u la transaction plus d un mois apr s Une partie des fonctions n cessaires la fusion tant d j offerte par GnuCash cette partie sera probablement int gr e un module existant C est ce niveau que se situe la majorit de l int gration au reste du logiciel c est l une des principales difficult s pressentie 75h pr vues Documentation Une partie de tout d veloppement structur est d crire de la 50 documentation l intention des autres d veloppeurs ainsi que des utilisateurs 10h pr vues Tests et d verminage L chelle et le temps allou ce projet ne me permet pas de pr voir autre chose que des tests unitaires et quelques tests fonctionnels Je vais devoir crire des tests pour exercer les fonc

Download Pdf Manuals

image

Related Search

Related Contents

User's Manual  EcoSmart ECO 36 Use and Care Manual  Manual de Serviço  Installation and service instruction  カードライトアダプタ CWA-100 取扱説明書 ! !  adax neo home gebrauchsanweisung manuel d    

Copyright © All rights reserved.
Failed to retrieve file