Bilan des transactions et récupération du capital
Billet #369 : Bilan des transactions et récupération du capital investi.
Type : Fonctionnalité, fiabilité des données et expérience utilisateur.
Composants concernés : Fiches des titres, achats et ventes, tableau de bord et démonstration.
1. Contexte et objectifs
Le registre des transactions par titre ajouté précédemment permettait déjà de consulter et de gérer les achats et les ventes dans l'application. Il restait toutefois nécessaire de calculer leur bilan pour connaître le nombre d'actions encore détenues, leur coût moyen et la part du capital investi récupérée grâce aux ventes.
L'objectif était de rendre ce bilan immédiatement lisible sur chaque page de titre et de maintenir les valeurs du tableau de bord à jour après chaque opération. Le suivi du portefeuille devait ainsi pouvoir être effectué sans calcul parallèle ni nouvelle importation de fichier après une transaction.
2. Les améliorations livrées
Une ligne Total a été ajoutée au tableau des transactions de chaque titre, dans l'interface sécurisée et celle de démonstration. Trois informations y sont regroupées :
- Les actions encore détenues, calculées en soustrayant les ventes des achats enregistrés.
- Le coût moyen par action de la position actuelle et le prix moyen des ventes, présentés côte à côte. Pour une vente partielle, le coût attribué aux actions vendues est retiré au coût moyen qui précédait la vente; le prix de vente n'entre pas dans le coût des actions restantes. Le coût moyen affiché est le coût restant divisé par le nombre d'actions restantes. Le prix moyen des ventes est pondéré selon les quantités vendues. NA indique qu'il n'y a aucune action restante ou aucune vente pour la moyenne concernée.
- Le flux de trésorerie net, obtenu en soustrayant les achats payés des ventes encaissées. Le rouge indique un capital non encore entièrement récupéré, le noir gras un équilibre entre achats et ventes, et le vert des encaissements supérieurs aux décaissements.
Le bilan reflète les achats et les ventes après chaque opération. Dans le tableau, les achats sont affichés comme des sorties d'argent et les ventes comme des entrées; les montants des transactions eux-mêmes restent les mêmes. Des infobulles sur ordinateur et téléphone expliquent les totaux affichés.
Les valeurs du tableau de bord sont également actualisées dès la consultation suivante : total en dollars canadiens, total en dollars américains et valeur consolidée en dollars canadiens. Aucun nouvel import n'est requis pour répercuter une transaction enregistrée.
3. La fiabilité des résultats
Pour éviter que le nouveau bilan soit confondu avec un calcul de profit, j'ai distingué le coût moyen, le capital récupéré et la valeur de marché courante.
Des résultats financiers clairement distingués
Le coût moyen par action décrit la position que le registre indique comme restante. Le flux de trésorerie net indique quelle part des paiements d'achat a été récupérée par les ventes. La valeur de marché du tableau de bord applique le dernier cours disponible à cette position. Ces chiffres répondent à des questions différentes.
Par exemple, 10 actions achetées à 20 $ coûtent 200 $, et 30 à 40 $ coûtent 1 200 $. Au total, 1 400 $ répartis sur 40 actions donnent 35 $ par action. Après la vente de 10 actions, le registre en indique 30 restantes. Leur coût est de 1 050 $ (30 × 35 $), soit encore 35 $ par action.
De même, acheter 50 actions à 1 $ puis en vendre 25 à 2 $ donne un flux net de 0 $ : les 50 $ payés ont été récupérés, et 25 actions restent au registre. Le flux net mesure cette récupération; il ne représente ni le bénéfice comptable ni la valeur des actions restantes. Un solde négatif signifie que les achats ne sont pas encore entièrement récupérés, sans indiquer à lui seul une perte. Les frais, dividendes et impôts ne sont comptés que s'ils figurent au registre.
Des rôles distincts pour le registre et le CSV
Les achats et ventes enregistrés déterminent les actions détenues. Le CSV fournit la liste des titres suivis et leurs métriques; ses quantités ne remplacent pas le registre.
Les nouveaux relevés et la détection des petites positions utilisent les quantités du registre à la date concernée. Les relevés historiques restent inchangés. Un titre sans transaction compte zéro action, et une vente complète ne le supprime pas. Un titre absent du nouveau CSV est toutefois retiré avec son historique.
Les règles détaillées sont présentées dans la documentation de la fonctionnalité.
4. Les vérifications et leurs limites
Les calculs et les parcours utilisateur ont été vérifiés avec des données séparées du portefeuille réel. Les contrôles couvrent notamment les achats, les ventes partielles, les corrections, les suppressions, les imports CSV et la mise à jour du tableau de bord. Les couleurs et les infobulles ont été vérifiées dans Google Chrome sur ordinateur et téléphone simulé.
| Vérification | Résultat local au 29 octobre 2026 |
|---|---|
| Référence avant les changements | 332 tests réussis et 83 % de couverture. |
| Ensemble des tests automatisés | 418 tests sur 418 réussis. |
| Part du code couverte par les tests | 83,76 %, contre 83 % au départ. Cette mesure ne garantit pas l'absence de défauts. |
| Parcours dans Google Chrome | 30 réussis, dont la récupération du capital, les montants signés, les transactions, imports et infobulles. |
La vérification des fichiers de tests navigateur a également réussi. Le score de qualité calculé selon la formule du projet est de 91,88/100; il complète les résultats de tests sans remplacer l'appréciation du propriétaire.
Une mesure intermédiaire avait donné 403 tests pytest réussis, 83,65 % de couverture (84 % arrondis), 24 parcours Chrome réussis sur 24 et un contrôle TypeScript noEmit réussi. Le contrôle ESLint n'avait pas pu aboutir à cause du problème préexistant de jiti. Le moteur Docker était indisponible lors des contrôles de migration et de concurrence MariaDB, et aucune exécution CI distante n'avait été constatée dans ce bilan. Ces résultats ne constituent donc ni une preuve de sérialisation MariaDB ni une attestation de déploiement.
5. Bilan d'utilisation de jetons
Le suivi de consommation porte sur l'ensemble du billet #369 : préparation, réalisation, vérifications et documentation.
| Élément suivi | État du bilan |
|---|---|
| Durée de la session de travail (estimation) | 15 heures |
| Crédits Copilot AI consommés | 4936,55 |
| Coût total | 49,29$ |