1.6.0 #6+#7: proyección/ETA de objetivos + insights inteligentes

Goal ETA (#6): GoalProjection engine (CAGR mensual robusto de la evolución +
aportaciones, proyecta mes a mes → fecha estimada, estado ahead/on-track/behind/
unreachable, sparkline). GoalsView muestra 'Projected: <mes>', chip de ritmo con color,
fallback 'Add contributions to reach this'. GoalsViewModel.projection(for:) cacheado.

Insights (#7): InsightsEngine rule-based on-device (sin red/AI). Reglas: allocation vs
target, riesgo de concentración, mejor/peor categoría, diversificación, racha, YTD,
ganancias, forecast, proximidad a milestone. Priorizados por tono, top 4. PortfolioInsight
gana detail + tone. Surface en el Dashboard.

Localización: 19 claves nuevas en los 7 idiomas.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L2p3gUZRNWW388rWFRjiU7
This commit is contained in:
alexandrev-tibco
2026-07-25 12:22:12 +02:00
parent fd1094b4fc
commit 6887d05b01
14 changed files with 766 additions and 128 deletions
@@ -424,6 +424,25 @@
"insight_streak_title" = "Tracking-Serie";
"insight_streak_value" = "%d Monate in Folge";
"insight_forecast_title" = "Auf dem Weg zu";
"insight_allocation_title" = "Allokationsabweichung";
"insight_allocation_over_value" = "%1$@ liegt bei %2$.0f%% — über deinem Ziel von %3$.0f%%";
"insight_allocation_under_value" = "%1$@ liegt bei %2$.0f%% — unter deinem Ziel von %3$.0f%%";
"insight_allocation_detail" = "Zum Plan zurück ausbalancieren";
"insight_concentration_title" = "Klumpenrisiko";
"insight_concentration_value" = "%1$@ macht %2$.0f%% deines Portfolios aus";
"insight_concentration_detail" = "Erwäge eine breitere Streuung";
"insight_best_performer_title" = "Bester Wert";
"insight_worst_performer_title" = "Braucht Aufmerksamkeit";
"insight_performer_value" = "%1$@ · %2$+.1f%%";
"insight_diversification_title" = "Diversifikation";
"insight_diversification_single_value" = "Alles in einer Quelle — erwäge eine weitere";
"insight_diversification_good_value" = "Auf %d Kategorien verteilt";
"goal_projection_projected" = "Prognose: %@";
"goal_projection_add_contributions" = "Beiträge hinzufügen, um es zu erreichen";
"goal_chip_ahead" = "Voraus";
"goal_chip_on_track" = "Im Plan";
"goal_chip_behind" = "Im Rückstand";
"goal_chip_at_this_pace" = "In diesem Tempo…";
"notification_milestone_title" = "Portfolio-Meilenstein! 🎉";
"notification_milestone_body" = "Dein Portfolio hat gerade %@ überschritten. Herzlichen Glückwunsch!";