From 828577b5385921ffc627fdc80514dfc0d70af6fe Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Tue, 29 Sep 2026 11:29:40 +0300 Subject: [PATCH] docs: sterge documente de lucru neactuale (handoff, patch, rapoarte, qa_factura) Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01EvTWjHyBjoBXT43RFSZN4b --- docs/PORNIRE.md | 101 ------ docs/diff_cont_discount_667_709.md | 227 ------------- docs/erori_deschise.md | 12 - docs/function_hooks_verificare.md | 193 ----------- docs/handoff_cont_discount_667_709.md | 276 ---------------- docs/handoff_id_set_skilluri.md | 52 --- docs/handoff_idempotenta_id_set.md | 71 ---- docs/handoff_inject.md | 57 ---- docs/handoff_update_romfast.md | 341 -------------------- docs/hooks_functii_context.md | 173 ---------- docs/patch_curs_bnr_arhiva.diff | 167 ---------- docs/patch_curs_bnr_arhiva.md | 368 --------------------- docs/plan_qa_factura_aviz.md | 133 -------- docs/progres_qa_factura.md | 99 ------ docs/qa_factura_harta.md | 161 ---------- docs/qa_factura_hooks_ref.md | 393 ----------------------- docs/qa_factura_unelte.md | 191 ----------- docs/raport_curs_bnr_politici_preturi.md | 230 ------------- docs/raport_doc.md | 9 - docs/raport_src.md | 350 -------------------- docs/s0_context_hook.md | 100 ------ docs/sessionstart_ref.md | 330 ------------------- docs/test_curs_bnr_headless.md | 170 ---------- docs/vm304_acces.md | 102 ------ docs/writeback_curs_bnr.md | 95 ------ 25 files changed, 4401 deletions(-) delete mode 100644 docs/PORNIRE.md delete mode 100644 docs/diff_cont_discount_667_709.md delete mode 100644 docs/erori_deschise.md delete mode 100644 docs/function_hooks_verificare.md delete mode 100644 docs/handoff_cont_discount_667_709.md delete mode 100644 docs/handoff_id_set_skilluri.md delete mode 100644 docs/handoff_idempotenta_id_set.md delete mode 100644 docs/handoff_inject.md delete mode 100644 docs/handoff_update_romfast.md delete mode 100644 docs/hooks_functii_context.md delete mode 100644 docs/patch_curs_bnr_arhiva.diff delete mode 100644 docs/patch_curs_bnr_arhiva.md delete mode 100644 docs/plan_qa_factura_aviz.md delete mode 100644 docs/progres_qa_factura.md delete mode 100644 docs/qa_factura_harta.md delete mode 100644 docs/qa_factura_hooks_ref.md delete mode 100644 docs/qa_factura_unelte.md delete mode 100644 docs/raport_curs_bnr_politici_preturi.md delete mode 100644 docs/raport_doc.md delete mode 100644 docs/raport_src.md delete mode 100644 docs/s0_context_hook.md delete mode 100644 docs/sessionstart_ref.md delete mode 100644 docs/test_curs_bnr_headless.md delete mode 100644 docs/vm304_acces.md delete mode 100644 docs/writeback_curs_bnr.md diff --git a/docs/PORNIRE.md b/docs/PORNIRE.md deleted file mode 100644 index 60aaad9..0000000 --- a/docs/PORNIRE.md +++ /dev/null @@ -1,101 +0,0 @@ -# Pornire pe VM 304 - QA factura/aviz - -Pachet pregatit 17.09.2026 de sesiunea de pe masina principala. Contine tot ce ii trebuie unei -sesiuni Claude Code noi ca sa continue de la S1, fara sa refaca analiza. - -## Pasul 1 - copiaza fisierele - -Din acest pachet, in copia de lucru de pe VM (verifica intai care e calea reala - documentatia -spune `D:\roa\`, planul presupune `D:\ROA\ROAFACTURARE`; daca difera, calea reala castiga): - -| Din pachet | Unde pe VM | -|---|---| -| `docs\*.md` (8 fisiere) | `\docs\` | -| `utile\context_watch.ps1` | peste `\COMUN\utile\context_watch.ps1` | - -Daca pe VM nu exista checkout ROAGEST, pune `context_watch.ps1` oriunde si ajusteaza calea din -settings.json la pasul 2. - -## Pasul 2 - hook-urile (optional, dar recomandat) - -In `%USERPROFILE%\.claude\settings.json` de pe VM, adauga: - -```json -"env": { - "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "70" -}, -"hooks": { - "SubagentStop": [ - { "hooks": [ { "type": "command", - "command": "powershell -NoProfile -ExecutionPolicy Bypass -File \\context_watch.ps1 -Subagent -Json" } ] } - ] -} -``` - -Daca `settings.json` are deja `env` sau `hooks`, se completeaza, nu se inlocuieste. -Verifica dupa editare ca fisierul e JSON valid. - -Ce face: la fiecare subagent care se termina, masoara contextul ACELUI subagent (citind -`agent_transcript_path` din inputul hook-ului) si avertizeaza orchestratorul la 150k / 200k. -Tace sub prag si tace la `stop_hook_active=true`, ca sa nu intre in bucla. - -## Pasul 3 - verifica mediul inainte de orice - -Rulare rapida, inainte sa incepi lucrul: - -```powershell -Test-Path 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -Test-Path '\COMUN\utile\Teste\vfp_ui_harness.ps1' -Test-Path '\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg' -Test-Path 'D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1' -``` - -Daca vreunul lipseste, **spune-i lui Marius inainte sa incepi** - planul presupune ca exista. -Conexiunea Oracle se probeaza cu: -`DO test_init_env_auto_roafacturare WITH 'CENTRAL','MARIUSM_AUTO','ROMFASTSOFT'` - -## Pasul 4 - promptul de pornire - -Da-i sesiunii noi exact textul asta: - ---- - -Continua planul din `docs\plan_qa_factura_aviz.md`. Starea curenta e in -`docs\progres_qa_factura.md` - citeste-le pe amandoua inainte de orice. - -S0 e terminat (prototipul de context/handoff). Urmeaza **S1: baseline QA**, si e primul story -care se face pe masina asta, cu UI vizibil. - -Inainte sa incepi, ruleaza verificarile de mediu din `PORNIRE.md` pasul 3 si spune-mi daca ceva -lipseste. - -Reguli care se aplica de la primul pas, nu dupa ce acumulezi context: -- Orice investigatie, editare, rulare de teste se deleaga unui subagent. Tu orchestrezi. -- Nu atinge `combosql` din `COMUN\clase\_cb_base.vc2` - e clasa de baza a tuturor produselor ROA. - Comportamentul nou de cautare se suprascrie in `combosql_cautare` din `ofacturare.vc2`. -- `.vc2` se editeaza cu script Python binar, niciodata `sed -i` (sterge CRLF-urile) si niciodata - Edit pe linii cu octeti >0x7F (diacriticele sunt cp1250, nu cp1252). -- Write-back doar `txt2vcx.ps1 -ProjectRoot `. Fara `-ProjectRoot` scrie - in alt produs. -- Dupa fiecare write-back: `MODIFY CLASS` + captura, si inchide designerul inainte de urmatorul. -- Commit dupa fiecare story, pe branch de lucru, fara push. Mandatul e dat: nu cere aprobare per - story. Exceptie: mockup-ul de la S4 se arata lui Marius inainte de implementare. -- Actualizeaza `docs\progres_qa_factura.md` dupa FIECARE story, nu la final. -- La ~250k context: opreste lucrul, scrie handoff pe disc, preda. „Mai am putin" nu e motiv de - amanare. - -S1 nu modifica niciun cod. Produce doar dovada vizuala si scenariile, in -`docs\qa_factura_baseline.md` + capturi. - ---- - -## Ce sa NU refaca sesiunea noua - -Analiza e platita deja, e in `docs\qa_factura_harta.md` (harta de cod, cu fisier:linie), -`docs\qa_factura_unelte.md` (harness UI, headless, Oracle, hook-uri) si -`docs\qa_factura_hooks_ref.md` (referinta de hook-uri). Se citesc, nu se refac. - -Doua lucruri stabilite si neredeschise: -- Pragul de 3 caractere la cautare = proprietatea `ncharcountbegin=2`, nu logica. -- Duplicatele de articol vin din Oracle (`pack_facturare.cursor_preturi`), nu din VFP. S3 e - blocat pana se citeste corpul pachetului din `ALL_SOURCE` pe MARIUSM_AUTO. diff --git a/docs/diff_cont_discount_667_709.md b/docs/diff_cont_discount_667_709.md deleted file mode 100644 index 3787e34..0000000 --- a/docs/diff_cont_discount_667_709.md +++ /dev/null @@ -1,227 +0,0 @@ -# Diff - conturi 667/709 + analitice pe articol (COMUN) - -Data: 2026-09-17. Fisiere SVN de comis: `programe/ofacturare_comun.prg`, `clase/onom_articole.vcx` + `.vct` (regenerate din `.vc2` prin txt2vcx; write-back verificat byte-identic CRLF-normalizat). - -```diff -diff --git a/clase/onom_articole.vc2 b/clase/onom_articole.vc2 -index 613f562..a263fd3 100644 ---- a/clase/onom_articole.vc2 -+++ b/clase/onom_articole.vc2 -@@ -712,7 +712,9 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" - *< OBJECTDATA: ObjPath="_pageframe1.Page3.Cb_tx_proc_tvav" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="_pageframe1.Page3.Cb_tx_venit" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scd" UniqueID="" Timestamp="" /> -+ *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scd.Text1" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scc" UniqueID="" Timestamp="" /> -+ *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scc.Text1" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_cont_dedus" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="_pageframe1.Page3.Lb_info_conturi" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="Cus_odata_parteneri_articole_coduri" UniqueID="" Timestamp="" /> -@@ -1586,6 +1588,18 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" - Lb_simplu1.Name = "Lb_simplu1" - *< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" /> - -+ ADD OBJECT '_pageframe1.Page3.Clb_tx_scc.Text1' AS textbox WITH ; -+ Format = "!k", ; -+ Height = 23, ; -+ Left = 302, ; -+ MaxLength = 4, ; -+ Name = "Text1", ; -+ TabIndex = 2, ; -+ ToolTipText = "Cont analitic (optional)", ; -+ Top = 3, ; -+ Width = 74 -+ *< END OBJECT: BaseClass="textbox" /> -+ - ADD OBJECT '_pageframe1.Page3.Clb_tx_scd' AS clb_tx_simplu WITH ; - Height = 29, ; - Left = 9, ; -@@ -1604,6 +1618,18 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" - Lb_simplu1.Name = "Lb_simplu1" - *< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" /> - -+ ADD OBJECT '_pageframe1.Page3.Clb_tx_scd.Text1' AS textbox WITH ; -+ Format = "!k", ; -+ Height = 23, ; -+ Left = 302, ; -+ MaxLength = 4, ; -+ Name = "Text1", ; -+ TabIndex = 2, ; -+ ToolTipText = "Cont analitic (optional)", ; -+ Top = 3, ; -+ Width = 74 -+ *< END OBJECT: BaseClass="textbox" /> -+ - ADD OBJECT '_pageframe1.Page3.Lb_info_conturi' AS _label WITH ; - Caption = "Necompletate: debit 4111, credit contul de venit al articolului", ; - Left = 9, ; -@@ -1934,6 +1960,8 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx" - This._pageframe1.Page3.Clb_tx_pret_ctva.Text_simplu1.ControlSource = "Thisform.oPretNom.nPretCtva" - This._pageframe1.Page3.Clb_tx_scd.Text_simplu1.ControlSource = "Thisform.oPretNom.cScd" - This._pageframe1.Page3.Clb_tx_scc.Text_simplu1.ControlSource = "Thisform.oPretNom.cScc" -+ This._pageframe1.Page3.Clb_tx_scd.Text1.ControlSource = "Thisform.oPretNom.cAscd" -+ This._pageframe1.Page3.Clb_tx_scc.Text1.ControlSource = "Thisform.oPretNom.cAscc" - This._pageframe1.Page3.Clb_tx_cont_dedus.Text_simplu1.ControlSource = "Thisform.oPretNom.cContDedus" - If Used('crsvenchelt') - Use In crsvenchelt -diff --git a/programe/ofacturare_comun.prg b/programe/ofacturare_comun.prg -index 7b6b46b..efd2002 100644 ---- a/programe/ofacturare_comun.prg -+++ b/programe/ofacturare_comun.prg -@@ -74,6 +74,10 @@ - *!* marius.mutu - *!* + verifica_cont_venit_linie - verificare prietenoasa a contului de venit rezolvat pentru o linie - *!* de factura, la adaugarea articolului -+*!* 17.09.2026 -+*!* agent -+*!* cus_pret_nomenclator: conturi analitice (cAscd/cAscc) in nota de vanzare a articolului; -+*!* apelul RPC devine pack_preturi.gaseste_creeaza_nota_vanzare (overload 6 arg cu analitice) - - *************************************************************************************************************** - **** Clase: -@@ -2375,6 +2379,8 @@ Define Class cus_pret_nomenclator As Custom - nIdNota = .NULL. - cScd = [] - cScc = [] -+ cAscd = [] -+ cAscc = [] - cContDedus = [] - cEroare = [] - -@@ -2410,6 +2416,8 @@ Define Class cus_pret_nomenclator As Custom - This.nIdNota = .NULL. - This.cScd = [] - This.cScc = [] -+ This.cAscd = [] -+ This.cAscc = [] - This.cContDedus = [] - If This.asigura_politica() <= 0 - Return .F. -@@ -2450,7 +2458,7 @@ Define Class cus_pret_nomenclator As Custom - Use In crspolart - Endif - If !Isnull(This.nIdNota) -- lcSql = [select n.scd, n.scc from crm_note_vanzari v, note_contabile n ] + ; -+ lcSql = [select n.scd, n.ascd, n.scc, n.ascc from crm_note_vanzari v, note_contabile n ] + ; - [where v.id_nota = ] + Alltrim(Str(This.nIdNota)) + [ and n.id_set = v.id_set] - If Used('crsnotapol') - Use In crsnotapol -@@ -2459,6 +2467,8 @@ Define Class cus_pret_nomenclator As Custom - If lnSucces >= 0 And Reccount('crsnotapol') > 0 - This.cScd = Alltrim(Nvl(crsnotapol.scd,[])) - This.cScc = Alltrim(Nvl(crsnotapol.scc,[])) -+ This.cAscd = Alltrim(Nvl(crsnotapol.ascd,[])) -+ This.cAscc = Alltrim(Nvl(crsnotapol.ascc,[])) - Endif - If Used('crsnotapol') - Use In crsnotapol -@@ -2482,11 +2492,20 @@ Define Class cus_pret_nomenclator As Custom - * valideaza conturile si pretul curente; mesaj + .F. la refuz - Procedure valideaza - This.cEroare = [] -- If (!Empty(This.cScd) And Empty(This.cScc)) Or (Empty(This.cScd) And !Empty(This.cScc)) -- This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] -+ If !Empty(This.cAscd) And Empty(This.cScd) -+ This.cEroare = [Contul analitic debitor nu poate fi completat fara contul sintetic debitor.] - Else -- If This.nPretFtva < 0 Or This.nPretCtva < 0 -- This.cEroare = [Pretul nu poate fi negativ.] -+ If !Empty(This.cAscc) And Empty(This.cScc) -+ This.cEroare = [Contul analitic creditor nu poate fi completat fara contul sintetic creditor.] -+ Endif -+ Endif -+ If Empty(This.cEroare) -+ If (!Empty(This.cScd) And Empty(This.cScc)) Or (Empty(This.cScd) And !Empty(This.cScc)) -+ This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] -+ Else -+ If This.nPretFtva < 0 Or This.nPretCtva < 0 -+ This.cEroare = [Pretul nu poate fi negativ.] -+ Endif - Endif - Endif - If !Empty(This.cEroare) -@@ -2505,14 +2524,16 @@ Define Class cus_pret_nomenclator As Custom - Return .F. - Endif - If !Empty(This.cScd) And !Empty(This.cScc) -- Private pcScd, pcScc, pnIdUtil -+ Private pcScd, pcScc, pcAscd, pcAscc, pnIdUtil - pcScd = This.cScd - pcScc = This.cScc -+ pcAscd = This.cAscd -+ pcAscc = This.cAscc - pnIdUtil = gnIdUtil - pnIdNota = 0 -- lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;] -+ lcSql = [begin pack_preturi.gaseste_creeaza_nota_vanzare(?pcScd,?pcAscd,?pcScc,?pcAscc,?pnIdUtil,?@pnIdNota); end;] - lnSucces = goExecutor.oExecute(lcSql) -- Release pcScd, pcScc, pnIdUtil -+ Release pcScd, pcScc, pcAscd, pcAscc, pnIdUtil - If lnSucces < 0 - AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") - Release pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota -@@ -2555,7 +2576,9 @@ Define Class cus_pret_nomenclator As Custom - Local lcSql, lnSucces - This.cScd = [] - This.cScc = [] -- lcSql = [select n.scd, n.scc from crm_politici_preturi p, crm_note_vanzari v, note_contabile n ] + ; -+ This.cAscd = [] -+ This.cAscc = [] -+ lcSql = [select n.scd, n.ascd, n.scc, n.ascc from crm_politici_preturi p, crm_note_vanzari v, note_contabile n ] + ; - [where p.id_pol = ] + Alltrim(Str(tnIdPol)) + [ and v.id_nota = p.id_nota and n.id_set = v.id_set] - If Used('crsnotapolstoc') - Use In crsnotapolstoc -@@ -2564,6 +2587,8 @@ Define Class cus_pret_nomenclator As Custom - If lnSucces >= 0 And Reccount('crsnotapolstoc') > 0 - This.cScd = Alltrim(Nvl(crsnotapolstoc.scd,[])) - This.cScc = Alltrim(Nvl(crsnotapolstoc.scc,[])) -+ This.cAscd = Alltrim(Nvl(crsnotapolstoc.ascd,[])) -+ This.cAscc = Alltrim(Nvl(crsnotapolstoc.ascc,[])) - Endif - If Used('crsnotapolstoc') - Use In crsnotapolstoc -@@ -2573,8 +2598,10 @@ Define Class cus_pret_nomenclator As Custom - - * valideaza (ambele conturi sau niciunul) si scrie nota implicita a politicii date - Procedure salveaza_nota_politica -- Lparameters tnIdPol, tcScd, tcScc -+ Lparameters tnIdPol, tcScd, tcScc, tcAscd, tcAscc - Local lcSql, lnSucces -+ tcAscd = Iif(Type('tcAscd')='C', tcAscd, []) -+ tcAscc = Iif(Type('tcAscc')='C', tcAscc, []) - If (!Empty(tcScd) And Empty(tcScc)) Or (Empty(tcScd) And !Empty(tcScc)) - This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] - AMESSAGEBOX(This.cEroare,0+48,"Atentie") -@@ -2583,16 +2610,18 @@ Define Class cus_pret_nomenclator As Custom - If Empty(tcScd) And Empty(tcScc) - Return .T. - Endif -- Private pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol -+ Private pcScd, pcScc, pcAscd, pcAscc, pnIdUtil, pnIdNota, pnIdPol - pcScd = tcScd - pcScc = tcScc -+ pcAscd = tcAscd -+ pcAscc = tcAscc - pnIdUtil = gnIdUtil - pnIdNota = 0 -- lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;] -+ lcSql = [begin pack_preturi.gaseste_creeaza_nota_vanzare(?pcScd,?pcAscd,?pcScc,?pcAscc,?pnIdUtil,?@pnIdNota); end;] - lnSucces = goExecutor.oExecute(lcSql) - If lnSucces < 0 - AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") -- Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol -+ Release pcScd, pcScc, pcAscd, pcAscc, pnIdUtil, pnIdNota, pnIdPol - Return .F. - Endif - pnIdPol = tnIdPol -@@ -2601,7 +2630,7 @@ Define Class cus_pret_nomenclator As Custom - If lnSucces < 0 - AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") - Endif -- Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol -+ Release pcScd, pcScc, pcAscd, pcAscc, pnIdUtil, pnIdNota, pnIdPol - Return (lnSucces >= 0) - Endproc && salveaza_nota_politica - Enddefine -``` - diff --git a/docs/erori_deschise.md b/docs/erori_deschise.md deleted file mode 100644 index 13b01f9..0000000 --- a/docs/erori_deschise.md +++ /dev/null @@ -1,12 +0,0 @@ -# Erori deschise — formular facturare unificat - -Erori observate la rulare, neinvestigate inca. Se sterge intrarea cand e reparata. - -## 1. `Alias 'CRSGESTIUNE' is not found.` la parasirea combo-ului de gestiune - -- **Unde:** `FRM_FACTURARE_ARTICOLE2.GRD_FACTURA.CGESTIUNE.CCBOGESTIUNE.LOSTFOCUS`, linia 5 -- **Linia:** `REPLACE nume_gestiune WITH crsGestiune.nume_gestiune, id_gestiune WITH crsGestiune.id_gestiune IN crsFactura` -- **Mediu:** MARIUSM_AUTO, 09.09.2026 -- **De verificat:** cine creeaza `crsGestiune` si pe ce cale de cod ajunge `LostFocus` sa ruleze - inainte (sau dupa inchiderea) cursorului — probabil combo-ul isi pierde focusul intr-un context - in care cursorul nu a fost creat sau a fost deja inchis. diff --git a/docs/function_hooks_verificare.md b/docs/function_hooks_verificare.md deleted file mode 100644 index 8e8e182..0000000 --- a/docs/function_hooks_verificare.md +++ /dev/null @@ -1,193 +0,0 @@ -# Verificare "function hooks" — Claude Code 2.1.274 (nativ, win32-x64) - -Sursa de verificat: https://claudefa.st/blog/tools/hooks/function-hooks (blog tert, neoficial). -Metoda: (1) incercare de rulare reala `/plugin-types`; (2) cautare de siruri si context in -binarul nativ instalat, `C:\Users\mmari\.local\bin\claude.exe` (233691808 octeti, Bun-compiled, -comitul `1efcc1361e64`). Fiecare constatare de mai jos e marcata cu sursa ei. - -## 1. Rularea comenzii cerute - -``` -CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude -p "/plugin-types ./types" -``` - -Rezultat: **nu s-a generat niciun fisier**. Raspunsul modelului a fost text conversational -("Ready — no task given yet." / la reincercare cu `--output-format json`: `"I'm ready. What -would you like me to work on?"`). Niciun folder `types/` sau `.claude/types/` nu a aparut in -scratchpad dupa rulare (verificat cu `ls`). - -**Cauza identificata, nu specifica function hooks**: am testat control cu `claude -p "/help"` -(comanda locala cea mai de baza din tot CLI-ul, intotdeauna inregistrata, fara nicio poarta de -feature-flag). A esuat identic — modelul a primit "/help" ca text mangled si a raspuns -conversational, in loc sa afiseze ajutorul. **Concluzie: invocarea `claude -p ""` din acest -mediu nu ruteaza deloc prin dispecerul de comenzi locale ("slash commands")** — cererea merge -direct la model ca prompt text. Din `--debug-file`, header-ul de atribuire arata -`cc_entrypoint=sdk-cli`, adica sesiunea porneste prin calea SDK, nu prin REPL-ul interactiv complet; -acolo comenzile locale par sa nu fie interceptate. Deci esecul lui `/plugin-types` **nu e dovada -ca function hooks sunt dezactivate** — e o limitare a modului de invocare folosit aici, valabila -si pentru comenzi complet neutre ca `/help`. N-am putut testa varianta interactiva (fara TTY in -acest mediu). - -`claude --help` si `claude plugin --help` (rulate separat, capturate integral) **nu listeaza** -nicio comanda `plugin-types` la nivel de CLI top-level — motivul e ca `/plugin-types` e o comanda -*in-sesiune* ("slash command"), nu o subcomanda a executabilului `claude`, deci absenta ei din -`--help` e normala si nu spune nimic despre activare. - -## 2. Ce exista REAL in binar (cautare de siruri, cu offset de octet verificabil) - -Nu s-au generat `.d.ts`, deci n-am putut citi declaratii TypeScript complete ca "dovada -canonica" ceruta in sarcina. In schimb, am gasit in binar cod sursa minificat (nu doar siruri -izolate) care confirma mecanismul de facto. Tot ce urmeaza e citat verbatim din binar, cu offset. - -### 2a. Flag-ul si poarta lui reala - -La offset ~103270720 (grep -a -b), blocul de cod al flag-ului: - -``` -var kYe="tengu_plugin_hooks_modules"; -var Azt=()=>!1; -var AFe=()=>a.CLAUDE_CODE_ENABLE_FUNCTION_HOOKS??P(kYe,Azt()); -var h8=()=>AFe()&&!qb()&&!Br("hooks")&&!zm(); -``` - -Interpretare directa din cod: -- flag-ul GrowthBook real se numeste **`tengu_plugin_hooks_modules`**, default **oprit** (`Azt=()=>!1`). -- `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` e o suprascriere locala peste acel flag (`??`) — confirma - exact ce zice blogul despre numele variabilei de mediu. -- **dar** poarta finala folosita in productie, `h8()`, cere si `!qb() && !Br("hooks") && !zm()` - — trei conditii suplimentare. Numele acestor functii sunt minificate si reciclate in zeci de - module din bundle (acelasi nume `qb`/`Br`/`zm` apare cu corpuri complet diferite in alte - scope-uri), deci **nu pot atribui cu certitudine ce verifica exact aici** fara deminificare - completa — onest: aceasta e limita cercetarii, nu o concluzie. -- Alaturi, la acelasi offset, un tabel de atribuire a sursei flag-ului pentru afisare in UI: - `{override:"from a local override", payload:"from GrowthBook (this session's payload)", - disk:"from GrowthBook (the disk cache of an earlier session)", disabled:"from the default - (GrowthBook is off ...)"}` — confirma ca e un flag GrowthBook cu override local, exact - mecanismul descris de blog. - -### 2b. Comanda `/plugin-types` — confirmata REAL, dar NEgatata de flag - -La offset 203438732, definitia completa a comenzii (citat verbatim): - -``` -var mer=Object.freeze({type:"local",name:"plugin-types", - description:"Write claude-code.d.ts, claude-code-plugins.d.ts and claude-code-mcp.d.ts: - the plugin API's TypeScript declarations, the enabled plugins' type contracts and the - inputs of the connected MCP tools, for typing a hooks module against this session", - argumentHint:"[dir]", supportsNonInteractive:!0, - load:()=>import("B:/~BUN/root/chunk-0rpsm23r.js")}); -``` - -Important: **acest obiect n-are nicio conditie `isEnabled`/gate legata de `h8()` sau de -flag** — e inregistrata neconditionat. Descrierea confirma explicit sintagma "hooks module" -din blog: comanda exista ca sa tipizeze "a hooks module against this session". Deci comanda in -sine e reala si documentata intern, indiferent de starea flag-ului; problema empirica de mai -sus (sectiunea 1) e doar despre modul de invocare `-p` din acest mediu. - -### 2c. Lista REALA de evenimente si API-uri ("scan manifest"), gasita ca date, nu ca documentatie - -La offset 223160560 exista un manifest static de tip "scan" folosit (aparent) pentru analiza -statica / sandboxing a unui modul de plugin, cu lista completa si explicita: - -```js -scan: { - hooks: ["session.start","ui.render","command.run","ui.close","ui.focus","ui.scroll", - "tool.call","prompt.submit"], - calls: ["clock.after","clock.every","clock.now","command.register","fs.list","fs.read", - "fs.stat","process.run","session.id","session.messages","store.get","store.set", - "telemetry.log","telemetry.mark","ui.close","ui.invalidate","ui.log","ui.open", - "ui.resolve","ui.status"] -} -``` - -Aceasta e cea mai tare dovada gasita — e o **lista de date**, nu un string de proza, deci -foarte probabil chiar suprafata reala (sau foarte apropiata) a API-ului de hooks module: - -- **evenimente de hook confirmate**: `session.start`, `ui.render`, `command.run`, `ui.close`, - `ui.focus`, `ui.scroll`, `tool.call`, `prompt.submit` (8 la numar). -- **`turn.complete` si `turn.start` NU sunt in lista de evenimente de hook**, desi cele doua - siruri exista in alta parte a binarului (24, respectiv 68 aparitii) — apartin mecanismului - intern de motor ("engine turn 1 start/end", vazut si in log-ul de debug la rularea reala), - nu suprafetei de hooks expuse pluginurilor. -- **`prompt.submit` e confirmat**, si separat, la offset 206959908, exista codul intern real - care implementeaza acest hook point: un pipeline `core`/`managed` cu posibilitate de a - rescrie textul promptului (`"prompt.submit: text rewritten by a hook (...)"`) sau de a-l - bloca (`"Prompt dropped by a hook: ..."`). Semnatura exacta gasita e apelul - `.prompt.submit({submission, origin, turnId, shouldWait})` — **nu am gasit litera `$` ca - alias/receiver exact** in siruri; forma `$.prompt.submit({text})` din blog e plauzibila ca - sugar-syntax peste acest mecanism, dar nu e confirmata verbatim. -- **API-uri de tip "calls" confirmate ca namespace-uri cu metode**: `fs.read/list/stat` - (deci `$.fs` probabil e un namespace, nu o valoare simpla), `store.get/set`, - `clock.after/every/now`, `session.id/messages` — coincide cu ce cerea sarcina sa verific - (`$.session.messages()`, `$.fs`, `$.store`, `$.clock.every`), dar iar, prefixul `$.` in sine - nu apare ca sir literal langa aceste nume — e o inferenta rezonabila, nu o citare directa. - -### 2d. Tokeni / context / usage / compactare — CAUTATE EXPLICIT, NU GASITE - -Am cautat explicit `token`, `usage`, `context`, `compact` in vecinatatea manifestului de mai -sus si in restul zonei de "function hooks". **Niciunul dintre cele 20 de `calls` sau 8 `hooks` -de mai sus nu are legatura cu tokeni, context window, usage sau compactare.** Sirurile -`contextWindow` (8 aparitii) si `compact` (405 aparitii) exista din abundenta in binar, dar in -alte module (afisarea usage-ului in `--output-format json`, autocompact intern al motorului -— vazut si in logul de debug: `autocompact: tokens=[REDACTED] level=ok effectiveWindow=980000`), -**nu ca hook sau call disponibil unui modul de function hooks**. Nu exista dovada in acest -binar ca un modul de hooks ar putea citi tokenii ramasi sau starea de compactare. - -### 2e. Forma `register` si `hooks/hooks.json` - -Doua descoperiri, ambele reale, dar **doua lucruri diferite**: - -1. **`hooks.json` din binar (27 aparitii) e manifestul VECHI/existent de plugin-hooks** - (PreToolUse, SessionStart etc. — cel folosit deja de pluginul `ponytail` din acest proiect, - vazut in logul de debug: `Read manifest hooks for plugin ponytail (enabled=true): - ./hooks/claude-codex-hooks.json`). Contextul din binar confirma: sirul e `"plugin - hooks.json"`, langa mesaje despre `SKILL.md` si actualizarea regulilor de auto-mode/permisiuni - — sistemul clasic de hooks pe evenimente de tool-use, nesuprapus cu "function hooks". - -2. **Forma `register` pentru "function hooks" (modulul nou)**, gasita in doua exemple interne - reale de pluginuri deja construite cu acest mecanism: - - `tengu_quiet_dolphin` — "panoul de diff ca plugin: /diff", cu - `isAvailable:()=>At` unde `At=()=>h8()&&lu(Rr(),bt)` — **confirma ca h8() (poarta de - function hooks descrisa la 2a) chiar gateaza un plugin real deja construit**, nu doar un - flag mort. - - `tengu_tips_mod` — "spinner tips as a plugin", cu forma exacta: - ```js - var P=(e)=>({register:(o)=>{e.registerHooks(o,x())}}); - ``` - adica modulul exporta un `register(engine)` care apeleaza - `engine.registerHooks(implementareHooks, apiSuplimentar)`. E cea mai apropiata dovada - gasita de "forma exacta a functiei register", dar e exemplul unui plugin intern concret, - nu semnatura generica documentata explicit undeva ca atare. - -## VERDICT - -Se poate construi o bucla "prag context -> scrie handoff -> /clear -> reia din handoff" complet -automat, FARA interventia utilizatorului, folosind acest surface? - -**Nu, nu cu ce am vazut efectiv in acest binar.** Motive, punct cu punct: - -1. Suprafata de hooks confirmata (`session.start`, `ui.*`, `command.run`, `tool.call`, - `prompt.submit`) **nu contine niciun eveniment sau apel legat de prag de context, tokeni, - usage sau compactare** (sectiunea 2d) — deci un modul de hooks n-ar avea de unde sa afle - "am trecut de 200k tokeni" din interior. Ar trebui sa deduca asta indirect (ex. numarand - caractere din `session.messages()`), fara nicio garantie ca se potriveste cu tokenizarea - reala sau cu `autocompact` intern. -2. Nu exista niciun hook de tipul "inainte de compactare" / "sesiune se inchide" in lista — - deci nu exista un punct de agatare curat pentru "scrie handoff chiar inainte sa se piarda - contextul". -3. `/clear` (sau relansarea sesiunii) nu apare in `calls`-urile confirmate (`command.register` - exista, dar a inregistra o comanda noua nu e totuna cu a declansa `/clear` programatic din - interiorul unui hook). -4. Flag-ul e in continuare oprit implicit (`tengu_plugin_hooks_modules` default `!1`), - marcat "early access" chiar in textul din comanda `/plugin-types` insasi - ("module 'claude-code', early access: it may change between releases") — deci si daca - API-ul de mai sus ar acoperi cazul, Anthropic il trateaza explicit ca nestabil. -5. **Nu am reusit sa validam empiric nimic din surface** (n-am putut genera `.d.ts` din cauza - limitarii de mediu descrise la sectiunea 1) — tot ce e mai sus e din citirea codului - minificat, nu din declaratii TypeScript generate si citite ca atare, cum cerea procedura. - -Ce ar lipsi/ar trebui reincercat ca sa se stie sigur: rulare **interactiva** reala (TTY, nu -`-p`/SDK) cu `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`, ca sa se vada daca `/plugin-types` chiar -scrie fisierele si daca `h8()` se evalueaza `true` in acel context — asta ar da acces la -declaratiile TypeScript reale si ar inchide toate necunoscutele de mai sus (in special conditiile -`qb()`/`Br("hooks")`/`zm()` neatribuite cu certitudine). diff --git a/docs/handoff_cont_discount_667_709.md b/docs/handoff_cont_discount_667_709.md deleted file mode 100644 index 71c5e51..0000000 --- a/docs/handoff_cont_discount_667_709.md +++ /dev/null @@ -1,276 +0,0 @@ -# Handoff — conturi 667/709 + analitice pe articol (catalog articole) - -Data: 2026-09-17. Sesiune: analiza + reproducere + proiectare. **Zero cod de productie modificat.** - -## 1. Cerinta - -In facturarea din lista de preturi „catalog articole" (politica de stoc), un articol cu -`NOM_ARTICOLE.CONT = 667` (sau `709`) da eroarea „articolul nu are cont de venit". -Se cere: -- `667`/`709` considerate conturi valide (nu blocate); -- nota generata sa fie `667/709 = 4111` **cu suma negativa** (nu `4111 = ` standard); -- pe articol sa se poata completa si **conturile analitice** (`ASCD`/`ASCC`), nu doar debit/credit, - ca nota sa fie completa. - -## 2. Decizii luate (NU se redeschid) - -- **Fix = nota per-articol creata automat** (nu nota la nivel de politica, care s-ar aplica tuturor - articolelor din lista). Legatura: `CRM_POLITICI_PRET_ART.ID_NOTA`. -- **`SCC` (contul de client) vine din optiunea `RF_CONT_ART_FARA_POL`**, fallback `4111`. -- **Analiticele se salveaza in nota** (`NOTE_CONTABILE.ASCD/ASCC`), nu pe articol/politica. -- Semnul negativ **nu are nevoie de cod nou**: exista deja in `scrie_nota` (vezi §4). -- Se **adauga un overload** la `gaseste_sau_creeaza_nota_vanzare` (6 arg), ca sa nu rupa apelantii - vechi de 4 arg si sa nu fie nevoie de deploy sincronizat EXE/DB. - -## 3. Cauza (dovada pe cod) - -- Pre-check VFP la adaugarea liniei: `verifica_cont_venit_linie` - (`D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_comun.prg:842`), apelat din - `COMUN\clase\ofacturare.vc2:18737` si `:18972`. Rezolva - `nvl(case when a.id_pol=stoc and a.id_nota is null then cont_venit_articol_stoc(art) end, d.scc)`; - mesaj cand e NULL. -- Derivare fara politica: `deriva_cont_venit_fara_pol` (`ofacturare_comun.prg:815`) — pentru - `cont` 6xx intoarce `667` (dar e folosit ca SCC, directia e inversa). -- Deducere Oracle: `PACK_FACTURARE.cont_venit_articol_stoc` - (`D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_16_04_COMUN_PACK_FACTURARE.sql:17794`) - trateaza doar `7xx` (il intoarce) si `2xx/3xx` (prin `CORESP_CONT_VENCHELT`); **`6xx` → NULL**. -- Garda Oracle: FACT-033 cand `V_SCC` e NULL (`ff_2026_09_16_04_...:7896-7901`). -- Nota articolului e deja folosita la facturare: `cursor_articol` ia `D.SCD/D.SCC/D.ASCD/D.ASCC` - (`ff_2026_09_16_04_...:7545-7546, 7864-7865, 7890-7893`), iar `scrie_nota` primeste - `V_ASCD/V_ASCC`. - -## 4. Mecanism deja existent (nu se rescrie) - -- `scrie_nota`, `ff_2026_09_16_04_...:12838` si `:12879-12887`: daca - `V_SCD IN ('667','267','2678','709')` pe factura → `V_SEMN := -1` (suma negativa). -- `scrie_tva`, `ff_2026_09_16_04_...:13064-13078`: comuta pe `4111/4427` pentru aceleasi conturi. -- Componenta noua in `PACK_PRETURI` (`ff_2026_09_16_05_COMUN_PACK_PRETURI.sql`): - `gaseste_sau_creeaza_nota_vanzare` (`:1305`), `salveaza_pret_nomenclator` (`:1261`), - `asigura_politica_stoc` (`:1391`), `seteaza_nota_politica_stoc` (`:1440`). - Azi `gaseste_sau_creeaza_nota_vanzare` scrie fortat `ascd/ascc` NULL (`:1339-1340, 1387`). - -## 5. Plan de implementare (confirmat, NEINCEPUT) - -### Pas 1 — Oracle: script nou `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_17_01_COMUN_PACK_PRETURI.sql` -- overload `gaseste_creeaza_nota_vanzare(tcScd, tcAscd, tcScc, tcAscc, tnIdUtil, tnIdNota OUT)`; - cautare pe toate 4 conturile; la creare scrie `ascd/ascc` reale. -- pastreaza si signatura veche de 4 arg `(tcScd, tcScc, tnIdUtil, tnIdNota OUT)`, sub acelasi nume - scurtat (numele original de 32 caractere nu compila pe Oracle 10/11). -- procedura noua `asigura_nota_articol_disc(V_ID_ARTICOL, V_ID_UTIL)`: - `cont ∈ (667,267,2678,709)` → `gaseste_sau_creeaza_nota_vanzare(cont, ascd, client, ascc, ...)`, - `client = nvl(pack_sesiune.getoptiunefirma('RF_CONT_ART_FARA_POL'),'4111')`; - `merge into crm_politici_pret_art set id_nota=... where id_pol=pack_facturare.nid_politica_stoc - and id_articol=... and id_nota is null` (nu suprascrie nota pusa de utilizator). -- apel in `salveaza_pret_nomenclator` cand `V_ID_NOTA IS NULL AND V_SCRIE_NOTA = 1`. -- backfill idempotent pentru randurile existente din politica de stoc. -- `exec pack_migrare.UpdateVersiune('ff_2026_09_17_01_COMUN_PACK_PRETURI'); commit;` -- compatibil Oracle 10.2. Vezi skill `roa-oracle-migration`. - -### Pas 2 — VFP clasa `cus_pret_nomenclator` (`COMUN\programe\ofacturare_comun.prg`) -- clasa incepe la `:2366`; proprietati: `asigura_politica :2382`, `incarca :2400`, - `valideaza :2483`, `salveaza :2500`, `incarca_nota_politica :2553`, `salveaza_nota_politica :2575`. -- proprietati noi `cAscd`/`cAscc`; `incarca` si `incarca_nota_politica` le citesc din nota; - `valideaza` — analitic optional, dar cer sintetic daca exista analitic; `salveaza`/`salveaza_nota_politica` - le trimit in RPC. -- apeluri RPC de actualizat: `:2513` si `:2591` (`gaseste_creeaza_nota_vanzare`). -- NU se atinge `do_scrie_articole` (argumentul `cont_venit` ramane cum e, `:14279`/`:20246`). - -### Pas 3 — VFP formular `COMUN\clase\onom_articole.vc2`, pagina Vanzare (Page3) -- `Clb_tx_scd` (`:1589`, label „Cont debitor") → `ADD ...Text1` legat la `Thisform.oPretNom.cAscd`. -- `Clb_tx_scc` (`:1571`, label „Cont creditor") → `Text1` legat la `cAscc`. -- tipar de copiat: `Clb_tx_cont.Text1` (`:1104`, ControlSource `porec.acont`). -- init `oPretNom` + ControlSource-uri: `:1931-1944`. -- write-back `.vc2 -> .vcx` obligatoriu (`txt2vcx`), cp1252. Vezi skill `roa-vfp-text-edit`. - -### Pas 4 — Test headless pe `MARIUSM_AUTO` -- salveaza articol cont=667 fara acont (+ analitice), verifica `verifica_cont_venit_linie` = `[]` - si rezolvarea tip `cursor_articol` = `SCD=667/SCC=4111/ASCD/ASCC`. -- **tranzactie manuala obligatorie** (`SQLSETPROP(gnHandle,"Transactions",2)`), altfel scrierile - se commmit (vezi §7). - -## 6. Fisiere create in aceasta sesiune (probe, NU productie) - -In `D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\`: -- `probe_cont_667.prg/.fxp` + `out\probe_cont_667.log` -- `probe_cont_667b.prg/.fxp` + `out\probe_cont_667b.log` -- `probe_cont_667c.prg/.fxp` + `out\probe_cont_667c.log` -- `probe_cont_667d.prg/.fxp` + `out\probe_cont_667d.log` -- `restore_pol41.prg/.fxp` + `out\restore_pol41.log` - -Niciun fisier de productie (`.prg`/`.vc2`/`.vcx` din COMUN) nu a fost atins; niciun commit. - -## 7. Capcane de mediu platite - -- **`goExecutor`/ODBC e pe auto-commit implicit** — `UPDATE` fara - `SQLSETPROP(gnHandle,"Transactions",2)` se **commiteaza**. Am patit-o: `probe_cont_667b` a golit - `id_nota` al politicii 41; **restaurat** la `6` (`restore_pol41.log`). Orice scriere de proba: - `Transactions=2` + `ROLLBACK` la final. -- `vfp9.exe` = `C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe`. -- Precompilare izolata obligatorie inainte de rulare: - `powershell -ExecutionPolicy Bypass -File "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\_precompile.ps1" -Prg ""` - apoi `vfp9.exe -A ""` cu `WaitForExit`. `-A` porneste cu SAFETY ON → prima linie `SET SAFETY OFF`. -- Init mediu: `DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL','MARIUSM_AUTO','ROMFASTSOFT'`, apoi `gnIdUtil = 8`. -- Log-uri: `...\facturare_unificat\out\*.log`. - -## 8. Date utile din baza vie (MARIUSM_AUTO, citite 2026-09-17) - -- `OPTIUNI.ROAFACTURARE.ID_POL_PRET_STOC = 41` („STOC PRODUSE"), `id_nota=6` (nota 6 = `4111/7015`). - Exista si `id_pol=43` „STOC PRODUSE", tot `id_nota=6`. -- Nota `2` = `DISCOUNT`, `SCD=667`, `SCC=4111` (politica 7 „DISCOUNT"). -- 16 articole cu `cont=667` in politica 41, **fara nota per-articol** (nume: DISCOUNT, - VOUCHER DISCOUNT, DISCOUNT 19%, STORNARE DISCOUNT..., etc.). -- Singura nota per-articol existenta: `art=4294507172` („A1", `cont=371`) → `id_nota=7` (`4111/704`). -- `PLCONT` 2026 contine `667`, `709`, `267`, `2678`, `4111`, `704`, `707`. -- Politici fara nota: `32`, `33`, `41` (dupa restaur, 41 are din nou nota 6). - -## 9. Interzis / atentie - -- Nu `git pull` in COMUN; nu `roa_sync` pe tree murdar; commit **doar** tintit si **doar** cu - aprobarea lui Marius (skill `roa-git-svn-commit`). -- Nu edita `.vcx` direct; doar `.vc2` + `txt2vcx`. -- Nu lasa scrieri necommit-uite/auto-commit pe schema partajata `MARIUSM_AUTO`. -- Deploy: DB inainte de EXE (overload-ul vechi face ordinea toleranta, dar EXE nou + DB vechi ar - esua la apelul cu parametri noi). - -## 10. Comanda de test rapida (dupa implementare) - -``` -powershell -ExecutionPolicy Bypass -File "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\_precompile.ps1" -Prg "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\.prg" -# apoi: Start-Process vfp9.exe -ArgumentList '-A', '""' -Wait (NU '-A -T ...', nu porneste) -# citeste out\.log -``` - -## 11. STARE EXECUTIE (2026-09-17, orchestrator + subagenti) - -Pas 1-4 EXECUTATE. Zero commit, zero publicare in UPD_DATABASE, zero modificari pe schema in afara -de scriptul de migrare aplicat pe MARIUSM_AUTO. - -- **Pas 1** `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_17_01_COMUN_PACK_PRETURI.sql` (nou, - 2441 linii): overload 6 arg `gaseste_creeaza_nota_vanzare` (cauta pe toate 4 conturile, - `nvl(trim(x),'~')` pentru 10.2), procedura `asigura_nota_articol_disc` (667/267/2678/709 -> - nota `=`, doar pe rand fara id_nota), apel in - `salveaza_pret_nomenclator` cand `V_ID_NOTA IS NULL AND V_SCRIE_NOTA=1`, backfill idempotent in - politica de stoc, `UpdateVersiune('ff_2026_09_17_01_COMUN_PACK_PRETURI')`. **Aplicat pe - MARIUSM_AUTO** (sqlplus, `@`): `PACK_PRETURI` VALID, 0 erori; backfill a legat toate cele 16 - articole 667 la nota 2 (DISCOUNT 667=4111); nota 2 are in continuare un singur rand. - - **Compatibilitate Oracle 10.2 (corectie 17.09):** limita de 30 de caractere pe identificator. - In `ff_2026_09_16_05` singurul nume peste limita era `gaseste_sau_creeaza_nota_vanzare` = 32 - caractere (pica pe 10g/11g cu PLS-00114; MARIUSM_AUTO e pe o versiune care permite 128, de-aia - compilase). Redenumit in `gaseste_creeaza_nota_vanzare` = 28. `asigura_nota_articol_discount` - era 29 (legal), dar a fost scurtat preventiv la `asigura_nota_articol_disc` = 25. Verificat: - 0 identificatori >30 in tot pachetul; fara constructii 11g+ (listagg/regexp/pivot/continue/with - etc.). **Atentie la deploy:** numele vechi dispare din pachet, deci un EXE vechi care chema - `gaseste_sau_creeaza_nota_vanzare` se rupe - componenta e noua (16.09), dar DB-ul nou trebuie - livrat impreuna cu EXE-ul nou (nu mai exista toleranta la ordinea DB-inainte-de-EXE pentru acest - apel). Audit luna 2026-09: acelasi nume de 32 caractere exista si in `ff_2026_09_15_01` - (introducerea procedurii) si `ff_2026_09_16_05` - ambele corectate identic in surse; restul - scripturilor lunii sunt curate (singurele tokenuri >30 sunt numele de script din stringul - `UpdateVersiune` si un blob base64). **Atentie:** arhiva `database_20260901_20260930.zip` - exista deja (generata 2026-09-17 00:07) si contine versiunile vechi - corectia ajunge la clienti - doar dupa republicare. -- **Pas 2** `COMUN\programe\ofacturare_comun.prg` (clasa `cus_pret_nomenclator`, ~2366-2630): - proprietati `cAscd`/`cAscc`; `incarca`/`incarca_nota_politica` le citesc din nota; `valideaza` - refuza analitic fara sintetic; `salveaza` trimite RPC-ul cu 6 argumente; `salveaza_nota_politica` - primeste `tcAscd/tcAscc` optionali (apelantul din `ofacturare.vc2:24524` ramane pe 3 arg). -- **Pas 3** `COMUN\clase\onom_articole.vc2` (+ write-back `.vcx`/`.vct` cu txt2vcx): pe Page3, - `Clb_tx_scd.Text1` si `Clb_tx_scc.Text1` (MaxLength 4, Format `!k`), ControlSource - `Thisform.oPretNom.cAscd` / `cAscc` setat in Init. Round-trip `.vcx -> .vc2` identic, +2 obiecte. -- **Pas 4** trei probe E2E (toate verzi): - - `utile\Teste\facturare_unificat\probe_e2e_cont_667.prg` - salvare reala prin clasa + rezolvare - `cursor_articol` + fallback, in tranzactie manuala cu ROLLBACK: **24 PASS / 0 FAIL**. - - `probe_e2e_cont_667_ui.prg` - smoke UI pe `frm_catalog_articole_nou` Page3 (cele doua Text1 - exista si sunt legate): **10 PASS / 0 FAIL**. - - `probe_e2e_cont_667_semn.sql` - `pack_facturare.scrie_nota` cu SCD=667/ASCD=11/SCC=4111/ASCC=12 - -> `ACT_TEMP.SUMA=-84.03` (semn negativ), apoi ROLLBACK. Reziduuri verificate: 0. - - Loguri: `out\probe_e2e_cont_667.log`, `out\probe_e2e_cont_667_ui.log`. - -### Raman de facut (deliberat, NU in aceasta executie) -- Commit tintit pe `COMUN` (`ofacturare_comun.prg`, `onom_articole.vc2`) + commit script SVN - - **doar cu aprobarea lui Marius** (skill `roa-git-svn-commit`). -- Import/publicare in `UPD_DATABASE` + regenerare arhiva lunara (NU s-a rulat; aprobat de Marius - doar "corecteaza sursele"). Comanda (scrie 3 scripturi + arhiva septembrie, face backup): - ``` - powershell -ExecutionPolicy Bypass -File "D:\ROA\ROAFACTURARE\COMUN\utile\publicare_scripturi.ps1" -Luna 2026-09 - ``` - `-DryRun` a confirmat: `FF_2026_09_15_01` MODIFICAT, `FF_2026_09_16_05` MODIFICAT, - `FF_2026_09_17_01` NOU, 26 scripturi in arhiva. DB inainte de EXE. - -### Capcane noi platite -- `vfp9.exe -A -T ""` NU porneste testul (proces mut, log gol). Forma corecta: - `Start-Process vfp9.exe -ArgumentList '-A','""'` (ca in `_precompile.ps1`). -- `scrie_nota` scrie in `ACT_TEMP` (toate coloanele NOT NULL au DEFAULT 0), deci e testabil direct - din sqlplus in tranzactie, fara sa treci prin formular; nu are FK-uri. - -## 12. PREDARE catre sesiunea urmatoare (stare la 2026-09-17, ~10:30) - -### Livrabile si stare pe disc -| Ce | Cale | Stare | -|---|---|---| -| Migrare noua | `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_17_01_COMUN_PACK_PRETURI.sql` | scris + **aplicat pe MARIUSM_AUTO**; `PACK_PRETURI` VALID, 0 erori, 0 identificatori >30 | -| Migrari corectate | `...\ff_2026_09_15_01_COMUN_PACK_PRETURI.sql`, `...\ff_2026_09_16_05_COMUN_PACK_PRETURI.sql` | rename aplicat in sursa; **NU aplicate** (17_01 le inlocuieste), **NU publicate** | -| Clasa VFP | `COMUN\programe\ofacturare_comun.prg` (clasa `cus_pret_nomenclator`, ~2366-2630) | `cAscd/cAscc`, RPC 6 arg la `:2530` si `:2616`; nemodificat de altcineva | -| Formular VFP | `COMUN\clase\onom_articole.vc2` (+ `.vcx`/`.vct` regenerate cu txt2vcx) | `Clb_tx_scd.Text1` si `Clb_tx_scc.Text1` (Page3), ControlSource in Init `:1963-1964` | -| Probe E2E | `COMUN\utile\Teste\facturare_unificat\probe_e2e_cont_667.prg`, `probe_e2e_cont_667_ui.prg`, `probe_e2e_cont_667_semn.sql` | rulate: **24/24**, **10/10**, `SUMA=-84.03` | -| Backup formular | `COMUN\clase\onom_articole.vc2.pre_runda3_cont_analitic.bak` | creat de subagent, git-ignorat | - -Nume vehiculate dupa corectia Oracle 10: `pack_preturi.gaseste_creeaza_nota_vanzare` (28) si -`pack_preturi.asigura_nota_articol_disc` (25). Numele vechi (`gaseste_sau_creeaza_nota_vanzare` -= 32, `asigura_nota_articol_discount` = 29) **nu mai exista** nicaieri in cod. - -### Stare date MARIUSM_AUTO (commisa, nu de test) -- `OPTIUNI.ROAFACTURARE.ID_POL_PRET_STOC = 41`; politica 41 are `id_nota=6`; nota `2` = DISCOUNT - `667=4111`. -- 16 articole cu `cont 667/709` in politica 41 → toate au acum `id_nota=2` (backfill-ul din 17_01, - **commis** de script). Zero articole fara nota. -- Testele E2E nu au lasat reziduuri (verificat: 0 randuri `ACT_TEMP`/note noi). -- Conexiune: `sqlplus MARIUSM_AUTO/ROMFASTSOFT@ROA_CENTRAL`, `TNS_ADMIN=D:\ROA\instantclient_19_18`. - -### Ce NU s-a facut (blocat pe aprobare / decizie) -1. **Niciun commit** (nici `ROAFACTURARE`, nici `COMUN`). Tree murdar: `COMUN` are `M` pe - `clase/onom_articole.vc2` si `programe/ofacturare_comun.prg`, plus probe E2E untracked; binarul - `.vcx`/`.vct` e git-ignorat (by design). `ROAFACTURARE` are untracked doar handoff-ul. -2. **Nicio publicare**: `UPD_DATABASE` + `database_20260901_20260930.zip` (generat 2026-09-17 - 00:07) au inca versiunile vechi (nume de 32 caractere) → pe Oracle 10/11 update-ul lunii pica. - Comanda de publicare (utilizatorul a ales sa NU o rulez acum): - `powershell -ExecutionPolicy Bypass -File "D:\ROA\ROAFACTURARE\COMUN\utile\publicare_scripturi.ps1" -Luna 2026-09` - `-DryRun` dovedit: 15_01 MODIFICAT, 16_05 MODIFICAT, 17_01 NOU, 26 scripturi in arhiva. -3. **Celelalte produse nu au fost atinse.** Numele vechi traieste inca in working copy-urile COMUN - ale produselor: `ROAACNPRO, ROAAUTO, ROACONT, ROACONTRACTE, ROADEF, ROAGEST, ROAIMOB, - ROAPRETURI, ROAREGISTRATURA` (`\COMUN\programe\ofacturare_comun.prg:2513` si `:2591`). - Fiecare `\COMUN` e working copy SVN separat (`.svn` + `.git`). Propagarea se face prin - commit SVN pe COMUN + `roa_sync` in fiecare produs + **rebuild EXE**. -4. **Decizie deschisa**: wrapper cu numele vechi de 32 caractere creat conditionat doar pe - Oracle ≥12.2 (`$IF DBMS_DB_VERSION.VERSION >= 12 $THEN` + `EXECUTE IMMEDIATE`), pentru zero - breakage la clientii ≥12.2 cu EXE vechi. Neconfirmat; daca nu se doreste, ramane doar rename. - -### Ordinea recomandata pentru sesiunea urmatoare -1. Marius decide: wrapper conditionat da/nu. -2. Commit tintit pe `COMUN` (`ofacturare_comun.prg`, `onom_articole.vc2`) + commit SVN COMUN - (skill `roa-git-svn-commit`; NU `git pull` in COMUN, NU `roa_sync` pe tree murdar). -3. Publicare septembrie (`publicare_scripturi.ps1 -Luna 2026-09`) dupa aprobare. -4. Sync COMUN in celelalte produse + rebuild EXE; livrare DB + EXE **impreuna** (numele vechi a - disparut, deci EXE vechi = rupere la salvare nomenclator). - -### Comenzi de re-rulare a testelor -```powershell -# 1) precompilare izolata -powershell -ExecutionPolicy Bypass -File "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\_precompile.ps1" -Prg "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_e2e_cont_667.prg" -# 2) rulare (ATENTIE: NU `-A -T`, porneste mut) + asteapta terminarea + citeste logul -$vfp='C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -$p=Start-Process -FilePath $vfp -ArgumentList @('-A','"D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_e2e_cont_667.fxp"') -PassThru -$p.WaitForExit(240000) -Get-Content "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_e2e_cont_667.log" -# idem pentru probe_e2e_cont_667_ui.prg (log out\probe_e2e_cont_667_ui.log) -# 3) dovada semnului (Oracle, cu ROLLBACK) -sqlplus MARIUSM_AUTO/ROMFASTSOFT@ROA_CENTRAL "@D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_e2e_cont_667_semn.sql" -``` -Clasele/procedurile se incarca prin `test_init_env_auto_roafacturare.prg WITH 'CENTRAL', -'MARIUSM_AUTO','ROMFASTSOFT'` apoi `gnIdUtil=8`. Tranzactie manuala: -`SQLSETPROP(gnHandle,"Transactions",2)` + `SQLROLLBACK` la final (altfel se commiteaza). - -### Interzis -- `git pull` in COMUN; `roa_sync` pe tree murdar; commit fara aprobarea lui Marius. -- editare `.vcx` direct (doar `.vc2` + `txt2vcx`, cp1252). -- scrieri necommise sau fara rollback pe `MARIUSM_AUTO`. -- identificatori >30 caractere in orice obiect Oracle nou (10.2 = limita). diff --git a/docs/handoff_id_set_skilluri.md b/docs/handoff_id_set_skilluri.md deleted file mode 100644 index 1c14993..0000000 --- a/docs/handoff_id_set_skilluri.md +++ /dev/null @@ -1,52 +0,0 @@ -# Handoff — id_set unic + skilluri rutare (2026-09-17, ~13:30) - -Stare pentru sesiunea urmatoare. Zero lucrari ramase in stare periculoasa pe disc (doar fisiere necomise, listate mai jos). - -## 1. Livrabile terminate si comise - -| Ce | Unde | Stare | -|---|---|---| -| Migrare id_set unic | `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_17_03_COMUN_ID_SET_UNIC.sql` | SVN r18155, publicat (UPD_DATABASE id 17609 + arhiva lunara) | -| Doc SSH | `COMUN\docs\conexiuni-tunel-ssh-odbc.md` | comis de Marius (r18154) | -| Skill `roa-domeniu-rutare` | `COMUN\skills\roa-domeniu-rutare\SKILL.md` | SVN r18156 + symlink + backstop | -| Skill `roa-actualizare-doc` | `COMUN\skills\roa-actualizare-doc\SKILL.md` | SVN r18156 + symlink + backstop | -| Backstop | `COMUN\utile\backstop_skills.txt` + `ROAFACTURARE\AGENTS.md` | r18156 / r18157 | - -## 2. NEFINALIZAT / necomis - -- `COMUN\utile\roa-sql.ps1` — **NOU, necomis** (helper determinist sqlplus; parola citita din `COMUN\docs\local\oracle.md`, NU hardcodata). Trebuie `svn add` + commit + roa_sync. -- **Îmbunătățirea `roa-domeniu-rutare`** cu sectiunea "Comenzi directe" — NEÎNCEPUT. Feedback Marius: skillurile trebuie sa aiba **comenzi directe / apelari deterministe de scripturi**, nu doar pointeri. - -## 3. Feedback de urmat (de la Marius, sesiunea aceasta) - -1. **Skilluri cu comenzi directe**: adauga in `roa-domeniu-rutare` comenzile exacte (sqlplus connect dev+productie, interogari de dictionar `all_source`/`all_triggers`/`all_sequences`/`all_tab_columns`, grep in `SCRIPTURI_CLAR`), nu doar harta descriptiva. -2. **Uita-te la pluginul gstack** din Claude Code (`C:\Users\mmari\.claude\skills\gstack\`) ca sa vezi hook-ul de context: injecteaza dimensiunea contextului si se opreste/salveaza la ~250k. De implementat echivalent (eu am ajuns la 341k fara sa opresc — nerespectand regula 250k din `reguli_lucru.md` pct. 0/9). -3. **Subagenti DeepSeek Flash v4.1** pentru sarcini de executie (mai ieftini), ca in instructiunile din docs — nu am urmat instructiunea, am facut interogarile in sesiunea principala. -4. **Nu hardcoda parole** in scripturi — foloseste `COMUN\docs\local\oracle.md` (NEVERSIONAT in git). - -## 4. Comenzi de reluat (deterministe) - -```powershell -# SQL pe dev (parola din local/oracle.md, automat) -powershell -File COMUN\utile\roa-sql.ps1 -Schema MARIUSM_AUTO -Sql "select user from dual" -# SQL pe productie (alias TNS) -powershell -File COMUN\utile\roa-sql.ps1 -Con "ROMCONSTRUCT/@ROA_ROMCONSTRUCT" -Sql "..." - -# SSH ROMCONSTRUCT (cheie publica, port 22122, NU 22) -ssh -N -o BatchMode=yes -L 1521:127.0.0.1:1521 romfast@82.76.217.177 -p 22122 -# ROMFAST e intern, fara tunel: 10.0.20.36:1521 - -# commit roa-sql.ps1 (la aprobarea lui Marius) -svn add COMUN\utile\roa-sql.ps1 ; svn commit ... ; roa_sync.bat -``` - -## 5. Stiut deja (nu se reia) - -- **Spatiul ID_SET**: doua lucruri distincte — set de contare `XSETS.ID_SET = ACT.ID_SET` (25000+tip, in `tipuri_documente_facturare.md`) vs nota contabila `NOTE_CONTABILE.ID_SET = CRM_NOTE_VANZARI.ID_SET`. Generatoare: `SEQ_CRM_NOTE_ID_SET` + `SEQ_XSETS` (>=1M). Fix: un singur generator SEQ_XSETS, coloane NUMBER(6)->NUMBER(10). Vezi `roa-domeniu-rutare` + `ff_2026_09_17_03`. -- **Lantul notei vanzare**: `CRM_POLITICI_PRET_ART.ID_NOTA -> CRM_POLITICI_PRETURI.ID_NOTA -> CRM_NOTE_VANZARI.ID_NOTA`; `CRM_NOTE_VANZARI.ID_SET -> NOTE_CONTABILE.ID_SET`. -- **Coloane ID_SET**: majoritatea schemelor erau NUMBER(6) (max 999999), de-aia bump-ul 2007 a mers pe +200000. -- **Capcana**: `sterge_nota_vanzari` face `delete from note_contabile where id_set`; index NONUNIQUE -> coliziune = stergere silentioasa. - -## 6. Tuneluri/SSH — NU lasa deschise - -Toate inchise la finalul sesiunii. Re-deschiderea: comanda din pct. 4. diff --git a/docs/handoff_idempotenta_id_set.md b/docs/handoff_idempotenta_id_set.md deleted file mode 100644 index ba1c69d..0000000 --- a/docs/handoff_idempotenta_id_set.md +++ /dev/null @@ -1,71 +0,0 @@ -# Handoff — idempotenta script 03 + ColumnNeedModify (2026-09-17, ~15:00) - -Stare pentru sesiunea urmatoare. Nimic in stare periculoasa pe disc. Fisierele necomise sunt listate la pct. 4. - -## 1. Livrabile terminate - -| Ce | Unde | Stare | -|---|---|---| -| Script 03 idempotent | `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_17_03_COMUN_ID_SET_UNIC.sql` | editat in loc, PUBLICAT (UPD_DATABASE id 17609 reactualizat) | -| Script 04 nou (PACK_MIGRARE + functia ColumnNeedModify) | `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\09\ff_2026_09_17_04_COMUN_PACK_MIGRARE.sql` | nou, PUBLICAT (id 17610) | -| Arhiva lunara | `Y:\ROAUPDATE\_UPDATE\` | regenerata (30 scripturi), verificata octet cu octet | - -Ambele scripturi: ASCII (0 octeti > 127), CRLF, fara BOM, se termina cu `UpdateVersiune` + `commit;`. - -## 2. Ce face scriptul 03 (acum idempotent) - -- `alter table ... modify (id_set number(10))` era direct; acum e in `declare` cu guard: - `pack_migrare.ColumnExist(...) = 1` AND `data_type='NUMBER' AND data_precision < 10`. - Pe dev coloanele sunt deja NUMBER(10) (data_precision=10), deci guard-ul sare corect. -- Trigger-ul e `create or replace` (idempotent); renumerotarea `where id_set < 1000000` e no-op la a doua rulare. - -## 3. Ce face scriptul 04 (noua functie) - -`PACK_MIGRARE.ColumnNeedModify(tcTableName, tcColumnName, tcDataType, tnPrecision, tnScale, tcNullable)`: -intoarce 1 daca coloana NU are definitia ceruta (trebuie ALTER MODIFY), 0 altfel. Orice parametru NULL = aspectul nu se verifica. - -Pachetul complet a fost reprodus din DB-ul live (are ramura `when 'RF' THEN` din UpdateVersiune, pe care `.pck`-ul stale o pierduse) + functia noua. Baza: scriptul 2014 `ff_2014_08_18_01_COMUN_PACK_MIGRARE.sql` == DB live (verificat cu diff). - -## 4. APROBAT dar NEEXECUTAT (Marius a aprobat in sesiune) - -1. **A**: in `COMUN\skills\roa-oracle-migration\SKILL.md` — inlocuieste criteriul CRLF buguit - `($b -join ',').Contains('13,10')` (fals pozitiv: byte 113='q' + 10 => "113,10" contine "13,10") - cu regex-ul `(? -# commit COMUN: vezi skill roa-git-svn-commit (doar fisierele aprobate, apoi roa_sync.bat) -``` - -## 7. Capcane platite (NU se repeta) - -- Verificarea CRLF cu `($b -join ',').Contains('13,10')` e FALS-POZITIVA. Foloseste `(?\docs\handoff_activ.md` (sau calea data -prin `-CaleHandoff`) exista, emite pe stdout: - -```json -{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"HANDOFF RELUAT automat din (pornire: ). ...\n\n"}} -``` - -Tace (exit 0, fara iesire) daca `source` nu e in lista, sau daca fisierul nu exista — nu inventeaza, -nu creeaza nimic. Peste ~9000 de caractere, nu trunchiaza tacut: taie continutul, adauga un rand -final `[TRUNCHIAT - ... Citeste fisierul complet cu Read: ]` si il include in output. - -Parametri: `-CaleHandoff ` (optional), `-Surse ` (implicit `compact,clear,resume`). - -## Rezultatul probelor - -1. `source=startup`, fisier existent -> `exit=0`, `out=[]` (nicio iesire). Confirmat. -2. `source=compact`, fisier inexistent -> `exit=0`, `out=[]`. Confirmat. -3. `source=compact`, continut cu ghilimele duble, apostrof, diacritice (`șăâîț`) -> JSON valid, - `hookEventName=SessionStart`, iar `additionalContext` dupa `ConvertFrom-Json` contine exact - continutul original (`CONTINE ORIGINAL: True`, verificat prin `.Contains()`, nu din ochi). -4. `source=clear`, fisier de 10350 caractere -> JSON valid, `additionalContext` taiat la 9403 - caractere, se termina cu randul `[TRUNCHIAT - handoff-ul are 10350 caractere, peste limita de - 9000. Citeste fisierul complet cu Read: ]`, calea completa prezenta in text. - -Probele au rulat in `$env:TEMP\hoi_probe\p1..p4`, sterse dupa rulare. - -## Configurare settings.json (de aplicat de orchestrator) - -```json -{ - "hooks": { - "SessionStart": [ - { - "matcher": "clear,compact,resume", - "hooks": [ - { - "type": "command", - "command": "powershell -ExecutionPolicy Bypass -File D:\\ROA\\ROAGEST\\COMUN\\utile\\handoff_inject.ps1" - } - ] - } - ] - } -} -``` - -Nu am atins `C:\Users\mmari\.claude\settings.json` — cablarea ramane la orchestrator, conform -interdictiei primite. diff --git a/docs/handoff_update_romfast.md b/docs/handoff_update_romfast.md deleted file mode 100644 index 26735dd..0000000 --- a/docs/handoff_update_romfast.md +++ /dev/null @@ -1,341 +0,0 @@ -# Handoff: actualizare blocata pe ROMFAST 10.0.20.36 (16.09.2026, seara) - -Stare, nu concluzie finala. Nimic modificat pe productie: exclusiv `SELECT`-uri. - -## Ce e DOVEDIT - -1. **Nu e problema de certificat.** `ORA-29024` vine de pe ramura a doua a lui - `CONTAFIN_ORACLE.PACK_UTILS.URL2Clob`. Cod instalat, citit din `all_source`: - - linia 285: `IF lcPowerShellDownload = '1' THEN` -> ramura 1 (curl extern); - - linia 291: `llDownloaded := DownloadFileOS(tcURL, lcDir, lcFileName);` cu `lcDir := 'DMPDIR'`; - - linia 293-301: daca a mers, citeste si `RETURN`; - - linia 305: `l_clob := HTTPURITYPE.createuri(tcURL).getclob();` <- ramura 2, cade aici; - - linia 307-313: `WHEN OTHERS` -> cleanup -> `RAISE`. - Stiva reala (`PACK_UTILS` 313 si 305) se potriveste exact. Deci ORA-29024 = ramura 1 nu a produs fisierul. - -2. **Ramura 1 E activata pe ROMFAST.** `CONTAFIN_ORACLE.SERVER_INFO`: - `POWERSHELLDOWNLOAD = 1`, `POWERSHELLTIMEOUT = 30`, - `POWERSHELLPATH = C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`, - `ROAUPDATEPATH = D:\ROAUPDATE`. **Nu exista rand `CURLPATH`**, dar codul are fallback pe - `C:\Windows\System32\curl.exe` (`PACK_UTILS` body 690-692), deci absenta lui nu e fatala. - -3. **Esecul dureaza exact cat timeout-ul.** `all_scheduler_job_run_details`, `UPDATEROA_JOB`: - - 21:17:51 SUCCEEDED (error# 0) - - 22:10:36 FAILED, error# 29273 — pornire 22:10:05 => **31 secunde** - - 22:27:42 FAILED, error# 29273 — pornire 22:27:12 => **30 secunde** - `POWERSHELLTIMEOUT = 30`. Bucla de polling (`PACK_UTILS` body 709-713) a mers pana la capat si - `PACK_UTILS_FILE.FileExists` a intors fals. Fisierul **nu a aparut niciodata**, nu a aparut tarziu. - -4. **Corelatia temporala cu patch-ul de azi.** `all_objects`, owner `CONTAFIN_ORACLE`: - `PACK_UTILS` (spec+body), `PACK_UTILS_FILE` (spec+body) `last_ddl_time = 16.09 21:17:51`; - `PACK_UPDATE` (spec+body) `21:17:52`. Toate VALID. - Rularea de la 21:17:30-21:20:14 e cea care a **instalat** noul cod; descarcarea din ea s-a facut - inainte de recompilare, deci **cu codul vechi**. Toate rularile de DUPA recompilare (22:10, 22:27) - au esuat. => **noul `PACK_UTILS` nu a descarcat niciodata nimic cu succes pe ROMFAST.** - -5. **Serverul de update raspunde.** Masurat de pe statia de lucru, 16.09.2026: - `https://roa.romfast.ro/contafinupdate/roaupdate/` -> HTTP 200 in 0.127s. - `http://10.0.20.122/` -> 404 in 0.0016s de la `Microsoft-HTTPAPI/2.0` (normal, situl real e pe - portul 81 cu ruta `/contafinupdate/...`; 404 de la `http.sys` NU inseamna server picat). - -6. **Versiuni** (`SERVER_INFO.VERSIUNE_*`): majoritatea schemelor la `202609150001` (15.09); - `CONTAFIN_ORACLE` la `202609160003`, `ROMFAST` la `202609160005`. Actualizarea de azi a inceput si - s-a oprit pe drum. - -7. **`UPD_LOG` se goleste la fiecare rulare** (`last_ddl_time` 22:27:02 pe tabela si indecsi). - Singurul rand ramas: `16.09 22:34:38 ACTUALIZARE INCHEIATA MANUAL`. Nu e sursa de istoric. - -8. **`sys.ExecuteScriptOS`** (`all_source`, owner SYS, `last_ddl_time` 05.02.2026, deci **neatins azi**) - creeaza un job `exec_ps_<8hex>` de tip `executable` cu argumentele - `-ExecutionPolicy Bypass -File