1.5.0: aviso de huecos + resumen mensual compartible + import con vista previa

Feature 1 — Aviso de huecos: SnapshotGapDetector detecta huecos internos por
source (meses sin datos entre dos snapshots). Banner desechable en Dashboard +
DataGapsSheet para rellenar (abre AddSnapshotView con el mes que falta). Complementa
la interpolación de gráficas: la línea se ve suave pero el usuario sabe que faltan
datos reales.

Feature 2 — Resumen mensual compartible: MonthlySummaryShareView (tarjeta con marca:
valor, variación desde el check-in, racha, mood/rating) renderizada con ImageRenderer
y compartida vía ShareService. Botón en la fila "check-in done" del Dashboard.

Feature 3 — Import con vista previa: ImportPreview + previewImportAsync (dry-run
READ-ONLY, no muta nada) cuenta qué se creará/actualizará usando los mismos checks
de existencia que applyImport. ImportDataView muestra la confirmación antes de
importar. El path real de import (applyImport/importDataAsync) NO se toca.

Localización 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-24 09:36:50 +02:00
parent 8d7cfc098b
commit 84d9240ee6
17 changed files with 1096 additions and 13 deletions
@@ -516,3 +516,34 @@
"icloud_diagnostics_copied" = "Diagnóstico copiado al portapapeles";
"Smooth Gaps in Charts" = "Suavizar huecos en gráficas";
// MARK: - Data Gaps (1.5.0)
"gaps_banner_title" = "Faltan datos de %d meses";
"gaps_missing_count" = "%d sin datos";
"gaps_range_between" = "Entre %@ y %@";
"Fill in missing data" = "Completa los datos que faltan";
"Missing Data" = "Datos faltantes";
"Fill Gap" = "Rellenar hueco";
"The chart estimates these months. Add real snapshots to keep your history accurate." = "La gráfica estima estos meses. Añade valores reales para mantener tu historial preciso.";
"Dismiss" = "Descartar";
// MARK: - Shareable Monthly Summary (1.5.0)
"share_summary_streak_badge" = "%d m";
"Monthly Summary" = "Resumen mensual";
"Portfolio Value" = "Valor de la cartera";
"Tracked with" = "Registrado con";
"Share monthly summary" = "Compartir resumen mensual";
"since last check-in" = "desde el último chequeo";
// MARK: - Import Preview (1.5.0)
"import_preview_nothing" = "No hay nada nuevo que importar. Tus datos ya están actualizados.";
"import_preview_sources" = "Crear %d fuentes";
"import_preview_snapshots_new" = "Crear %d registros";
"import_preview_snapshots_update" = "Actualizar %d registros";
"import_preview_categories" = "Crear %d categorías";
"import_preview_goals" = "Crear %d objetivos";
"import_preview_journal_new" = "Crear %d entradas del diario";
"import_preview_journal_update" = "Actualizar %d entradas del diario";
"Review Import" = "Revisar importación";
"Reviewing import…" = "Revisando importación…";
"Import" = "Importar";