Statistiken: Kundenfeedback 2026-08-19 komplett (N1-N8) + Review-Fixes + VP-/Incentive-Repair gehärtet
Statistik-Änderungen 2026-08-19 (dev/2026-07-22/entwicklungsplan-2026-08-19.md, alle 8 Pakete gemäß beantworteten F-Fragen): - N1 Monatsstatistik: Team-Cluster (Firstlines klickbar -> neue Seite user_team_firstlines, Teampartner gesamt/Payline [nur aktive], Abos Payline mit +N) + Level-Kachel (Quali-Stufe, fehlende Payline-/persönliche Punkte, Karriere-Level); LiveCommissionService-Snapshot v3 reicht Level-/Quali-Daten durch - N2 Abo-Kacheln auf Home monatsbezogen (aboStockCount-Rückrechnung über cancel/deleted/Status-Historie; VIP-Statistik bleibt tagesaktuell) - N3 VIP-Statistik 'Recruiter des Monats' (Neupartner-Definition wie KPI, rekursives Ketten-Volumen als Gesamtpunkte inkl. Starterpaket) + Drilldown/CSV-Spalte 'Punkte gesamt' - N4 Prognose-Block 'Level & Provision laut Prognose (Stand 25.)' mit unverbindlich-Kennzeichnung (ebenengenaue offene Abo-Punkte + TP-Laufstände) - N5 Checkout-Herkunft: Dropdown raus, Pflicht-Freitext (lokalisierte Fehlermeldung) - N6 Berater-Profilfoto (user_accounts.profile_image, Einwilligung als Sprachkey-Platzhalter, DSGVO-Löschung) + teaminterne Top-3-Karte (TopResultsService, Scope-Schalter) - N7 USt-Optionen: 'nicht umsatzsteuerpflichtig' zuerst + '§ 19 UStG'-Textfix - N8 Jahresgebühr-Nachfassliste je Berater (AnnualFeeDueService, überfällig/1-3 Monate, Sidenav) Kontroll-Review (8 Perspektiven) angewendet: next-Level-Fallback im Steady-State (resolveNextLevel — sonst 'Höchstes Level erreicht' für Normalfälle), _calculated-Punktebasis bei mehr Paylines, keine Wiederbelebung deaktivierter Abos in der Monatsrückrechnung, Payline-Abo-Kachel monatskonsistent, Top-3-Nachrücker; Performance: BackofficeDashboardService als Singleton mit lineBuckets-Memo (+flushLineBucketsMemo), level_forecast 6h-Cache; Reuse: User-Scopes firstlinesOf/newPartnerIn, SalesVolumePoints::totalPointsByUser, Slim::storeCroppedImage (3 Upload-Kopien vereinigt), activeAbo-Scope statt Inline-Prädikate, Form::open-Konvention, Return-Types Repair-Härtung (Kundenentscheide): VP-Nachtrepair dedupliziert über shopping_order_id (Live-Pfad schreibt sie jetzt mit), zählende Alt-Zeilen-Erkennung, Vormonats-Scan für Monatswechsel, Firmenaccount-Buchungen (config mivita.company_user_id) werden automatisch auf den Berater umgebucht (in place bzw. per Gegenbuchung bei geschlossenem Monat; Echtfall Anna Schall Order 58797 -> Christina Schuder), Berater-zu-Berater nur Warnung; Incentive-Repair: m_sponsor=NULL löscht nicht mehr, FK-Repair vor Stale-Bereinigung, gebatchte Lookups, zentrales Incentive::qualificationWindow(); .env aus dem Git-Tracking entfernt (Pflege per SFTP) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
517d010d58
commit
d65922adfe
88 changed files with 4480 additions and 425 deletions
|
|
@ -27,7 +27,7 @@ return [
|
|||
'reverse_charge_procedure' => 'Procédure d’autoliquidation',
|
||||
'tax_number' => 'Numéro fiscal',
|
||||
'taxable_sales_1' => 'assujetti à la TVA (je dépose une déclaration de TVA mensuelle / trimestrielle / annuelle auprès du fisc)',
|
||||
'taxable_sales_2' => 'non assujetti à la TVA (petite entreprise au sens du § 19',
|
||||
'taxable_sales_2' => 'non assujetti à la TVA (petite entreprise au sens du § 19 UStG)',
|
||||
'validator_creditcard' => 'Veuillez saisir un numéro de carte de crédit valide',
|
||||
'validator_date' => 'Veuillez saisir une date valide.',
|
||||
'validator_digits' => 'Veuillez saisir uniquement des chiffres.',
|
||||
|
|
@ -45,4 +45,12 @@ return [
|
|||
'language_settings' => 'Paramètres de langue',
|
||||
'preferred_language' => 'Langue préférée',
|
||||
'language_hint' => 'Cette langue est utilisée pour vos factures, relevés de commissions et bons de livraison.',
|
||||
|
||||
// N6 : photo de profil. Le texte de consentement définitif sera fourni par
|
||||
// la cliente — profile_image_consent est un texte provisoire d'ici là.
|
||||
'profile_image' => 'Photo de profil',
|
||||
'profile_image_copy' => 'Ta photo est affichée en interne dans ton équipe, p. ex. dans les classements et les aperçus.',
|
||||
'profile_image_consent' => "J'accepte que ma photo soit affichée en interne dans mon équipe dans les classements et les aperçus.",
|
||||
'profile_image_consent_required' => "Merci de confirmer d'abord le consentement à l'affichage de ta photo au sein de ton équipe.",
|
||||
'profile_image_delete' => 'Supprimer la photo',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -70,4 +70,32 @@ return [
|
|||
'own' => 'Propres',
|
||||
'live_calculation_hint' => 'Calcul en direct (pas encore terminé)',
|
||||
'live_calculation_hint_text' => 'Ne sera calculé qu’à la fin du mois.',
|
||||
'stats_group_team' => 'Équipe',
|
||||
'firstlines_count' => 'Firstlines',
|
||||
'team_partner_total' => 'Partenaires au total',
|
||||
'payline_partner_count' => 'Partenaires dans la payline',
|
||||
'payline_abo_count' => 'Abonnements dans la payline',
|
||||
'level_current' => 'Niveau actuel',
|
||||
'level_career' => 'Niveau de carrière',
|
||||
'level_next_missing' => 'Pour le niveau suivant :level, il manque encore :points points de payline.',
|
||||
'level_next_missing_personal' => 'Il manque en plus :points points de volume personnel.',
|
||||
'level_top_reached' => 'Niveau le plus élevé atteint.',
|
||||
'level_hint' => 'Niveau de qualification mensuel issu du calcul en direct. Points de payline = points d’équipe de tes niveaux payés, y compris ton excédent de points clients.',
|
||||
'forecast_level_title' => 'Niveau et commission selon la prévision (au 25)',
|
||||
'forecast_unverbindlich' => 'sans engagement',
|
||||
'forecast_level_disclaimer' => 'Estimation basée sur les points actuels plus les livraisons d’abonnement encore ouvertes. Les changements de rang/structure dans l’équipe ne sont pas pris en compte - seule la clôture mensuelle fait foi.',
|
||||
'forecast_level_reached' => 'Selon la prévision, tu atteindras le niveau suivant :level - à condition que ton volume personnel de :volume points soit atteint.',
|
||||
'forecast_level_missing' => 'Selon la prévision, il manque encore :points points de payline pour le niveau suivant :level.',
|
||||
'forecast_level_missing_personal' => 'Il manque en plus :points points de volume personnel.',
|
||||
'forecast_commission' => 'Commission prévisionnelle selon la prévision : :amount (sur la base du niveau :level).',
|
||||
|
||||
// N6 : « Les meilleurs résultats du mois » (interne à l'équipe)
|
||||
'top_results_title' => 'Les meilleurs résultats du mois (équipe)',
|
||||
'top_results_volume' => 'Top 3 volume personnel',
|
||||
'top_results_recruiters' => 'Top 3 nouveaux partenaires',
|
||||
'top_results_new_abos' => 'Top 3 nouveaux abonnements',
|
||||
'top_results_empty' => 'Pas encore de résultats ce mois-ci.',
|
||||
'top_results_unit_points' => 'points',
|
||||
'top_results_unit_partners' => 'nouveaux partenaires',
|
||||
'top_results_unit_abos' => 'abonnements',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ return [
|
|||
'dhl_cockpit' => 'Cockpit DHL',
|
||||
'revenue' => 'Chiffre d’affaires',
|
||||
'level_reports' => 'Rapports de niveau',
|
||||
'annual_fee' => 'Cotisation annuelle',
|
||||
'dashboard_news' => 'Actualités du tableau de bord',
|
||||
'teamabos' => 'Abonnements équipe',
|
||||
'team_customer_abos' => 'Abonnements clients de l’équipe',
|
||||
|
|
|
|||
|
|
@ -125,4 +125,5 @@ return [
|
|||
'free_shipping' => 'Livraison gratuite',
|
||||
'free_shipping_reached' => 'Livraison gratuite à partir de :amount €',
|
||||
'free_shipping_info' => 'Encore :missing € jusqu’à la livraison gratuite (à partir de :amount €)',
|
||||
'source_comment_required' => 'Dis-nous brièvement comment tu as entendu parler de nous - p. ex. le nom de la personne qui t\'a recommandé ou le salon/l\'événement exact.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -133,4 +133,19 @@ return [
|
|||
'no' => 'Non',
|
||||
'not_available' => 'N/A',
|
||||
'growth_bonus_details_description' => 'L1 = partenaires directs (reçoit toujours le bonus de profondeur), L2 = membres (à partir d’ici, le bonus de profondeur est partagé si le membre est qualifié), etc. | Affiche la commission (€) et le volume (pts) par niveau.',
|
||||
|
||||
// Jahresgebühr-Nachfassliste (N8)
|
||||
'annual_fee_title' => 'Cotisation annuelle en attente',
|
||||
'annual_fee_hint' => 'Remarque : les partenaires dont le compte a expiré sont automatiquement désactivés environ 2 semaines après l’expiration et supprimés du système après 2 mois. Les entrées en retard n’apparaissent donc ici que pour une durée limitée — mieux vaut relancer tôt.',
|
||||
'annual_fee_no_data' => 'Actuellement, la validité du compte d’aucun de tes partenaires n’expire dans les 3 prochains mois.',
|
||||
'annual_fee_group_overdue' => 'En retard',
|
||||
'annual_fee_group_due_1_month' => 'Échéance dans ≤ 1 mois',
|
||||
'annual_fee_group_due_2_months' => 'Échéance dans ≤ 2 mois',
|
||||
'annual_fee_group_due_3_months' => 'Échéance dans ≤ 3 mois',
|
||||
'firstlines' => 'Firstlines',
|
||||
'firstlines_copy' => 'Tes partenaires directs avec chiffre d’affaires et coordonnées - triés par points du mois sélectionné.',
|
||||
'firstlines_none' => 'Tu n’as pas encore de partenaires directs.',
|
||||
'firstlines_points' => 'Chiffre d’affaires (points)',
|
||||
'active_since' => 'Actif depuis',
|
||||
'account_inactive' => 'Compte inactif',
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue