1.4.1 (build 42): contribución por snapshot, fixes Period vs Period y navegación iPad

- 151: contribución editable por snapshot en cualquier modo (quitado gate detailed)
  con diálogo de propagación al editar: solo este / adelante / atrás / todos
  (SnapshotRepository.propagateContribution, SnapshotFormViewModel.contributionChanged)
- 148: Period vs Period mostraba mal el último mes del period B — la agrupación usaba
  chartMonth(for:) que aplicaba el grace-period del check-in a snapshots históricos;
  ahora agrupa por mes calendario crudo
- 152: iPad Sources no saltaba entre fuentes — añadido .id() al SourceDetailView para
  recrear el StateObject al cambiar de selección
- 146/147: Year vs Year con forecast del año en curso (asterisco de estimado) y KPIs
  arriba / detalle debajo
- 145: card de contribución mensual en SourceDetailView
- Nuevas claves snapshot_contribution_propagate_* en los 7 idiomas

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015qUZrBusG82T37R7PeokqJ
This commit is contained in:
alexandrev-tibco
2026-06-30 16:51:03 +02:00
parent 54dfd8a8e3
commit 7a18dd8360
48 changed files with 2854 additions and 608 deletions
@@ -295,12 +295,19 @@
"snapshot_duplicate_message" = "Ya tienes un snapshot para este mes. ¿Quieres añadir otro?";
"snapshot_duplicate_replace" = "Reemplazar existente";
"snapshot_duplicate_add" = "Añadir de todos modos";
"snapshot_contribution_propagate_title" = "Aplicar aportación";
"snapshot_contribution_propagate_message" = "¿Aplicar %@ como aportación también a otros registros?";
"snapshot_contribution_propagate_forward" = "Aplicar hacia adelante";
"snapshot_contribution_propagate_backward" = "Aplicar hacia atrás";
"snapshot_contribution_propagate_all" = "Aplicar a todos";
"snapshot_contribution_propagate_this" = "Solo este registro";
"contributions_vs_returns_title" = "Invertido vs. Rentabilidad";
"contributions_vs_returns_invested" = "Invertido";
"contributions_vs_returns_returns" = "Rentabilidad de mercado";
"chart_yoy_title" = "Año a año";
"chart_yoy_estimated_note" = "* estimado (previsión de cierre de año)";
"chart_yoy_empty" = "Añade más snapshots en diferentes años para ver la comparación.";
"Year vs Year" = "Año a año";
@@ -336,3 +343,26 @@
"whats_new_goals_body" = "Los estados vacíos mejorados te ayudan a empezar más rápido.";
"whats_new_continue" = "¡Vamos!";
"goal_delete_confirm" = "Eliminar";
"source_monthly_contribution_title" = "Aportación Mensual";
"source_monthly_contribution_placeholder" = "ej. 500";
"source_monthly_contribution_not_set" = "No configurada";
"source_monthly_contribution_hint" = "Se rellena automáticamente en Actualización Rápida";
"quick_update_contribution_label" = "Aportación";
"quick_update_contribution_placeholder" = "Importe";
"source_monthly_contribution_apply_title" = "Aplicar Aportación";
"source_monthly_contribution_apply_message" = "¿Aplicar %@ a todos los snapshots anteriores sin aportación?";
"source_monthly_contribution_apply_retroactive" = "Aplicar a Todos los Históricos";
"source_monthly_contribution_apply_forward" = "Solo a Partir de Ahora";
// MARK: - Portfolio Insights
"insights_section_title" = "Perspectivas";
"insight_milestone_title" = "Hito cerca";
"insight_milestone_value" = "%1$@ para %2$@";
"insight_ytd_title" = "Año en curso";
"insight_market_gains_title" = "Ganancias de mercado";
"insight_market_gains_value" = "+%@ en mercados";
"insight_streak_title" = "Racha de seguimiento";
"insight_streak_value" = "%d meses consecutivos";
"insight_forecast_title" = "En camino hacia";
"notification_milestone_title" = "¡Hito de cartera! 🎉";
"notification_milestone_body" = "Tu cartera acaba de superar %@. ¡Enhorabuena!";