Modification de l'import avec prompt IA
This commit is contained in:
@@ -139,6 +139,14 @@ router.post('/apply', (req, res, next) => {
|
||||
|
||||
let inserted = 0, skipped = 0, duplicates = 0;
|
||||
const errors = [];
|
||||
// Date la plus ancienne rencontrée par plateforme (dépôts/retraits + investissements)
|
||||
// — sert à détecter une date antérieure à la date d'ouverture déclarée sur la plateforme.
|
||||
const platMinDate = new Map();
|
||||
const trackPlatDate = (plateformeId, dateStr) => {
|
||||
if (!plateformeId || !dateStr) return;
|
||||
const cur = platMinDate.get(plateformeId);
|
||||
if (!cur || dateStr < cur) platMinDate.set(plateformeId, dateStr);
|
||||
};
|
||||
|
||||
const tx = db.transaction(() => {
|
||||
for (let idx = 0; idx < rows.length; idx++) {
|
||||
@@ -157,6 +165,7 @@ router.post('/apply', (req, res, next) => {
|
||||
const dateOperation = normaliseDate(v('date_operation'));
|
||||
const type = normaliseType(v('type'));
|
||||
const montant = num(v('montant'));
|
||||
trackPlatDate(plateformeId, dateOperation);
|
||||
|
||||
// Anti-doublon : même investisseur + plateforme + date + type + montant
|
||||
const dup = db.prepare(`
|
||||
@@ -186,6 +195,7 @@ router.post('/apply', (req, res, next) => {
|
||||
const plateformeId = resolveRefId(v('plateforme_id'), platIdSet, platNameMap, 'Plateforme');
|
||||
const nomProjet = String(v('nom_projet'));
|
||||
const dateSouscription = normaliseDate(v('date_souscription'));
|
||||
trackPlatDate(plateformeId, dateSouscription);
|
||||
|
||||
// Anti-doublon : même investisseur + plateforme + nom du projet + date de souscription
|
||||
const dup = db.prepare(`
|
||||
@@ -295,6 +305,23 @@ router.post('/apply', (req, res, next) => {
|
||||
});
|
||||
tx();
|
||||
|
||||
// Anomalie : une date importée précède la date d'ouverture déclarée sur la plateforme
|
||||
const anomalies = [];
|
||||
if (platMinDate.size > 0) {
|
||||
for (const [plateformeId, minDate] of platMinDate) {
|
||||
const plat = db.prepare('SELECT id, nom, date_ouverture FROM plateformes WHERE id = ? AND user_id = ?')
|
||||
.get(plateformeId, req.user.id);
|
||||
if (plat && plat.date_ouverture && minDate < plat.date_ouverture) {
|
||||
anomalies.push({
|
||||
plateforme_id: plat.id,
|
||||
plateforme_nom: plat.nom,
|
||||
date_ouverture_actuelle: plat.date_ouverture,
|
||||
date_detectee: minDate,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
db.prepare(`
|
||||
INSERT INTO imports (user_id, investisseur_id, module, filename, rows_total, rows_inserted, rows_skipped, rows_duplicates, mapping_json)
|
||||
VALUES (?,?,?,?,?,?,?,?,?)
|
||||
@@ -313,7 +340,7 @@ router.post('/apply', (req, res, next) => {
|
||||
// Clean up temp file
|
||||
try { fs.unlinkSync(tempPath); } catch { /* */ }
|
||||
|
||||
res.json({ inserted, skipped, duplicates, total: rows.length, errors: errors.slice(0, 50) });
|
||||
res.json({ inserted, skipped, duplicates, total: rows.length, errors: errors.slice(0, 50), anomalies });
|
||||
} catch (e) { next(e); }
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user