Recettes d'insights¶
Un insight est une carte de l'écran Insights : un nom, une couleur, une icône et une requête SQL qui renvoie un montant pour le mois affiché (voir Fonctionnalités et Portail web). Cette page rassemble des recettes prêtes à copier dans la fenêtre d'ajout d'un insight (administrateurs) : pour chacune, ce qu'elle montre, la requête et la lecture du résultat.
Toutes les requêtes de cette page sont vérifiées par les tests de Carbure : elles respectent les règles ci-dessous et s'exécutent sur une base de test, avec le résultat attendu.

Règles d'une requête¶
Le serveur refuse une requête qui ne les respecte pas (la fenêtre d'ajout l'indique pendant la saisie) :
- une seule instruction
SELECT, de 500 caractères au plus (espaces et retours à la ligne compris), sans;au milieu, ni commentaire (--,#,/* */), ni barre oblique inverse (\) ;WITHn'est pas accepté, une sous-requête dans leFROMl'est ; - elle renvoie une colonne nommée
amount(… AS amount) : seule la première ligne est lue ; {month}et{year}sont remplacés par le mois (1 à 12) et l'année affichés, sous forme de nombres ;- mots interdits, même dans un texte entre apostrophes : écriture (
INSERT,UPDATE,DELETE,CREATE,DROP…),SET,DO,INTO,LOAD,SLEEP,BENCHMARK,SHOW,CALL,LOCK,USER,PASSWORD… (liste complète danssrc/resources/Insight.php) ; la colonneuserdes transactions ne peut donc pas être lue ; - seules les tables du budget sont lisibles :
bank_transaction,bank_transaction_category,bank_transaction_category_keyword(règles de catégorisation),budget,bank_accountetbank_backend(connexions bancaires), sans nom de base devant (carbure.bank_transactionest refusé). Toute autre table est refusée : utilisateurs, double authentification, jetons, appareils, OAuth, paramètres, insights, migrations… ainsi que les schémas système (mysql,information_schema,performance_schema,sys). Le nom d'une table refusée est interdit partout dans la requête, même dans un texte entre apostrophes ; - la requête s'exécute dans une transaction en lecture seule, en 5 secondes au plus : au-delà, le serveur l'interrompt (la fenêtre d'ajout l'indique, la carte affiche 0,00 €). Elle est exécutée à chaque affichage de l'onglet Insights, et douze fois pour l'historique d'une année : évitez les produits cartésiens.
Le nom compte de 1 à 20 caractères ; la couleur est l'une des 13 couleurs :
red, orange, amber, lime, green, teal, cyan, blue, indigo, purple,
pink, brown, gray. L'icône (facultative) est une icône Material choisie dans la
fenêtre d'ajout.
Affichage du résultat¶
La carte affiche toujours la valeur absolue du montant, avec deux décimales et le symbole
€, en rouge si le montant est négatif. Il n'y a pas d'autre format :
- un pourcentage ou un nombre (de transactions, de mois…) s'affiche aussi avec
€: un taux d'épargne de 32,5 % apparaît « 32,50 € ». Les recettes concernées l'indiquent dans leur nom (%, « Nb ») pour lever l'ambiguïté ; - le signe n'apparaît que par la couleur : une dépense (montant négatif) est rouge, une rentrée ou un écart favorable ne l'est pas. Les recettes suivent la convention des transactions : négatif = argent qui sort ;
- une requête qui ne renvoie rien (
NULL, par exemple aucune transaction ce mois-là) ou qui échoue affiche 0,00 € ; - l'historique mois par mois (
GET /budget/insights/history, utilisé par l'app iPhone) exécute la même requête pour chaque mois de l'année.
Repères sur les données¶
Les tables utiles (voir Modèle de données) :
| Table | Colonnes utiles |
|---|---|
bank_transaction |
date (date de débit, celle du mois affiché), rdate (date réelle de l'opération : jour d'un paiement par carte), type, label, category, amount (négatif = débit), pointed (1 = vérifiée), bank_name, account_number |
bank_transaction_category |
id, name, parent_category (0 = catégorie principale), type : DEBIT, CREDIT ou HORS-BUDGET |
budget |
category, amount (montant positif prévu), date (premier jour du mois) |
bank_account |
bank_name, account_number, label (nom donné au compte) |
Types de transaction (bank_transaction.type, codes de woob, aussi déduits du libellé
pour un relevé importé) :
| Code | Type | Code | Type |
|---|---|---|---|
| 0 | Inconnu | 6 | Retrait DAB |
| 1 | Virement | 7 | Carte |
| 2 | Prélèvement | 8 | Dépense (remboursement de prêt) |
| 3 | Chèque | 9 | Commissions, frais bancaires |
| 4 | Remise de chèque | 12 | Carte à débit différé |
| 5 | Remboursement |
Quelques expressions reviennent dans les recettes :
- dépenses du budget :
amount < 0 AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)écarte les catégories hors budget (épargne, virements internes) mais garde les transactions non catégorisées (catégorie 0) ; - premier jour du mois affiché :
MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH;- 2 MONTHdonne le mois précédent,MONTHle mois suivant. Un filtredate >= … AND date < …couvre une période de plusieurs mois, même à cheval sur deux années ; - une catégorie par son nom plutôt que par son numéro (qui change d'une instance à
l'autre) :
(SELECT id FROM bank_transaction_category WHERE name = 'Courses'). La comparaison ignore la casse et les accents. Les noms utilisés ici sont ceux du pack de départ en français : adaptez-les aux vôtres.
Dépenses¶
Une catégorie et ses sous-catégories¶
Les dépenses d'une catégorie principale, sous-catégories comprises (ici « Alimentation » : courses, boulangerie, restaurants). Remplacez le nom pour suivre le logement, les transports, les loisirs…
SELECT SUM(t.amount) AS amount
FROM bank_transaction t
JOIN bank_transaction_category c ON c.id = t.category
WHERE 'Alimentation' IN (c.name, (SELECT p.name FROM bank_transaction_category p WHERE p.id = c.parent_category))
AND MONTH(t.date) = {month} AND YEAR(t.date) = {year}
- Nom :
Alimentation— couleurgreen, icônerestaurant - Lecture : négatif (rouge), en euros ; les remboursements de la catégorie viennent en déduction.
Panier moyen des courses¶
Le montant moyen d'un passage en caisse : utile pour voir l'effet de l'inflation ou d'un changement d'enseigne, indépendamment du nombre de passages.
SELECT AVG(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND category = (SELECT id FROM bank_transaction_category WHERE name = 'Courses')
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Panier moyen courses— couleurgreen, icôneshopping_cart - Lecture : négatif, en euros par achat.
Une enseigne¶
Tout ce qui a été payé à un commerçant, quelle que soit sa catégorie, par un mot du
libellé (ici Amazon). LIKE ignore la casse ; % remplace n'importe quelle suite de
caractères.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE label LIKE '%AMAZON%'
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Amazon— couleurorange, icôneshopping_cart - Lecture : négatif, en euros, net des remboursements de l'enseigne.
Livraison de repas¶
Plusieurs enseignes d'un même usage, ici la livraison à domicile : un poste qui grossit vite sans qu'on s'en rende compte.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE (label LIKE '%UBER EATS%' OR label LIKE '%DELIVEROO%')
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Livraison repas— couleurpink, icônerestaurant - Lecture : négatif, en euros.
Prélèvements récurrents¶
Les prélèvements du mois dont le même libellé était déjà prélevé le mois précédent : abonnements, énergie, assurances, téléphone. C'est le « coût fixe » du foyer, à revoir de temps en temps.
SELECT SUM(t.amount) AS amount
FROM bank_transaction t
WHERE t.type = 2 AND t.amount < 0
AND MONTH(t.date) = {month} AND YEAR(t.date) = {year}
AND EXISTS (SELECT 1 FROM bank_transaction p WHERE p.type = 2 AND p.label = t.label
AND p.date >= MAKEDATE({year}, 1) + INTERVAL {month} - 2 MONTH
AND p.date < MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH)
- Nom :
Prélèv. récurrents— couleurindigo, icônereceipt_long - Lecture : négatif, en euros. Un prélèvement dont le libellé change chaque mois (numéro de facture, date) n'est pas reconnu comme récurrent.
Dépenses du week-end¶
Les dépenses faites un samedi ou un dimanche, d'après la date réelle de l'opération
(rdate) : sorties, courses du samedi, achats d'impulsion.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND DAYOFWEEK(rdate) IN (1, 7)
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Dépenses week-end— couleurcyan, icônesports_esports - Lecture : négatif, en euros (
DAYOFWEEK: 1 = dimanche, 7 = samedi).
Part des dépenses du week-end¶
La même chose en pourcentage des dépenses du mois : un week-end compte pour 2 jours sur 7, soit environ 29 % ; une part bien au-dessus signale des week-ends coûteux.
SELECT 100 * SUM(IF(DAYOFWEEK(rdate) IN (1, 7), amount, 0)) / SUM(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Part week-end %— couleurcyan, icônepercent - Lecture : positif, en pourcentage (affiché « 27,55 € » pour 27,55 %).
Part payée par carte¶
Le pourcentage des dépenses payées par carte (immédiate ou à débit différé), le reste étant prélevé, viré ou retiré : les dépenses « du quotidien » face aux charges fixes.
SELECT 100 * SUM(IF(type IN (7, 12), amount, 0)) / SUM(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Part carte %— couleurblue, icônecredit_card - Lecture : positif, en pourcentage.
Nombre de retraits¶
Le nombre de retraits d'espèces du mois (le pack de départ en donne déjà le montant) : beaucoup de petits retraits, c'est autant de dépenses que Carbure ne pourra pas classer.
SELECT COUNT(*) AS amount
FROM bank_transaction
WHERE type = 6
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Nb retraits— couleurgray, icôneaccount_balance_wallet - Lecture : positif, un nombre (affiché « 3,00 € » pour 3 retraits).
Plus gros poste du mois¶
Le montant de la catégorie (ou sous-catégorie) la plus coûteuse du mois, hors non catégorisé. Un insight ne renvoie qu'un nombre : le nom du poste se lit dans l'onglet Budget.
SELECT MIN(total) AS amount
FROM (SELECT SUM(amount) AS total FROM bank_transaction
WHERE category <> 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET')
AND MONTH(date) = {month} AND YEAR(date) = {year}
GROUP BY category) x
- Nom :
Plus gros poste— couleurred, icônepie_chart - Lecture : négatif, en euros.
Dépenses d'un compte¶
Les dépenses d'un seul compte, désigné par le nom qui lui a été donné dans l'onglet Comptes (ici « Compte joint ») : utile quand le foyer a un compte commun et des comptes personnels.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND account_number IN (SELECT account_number FROM bank_account WHERE label = 'Compte joint')
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Compte joint— couleurteal, icônehome - Lecture : négatif, en euros, épargne et virements compris (ajoutez le filtre des dépenses du budget pour les écarter).
Comparaisons¶
Variation par rapport au mois précédent¶
L'évolution des dépenses en pourcentage (le pack de départ donne l'écart en euros) : +10 % signifie 10 % de dépenses en plus que le mois précédent.
SELECT 100 * (SUM(IF(MONTH(date) = {month}, amount, 0)) / SUM(IF(MONTH(date) = {month}, 0, amount)) - 1) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND date >= MAKEDATE({year}, 1) + INTERVAL {month} - 2 MONTH
AND date < MAKEDATE({year}, 1) + INTERVAL {month} MONTH
- Nom :
Variation vs M-1 %— couleurcyan, icôneanalytics - Lecture : en pourcentage ; positif (couleur normale) = plus de dépenses, négatif (rouge) = moins de dépenses. Attention, la couleur est ici inversée par rapport au sens « bon / mauvais ».
Écart avec le même mois l'an dernier¶
Les dépenses du mois moins celles du même mois de l'année précédente : la bonne comparaison pour les dépenses saisonnières (chauffage, rentrée, vacances).
SELECT SUM(IF(YEAR(date) = {year}, amount, -amount)) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND MONTH(date) = {month} AND YEAR(date) IN ({year}, {year} - 1)
- Nom :
Écart vs N-1— couleurpurple, icôneshow_chart - Lecture : en euros ; négatif (rouge) = plus de dépenses que l'an dernier, positif = moins.
Écart avec la moyenne des 3 derniers mois¶
Les dépenses du mois moins la moyenne des 3 mois précédents : moins sensible qu'une
comparaison à un seul mois exceptionnel. Pour 6 mois, remplacez / 3 par / 6 et
- 4 MONTH par - 7 MONTH.
SELECT SUM(IF(date >= MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH, amount, -amount / 3)) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND date >= MAKEDATE({year}, 1) + INTERVAL {month} - 4 MONTH
AND date < MAKEDATE({year}, 1) + INTERVAL {month} MONTH
- Nom :
Écart vs moy. 3 mois— couleuramber, icôneanalytics - Lecture : en euros ; négatif (rouge) = mois plus dépensier que d'habitude.
Cumul depuis janvier¶
Les dépenses de l'année jusqu'au mois affiché inclus : à rapprocher d'un budget annuel.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND YEAR(date) = {year} AND MONTH(date) <= {month}
- Nom :
Cumul depuis janvier— couleurred, icônetrending_down - Lecture : négatif, en euros.
Moyenne mensuelle sur 12 mois¶
La dépense moyenne par mois sur les 12 mois se terminant au mois affiché : le train de vie du foyer, lissé des dépenses exceptionnelles.
SELECT SUM(amount) / 12 AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND date >= MAKEDATE({year}, 1) + INTERVAL {month} - 12 MONTH
AND date < MAKEDATE({year}, 1) + INTERVAL {month} MONTH
- Nom :
Moyenne 12 mois— couleurteal, icôneshow_chart - Lecture : négatif, en euros par mois. Pendant la première année d'utilisation, les mois sans données comptent pour zéro et font baisser la moyenne.
Épargne et matelas de sécurité¶
Taux d'épargne¶
La part des revenus du mois qui n'a pas été dépensée : (revenus + dépenses) / revenus, hors catégories hors budget. Un repère courant est de viser 10 à 20 %.
SELECT 100 * SUM(amount) / SUM(IF(amount > 0, amount, 0)) AS amount
FROM bank_transaction
WHERE category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Taux d'épargne %— couleurpurple, icônesavings - Lecture : en pourcentage ; négatif (rouge) = mois dépensé au-delà des revenus. Vide (0,00) sans revenu ce mois-là.
Épargne versée¶
Les versements du mois vers l'épargne : catégorie « Épargne » et ses sous-catégories (livrets, assurance vie). Le pack de départ propose la même chose par numéros de catégorie.
SELECT -SUM(t.amount) AS amount
FROM bank_transaction t
JOIN bank_transaction_category c ON c.id = t.category
WHERE 'Épargne' IN (c.name, (SELECT p.name FROM bank_transaction_category p WHERE p.id = c.parent_category))
AND MONTH(t.date) = {month} AND YEAR(t.date) = {year}
- Nom :
Épargne versée— couleurpurple, icônesavings - Lecture : positif = argent mis de côté (le signe est inversé par le
-SUM) ; négatif (rouge) = plus de retraits que de versements.
Matelas de sécurité (6 mois)¶
Les dépenses des 6 mois complets précédant le mois affiché, en montant positif : l'ordre de grandeur de l'épargne de précaution à garder disponible. Le mois en cours n'est pas compté, pour que la valeur ne bouge pas au fil du mois.
SELECT -SUM(amount) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND date >= MAKEDATE({year}, 1) + INTERVAL {month} - 7 MONTH
AND date < MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH
- Nom :
Matelas 6 mois— couleurlime, icônesavings - Lecture : positif, en euros.
Mois de dépenses couverts¶
Combien de mois de dépenses l'épargne versée depuis le début des données couvrirait, au rythme moyen des 6 derniers mois complets. Carbure ne connaît pas le solde des comptes d'épargne (ni les intérêts, ni l'épargne antérieure à la première synchronisation) : c'est un indicateur de tendance, pas un patrimoine.
SELECT SUM(IF('Épargne' IN (c.name, p.name), -t.amount, 0)) / SUM(IF(t.amount < 0 AND (c.type <> 'HORS-BUDGET' OR c.id = 0)
AND t.date >= MAKEDATE({year}, 1) + INTERVAL {month} - 7 MONTH, -t.amount / 6, 0)) AS amount
FROM bank_transaction t
JOIN bank_transaction_category c ON c.id = t.category
JOIN bank_transaction_category p ON p.id = c.parent_category
WHERE t.date < MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH
- Nom :
Matelas en mois— couleurlime, icônestar - Lecture : positif, un nombre de mois (« 3,60 € » = 3,6 mois). Un repère courant est de 3 à 6 mois.
Dépenses projetées en fin de mois¶
Les dépenses du mois extrapolées au rythme actuel : 600 € dépensés au 10 d'un mois de 30 jours donnent 1 800 €. Pour un mois passé, c'est simplement la dépense du mois.
SELECT SUM(amount) * DAY(LAST_DAY(MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH))
/ IF(YEAR(CURDATE()) = {year} AND MONTH(CURDATE()) = {month}, DAY(CURDATE()), DAY(LAST_DAY(MAKEDATE({year}, 1) + INTERVAL {month} - 1 MONTH))) AS amount
FROM bank_transaction
WHERE amount < 0
AND category NOT IN (SELECT id FROM bank_transaction_category WHERE type = 'HORS-BUDGET' AND id <> 0)
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Dépenses projetées— couleurorange, icônetrending_down - Lecture : négatif, en euros. Les prélèvements fixes en début de mois gonflent la projection des premiers jours.
Budget¶
Les budgets se saisissent dans l'onglet Budget, par catégorie et par mois ; la dépense d'une catégorie comprend celle de ses sous-catégories. Si vous fixez un budget à la fois à une catégorie et à ses sous-catégories, leurs dépenses sont comptées deux fois dans ces recettes.
Budget restant¶
Ce qu'il reste à dépenser sur l'ensemble des budgets de dépenses du mois (budgets moins dépenses des catégories budgétées).
SELECT SUM(b.amount + (SELECT IFNULL(SUM(t.amount), 0) FROM bank_transaction t
JOIN bank_transaction_category c ON c.id = t.category
WHERE (c.id = b.category OR c.parent_category = b.category)
AND MONTH(t.date) = {month} AND YEAR(t.date) = {year})) AS amount
FROM budget b
JOIN bank_transaction_category bc ON bc.id = b.category
WHERE bc.type = 'DEBIT' AND MONTH(b.date) = {month} AND YEAR(b.date) = {year}
- Nom :
Budget restant— couleurblue, icôneaccount_balance_wallet - Lecture : en euros ; positif = marge restante, négatif (rouge) = budgets dépassés au total (un dépassement peut être compensé par une catégorie sous son budget).
Catégories hors budget¶
Le nombre de catégories dont la dépense du mois dépasse le budget (le pack de départ donne le montant total des dépassements).
SELECT COUNT(*) AS amount
FROM budget b
WHERE MONTH(b.date) = {month} AND YEAR(b.date) = {year}
AND b.amount + (SELECT IFNULL(SUM(t.amount), 0) FROM bank_transaction t
JOIN bank_transaction_category c ON c.id = t.category
WHERE (c.id = b.category OR c.parent_category = b.category)
AND MONTH(t.date) = {month} AND YEAR(t.date) = {year}) < 0
- Nom :
Catégories dépassées— couleurred, icônewarning - Lecture : positif, un nombre de catégories.
Budget consommé¶
Le pourcentage de l'ensemble des budgets de dépenses déjà consommé : à comparer avec l'avancement du mois (50 % le 15).
SELECT -100 * SUM((SELECT IFNULL(SUM(t.amount), 0) FROM bank_transaction t
JOIN bank_transaction_category c ON c.id = t.category
WHERE (c.id = b.category OR c.parent_category = b.category)
AND MONTH(t.date) = {month} AND YEAR(t.date) = {year})) / SUM(b.amount) AS amount
FROM budget b
JOIN bank_transaction_category bc ON bc.id = b.category
WHERE bc.type = 'DEBIT' AND MONTH(b.date) = {month} AND YEAR(b.date) = {year}
- Nom :
Budget consommé %— couleuramber, icônepie_chart - Lecture : positif, en pourcentage ; au-delà de 100, les budgets sont dépassés.
Qualité des données¶
Transactions non catégorisées¶
Le nombre de transactions du mois sans catégorie (le pack de départ en donne le montant) : chacune est une règle de catégorisation à créer.
SELECT COUNT(*) AS amount
FROM bank_transaction
WHERE category = 0
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Nb non catégorisées— couleurorange, icônewarning - Lecture : positif, un nombre de transactions ; l'objectif est 0.
Transactions non vérifiées¶
Le nombre de transactions du mois que personne n'a encore pointées (case « vérifiée » de l'onglet Transactions).
SELECT COUNT(*) AS amount
FROM bank_transaction
WHERE pointed = 0
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Nb non vérifiées— couleuramber, icônereceipt_long - Lecture : positif, un nombre de transactions.
Frais bancaires de l'année¶
Les frais bancaires depuis janvier (cotisations de carte, commissions, agios), par type ou par catégorie : à comparer aux offres des autres banques.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE (type = 9 OR category = (SELECT id FROM bank_transaction_category WHERE name = 'Frais bancaires'))
AND YEAR(date) = {year} AND MONTH(date) <= {month}
- Nom :
Frais de l'année— couleurbrown, icôneaccount_balance_wallet - Lecture : négatif, en euros.
Remboursements reçus¶
Les remboursements du mois (santé, achats retournés…), par type ou par catégorie : pour vérifier qu'un remboursement attendu est bien arrivé.
SELECT SUM(amount) AS amount
FROM bank_transaction
WHERE amount > 0
AND (type = 5 OR category = (SELECT id FROM bank_transaction_category WHERE name = 'Remboursements'))
AND MONTH(date) = {month} AND YEAR(date) = {year}
- Nom :
Remboursements— couleurgreen, icônepayments - Lecture : positif, en euros.
Doublons possibles¶
Le nombre de paires de transactions du mois au même libellé et au même montant, à moins de 3 jours d'écart : un paiement débité deux fois, ou un relevé importé en plus de la synchronisation.
SELECT COUNT(*) AS amount
FROM bank_transaction a
JOIN bank_transaction b ON b.id > a.id AND b.amount = a.amount AND b.label = a.label
AND ABS(DATEDIFF(b.date, a.date)) <= 3
WHERE MONTH(a.date) = {month} AND YEAR(a.date) = {year}
- Nom :
Doublons possibles— couleurred, icônewarning - Lecture : positif, un nombre de paires ; deux vrais achats identiques (deux baguettes le même jour) sont aussi comptés.
Ce qu'un insight ne peut pas montrer¶
- Un texte : un insight renvoie un nombre, pas le nom d'un commerçant ou d'une catégorie (le « plus gros poste » donne son montant, pas son nom).
- Plusieurs valeurs : une seule carte, une seule valeur par mois ; pour une répartition, voir les onglets Budget et Tendances.
- Un pourcentage ou un nombre sans
€: l'unité est toujours l'euro à l'affichage (voir Affichage du résultat). - Les dépenses d'une personne du foyer : le modèle est commun au foyer et le mot
USERest interdit ; filtrez plutôt par compte (voir Dépenses d'un compte). - Le solde des comptes : Carbure enregistre les transactions, pas les soldes.