---
id: "0088i"
title: "Trading: app `trading_journal` (reflection log)"
status: pendiente
type: feature
domain:
  - trading
scope: app-scoped
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088i — Trading: app `trading_journal` (reflection log)

**Status:** pendiente
**Created:** 2026-05-14
**Type:** feature
**Parent:** 0088
**Depends:** 0088a, 0088d
**Blocks:** 0088j (assertions sobre adherencia a reflection)

## Problema

Sin post-mortem por trade y por sesion, "mejorar" es una ilusion. El journal fuerza la reflexion en momentos clave (close de trade, fin de sesion, dia de drawdown notable). Es la pieza de **skill autoiterado** propiamente dicha: no es codigo del runner, es el ledger psicologico/operativo del operador.

## Piezas

1. App `projects/trading/apps/trading_journal/` (Mantine UI + sqlite_api + Go service).
2. Schema:
   - `sessions` (id, started_at, ended_at, market_context, mood_tag, notes).
   - `trade_reflections` (id, trade_group_id (link a transactions), opened_at, closed_at, thesis, what_went_right, what_went_wrong, lessons, tags, screenshots_paths).
   - `weekly_reviews` (id, week_iso, sharpe_week, drawdown_week, n_trades, adherence_score, lessons).
   - `tags` (id, name, color).
3. Reglas de UX:
   - **Forzar reflection** antes de marcar un trade_group como "closed". Si no se rellena, queda `closed_pending_reflection` y aparece destacado.
   - Atajo desde Mantine para vincular un trade con N screenshots (drop en local_files/).
4. Funciones puras:
   - `compute_adherence_score_py_finance(trades, plan_yaml) -> float` (mide cuanto de lo ejecutado coincide con el plan declarado).
   - `aggregate_weekly_metrics_py_finance(trades, reflections) -> dict`.
5. `e2e_checks`: build + smoke + check de `force_reflection` (intentar cerrar sin reflection devuelve 422).
6. Capability group `journal`. Pagina madre `docs/capabilities/journal.md`.

## Aceptacion

- Cerrar trade sin reflection es imposible via UI/API.
- Adherence score computable y exportable.
- Weekly review autogenerado los domingos (cron) — opcional para cerrar el issue, no obligatorio.

## No-objetivos

- AI auto-resumiendo reflections — futuro.
- Sentiment analysis sobre notas.
