Add spreadsheet-style home page, migrate full 2026 ledger

- New /lignes route (set as site front page): full line-by-line table of
  every ligne comptable, Vue app with filters (compte/client/type/année)
  and month/year grouping, columns matching the original spreadsheet
  (one per compte). Rows with répartition ≠ montant HT are visibly
  flagged (red row + écart column), not hidden or auto-corrected.
- /dashboard now only holds the aggregate solde-par-compte/par-client view
- Migrated all 199 real 2026 transaction lines + 9 opening balances (from
  REPORT CLOTURE 2025) via a drush import script, preserving raw source
  data (known répartition mismatches included) -- validated with a new
  state-flag bypass of the presave check, used only for historical import
- Added "Autre" as an allowed field_type_ligne value for edge-case rows
- Client taxonomy grew from 15 seeded terms to the full unified list

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-03 22:52:00 +02:00
co-authored by Claude Sonnet 5
parent ca800be21a
commit 10f6271fec
12 changed files with 496 additions and 61 deletions
@@ -0,0 +1,139 @@
#figli-home-app {
font-family: var(--gin-font-family, Inter, -apple-system, sans-serif);
margin: 1rem 0;
}
#figli-home-app .figli-toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.75rem 1.25rem;
margin-bottom: 1rem;
padding: 0.75rem 1rem;
background: var(--gin-bg-layer, #f5f6f8);
border: 1px solid var(--gin-border-color, #dcdee2);
border-radius: 6px;
}
#figli-home-app .figli-toolbar label {
display: flex;
flex-direction: column;
font-size: 0.75rem;
font-weight: 600;
color: var(--gin-color-text-light, #6b7280);
gap: 0.15rem;
}
#figli-home-app .figli-toolbar select {
font-size: 0.85rem;
padding: 0.2rem 0.4rem;
}
#figli-home-app .figli-checkbox {
flex-direction: row !important;
align-items: center;
gap: 0.35rem !important;
}
#figli-home-app .figli-count {
margin-left: auto;
font-size: 0.8rem;
color: var(--gin-color-text-light, #6b7280);
white-space: nowrap;
}
#figli-home-app .figli-table-wrap {
overflow-x: auto;
border: 1px solid var(--gin-border-color, #dcdee2);
border-radius: 6px;
max-height: 75vh;
overflow-y: auto;
}
#figli-home-app table {
width: 100%;
border-collapse: collapse;
background: var(--gin-bg-layer2, #fff);
font-size: 0.8rem;
white-space: nowrap;
}
#figli-home-app th,
#figli-home-app td {
text-align: left;
padding: 0.3rem 0.6rem;
border-bottom: 1px solid var(--gin-border-color, #eceef1);
}
#figli-home-app thead th {
position: sticky;
top: 0;
background: var(--gin-bg-layer, #f5f6f8);
font-weight: 600;
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.02em;
z-index: 2;
}
#figli-home-app td.amount,
#figli-home-app th.amount {
text-align: right;
font-variant-numeric: tabular-nums;
}
#figli-home-app td.compte-col {
color: #333;
}
#figli-home-app td.figli-libelle {
white-space: normal;
min-width: 220px;
max-width: 340px;
}
#figli-home-app tr.figli-group-row td {
background: var(--gin-bg-layer, #eef0f3);
font-weight: 700;
position: sticky;
top: 2rem;
z-index: 1;
}
#figli-home-app tr.figli-error-row {
background: #fdf1f1;
}
#figli-home-app td.figli-ecart {
color: #c9312b;
font-weight: 700;
}
#figli-home-app .figli-badge {
display: inline-block;
padding: 0.1rem 0.45rem;
border-radius: 10px;
font-size: 0.68rem;
font-weight: 600;
white-space: nowrap;
}
#figli-home-app .type-entree { background: #e2f5e9; color: #1a7f37; }
#figli-home-app .type-charge { background: #eceef1; color: #4b5563; }
#figli-home-app .type-versement { background: #fdeed6; color: #9a5b13; }
#figli-home-app .type-achat { background: #e6eefc; color: #1d4ed8; }
#figli-home-app .type-ouverture { background: #ede4fb; color: #6b21a8; }
#figli-home-app .type-autre { background: #f1f1f1; color: #555; }
#figli-home-app .figli-note {
color: var(--gin-color-text-light, #6b7280);
font-weight: 400;
font-size: 0.75rem;
}
#figli-home-app .figli-error {
background: #fde8e8;
border: 1px solid #f4a3a3;
color: #7a1a1a;
padding: 0.75rem 1rem;
border-radius: 6px;
}