Files
rar-autopass/TODOS.md
Claude Agent 56ebe1f7cb feat(editor): editor prestatii unificat in modal - un select, un rand de chips (PRD 5.23)
Inlocuieste cele 3 controale de asociere cod RAR cu un singur rand de chips
+ un singur select care adauga instant la change. Stare = un hidden chips_state
JSON versionat; post_form_chips redus la 2 actiuni (add/remove). Optgroup
Sugestii (fuzzy/k-NN) + optiune "Nu se declara la RAR" in select, cu tinta
implicita evidentiata si placeholder care o numeste. exclus persistat prin
payload_json (treapta noua de precedenta in resolve_prestatii, round-trip complet).

Siguranta: itemii exclusi sunt scosi din payload la momentul trimiterii
(worker split_prestatii_excluse inainte de build_rar_payload + filtru defensiv),
ca sa nu ajunga NICIODATA la RAR ca codPrestatie:null.

Suita: 1680 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 15:45:34 +00:00

141 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TODOS
Elemente deferate din review-uri. Negrupte de un PRD curent; de promovat cand devin prioritare.
## Din /autoplan PRD 5.23 (2026-07-07)
- [ ] **Bulk in preview: "aplica maparea la toate cele N randuri identice"** — o decizie de mapare
repetata per rand e adevaratul consumator de timp; editorul unificat nu o rezolva. Ce: dupa o
mapare in preview/modal, ofera aplicarea la toate randurile din batch cu aceeasi operatie
nemapata. De ce: reduce deschiderile de modal (drumul 10x — vocea externa CEO). Pro: taie direct
timpul de corectie pe importuri mari. Contra: atinge panoul de preview (non-goal in 5.23).
Context: `reresolve_account` exista deja pentru re-rezolvare dupa `save_mapping` — de verificat
daca nu acopera deja cazul la nivel de cont; daca da, TODO-ul devine doar UI de confirmare.
Effort: M→S (CC). Prioritate: P2. Depinde de: 5.23 livrat.
- [ ] **Metrici de baza pentru bucla de mapare** — cate deschideri de modal per import, % randuri
auto-rezolvate, % sugestii acceptate. De ce: fara ele nu stim daca editorul (5.23) sau motorul
(5.14/5.18) merita urmatoarea investitie. Pro: decizie de produs pe date. Contra: telemetrie
noua. Context: contorizare in `/form-chips` + import commit; expunere in /metrics existent.
Effort: S. Prioritate: P3.
- [ ] **A11y touch targets pe chips (× sub 44px)** — UI-ul compact 11-12px face tintele de atins
mici pe mobil. De ce: operare de pe telefon in service. Pro: mai putine mis-tap-uri. Contra:
chips mai inalti = mai putine pe rand. Context: decizie 5.23 = consecventa cu designul compact
existent; de revizitat la un audit a11y global. Effort: S. Prioritate: P3.
## Din executie + code-review 5.23 (2026-07-08)
- [ ] **Curata calea legacy `/trimitere/{id}/mapeaza`** — formular per-operatie separat, cu propriile
"Sugestii:", care coexista cu editorul unificat de chips. Nu interfereaza (dispare cand tinta e
setata), dar e cod mort de UX vechi. Context: semnalat de worker la fix-ul de randare initiala.
Effort: S. Prioritate: P3.
- [ ] **Autocomplete/cautare in selectul de coduri RAR** — non-goal explicit in 5.23 (select nativ
pastrat). De reevaluat daca nomenclatorul creste peste ~18 coduri fixe. Effort: M. Prioritate: P3.
- [ ] **Race buton Salveaza in timpul unui `/form-chips` in zbor** — sectiunea chips e inerta pe
`.htmx-request`, dar butonul Salveaza al formularului parinte nu e blocat; un submit foarte rapid
ar putea trimite un `chips_state` neactualizat. Improbabil (dedup + fereastra mica). Context:
finding PLAUSIBLE din code-review. Effort: S. Prioritate: P3.
- [ ] **Conflict mapare din tab Mapari vs item marcat `exclus` din chips** — un item marcat exclus
explicit din editor domina o mapare salvata ulterior din tab-ul Mapari (`resolve_prestatii`
precedenta item-exclus > mapare cont); utilizatorul poate sa nu inteleaga de ce maparea "nu tine".
De clarificat semantica sau de adaugat un semnal in UI. Context: finding PLAUSIBLE din code-review.
Effort: S. Prioritate: P3.
## Din /autoplan PRD 5.21 (2026-07-06)
- [ ] **CLI administrare cache embeddings (`python3 -m tools.embcache stats|clear|rebuild`)** — v1 foloseste
`DELETE FROM embedding_cache` manual (decizie Open Q1). De construit cand operarea manuala devine
frecventa sau cand apare al doilea operator. Effort: S. (CEO, low.)
- [ ] **Precompute vectori la build (artefact in imaginea Docker)** — modelul e pinned si corpusul seed e
comis, deci vectorii pot fi precalculati la build; ar face si PRIMUL start pe volum proaspat ieftin
(azi doar al doilea beneficiaza). Effort: M (pipeline build + fallback la runtime). (Outside voice CEO, medium.)
- [ ] **Graceful reload / zero-downtime restart** — procesul vechi serveste pana cel nou e cald; ar elimina
COMPLET fereastra post-restart, inclusiv incarcarea modelului (~10-20s) pe care cache-ul n-o poate evita.
Infra (Dokploy/compose), nu app. Effort: M. (Outside voice CEO, medium.)
- [ ] **Latenta per-query `suggest_nearest` (cosine pur Python)** — bucla Python peste 17k x 384 la fiecare
cautare; de MASURAT intai; daca >100ms, matrice numpy + dot product (efort mic). Designul curent e validat
pana la ~50k randuri de corpus (prag documentat in PRD 5.21 A12). (Eng F5, medium.)
## Din hardening 80/20 (/autoplan, 2026-07-03)
- [ ] **Traefik IP-allowlist pe /v1 + /metrics in fereastra de lansare** (T4) — cu zero clienti API,
suprafata anonima de ingestie n-are apelant legitim extern (ROAAUTO propriu vine de la IP cunoscut).
O regula Traefik declarativa (allowlist IP ROAAUTO + admin) elimina complet ingestia anonima in
perioada cea mai riscanta. Deferat: P0-1 (auth obligatoriu pe /v1) + T3 (startup guard) acopera deja
gaura principala. De activat cand: primesc trafic de scanare pe /v1 SAU inainte de expunere cu presa.
Effort: S (config Traefik). Depinde de: acces la config Traefik in Dokploy.
## Din PRD 5.12 (2026-06-26)
- [ ] **Mai multi utilizatori per firma (flux de invitatie / alaturare la cont)** — azi CUI e unic, deci
al doilea email care vrea pe aceeasi firma e respins la signup (nu exista flux de „alatura-te firmei").
`users` permite tehnic mai multe loginuri per `account_id`, dar nu exista UI. Daca apare nevoia reala
(mai multe persoane dintr-o firma), construieste: admin-ul firmei invita un email SAU al doilea cere
acces si admin-ul aproba; membership pe `account_id`. Decizie user (2026-06-26): in 5.12 ramane
**1 firma = 1 cont = 1 login** + mesaj prietenos la CUI duplicat (US-001); acest flux = livrabila separata.
## Din /autoplan PRD 5.11 (2026-06-26)
- [ ] **E2E smoke de first-run ca poarta de release** — codifica scriptul de dogfooding
(import -> mapcoloane -> preview -> commit -> lista apare + contoare) ca test E2E care
trebuie sa treaca inainte de orice release. Motiv: cele 8 bug-uri din 5.11 sunt toate
first-run friction nedogfooded end-to-end; fara o poarta, reapar ca 8 tichete noi.
(CEO F2, severitate high.)
- [ ] **Control compensator optional pe auto-trimitere unattended** — utilizatorul a ales
(2026-06-26) scoaterea completa a hold-ului auto_send. Risc rezidual acceptat: o regula
text gresita poate auto-trimite FINALIZATA (terminal, fara undo) pe randuri pe canalul API /
remapare inline (fara gate de preview). Daca apar integratori reali, evalueaza un throttle
„primele N auto-trimiteri pe o regula text noua cer confirmare" sau un kill-switch per cont.
(CEO F5/F6, severitate critical ca risc, dar pre-launch exposure ~zero acum.)
## Din /autoplan PRD 5.13 (2026-06-27)
- [ ] **Filtre de data 2x2 pe mobil** — Azi/7zile/30zile/Custom stivuiesc full-width (4 randuri)
pe mobil; grid 2x2 ar fi mai compact. Imbunatatire viitoare. (Design, low.)
- [ ] **Sprite `<use href="#...">` pentru iconitele Lucide**`act_btn` randeaza SVG inline pe
fiecare rand (bloat DOM pe toate viewporturile, ascuns pe desktop). Optimizare deferata; inline
acum (P5 simplu > optim prematur). (Eng §1, medium.)
- [ ] **"Eroare/Eroare" la nivel routes.py/labels.py** — guard-ul de template (pill-only cand
eticheta==stare) acopera cazul vizibil; curatarea logicii de continut ramane debt. (Design §2.)
- [ ] **Validare premisa "utilizare mobil reala"** — inainte de orice extindere responsive viitoare,
confirma device-mix-ul (analytics/cerere user). Daca ~95% desktop, nu mai investi in cardificare
mobil. (CEO F1, high — premisa nedovedita acum.)
## Din /plan-ceo-review PRD 5.15 (2026-06-28)
- [ ] **Validare premisa "utilizare mobil reala" (reluare F1 din 5.13)** — partea slim/compact a lui
5.15 presupune utilizare reala pe mobil. Inainte de orice rafinare responsive viitoare, confirma
device-mix-ul (analytics / cerere user). Daca ~95% desktop, nu mai investi in cardificare mobil.
(CEO, high — premisa nedovedita.)
- [ ] **Deduparea/etichetarea temelor grafit~dark si hartie~light** — 5.15 adauga 4 teme peste cele 3
existente (7 + Auto). grafit e ~ identic cu dark, hartie ~ identic cu light. Daca selectorul devine
confuz sau matricea de test apasa, dedupica sau eticheteaza-le clar. (CEO, low — simplificare optionala.)
- [ ] **US-009/US-010 ca PRD separat daca propagarea design e urgenta** — salvarea mapare-din-chip si
bulk-fix sunt adiacente FUNCTIONALE (acceptate via SELECTIVE EXPANSION), dincolo de obiectivul pur de
propagare design. Daca vrei sa livrezi designul rapid, pot fi scoase intr-un PRD propriu. (CEO, low.)
## Din raport comparatie mockup 5.16 (2026-06-29)
> Restul task-urilor din `docs/raport-comparatie-mockup-5.16.md` au fost livrate (T-1..T-9).
> Cele de mai jos raman explicit in coada la cererea userului.
- [ ] **Stare de eroare HTMX la incarcarea listei (D-4)** — cand `/_fragments/submissions`
da 500 sau pica reteaua, `#submissions-wrap` ramane blocat pe spinner ("se incarca…") fara
mesaj. De adaugat un partial de eroare / `hx-on::response-error` cu "nu s-a putut incarca,
reincearca". Robustete pre-existenta (nu introdusa de 5.16), impact functional real —
**candidatul cu cea mai mare valoare** din lista. (Design D-4, medium.)
- [ ] **Retokenizare px completa in template-uri**`_submissions.html` / `_preview_*` folosesc
literali `font-size:13px/12px/11px` in loc de token-urile `--fs-*`. 5.16 a corectat doar
instanta sub-12px (incalca pragul PRD). Restul ramane debt: schimbarea in masa (13px→`--fs-sm`
=13.5px) misca layout-ul, deci necesita o baza de regresie vizuala inainte. (Eng, bounded —
amanat ca scope creep fara baza AC.)
- [ ] **Diacritice in textul vizibil pentru user** — mockup-urile folosesc diacritice complete
("Observații", "Salvează", "Adaugă"); aplicatia le omite in majoritatea label-urilor. Fontul
le randeaza corect (US-001 confirmat). De aplicat pe label-uri/butoane/titluri, pastrand
cod/comentariile fara diacritice. Decizie initiala (poarta de gust T3): nu se aplica acum —
reintrodus in coada la cererea userului (2026-06-29) ca finisaj viitor. (Transversal, low.)