backup: n8n workflows + pg dump 20260523_020001

This commit is contained in:
Louis-Andre 2026-05-23 02:00:04 +00:00
parent 13cf51199f
commit d304ffebb0
2 changed files with 3 additions and 2 deletions

View File

@ -39,7 +39,7 @@ Le projet est un ERP B2B pour MetallKart, fabricant d equipement industriel a Tv
- Reponds en francais
## Derniere session
- 2026-05-22 : Session 133 — Bug fixes (lang=ru, ADM_PRODUCTION notifs), smeta workflow (SUBMITTED supprime), M1F.2 KB status toggle, TS cleanup, deploy VPS.
- 2026-05-22 : Session 134 — Bug fixes VPS (supplier tags+labels, TLT recreate+rename, accounting fields Client/Supplier, ACHETEUR access docs, M2B Opus temperature fix, M2B test script).
## Modules implementes
- [x] SPEC-41A-41I (2026-04-14/20) : Migration staging, PO drawer, tender↔PO, supplier fix, archived toggle, backfill, AI analyzer
@ -429,7 +429,7 @@ Le projet est un ERP B2B pour MetallKart, fabricant d equipement industriel a Tv
- AGENT-M1E.1: useAdaptivePolling dans frontend/src/hooks/useAdaptivePolling.ts. fetchFnRef pattern (useRef + useEffect sync) pour éviter stale closures — ne JAMAIS passer fetchFn directement dans setInterval. Page Visibility API: document.visibilityState + 'visibilitychange' event, visible=intervalActiveMs, hidden=intervalInactiveMs (60s default). Error backoff: 3 erreurs consécutives → pause 60s puis reprise. isRunningRef guard empêche concurrent fetch. Cleanup obligatoire dans useEffect return (clearInterval + removeEventListener). LastSyncIndicator dans frontend/src/components/admin/agent/LastSyncIndicator.tsx: Tag AntD (green OK, red error, spinning loading), setInterval(1s) pour relative time avec cleanup. Intervalles choisis: ActionsTab 10s, KnowledgeTab 30s (rarement modifié), ControlTab 10s.
- AGENT-M2A: WeeklyReportAggregatorService dans src/modules/agent-august/reporting/. DTO partagés dans reporting/types.ts (DateRange, OrderSummary, StuckItem, CommercialBlock, ProcurementBlock, FinancialBlock, AgentKpiBlock, WeeklyReportData). aggregate(period) lance 5 sous-agrégations en Promise.all + detectAnomalies. detectAnomalies(asOf) = 6 types d'anomalies avec seuil minDays + weightPerDay, capped à 10, trié poids desc. Endpoint GET /admin/agent/reports/weekly-data (weeklyDataQuerySchema: from/to datetime, validation from<to + max 31j). Order.constructor clash TS = `as any` cast (même pattern que detectors M1A/M1B). Prisma Decimal = Number() coercion sur amount/sellingPrice/costUsd. Tender n'a PAS de champ category requirements[0].materialCategory. Order.managerId/manager (PAS assignedToId). ClientInstallment.dueDate (PAS expectedAt). AgentAuditLog.costUsd (PAS costUSD).
- AGENT-M2D: AgentReportService dans src/modules/agent-august/reporting/agent-report.service.ts. Constructor(prisma, aggregator, commentaryDeps?). ALLOWED_TRANSITIONS map (DRAFT→[GENERATED,ARCHIVED], GENERATED→[SENT,ARCHIVED], SENT→[ARCHIVED], ARCHIVED→[]). createReport stocke aggregatedData en Json Prisma. generateFromAggregator valide periodFrom<periodTo + max 31j, délègue à aggregator.aggregate puis createReport(DRAFT). listReports: status accepte string|string[] (CSV preprocess Zod), limit clampé [1,100]. updateReport vérifie transitions. Error objects ont statusCode custom (400/404). Routes enregistrées APRÈS /reports/weekly-data (statique avant paramétrique). AgentReport.costUsd = Decimal(10,6) aligné sur AgentAuditLog.
- AGENT-M2B: generateCommentary(reportId, userId?) dans AgentReportService. Exige report DRAFT + aggregatedData.period présent. RAG graceful (searchKnowledge best-effort, continue sans contexte si Voyage échoue ou absent). LLM via llmRouter.run({ intent:'report', systemPromptOverride, userMessage }). Transition DRAFT→GENERATED + écriture contentMarkdown, modelUsed, costUsd, promptTokens, completionTokens. Audit log via AgentAction REPORT_SENT + AgentAuditLog (best-effort, ne bloque pas si échoue). CommentaryDeps = { llmRouter: LlmRouter, voyage?: VoyageClient } passé en 3e arg constructeur. Route POST /reports/:id/generate-commentary (ADMIN-only). WeeklyReportPromptBuilder: buildCommentarySystemPrompt() (7 sections MD), buildCommentaryUserMessage(data, ragChunks?) (5 blocs formatted). WeeklyReportData.agent est le champ correct (PAS agentKpi).
- AGENT-M2B: generateCommentary(reportId, userId?) dans AgentReportService. Exige report DRAFT + aggregatedData.period présent. RAG graceful (searchKnowledge best-effort, continue sans contexte si Voyage échoue ou absent). LLM via llmRouter.run({ intent:'report', systemPromptOverride, userMessage }). Transition DRAFT→GENERATED + écriture contentMarkdown, modelUsed, costUsd, promptTokens, completionTokens. Audit log via AgentAction REPORT_SENT + AgentAuditLog (best-effort, ne bloque pas si échoue). CommentaryDeps = { llmRouter: LlmRouter, voyage?: VoyageClient } passé en 3e arg constructeur. Route POST /reports/:id/generate-commentary (ADMIN-only). WeeklyReportPromptBuilder: buildCommentarySystemPrompt() (7 sections MD), buildCommentaryUserMessage(data, ragChunks?) (5 blocs formatted). WeeklyReportData.agent est le champ correct (PAS agentKpi). Opus 4.7 rejette `temperature` — LlmRouter conditionne l'envoi (skip si model.includes('opus')).
## Ce qu il ne faut PAS faire
- Ne pas toucher au .env

File diff suppressed because one or more lines are too long