Files
fintrack/scripts/fix-account-balances.ts

81 lines
2.1 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { prisma } from "../lib/prisma";
async function main() {
const accountNumbers = process.argv.slice(2);
if (accountNumbers.length === 0) {
console.error(
"Usage: tsx scripts/fix-account-balances.ts <accountNumber1> [accountNumber2] ...",
);
console.error(
"Exemple: tsx scripts/fix-account-balances.ts 0748461N022 7555880857A",
);
process.exit(1);
}
for (const accountNumber of accountNumbers) {
console.log(`\n=== Correction du compte: ${accountNumber} ===\n`);
const account = await prisma.account.findFirst({
where: {
accountNumber: accountNumber,
},
include: {
transactions: {
select: {
amount: true,
},
},
},
});
if (!account) {
console.log(`❌ Compte non trouvé: ${accountNumber}`);
continue;
}
console.log(`Compte trouvé:`);
console.log(` ID: ${account.id}`);
console.log(` Nom: ${account.name}`);
console.log(` Bank ID: ${account.bankId}`);
console.log(` Balance actuelle: ${account.balance}`);
console.log(` Initial Balance: ${account.initialBalance}`);
console.log(` Transactions: ${account.transactions.length}`);
// Recalculer le solde à partir des transactions
const calculatedBalance = account.transactions.reduce(
(sum, t) => sum + t.amount,
0,
);
console.log(` Balance calculée: ${calculatedBalance}`);
if (Math.abs(account.balance - calculatedBalance) > 0.01) {
console.log(
`\n⚠ Différence détectée: ${Math.abs(account.balance - calculatedBalance).toFixed(2)}`,
);
console.log(`Mise à jour du solde...`);
await prisma.account.update({
where: {
id: account.id,
},
data: {
balance: calculatedBalance,
},
});
console.log(`✅ Solde corrigé: ${calculatedBalance}`);
} else {
console.log(`\n✅ Le solde est déjà correct.`);
}
}
await prisma.$disconnect();
}
main().catch((e) => {
console.error("Erreur:", e);
process.exit(1);
});