gigafibre-fsm/apps/ops/src/pages/RapportsPage.vue
louispaulb 10d0854e51 refactor: reduce token count, DRY code, consolidate docs
Backend services:
- targo-hub: extract deepGetValue to helpers.js, DRY disconnect reasons
  lookup map, compact CAPABILITIES, consolidate vision.js prompts/schemas,
  extract dispatch scoring weights, trim section dividers across 9 files
- modem-bridge: extract getSession() helper (6 occurrences), resetIdleTimer(),
  consolidate DM query factory, fix duplicate username fill bug, trim headers
  (server.js -36%, tplink-session.js -47%, docker-compose.yml -57%)

Frontend:
- useWifiDiagnostic: extract THRESHOLDS const, split processDiagnostic into
  6 focused helpers (processOnlineStatus, processWanIPs, processRadios,
  processMeshNodes, processClients, checkRadioIssues)
- EquipmentDetail: merge duplicate ROLE_LABELS, remove verbose comments

Documentation (17 → 13 files, -1,400 lines):
- New consolidated README.md (architecture, services, dependencies, auth)
- Merge ECOSYSTEM-OVERVIEW into ARCHITECTURE.md
- Merge MIGRATION-PLAN + ARCHITECTURE-COMPARE + FIELD-GAP + CHANGELOG → MIGRATION.md
- Merge COMPETITIVE-ANALYSIS into PLATFORM-STRATEGY.md
- Update ROADMAP.md with current phase status
- Delete CONTEXT.md (absorbed into README)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 08:39:58 -04:00

106 lines
3.5 KiB
Vue

<template>
<q-page padding>
<div class="text-h6 text-weight-bold q-mb-md">Rapports</div>
<!-- Comptabilité section -->
<div class="text-subtitle2 text-grey-7 text-weight-bold q-mb-sm">Comptabilité & Finances</div>
<div class="row q-col-gutter-md q-mb-lg">
<div class="col-12 col-md-6 col-lg-4" v-for="report in financeReports" :key="report.title">
<div class="ops-card cursor-pointer" style="min-height:120px" @click="$router.push(report.route)">
<div class="row items-center q-mb-sm">
<q-icon :name="report.icon" size="28px" :color="report.color" class="q-mr-sm" />
<div class="text-subtitle1 text-weight-bold">{{ report.title }}</div>
</div>
<div class="text-caption text-grey-6">{{ report.description }}</div>
</div>
</div>
</div>
<!-- Opérations section -->
<div class="text-subtitle2 text-grey-7 text-weight-bold q-mb-sm">Opérations</div>
<div class="row q-col-gutter-md">
<div class="col-12 col-md-6 col-lg-4" v-for="report in opsReports" :key="report.title">
<div class="ops-card cursor-pointer" style="min-height:120px;opacity:0.6" @click="report.action">
<div class="row items-center q-mb-sm">
<q-icon :name="report.icon" size="28px" :color="report.color" class="q-mr-sm" />
<div class="text-subtitle1 text-weight-bold">{{ report.title }}</div>
<q-badge class="q-ml-sm" color="grey-4" text-color="grey-7" label="Bientôt" />
</div>
<div class="text-caption text-grey-6">{{ report.description }}</div>
</div>
</div>
</div>
</q-page>
</template>
<script setup>
const financeReports = [
{
title: 'Revenus par compte',
description: 'Évolution mensuelle des revenus par compte GL (4000-5000). Graphique stacked + export CSV.',
icon: 'trending_up',
color: 'green-6',
route: '/rapports/revenus',
},
{
title: 'Ventes détaillées',
description: 'Liste des factures avec sous-total, TPS, TVQ et total. Inclut les notes de crédit.',
icon: 'receipt_long',
color: 'indigo-6',
route: '/rapports/ventes',
},
{
title: 'Rapport de taxes (TPS/TVQ)',
description: 'Taxes perçues vs payées par période mensuelle ou trimestrielle. Pour les déclarations fiscales.',
icon: 'account_balance',
color: 'purple-6',
route: '/rapports/taxes',
},
{
title: 'Âge des comptes',
description: 'Comptes à recevoir par tranche d\'ancienneté: courant, 30, 60, 90, 120+ jours.',
icon: 'account_balance_wallet',
color: 'red-6',
route: '/rapports/ar',
},
]
const opsReports = [
{
title: 'Clients par territoire',
description: 'Répartition des clients actifs par zone géographique.',
icon: 'map',
color: 'teal-6',
action: () => {},
},
{
title: 'Tickets par priorité',
description: 'Analyse des tickets ouverts et temps de résolution moyen.',
icon: 'bug_report',
color: 'orange-6',
action: () => {},
},
{
title: 'Équipements déployés',
description: 'Inventaire des ONT, routeurs et modems par statut.',
icon: 'router',
color: 'blue-6',
action: () => {},
},
{
title: 'Abonnements actifs',
description: 'Liste des abonnements avec plan, montant et ancienneté.',
icon: 'subscriptions',
color: 'purple-6',
action: () => {},
},
{
title: 'Dispatch performance',
description: 'Taux de complétion des tâches et temps moyen par technicien.',
icon: 'speed',
color: 'red-6',
action: () => {},
},
]
</script>