Plan de trabajo priorizado #29
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plan de trabajo priorizado — expenses_manager
Junta las dos fuentes: las mejoras de producto (recorrido vista por vista,
archivos
01–10) y el análisis técnico/visual de Code (ANALISIS_code.md).Organizado en tandas, no por áreas sueltas: cada tanda agrupa cosas que se tocan
juntas, para no abrir la misma vista dos veces.
El orden es una recomendación, no una obligación. La decisión de producto es del
propietario; lo técnico va anotado con el criterio de por qué sí o por qué no.
Tanda 0 — Arreglos rápidos y documentación (bajo esfuerzo, hacer ya) ✅ COMPLETADA
Cosas de bajo riesgo y alta relación coste/beneficio. Ninguna toca la lógica de
negocio de forma peligrosa.
income_confirm_delete.htmlmostraba{{ expense.date }}en vez de{{ income.date }}(fecha vacía en la confirmación). — ya corregidoGoal.progress()concached_property(Code 2.2). Hoy serecalcula 3-5 veces por objetivo en cada render de home/dashboard/objetivos.
Cambio pequeño, riesgo casi nulo, quita muchas queries. El mejor coste/beneficio
de todo el informe. (Hecho:
progresspasó acached_property; llamadas internasen
percentage()/is_exceeded()ajustadas aself.progresssin paréntesis; testsactualizados y en verde. Sin migración.)
CLAUDE.md(Code 3.1): además de los 3 puntos de Code, se puso aldía todo lo cambiado estas sesiones (Goal con
kind/periodos/cached_property,soft-delete de cuentas, CRUD de categorías y prevención de ciclos,
fuel_delete,/finance-accounts/, settings unificado por env, convención de nombres de plantillas,workflow dev/main).
README.md(Code 3.2): reescrito de cero, fiel al proyecto real(conda + SQLite en local, tabla de variables de entorno, Dockerfile documentado y
docker-compose.ymlde ejemplo sin secretos — el real vive fuera del repo en el NAS)..env.example(Code 3.8): añadido al repo con todas las variables comoplantilla (placeholders inútiles, sin secretos).
models.py,el comentario obsoleto de sourcery en
views.pyy unificadas las comillas enGoalForm.Meta.fields.Tanda 1 — Responsive / usarlo en el móvil (alto valor personal) ✅ COMPLETADA
Motivo de prioridad: el objetivo declarado es "poder usarlo más desde el móvil", y
hoy no se puede porque no está adaptado. Esto es lo que desbloquea ese uso.
base.htmlybase_auth.html(Code 1.1) — una línea,cambia radicalmente cómo se ve en móvil. (Hecho; de paso se corrigió el
<!DOCTYPE>incompleto de
base.htmly se añadiólang="es".)overflow-x:auto(gastos, comparación deldashboard, fuel con 7 columnas) para que no desborden. (Hecho: las 8 tablas del
proyecto envueltas en
.table-wrapconwhite-space:nowrap, se ensanchan segúncontenido sin anchos fijos arbitrarios.)
base.csspara los breakpoints principales.(Hecho: breakpoints 768px y 480px; grids —kpi/dashboard/goals/settings— a 1 columna
en móvil.)
Extras que salieron al probar en móvil y se resolvieron en la misma tanda:
.chart-boxde alturafija envolvía título + canvas y desbordaba). Corregido en
dashboard.htmlyhome.html(título fuera de la caja, canvas en contenedor de altura controlada).expenses/static/expenses/js/nav.js):botón ☰ bajo 768px que despliega la nav; vanilla JS solo para el toggle, con
aria-expanded. En escritorio no cambia nada.nav.js): pasó de:hovera click en escritorio y móvil, con cierre al pulsar fuera. El toggle es un<button>real conaria-haspopup/aria-controlsy foco por teclado — estoadelanta el punto 1.4 de la Tanda 3 (dropdown accesible por teclado).
dashboard (ya no se parte/solapa en móvil).
Tanda 2 — Coherencia visual (base para que todo se vea igual)
Lo que hace que la app deje de verse "un poco fea/inconsistente" (queja explícita).
:root { --color-success… --color-danger… }y sustituir los 3-4 tonos distintos de verde/rojo repartidospor
base.cssy losstyle="..."inline dedashboard.html. Base para todo lovisual posterior. (Hecho: paleta Forest Teal aplicada con variables semánticas
(
--color-bg/--color-surface/--color-text/--color-primary...), pensadas parasoportar dos modos. Hex dispersos e inline sustituidos por variables.)
.btn/.btn-primary/.btn-secondary/.btn-dangercoherentes; los "Volver"/"Cancelar" que eran enlacesmorados pasan a botón real con misma altura y separación; aplicado en formularios y
confirmaciones. (Resuelve lo que se detectó al probar la Tanda 1 en móvil.)
[data-theme="dark"], sigue la preferencia del sistema por defecto, botón sol/lunaen la topbar para forzar, elección recordada en
localStorage, con script inlineanti-flash en el
<head>. Login incluido.idénticas pero divergen en botón/clase/encabezado. Unificar en un
{% include %}con variables. De paso previene bugs como el de
income_confirm_delete..pagination,.form-errors,.form-field, etc. — revisar si la paginación y los errores deformulario se están viendo sin estilo.
iguales (Code 1.8:
tag_listusa<ul>,categoriesusa<table>).Tanda 3 — Accesibilidad (bajo esfuerzo, se hace junto con lo visual)
:hoverpuro, sin toggle por teclado → un usuario de teclado no puede llegar aCategorías/Etiquetas/Objetivos. Es una ruta bloqueada, no solo "buena práctica".
(Ya resuelto en la Tanda 1: el toggle pasó a
<button>con click + Enter/Espacioy
aria-expanded.)(Code 1.6). Bajo esfuerzo, se hace en el mismo pase que la Tanda 2.
Tanda 4 — Home (producto + técnico juntos)
Ver
01_home.md. Al tocar el home, aprovechar para lo técnico de esa vista.current_balance()/is_exceeded()ya memoizados(Tanda 0).
Tanda 5 — Listado de gastos (la pieza de filtrado)
Ver
02_listado_gastos.md. Es la tanda más grande de producto.de paso la query duplicada de
Tag(Code 2.7) y añadirselect_related/prefetch_related(Code 2.5).09_transversales.md: el rango de fechas y el mecanismo dinámico debendiseñarse pensando en reutilizarlos en el dashboard.
Tanda 6 — Dashboard (producto + el N+1)
Ver
03_dashboard.md. Es la vista más usada para análisis y la que más sebeneficia de tocar producto y rendimiento a la vez.
integrados, rango de fechas, ingresos vs gastos.
dashboard(Code 3.4): 226 líneas, 5responsabilidades, contexto de 35 claves. Extraer en
_resolve_period,_build_comparison,_build_account_charts.Tanda 7 — Vistas de gestión (cuentas, categorías, etiquetas, objetivos)
Ver
04–07. Producto de bajo/medio esfuerzo, se pueden repartir.category_createdel listado (Code 2.6) si se toca la vista.Goal.progress()/_period_start()(Code 3.5) al tocar el modelo.Tanda 8 — Módulo de vehículos (módulo nuevo grande)
Ver
08_repostajes_vehiculos.md. Es prácticamente un módulo nuevo; abordar entero,no a trozos sueltos. Orden interno sugerido en su propio archivo.
Tanda 9 — Módulo de inversiones / patrimonio (el más grande)
Ver
10_modulo_inversiones.md. La evolución de mayor alcance. Empezar por registromanual de los cuatro tipos; precios automáticos como capa posterior (cripto primero).
La Idea A (clasificar gasto fijo/variable) es independiente y puede ir en cualquier
momento.
Refactors grandes — decididos NO hacer por ahora
Anotados a conciencia como "no hacer salvo que duela de verdad":
20+ vistas que hoy funcionan y están cubiertas por tests. Riesgo/beneficio no
compensa en un proyecto personal. Dejar salvo reescritura por otro motivo.
views.pyen un paqueteviews/(Code 3.3): más razonable que loanterior (es mover funciones, bajo riesgo) pero no urge. Hacerlo el día que el
archivo estorbe de verdad al trabajar, y de forma incremental.
se hace a la vez que otra reestructuración.
Deuda ya conocida (de la fase anterior, no del análisis de Code)
main.Preparado, pendiente de ejecutar cuando se quiera (ver
TODO_revision.md).gunicornen requirements pero no en el venv (Code 3.6): mismo patrón quewhitenoise. Revisar todas las dependencias dev vs producción de una vez.comentarios, inglés en identificadores, que es lo mayoritario) y aplicarla a
partir de ahora sin reescribir lo viejo.