docs: runda 6 - cercetari, propuneri si conventia mediului Oracle
Cercetarile si propunerile rundelor 4-6 pe editarea facturii emise. Starea rundei 6 si ce s-a stabilit intra in progres.md. Nou: docs/conventii_mediu_oracle.md - pe dev/test se lucreaza numai cu ROA_CENTRAL si schemele CONTAFIN_ORACLE si MARIUSM_AUTO; schema ACN nu se foloseste. Scripturile de pachet sunt necalificate, deci schema tinta o decide sirul de conectare, nu fisierul. roafacturare.pj2 regenerat de git_sync. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gYCNE26G1G7UoGu2ju7aS
This commit is contained in:
@@ -1603,7 +1603,7 @@ Factura" in loc de unul, si nota contabila primeste TVA-ul discountului spart pe
|
||||
|
||||
**Cele doua puncte ramase s-au inchis si ele, tot in runda 16.** Campul text optional de motiv —
|
||||
**decizia 61**: da, se adauga (`AllowanceChargeReason`, `ReasonCode` ramane `95`), cu stocare noua
|
||||
pe `VANZARI` si un control nou in formular; ramane deschisa doar asezarea lui pe rand. Retroactivi-
|
||||
pe `VANZARI` si un control nou in formular. Asezarea lui s-a inchis in runda 17 — **decizia 66**: sta in banda de totaluri, langa discount. Retroactivi-
|
||||
tatea la relistare/retrimitere — **decizia 62**: restrictia de modificare e strict `EsteInEFactura`,
|
||||
fara legatura cu nicio data; ramane insa deschis, separat, cazul relistarii (nu editarii) unei
|
||||
facturi vechi deja trimise, vezi decizia 62.
|
||||
@@ -2063,9 +2063,19 @@ deschis. Ce e de retinut aici, pentru executia lui S1:
|
||||
repartizare proportionala automata pe cote, discountul **NU cere cota de la utilizator**, deci **nu
|
||||
e nevoie de o a treia sectiune pentru cota**. Ce mai cere UI e **un camp text optional de motiv**
|
||||
(pentru `AllowanceChargeReason`), mult mai mic decat o sectiune. **Decizia 61 (runda 16) l-a
|
||||
materializat: Marius vrea campul. Decizia 64 (runda 16) a inchis si asezarea: randul se imparte
|
||||
in trei** — incasare, alte date si motivul discountului, pe acelasi rand (varianta grea, cota +
|
||||
explicatie proprii, ramane exclusa, ca mai sus).
|
||||
materializat: Marius vrea campul. Asezarea lui s-a inchis definitiv abia in runda 17 — decizia 64
|
||||
(a treia sectiune jos) a fost **rasturnata de decizia 66: motivul sta in banda de totaluri, langa
|
||||
suma pe care o explica**, iar randul de jos ramane cu **doua** sectiuni, ca la decizia 57. Varianta
|
||||
grea (cota + explicatie proprii) ramane exclusa, ca mai sus.
|
||||
|
||||
**Cele doua pagini online ale lui #13 — nu se confunda:**
|
||||
- **mockup-ul formularului** (fisier pe disc, `docs\mockup_13_formular_unificat.html`, **v9** din runda
|
||||
17, cu asezarea D si motivul discountului in banda de totaluri):
|
||||
**https://claude.ai/code/artifact/e9d73e86-7518-4f50-a998-43c49e083142**.
|
||||
Are copie pe disc, si ea e sursa de adevar; artifactul se republica din ea (`WebFetch` pe URL intai,
|
||||
apoi `Artifact` cu `url`). Decizia 33 e consumata — URL-ul e la zi.
|
||||
- **pagina cu variantele de asezare** (A/B/C/D), **fara copie pe disc**, deci artifactul **e** sursa de
|
||||
adevar:
|
||||
|
||||
Pagina cu variantele: **https://claude.ai/code/artifact/dfc70d38-856f-48fd-b6af-3da78e9da4f7**
|
||||
— **nu mai are copie pe disc** (cerinta lui Marius, runda 15: „doar online, ca sa nu mai intretii 2
|
||||
@@ -3008,7 +3018,7 @@ ambele capcane au raspuns cu dovada. Vestea buna: mecanismul de baza chiar exist
|
||||
din `do_copiaza`, `cursor_retur_document` (`GESTIONABIL = B.IN_STOC`), si `scrie_corespondente_vanzari`
|
||||
insasi.
|
||||
|
||||
**De decis de Marius (cinci puncte, niciunul blocant):**
|
||||
**INCHISE, nu de reintrebat (marcaj pus in runda 17).** Cele cinci puncte de mai jos au primit raspuns: punctul 1 (`TIP = 4`) prin **decizia 51**, restul in bloc prin **decizia 56** („da la toate"). Lista ramane ca **inventar al recomandarilor acceptate**, ca sa se stie ce s-a decis si de ce — nu ca intrebari:
|
||||
1. **`TIP = 4`** — liber azi, dar alocarea e **ireversibila in date** odata intrata in productie. De
|
||||
confirmat explicit, nu tacit.
|
||||
2. **Apel pe starea de sesiune a pachetului (`clistaid` / `nid_vanzare`) vs. procedura noua cu
|
||||
@@ -3226,8 +3236,8 @@ cincilea (48) a respins-o motivat.** Fiecare e scrisa si la locul ei, in poveste
|
||||
**cercetare TERMINATA** (sectiunea K-bis): cota era regula implicita „cota maxima de pe factura",
|
||||
explicatia e azi o constanta hardcodata (`ReasonCode="95"`, text „Discount"). **Partea de
|
||||
repartizare s-a decis — decizia 59, runda 16: proportional pe cote.** Ramane deschis doar campul
|
||||
text optional de motiv.
|
||||
*Alegerea variantei de asezare, listata aici ca a treia, s-a inchis intre timp — decizia 57.*
|
||||
text optional de motiv — **inchis si el: decizia 61** (da, se adauga), cu asezarea fixata de
|
||||
**decizia 66** (in banda de totaluri, langa discount).
|
||||
55. **Metoda de executie e obligatorie, si e scrisa in plan.** La implementare planul **se sparge pe
|
||||
stories**, fiecare story fiind o livrare de sine statatoare; **fiecare pas se testeaza**, nu doar
|
||||
capetele de etapa (S6 / S12); si **fiecare story trece prin code review dupa implementare si dupa
|
||||
@@ -3272,9 +3282,10 @@ cincilea (48) a respins-o motivat.** Fiecare e scrisa si la locul ei, in poveste
|
||||
deschis (b) de la decizia 56) **s-a terminat** — vezi sectiunea K-bis — si repartizarea s-a decis
|
||||
(**decizia 59, runda 16**: proportional pe cote, fara sa se ceara cota de la utilizator), deci a
|
||||
treia sectiune „grea" (cota + explicatie proprii) nu mai e in discutie. Ramane varianta minimala:
|
||||
**decizia 61 (runda 16) a materializat-o** — Marius vrea campul text optional de motiv — si
|
||||
**decizia 64 (runda 16) a inchis si asezarea: randul se imparte in trei**, ~440 px fiecare la
|
||||
1366 px, strans. D ramane intr-un etaj.
|
||||
**decizia 61 (runda 16) a materializat-o** — Marius vrea campul text optional de motiv. Asezarea
|
||||
lui a oscilat o data: decizia 64 il facea a treia sectiune jos, **decizia 66 (runda 17) o
|
||||
rastoarna si il muta in banda de totaluri, langa discount**. **Punctul 2 de mai sus ramane deci
|
||||
exact cum a fost aprobat: doua sectiuni jos, fiecare pe jumatate de latime.** D ramane intr-un etaj.
|
||||
|
||||
58. **Mockup-ul asezarii ramane doar online.** Formularea lui: *„nu vreau artifactul html, doar online,
|
||||
ca sa nu mai intretii 2 variante"*. `docs\mockup_13_variante_asezare_jos.html` **a fost scos din
|
||||
@@ -3380,10 +3391,11 @@ cincilea (48) a respins-o motivat.** Fiecare e scrisa si la locul ei, in poveste
|
||||
- cere **un control nou in formular** — singura bucata din reparatia discountului (K-bis /
|
||||
decizia 59) care chiar cere UI nou, restul fiind repartizare automata fara interactiune.
|
||||
|
||||
**Redeschisese, in varianta minimala, intrebarea de asezare de la decizia 57 — INCHISA acum prin
|
||||
decizia 64 (runda 16): randul de jos se imparte in trei** (~440 px fiecare la 1366 px, strans);
|
||||
varianta D ramane intr-un etaj. Paragrafele din **S1** si din **decizia 57** sunt actualizate in
|
||||
acest sens.
|
||||
**Redeschisese, in varianta minimala, intrebarea de asezare de la decizia 57. INCHISA DEFINITIV
|
||||
PRIN DECIZIA 66 (runda 17): campul sta in banda de totaluri, langa discount.** Decizia 64, care il
|
||||
facea a treia sectiune jos, **e rasturnata** — randul de jos ramane cu doua sectiuni, ca la decizia
|
||||
57. Varianta D ramane intr-un etaj. Paragrafele din **S1** si din **decizia 57** sunt actualizate
|
||||
in acest sens.
|
||||
|
||||
62. **Restrictia de modificare e „documentul sa NU fi fost trimis in eFactura" — si de aici
|
||||
retroactivitatea NU mai e o intrebare.** Formularea lui: *„singura restrictie pentru modificare
|
||||
@@ -3421,11 +3433,16 @@ cincilea (48) a respins-o motivat.** Fiecare e scrisa si la locul ei, in poveste
|
||||
**Poveste noua, proiectata: S14** — verdict complet, recomandare si punctele ramase de decis cu
|
||||
Marius acolo.
|
||||
|
||||
64. **Asezarea campului de motiv: RANDUL SE IMPARTE IN TREI.** Formularea lui: *„campul de motiv
|
||||
imparte randul in 3"*. **Inchide** ultimul punct ramas deschis din decizia 57 (varianta D de
|
||||
asezare), reluat de decizia 61: randul de jos al formularului unificat are **trei sectiuni pe
|
||||
acelasi rand** — incasare, alte date si motivul discountului — nu coboara pe rand propriu, nu
|
||||
devine D cu doua etaje. La 1366 px inseamna ~440 px de sectiune, strans, si asumat ca atare.
|
||||
64. ~~**Asezarea campului de motiv: RANDUL SE IMPARTE IN TREI.**~~ **RASTURNATA DE DECIZIA 66
|
||||
(runda 17) — NU MAI E IN VIGOARE.** Formularea de atunci: *„campul de motiv imparte randul in 3"*;
|
||||
randul de jos ar fi avut trei sectiuni (incasare, alte date, motivul discountului), ~440 px
|
||||
fiecare la 1366 px.
|
||||
|
||||
**Se pastreaza ca istorie, nu ca regula**, si merita pastrata: varianta a fost **construita in
|
||||
mockup (v9) si respinsa dupa ce Marius a vazut-o** — *„motiv discount vreau sa fie langa discount,
|
||||
nu a treia coloana"*. E argumentul cel mai bun din tot planul pentru **de ce se face mockup
|
||||
inainte de cod**: decizia luata pe descriere s-a intors la prima privire pe forma desenata.
|
||||
Ce e in vigoare: **decizia 66**, mai jos.
|
||||
|
||||
65. **Auditul (decizia 63) se afiseaza in gridul din `frm_facturi`, nu in formularul facturii.**
|
||||
Formularea lui: *„auditul presupun coloanele dataora si utilizator adaugat/modificat/sters, le
|
||||
@@ -3442,6 +3459,33 @@ cincilea (48) a respins-o motivat.** Fiecare e scrisa si la locul ei, in poveste
|
||||
**inventarul gridului din `frm_facturi`** — ce coloane de audit sunt deja acolo, ce surse au —
|
||||
si abia apoi adauga ce lipseste. Nu se presupune nici ca exista, nici ca nu.
|
||||
|
||||
### Decizia 66 (Marius, runda 17) — luata, nu de reluat. RASTOARNA DECIZIA 64.
|
||||
|
||||
66. **Motivul discountului sta LANGA DISCOUNT, in banda de totaluri — nu ca a treia sectiune jos.**
|
||||
Formularea lui: *„motiv discount vreau sa fie langa discount, nu a treia coloana"*.
|
||||
|
||||
**Anuleaza decizia 64** (randul de jos se imparte in trei). Randul de jos revine la **doua
|
||||
sectiuni colapsabile** — incasare si alte date — adica exact la ce aprobase decizia 57, punctul 2,
|
||||
inainte ca decizia 61 sa redeschida discutia. **Decizia 57 ramane intreaga; nu se mai atinge.**
|
||||
|
||||
**Ce inseamna concret, pentru S1 si S3:**
|
||||
- campul de motiv e un **control in banda de totaluri**, imediat dupa suma discountului de
|
||||
document, inainte de TVA; ia latimea ramasa pana la totalul mare, care sta la dreapta;
|
||||
- **cele doua sectiuni de jos redevin pe jumatate de latime** (~660 px la 1366 px), nu ~440 —
|
||||
argumentul „strans, asumat ca atare" din decizia 64 **cade odata cu ea**;
|
||||
- **regula de activare, adaugata de proiectare, nu ceruta explicit:** campul e activ **numai cand
|
||||
discountul de document nu e zero**. Un motiv fara discount n-are ce explica, si ar ajunge in
|
||||
`AllowanceChargeReason` pe un `AllowanceCharge` inexistent. Daca Marius vrea altfel, e o linie
|
||||
de schimbat.
|
||||
|
||||
**Consecinta de asezare, de stiut la implementare:** banda de totaluri devine plina — baza,
|
||||
discount articole, discount document (procent + suma + bifa „evidentiat"), motiv, TVA, total. La
|
||||
latimi mici **se rupe pe doua randuri** (`flex-wrap`), si asta e acceptat: alternativa ar fi
|
||||
scoaterea bifei „evidentiat" din banda, care n-a fost ceruta.
|
||||
|
||||
Restul deciziei 61 (stocare noua pe `VANZARI`, `AllowanceChargeReason`, `ReasonCode` ramane `95`)
|
||||
**e neatins** — se schimba doar locul controlului in formular.
|
||||
|
||||
#### S6 — Test pe fluxul real, formularul unificat
|
||||
Headless (`COMUN\docs\depanare_testare_vfp.md`) + UI (`COMUN\docs\testare-ui-vfp.md`), cate un caz
|
||||
pe fiecare sursa: lista de preturi, comanda, contract, aviz, retur, transfer, valuta. Comparatie
|
||||
@@ -3514,8 +3558,8 @@ luna inchisa, referentiate, sau care au urmasi (retur, factura din aviz, factura
|
||||
> `ofacturare.vc2:15741-19355`). Deci S8 il tinteste pe el, nu pe `frm_facturare_articole`. Faptul ca
|
||||
> are `do_adauga_tot` / `do_adauga_articol` proprii, cu logica divergenta (fara testul `llGestionabil`,
|
||||
> `ofacturare.vc2:17476`, `:17124`), **nu e un motiv de excludere, e exact driftul din 2017 pe care S2
|
||||
> il inchide** — cele doua se unifica, nu se aleg. Din intrebarea 7 ramane deschisa **numai** partea de
|
||||
> tipuri 48/49.
|
||||
> il inchide** — cele doua se unifica, nu se aleg. Partea de tipuri 48/49 din intrebarea 7 **s-a
|
||||
> inchis prin decizia 60**: sunt editabile. Intrebarea 7 e deci inchisa integral.
|
||||
|
||||
> **CERINTA DE EXECUTIE ADAUGATA IN RUNDA 17 — `IN_STOC` se incarca din document, nu din nomenclator.**
|
||||
> Vine din consecinta 1 a deciziei 54 (vezi S10, „Trei consecinte"), si se prinde **aici**, nu la S12.
|
||||
@@ -3604,7 +3648,7 @@ dar avea un gol nedocumentat, si el schimba forma solutiei.**
|
||||
- **Comparatia se face pe valori rotunjite la precizia de scriere** (`gnPc` / `gnPPretV` / `gnPCant`),
|
||||
nu pe valoarea binara — altfel rotunjirea singura produce diferente.
|
||||
|
||||
**De decis de Marius:**
|
||||
**INCHIS, nu de reintrebat (marcaj pus in runda 17).** Punctul de mai jos are raspuns: **decizia 52** — `do_modifica` ramane activ pentru multi-selectie, iar formularul unificat preia doar cazul cu un singur document. Se pastreaza enuntul, nu intrebarea:
|
||||
1. **Editarea multipla** — `do_modifica` de azi lucreaza pe multi-selectie, capacitate fara echivalent
|
||||
in formularul unificat. Se accepta pierderea ei la retragere, sau `do_modifica` ramane activ separat
|
||||
exact pentru cazul asta?
|
||||
@@ -3976,7 +4020,7 @@ nu-i gasise.**
|
||||
- **eFactura, `DOCUMENTE`, listarile, `VANZARI_CANTITATI` — (C)**, toate cheiate pe `ID_FACT` sau
|
||||
rescrise automat.
|
||||
|
||||
**De decis de Marius:**
|
||||
**INCHISE, nu de reintrebat (marcaj pus in runda 17).** Punctul 1 e transat de cercetarea garzilor din runda 14 (garda exista si e corecta; S7 o muta in pre-flight read-only) — ramane **limitare declarata**. Punctul 2 e rasturnat de **decizia 53**: atasamentul vechi **nu se remigreaza, se sterge**, deci premisa „factura editata ajunge cu PDF-ul vechi" nu se mai produce. Punctul 3 e inchis in runda 14, cu cerinta ca **S7 sa refuze explicit** cele doua tipuri. Se pastreaza ca inventar:
|
||||
1. **Editarea unui document care are deja retur emis pe el e azi BLOCATA, nu doar riscanta** —
|
||||
`sterge_factura` arunca `ORA-20000`. Garda e corecta (protejeaza lantul), iar **S7 planifica deja
|
||||
sa semnaleze conditia inainte de intrarea in formular**, nu ca eroare Oracle la final. Ce ramane de
|
||||
|
||||
Reference in New Issue
Block a user