feat: affiche la date de derniere extraction et revient aux documents

La liste des documents montrait la date d'import, figee au premier
enregistrement : c'est la date de la derniere extraction ayant produit les
donnees affichees qui renseigne, surtout apres un balayage de re-extraction. La
colonne `extracted_at` la porte, mise a jour a chaque enregistrement, et la date
d'import reste consultable en infobulle.

Le projet n'ayant pas d'outil de migration (`create_all` laisse intactes les
tables existantes), `init_db` rattrape les colonnes ajoutees apres coup : sans
cela une base deja installee cesserait de fonctionner. Les documents deja
presents recoivent leur date d'import, qui est bien celle de leur extraction.

Une fois la selection appliquee sans echec, le balayage renvoie vers la liste des
documents ; en cas d'echec on reste sur place, les lignes concernees portant leur
message.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 06:52:49 +02:00
parent a1da4fc97f
commit 92cf21309f
8 changed files with 129 additions and 3 deletions

View File

@@ -64,7 +64,7 @@
<tr>
<th>Document</th>
<th>Immeuble</th>
<th>Date</th>
<th>Date / extraction</th>
<th class="text-right">Solde</th>
<th class="text-center">Fichiers</th>
<th class="text-right">Actions</th>
@@ -100,7 +100,12 @@
<!-- Date -->
<td>
<div class="text-sm text-white">{{ formatDate(doc.date) }}</div>
<div class="text-xs text-gray-500">Importe le {{ formatDateTime(doc.created_at) }}</div>
<div
class="text-xs text-gray-500"
:title="`Importé le ${formatDateTime(doc.created_at)}`"
>
Extrait le {{ formatDateTime(doc.extracted_at || doc.created_at) }}
</div>
</td>
<!-- Solde -->

View File

@@ -320,6 +320,7 @@
<script setup>
import { computed, onMounted, onBeforeUnmount, reactive, ref } from 'vue'
import { useRouter } from 'vue-router'
import ExtractionDiffDetails from '../components/ExtractionDiffDetails.vue'
import TagAutocomplete from '../components/TagAutocomplete.vue'
import {
@@ -333,6 +334,8 @@ import { fillPredictions, remapTags, toDepensesTags } from '../utils/tagRemap.js
// Ordre de grandeur mesuré d'une extraction, avant toute mesure réelle.
const SECONDS_PER_DOC = 7
const router = useRouter()
const documents = ref([])
const items = ref([])
const availableTags = ref([])
@@ -663,8 +666,11 @@ async function applySelection() {
isApplying.value = false
if (failures) {
// On reste sur la page : les lignes en échec portent leur message.
applyError.value = `${failures} document${failures > 1 ? 's' : ''} n'${failures > 1 ? 'ont' : 'a'} pas pu être enregistré${failures > 1 ? 's' : ''}`
return
}
router.push('/documents')
}
function formatDate(dateStr) {