Phoenix Innovation

Phoenix Toolbox

{{ error }}

{{ successMessage }}

Activation 2FA obligatoire

Un administrateur a requis l'activation de l'authentification à deux facteurs pour votre compte.

Génération du QR code...

Étape 1 : Scanner le QR code

Utilisez une application comme Google Authenticator ou Authy pour scanner ce code :

QR Code 2FA

Secret manuel : {{ totpSecret }}

Étape 2 : Entrer le code de vérification

Entrez le code à 6 chiffres généré par votre application

{{ setup2FAError }}

{{ setup2FAError }}

Phoenix Innovation

3D, Laser & Print from Switzerland

Ctrl+I pour capturer une idée | $$ incidence économique
{{ user.email }}

Équipe

{{ adminMessage.text }}

Nouveau membre de l'équipe

Modifier le membre de l'équipe

Photo de profil

JPG, PNG, GIF ou WEBP (max 10MB)

Upload en cours...

Téléphones

Permissions d'accès

{{ module.name }}

Compta > {{ entity.code }} {{ entity.name }}

Membre Postes Rôles Statut 2FA Dernière connexion Actions
Chargement...

{{ u.first_name }} {{ u.last_name }}

{{ u.email }}

{{ formatDateShort(u.birth_date) }}

{{ pos.trim() }}
-
Admin Vendeur
Actif Inactif
Activé Requis
{{ u.last_login ? formatDate(u.last_login) : 'Jamais' }}

Partenaires

{{ clientMessage.text }}

Nouveau partenaire

Chargement des partenaires...

Aucun partenaire trouvé

Nom commercial Type Téléphone Code Postal Ville, Pays Actions

Paramètres

{{ settingsMessage.text }}

{{ editingLanguage ? 'Modifier la langue' : 'Nouvelle langue' }}

Code Nom Statut Actions
Chargement...
{{ lang.code }} {{ lang.name }} Active Inactive
{{ settingsMessage.text }}

{{ editingCountry ? 'Modifier le pays' : 'Nouveau pays' }}

Code Nom (FR) Nom (EN) Préfixe État requis Statut Actions
Chargement...
{{ country.code }} {{ country.name_fr }} {{ country.name_en }} {{ country.phone_prefix || '—' }} Actif Inactif
{{ settingsMessage.text }}

{{ editingState ? 'Modifier l\'état/canton' : 'Nouvel état/canton' }}

Pays Code Nom Statut Actions
Chargement...
{{ getCountryName(state.country_id) }} {{ state.code }} {{ state.name }} Actif Inactif
{{ settingsMessage.text }}

{{ editingLegalStructure ? 'Modifier la structure juridique' : 'Nouvelle structure juridique' }}

Code Nom Pays Description Statut Actions
Chargement...
{{ ls.code }} {{ ls.name }} {{ ls.country_code }} {{ ls.description || '—' }} Active Inactive
{{ settingsMessage.text }}

{{ editingBillingEntity ? 'Modifier l\'entité' : 'Nouvelle entité de facturation' }}

Logo
Upload...

Formats acceptés: JPG, PNG, SVG, WebP (max 5MB)

Logo Nom Pays TVA Adresse Code compta Statut Actions
Chargement...
{{ be.name }}
{{ be.legal_name || '—' }}
{{ getCountryName(be.country_id) }} {{ be.vat_number || '—' }}
{{ be.address }}
{{ be.postal_code }} {{ be.city }}
{{ be.next_accounting_code }} Active Inactive

Exercices Comptables

{{ fiscalYearsModal.entity?.name }}

{{ fiscalYearsMessage.text }}
Code Libellé Début Fin Statut Actions
Chargement...
{{ fy.year_code }} {{ fy.year_label }} {{ formatDate(fy.start_date) }} {{ formatDate(fy.end_date) }} Clôturé Ouvert
{{ settingsMessage.text }}
{{ exchangeRates.length }} taux enregistrés
Date De Vers Taux Source Dernière MAJ
Chargement...
{{ formatDate(rate.rate_date) }} {{ rate.base_currency }} {{ rate.target_currency }} {{ rate.rate.toFixed(6) }} Auto Manuel {{ formatDateTime(rate.updated_at) }}
{{ settingsMessage.text }}

{{ editingUnit ? 'Modifier l\'unité' : 'Nouvelle unité' }}

Code Nom Symbole Catégorie Actions
Aucune unité enregistrée
{{ unit.code }} {{ unit.name }} {{ unit.symbol }} {{ unit.category }} -
{{ settingsMessage.text }}

{{ editingWarehouse ? 'Modifier le dépôt' : 'Nouveau dépôt' }}

Code Nom Localisation Pays Actions
Aucun dépôt enregistré
{{ warehouse.code }} {{ warehouse.name }} {{ warehouse.location || '-' }} {{ warehouse.country_name }} -
{{ settingsMessage.text }}

{{ editingContext ? 'Modifier le contexte' : 'Nouveau contexte' }}

Aucun contexte enregistré

@{{ ctx.name }}

{{ ctx.ip_address }}

Présets de plage horaire

Les présets permettent de définir rapidement des plages horaires avec la syntaxe h(nom) dans la saisie rapide des tâches.

{{ editingPreset ? 'Modifier le préset' : 'Nouveau préset' }}

Aucun préset enregistré
Nom Jours Heures Syntaxe Actions
{{ preset.name }} {{ formatPresetDays(preset.days) }} {{ preset.start_time?.substring(0,5) }} - {{ preset.end_time?.substring(0,5) }} Toute la journée h({{ preset.name }}) (système)

Préférences des tâches

Temps disponible pour annuler une action de complétion de tâche

{{ undoTimerSeconds }}s

Articles

{{ articleMessage.text }}

{{ editingArticle ? 'Modifier l\'article' : 'Nouvel article' }}

Alphanumeric uniquement, majuscules automatiques

Fournisseur principal (optionnel)

Vous pourrez ajouter d'autres fournisseurs après la création de l'article

Chargement des articles...

Aucun article trouvé

SKU Description Marque Type Stock Actions

Clients & Contacts

{{ clientMessage.text }}

{{ editingClient ? 'Modifier le client' : 'Nouveau client' }}

Chargement des clients...

Nom commercial TVA Téléphone Site web Actions

Aucun client pour le moment

Cliquez sur "Nouveau client" pour en créer un

Mes clients

Module en développement

Cette page affichera les clients assignés au vendeur connecté avec statistiques et actions rapides.

Pipeline vente

Module en développement

Cette page affichera le pipeline de vente avec vue Kanban par étape (Prospect, Qualification, Proposition, Négociation, Gagné/Perdu).

Dossiers

{{ dossierMessage.text }}

{{ editingDossier ? 'Modifier le dossier' : 'Nouveau dossier' }}

{{ c.company_name }}

{{ selectedDossier.name }}

{{ selectedDossier.client.company_name }}

{{ getDossierStatusLabel(selectedDossier.status) }}
{{ selectedDossier.montant_estime ? formatMoney(selectedDossier.montant_estime) : '-' }}
Montant estimé
{{ selectedDossier.probabilite !== null ? selectedDossier.probabilite + '%' : '-' }}
Probabilité
{{ selectedDossier.total_quoted_ht ? formatMoney(selectedDossier.total_quoted_ht) : '-' }}
Total devis

Description

{{ selectedDossier.description || 'Aucune description' }}

Notes internes

{{ selectedDossier.notes_internes || 'Aucune note' }}

{{ formatMoney(q.total_ht) }} HT {{ q.status === 'draft' ? 'Brouillon' : q.status === 'sent' ? 'Envoyé' : q.status === 'accepted' ? 'Accepté' : 'Refusé' }}

Aucun devis lié à ce dossier

{{ p.name }}

Aucun projet lié à ce dossier

{{ t.title }} {{ t.status }}

Aucune tâche liée à ce dossier

Associez d'abord un client au dossier pour pouvoir y ajouter des contacts.
{{ formatContactName(dc.contact) }} Principal {{ dc.role }}
{{ dc.contact.email }} {{ dc.contact.phone }}

Aucun contact lié à ce dossier

Aucun dossier trouvé

{{ d.name }}

{{ getDossierStatusLabel(d.status) }}

{{ d.client.company_name }}

{{ formatMoney(d.montant_estime) }} {{ d.probabilite }}% {{ d.quote_count }} devis

Devis

{{ quoteMessage.text }}
Numero Client Date Expire Total TTC Marge nette Statut Actions
Chargement...
Aucun devis trouve
{{ q.quote_number }} {{ q.entity_code }} {{ q.client_name }} {{ formatDateShort(q.quote_date) }} {{ formatDateShort(q.expiry_date) }} {{ formatMoney(q.total_ttc, q.currency) }} {{ (q.net_margin_rate || 0).toFixed(1) }}% {{ getQuoteStatusLabel(q.status) }}

{{ editingQuote ? `Devis ${editingQuote.quote_number}` : 'Nouveau devis' }}

Pour changer d'entité, dupliquez le devis

{{ c.company_name }}
{{ c.legal_name }} TVA: {{ c.vat_number }}
Créer "{{ clientSearchQuery.trim() }}" Créer un nouveau client
Modèles disponibles
Aucun modèle disponible
Description Qte P.U. Coût Remise TVA Total HT Marge
Aucune ligne. Cliquez sur "+ Article" pour commencer.
{{ line.sku }}
Total HT: {{ formatMoney(quoteTotals.total_ht, quoteForm.currency) }}
Remises: -{{ formatMoney(quoteTotals.total_discount, quoteForm.currency) }}
TVA: {{ formatMoney(quoteTotals.total_vat, quoteForm.currency) }}
Total TTC: {{ formatMoney(quoteTotals.total_ttc, quoteForm.currency) }}
Marge nette: {{ formatMoney(quoteTotals.net_margin, quoteForm.currency) }} ({{ quoteTotals.net_margin_rate?.toFixed(1) || 0 }}%)
Marge brute: {{ formatMoney(quoteTotals.total_margin, quoteForm.currency) }} ({{ quoteTotals.margin_rate?.toFixed(1) || 0 }}%)

Section interne (non visible client)

Confidentiel
x = {{ formatMoney(item.quantity * item.unit_price, item.currency) }}
Ref: {{ item.supplier_reference }}

Aucun composant interne

Marge brute: {{ formatMoney(editingQuote?.total_margin || 0, quoteForm.currency) }} ({{ (editingQuote?.margin_rate || 0).toFixed(1) }}%)
- Composants: -{{ formatMoney(totalInternalCost, quoteForm.currency) }}
= Marge nette: {{ formatMoney(netMargin, quoteForm.currency) }} ({{ netMarginRate.toFixed(1) }}%)

Etape 1: Sélectionner un article Etape 2: Choisir le fournisseur

Sauvegarder comme modèle

Ce modèle contiendra {{ quoteLines.length }} ligne(s) du devis actuel.

Nouveau prospect

Sélectionner un article {{ selectedArticles.length }} sélectionné{{ selectedArticles.length > 1 ? 's' : '' }}

Shift = multi-sélection
Chargement...
Aucun article trouvé
{{ art.sku }} {{ art.description }}
{{ art.unit_code }}
Relâchez Shift pour ajouter

Dupliquer le devis

Devis source : {{ quoteToDuplicate?.quote_number }}

Le nouveau devis recevra un numéro de la séquence de l'entité choisie

Liste de prix

Module en développement

Cette page permettra de gérer les listes de prix par client, produit et période avec historique et versions.

Commandes

Module en développement

Cette page affichera les commandes fournisseurs avec suivi des livraisons et gestion des stocks.

Factures

Module en développement

Cette page permettra de gérer les factures clients et fournisseurs avec comptabilisation automatique et relances.

Comptabilité

Sélectionner une entité de facturation

Aucune entité de facturation disponible

Accès rapide (version de transition)

Entité sélectionnée : {{ selectedEntity.name }} ({{ selectedEntity.code }})

Cette page de transition permet d'accéder aux modules existants. La refonte complète multi-entités sera déployée prochainement.

Comptabilité {{ selectedEntity?.name || 'Suisse' }}

Saisie des écritures - Suisse

{{ selectedJournalCH.name }}

{{ entryMessage.text }}

{{ editingEntryCH ? 'Modifier l\'écriture' : 'Nouvelle écriture' }} - {{ selectedJournalCH.name }} {{ editingEntryCH.entry_number }}

Lignes d'écriture
Compte
Partenaire
Libellé
Débit
Crédit
💱
{{ account.code }} {{ account.label }}
Créer le compte "{{ line.accountSearchCH }}"
{{ partner.company_name || (partner.first_name + ' ' + partner.last_name) }}
Créer "{{ line.partnerSearchCH }}"
✓ {{ getAccountLabelCH(line.account_id_ch) }}
✓ {{ formatPartner(line.partner_id) }} ({{ getAuxiliaryCode(line.account_id_ch, line.partner_id, accountsCH) }})
{{ line.selected_tax_code.code }} ({{ line.selected_tax_code.rate }}%)
{{ (line.debit || line.credit || 0).toFixed(2) }}
{{ line.exchange_date ? line.exchange_date.substring(8,10) + '.' + line.exchange_date.substring(5,7) : (newEntryCH.entry_date ? newEntryCH.entry_date.substring(8,10) + '.' + newEntryCH.entry_date.substring(5,7) : '') }}

Créer un nouveau compte

TOTAL:
{{ totalDebitCH.toFixed(2) }}
{{ totalCreditCH.toFixed(2) }}
{{ balanceCH === 0 ? '✓ Écriture équilibrée' : '⚠ Reste à équilibrer' }}
Débit supérieur de {{ Math.abs(balanceCH).toFixed(2) }} CHF Crédit supérieur de {{ Math.abs(balanceCH).toFixed(2) }} CHF
Différence
{{ Math.abs(balanceCH).toFixed(2) }}
💡 Raccourcis clavier : Tapez pour filtrer • naviguer • Entrée sélectionner • Tab champ suivant • MAJ+Entrée valider • CTRL+Entrée ajouter ligne
🏷️ Partenaires : Avec écritures existantes○ Nouveau partenaire

Filtrer les écritures

{{ filteredEntriesCH.length }} écriture(s) sur {{ entriesCH.length }}

Chargement...

Aucune écriture

Aucune écriture ne correspond aux filtres

{{ entry.entry_number }} {{ formatDate(entry.entry_date) }} {{ entry.reference }}
Validée Brouillon
{{ entry.description }}
Compte Libellé Débit Crédit Devise
{{ getAccountLabelCH(line.account_id) }}
{{ getAuxiliaryCode(line.account_id, line.partner_id, accountsCH) }} - {{ formatPartner(line.partner_id) }}
{{ line.description }} {{ line.debit > 0 ? line.debit.toFixed(2) : '' }} {{ line.credit > 0 ? line.credit.toFixed(2) : '' }} {{ line.amount_original.toFixed(2) }} {{ line.currency_original }}
@ {{ line.exchange_rate.toFixed(4) }}
CHF

Journaux - Suisse

{{ journalMessage.text }}

Nouveau journal

Chargement...

Aucun journal

Code Nom Type Compte bancaire Prochain N° Statut Actions

Plan comptable - Suisse

{{ accountMessage.text }}

Nouveau compte

Comptes auxiliaires :

Chargement...

Aucun compte trouvé

+/-
Code
Libellé
Type
Statut
Actions

Codes TVA autorisés

Compte {{ selectedAccountForTaxCodes.code }} - {{ selectedAccountForTaxCodes.label }}

Sélectionnez les codes TVA autorisés pour ce compte :

Taux de TVA

Exonéré

Comptabilité {{ selectedEntity?.name || 'France' }}

Saisie des écritures - France

{{ selectedJournalFR.name }}

{{ entryMessage.text }}

{{ editingEntryFR ? 'Modifier l\'écriture' : 'Nouvelle écriture' }} - {{ selectedJournalFR.name }} {{ editingEntryFR.entry_number }}

Lignes d'écriture
Compte
Partenaire
Libellé
Débit
Crédit
💱
{{ account.code }} {{ account.label }}
Créer le compte "{{ line.accountSearchFR }}"
{{ partner.company_name || (partner.first_name + ' ' + partner.last_name) }}
Créer "{{ line.partnerSearchFR }}"
✓ {{ getAccountLabelFR(line.account_id_fr) }}
✓ {{ formatPartner(line.partner_id) }} ({{ getAuxiliaryCode(line.account_id_fr, line.partner_id, accountsFR) }})
{{ line.selected_tax_code.code }} ({{ line.selected_tax_code.rate }}%)
{{ (line.debit || line.credit || 0).toFixed(2) }}
{{ line.exchange_date ? line.exchange_date.substring(8,10) + '.' + line.exchange_date.substring(5,7) : (newEntryFR.entry_date ? newEntryFR.entry_date.substring(8,10) + '.' + newEntryFR.entry_date.substring(5,7) : '') }}

Créer un nouveau compte

TOTAL:
{{ totalDebitFR.toFixed(2) }}
{{ totalCreditFR.toFixed(2) }}
{{ balanceFR === 0 ? '✓ Écriture équilibrée' : '⚠ Reste à équilibrer' }}
Débit supérieur de {{ Math.abs(balanceFR).toFixed(2) }} EUR Crédit supérieur de {{ Math.abs(balanceFR).toFixed(2) }} EUR
Différence
{{ Math.abs(balanceFR).toFixed(2) }}
💡 Raccourcis clavier : Tapez pour filtrer • naviguer • Entrée sélectionner • Tab champ suivant • MAJ+Entrée valider • CTRL+Entrée ajouter ligne
🏷️ Partenaires : Avec écritures existantes○ Nouveau partenaire

Filtrer les écritures

{{ filteredEntriesFR.length }} écriture(s) sur {{ entriesFR.length }}

Chargement...

Aucune écriture

Aucune écriture ne correspond aux filtres

{{ entry.entry_number }} {{ formatDate(entry.entry_date) }} {{ entry.reference }}
Validée Brouillon
{{ entry.description }}
Compte Libellé Débit Crédit Devise
{{ getAccountLabelFR(line.account_id) }}
{{ getAuxiliaryCode(line.account_id, line.partner_id, accountsFR) }} - {{ formatPartner(line.partner_id) }}
{{ line.description }} {{ line.debit > 0 ? line.debit.toFixed(2) : '' }} {{ line.credit > 0 ? line.credit.toFixed(2) : '' }} {{ line.amount_original.toFixed(2) }} {{ line.currency_original }}
@ {{ line.exchange_rate.toFixed(4) }}
EUR

Journaux - France

{{ journalMessage.text }}

Nouveau journal

Chargement...

Aucun journal

Code Nom Type Compte bancaire Prochain N° Statut Actions

Plan comptable - France

{{ accountMessage.text }}

Nouveau compte

Comptes auxiliaires :

Chargement...

Aucun compte trouvé

+/-
Code
Libellé
Type
Statut
Actions

Codes TVA autorisés

Compte {{ selectedAccountForTaxCodes.code }} - {{ selectedAccountForTaxCodes.label }}

Sélectionnez les codes TVA autorisés pour ce compte :

Taux de TVA

Exonéré

Tâches et Projets ({{ totalPendingTasksCount }}) {{ getTotalTimeForTasks(allActionableTasks) || '0min' }} (total: {{ getTotalTimeForTasks(allPendingTasks) }})

{{ project.name }}
Créer projet "{{ quickCaptureProjectSearch }}"
{{ dossier.name }} {{ dossier.client.company_name }}
Aucun dossier ouvert trouvé
@{{ ctx.name }}
Aucun contexte disponible
{{ projects.find(p => p.id === quickCaptureProjectId)?.name }} {{ dossiers.find(d => d.id === quickCaptureDossierId)?.name }} @{{ contexts.find(c => c.id === ctxId)?.name }}

Ajouter le temps (15, 1h...) ou Entrée pour ignorer

Où es-tu ?
{{ project.name }}
{{ searchResultsCount }} résultat(s) trouvé(s) Aucun résultat dans {{ parsedSearchProject.name }}
{{ taskMessage.text }}
Tâche terminée {{ undoToast.taskTitle }}
{{ undoToast.timer }}

Chargement...

Aucune tâche trouvée

Résultats de recherche

{{ searchResultsCount }}
{{ task.project.name }} Action
{{ task.status === 'in_progress' ? 'En cours' : task.status === 'next_action' ? 'À faire' : task.status === 'waiting' ? 'Attente' : 'Un jour' }} {{ task.title }} {{ formatTimeEstimate(task) }}
Terminées ({{ searchResults.completed.length }})
{{ task.project.name }} Action
{{ task.title }}

En cours

{{ inProgressTasks.length }}/3 {{ getTotalTimeForTasks(inProgressTasks) }} Terminez ces tâches avant d'en commencer d'autres
{{ task.project.name }} @{{ ctx.name }} {{ formatTaskTime(getTaskMinutes(task)) }} {{ task.title }}

Top 10 Prioritaires

{{ top10PriorityActions.length }} {{ getTotalTimeForTasks(top10PriorityActions) }} {{ contexts.find(c => c.id === currentLocationContext)?.name }}
{{ index + 1 }}.
Action (sans projet)
{{ p.name }}
{{ mins < 60 ? mins + ' min' : (mins / 60) + 'h' }}
Aucun
Disponible à partir du :
@{{ ctx.name }}
{{ getMinutesUntilTimeWindowEnd(task) }}min {{ task.title }}
Tous assignés
@{{ ctx.name }}
{{ t.title }} {{ t.project.name }}
Tous les
Les:
À
Fin:
Jours:
De à

La tâche n'apparaîtra dans le Top 10 que pendant cette plage

Checklist

Actions

{{ actionableFlatTasks.length }} +{{ nonActionableFlatTasks.length }} {{ getTotalTimeForTasks(actionableFlatTasks) }}
Action (sans projet)
{{ p.name }}
{{ mins < 60 ? mins + ' min' : (mins / 60) + 'h' }}
Aucun
Disponible à partir du :
@{{ ctx.name }}
{{ task.title }} {{ getBlockedTasksCount(task.id) }}
Tous assignés
@{{ ctx.name }}
{{ t.title }} {{ t.project.name }}
Aucune tâche trouvée
Tâches bloquées par celle-ci :
{{ blocked.title }}
Tous les
Les:
À
Fin:
Jours:
De à

La tâche n'apparaîtra dans le Top 10 que pendant cette plage

Checklist
{{ item.text }}
{{ dep.title }}
{{ task.waiting_for_detail }} {{ formatReminderDateTime(task.waiting_reminder_date) }} {{ task.followup_stats.count }} relance{{ task.followup_stats.count > 1 ? 's' : '' }}
Historique des relances
{{ formatDateShort(f.followup_date) }} {{ f.note }} Relance effectuée

{{ task.description }}

Non actionnables {{ nonActionableFlatTasks.length }} {{ getTotalTimeForTasks(nonActionableFlatTasks) }}
Tous assignés
@{{ ctx.name }}
@{{ ctx.name }}
{{ task.title }}
Jours:
De à

La tâche n'apparaîtra dans le Top 10 que pendant cette plage

Projets vides ({{ emptyProjects.length }})
{{ project.name }}

Enregistrer une relance

L'heure est optionnelle

Statistiques des Tâches

{{ taskStats.inProgress }}

En cours

{{ formatTotalTime(taskStats.inProgressMinutes) || '0min' }}

{{ taskStats.nextAction }}

À faire

{{ formatTotalTime(taskStats.nextActionMinutes) || '0min' }}

{{ taskStats.waiting }}

En attente

{{ formatTotalTime(taskStats.waitingMinutes) || '0min' }}

{{ taskStats.someday }}

Un jour

{{ formatTotalTime(taskStats.somedayMinutes) || '0min' }}

Total backlog

{{ taskStats.totalPending }}

tâches actives

Temps estimé total

{{ formatTotalTime(taskStats.totalPendingMinutes) || '0' }}

de travail

Temps actionnable

{{ formatTotalTime(taskStats.actionableMinutes) || '0' }}

disponible maintenant

Cette semaine

{{ taskStats.completedThisWeek }}

Complétées

{{ formatTotalTime(taskStats.completedThisWeekMinutes) || '0min' }}

{{ taskStats.createdThisWeek }}

Créées

{{ formatTotalTime(taskStats.createdThisWeekMinutes) || '0min' }}

+{{ taskStats.weeklyTrend }} tâches {{ taskStats.weeklyTrend }} tâches Équilibré {{ taskStats.weeklyTimeTrend > 0 ? '+' : '' }}{{ formatTotalTime(taskStats.weeklyTimeTrend) }}
(créées - complétées)

Ce mois

{{ taskStats.completedThisMonth }}

Complétées

{{ formatTotalTime(taskStats.completedThisMonthMinutes) || '0min' }}

{{ taskStats.createdThisMonth }}

Créées

{{ formatTotalTime(taskStats.createdThisMonthMinutes) || '0min' }}

+{{ taskStats.monthlyTrend }} tâches {{ taskStats.monthlyTrend }} tâches Équilibré {{ taskStats.monthlyTimeTrend > 0 ? '+' : '' }}{{ formatTotalTime(taskStats.monthlyTimeTrend) }}
(créées - complétées)

Comparaison avec la semaine précédente

Productivité

{{ taskStats.completedThisWeek }} vs {{ taskStats.completedLastWeek }}

{{ taskStats.completedThisWeek >= taskStats.completedLastWeek ? 'En progression' : 'À améliorer' }}

Nouvelles tâches

{{ taskStats.createdThisWeek }} vs {{ taskStats.createdLastWeek }}

{{ taskStats.createdThisWeek <= taskStats.createdLastWeek ? 'Maîtrisé' : 'Influx élevé' }}

Vélocité (temps complété)

{{ formatTotalTime(taskStats.completedThisWeekMinutes) || '0' }} vs {{ formatTotalTime(taskStats.completedLastWeekMinutes) || '0' }}

Cette semaine vs précédente

Évolution (90 derniers jours)

Pas encore de données historiques

Les statistiques s'accumulent jour après jour

Par projet

{{ proj.name }}
{{ proj.taskCount }} tâches {{ formatTotalTime(proj.totalMinutes) || '0min' }}

Aucun projet avec des tâches

Connaissances

Base de connaissances

Cette section permettra de centraliser les connaissances de l'entreprise : procédures, documentation, FAQ, et ressources partagées.

Module en développement

{{ pageTitle }}

{{ pageContent }}

{{ quickCaptureTimeMode ? 'Temps estimé' : 'Capture rapide' }}

Ctrl+I · Esc
{{ project.name }}
Créer projet "{{ quickCaptureProjectSearch }}"
{{ dossier.name }} {{ dossier.client.company_name }}
Aucun dossier ouvert trouvé
@{{ ctx.name }}
Aucun contexte disponible

Ajouter le temps (15, 1h...) ou Entrée pour ignorer

{{ projects.find(p => p.id === quickCaptureProjectId)?.name }} À faire {{ dossiers.find(d => d.id === quickCaptureDossierId)?.name }} @{{ contexts.find(c => c.id === ctxId)?.name }}