-- ============================================================================ -- SCHITA (DRAFT) - Deschidere firma noua pe instalatia Oracle ROA ConPress -- Fisier NEEXECUTAT, de aprobat de Marius inainte de orice rulare. -- Schema tinta: LUDIPEDIA (confirmat de Marius; server conpress, tunel -- Bitvise conpress.tlp, alias TNS + DSN ODBC ROA_CONPRESS). -- ============================================================================ -- -- NOTA IMPORTANTA 1 - conflict de regula: -- D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md, sectiunea -- "Reguli pe productie" (linia ~152), interzice explicit pe canalul manual -- sqlplus-pe-tunel orice altceva in afara de SELECT: -- "Doar SELECT. Fara INSERT/UPDATE/DELETE/DDL, fara ALTER SESSION care -- schimba comportament persistent." -- PASUL 0 din acest fisier (verificari) respecta regula (doar SELECT). -- PASII 1-4 (INSERT firma, job schema, drepturi utilizatori) SCRIU date si -- NU respecta acea regula daca ar fi rulati pe canalul manual descris in -- document. Nu e o decizie luata aici: Marius decide canalul de executie -- (cont/canal cu drept de scriere pe ConPress, sau rularea propriu-zisa -- prin aplicatia ROASTART, care e calea normala de productie pentru -- deschidere de firma). -- -- NOTA IMPORTANTA 2 - stare fisier: -- Acesta e o SCHITA, nu un script gata de rulare. Nimeni nu s-a conectat -- la ConPress pentru a pregati acest fisier si nimeni nu l-a rulat. -- -- NOTA IMPORTANTA 3 - parametri lipsa din certificatul ONRC (LUDIPEDIA): -- certificatul de inregistrare acopera doar firma, CUI, nr. registru -- comert, sediu social, CAEN principal si data inregistrarii. Urmatorii -- parametri NU sunt in certificat si trebuie completati de Marius inainte -- de orice executie (marcati mai jos si in sectiunea de parametri cu -- "-- DE COMPLETAT"): -- 1. Date bancare: nume banca + cont (IBAN) - pot fi 1 pana la 10 perechi -- (banca1..banca10 / contb1..contb10 in FIRMEMODINSPROC). Interogarea -- ANAF publica nu intoarce IBAN (camp gol in raspuns) - ramane de -- completat de Marius. -- 2. Telefon2, telefon3, fax, email (telefonul principal a fost completat -- din ANAF, vezi NOTA IMPORTANTA 5). -- 3. Reprezentant legal / declarant: nume, prenume, functie, cod -- angajat (codang), indicativ, indice_itm. -- 4. Incadrare firma: id_forma_juridica, id_forma_organizare, -- id_forma_prop, id_tip_soc (coduri interne din nomenclatoarele -- ROASTART - ANAF intoarce doar text descriptiv, nu codul ROASTART, -- vezi NOTA IMPORTANTA 5). -- 5. Capital social varsat (capital_soc_var) si subscris -- (capital_soc_sub). -- 6. Punct de lucru (punct_luc) - daca exista, separat de sediul social. -- 7. id_mama / e_mama - firma simpla sau membra a unui grup deja -- existent in ROASTART; daca simpla, id_mama = 0. -- 8. id_loc (identificator localitate in nomenclatorul ROASTART), -- cod_firma (cod intern firma), id_util (operatorul care introduce -- firma - userul care ruleaza scriptul in ROASTART), oasp -- (obligatie de asigurare - da/nu), tip_modificare. -- Lista completa de parametri "DE COMPLETAT" e reluata langa fiecare -- variabila din sectiunea PARAMETRI de mai jos. -- -- NOTA IMPORTANTA 5 - date confirmate/completate din interogarea publica -- ANAF (16.09.2026, CUI 54602536, serviciu -- https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva - acelasi URL -- folosit de procedura existenta ANAF_CreeazaCerereANAF in -- D:\ROA\ROAFACTURARE\COMUN\programe\validare.prg:1845): -- - Denumire, nr. registru comert (J2026028926001) si CAEN (9329) -- CONFIRMATE, identice cu certificatul ONRC. -- - Telefon completat: 0724968582 (p_telefon). -- - Cod postal completat: 900217 (p_cod_postal). -- - Adresa CONFIRMATA in mare parte, cu O DISCREPANTA fata de certificat: -- certificatul avea p_numar = 'ZA', ANAF intoarce "2A" pentru acelasi -- sediu (judet, localitate, strada, bloc L119A, scara A, apartament 2 - -- identice, extrase din date_generale.adresa). Marius a confirmat ca -- ANAF e sursa de adevar (OCR-ul certificatului e suspect) - p_numar a -- fost SCHIMBAT mai jos la '2A' (fostul 'ZA' era probabil o citire -- gresita a lui '2A'). -- - Data inregistrarii: certificatul avea 06.05.2026, ANAF intoarce -- date_generale.data_inregistrare = 2026-05-04 (04.05.2026) si -- stare_inregistrare = "INREGISTRAT din data 04.05.2026" - confirma -- aceeasi data. Marius a confirmat ANAF ca sursa de adevar - p_data_inreg -- a fost SCHIMBAT mai jos la '04.05.2026'. -- - scpTVA = false -> firma NU e inregistrata ca platitoare de TVA la -- data interogarii (util pentru p_persoana_juridica / incadrare, nu -- schimba niciun parametru din FIRMEMODINSPROC direct). -- - forma_organizare ANAF = "PERSOANA JURIDICA" -> confirma -- p_persoana_juridica = 'D'. -- - IBAN, email, capital social, reprezentant legal, forma juridica -- interna ROASTART: NU sunt in raspunsul ANAF (serviciul public nu le -- are) - raman "DE COMPLETAT" de Marius, nu s-au inventat valori. -- -- NOTA IMPORTANTA 4 - useri drepturi: -- Marius a CONFIRMAT: sunt DOAR 2 useri carora li se dau drepturi pe firma -- noua. "Vali Iliescu" / "Valentina Iliescu" e UN SINGUR user (user 1, -- prescurtare a aceluiasi nume), al doilea e "Raluca Ion" (user 2). -- Fisierul schiteaza exact 2 blocuri la Pasul 4, dupa acelasi sablon. -- Niciun id_util/id_grup nu e cunoscut inca -- se completeaza DUPA ce -- Pasul 0 confirma daca userii exista deja in UTILIZATORI/vutilizatori. -- -- NOTA IMPORTANTA 6 - verificare DB (Pasul A) INCERCATA si BLOCATA (16.09.2026): -- Tunelul Bitvise s-a ridicat cu succes (`stnlc.exe -profile=D:\vm303-profile\ -- conpress.tlp`, profil gasit acolo, nu la calea din documentul de conexiuni; -- port 127.0.0.1:1521 confirmat deschis, alias TNS ROA_CONPRESS rezolvat -- spre SID=ROA). NU s-a putut merge mai departe: schema Oracle de pe -- ConPress e "xenoti" (conform tabelului din conexiuni-tunel-ssh-odbc.md), -- iar parola pentru acel user NU exista nicaieri accesibil (DSN ODBC -- ROA_CONPRESS are UserID/Password goale in registry, nu e in Windows -- Credential Manager, nu e in vreun fisier din D:\ROA cautat). Conform -- regulii explicite din document ("Fara ghicit parole"), verificarea NU s-a -- facut - nu s-a incercat nicio parola. Tunelul a fost inchis la loc dupa -- incercare (port 1521 reconfirmat inchis). -- RAMASE NEVERIFICATE, deci NEschimbate mai jos (raman "DE COMPLETAT"): -- - combinatia comuna id_forma_juridica/id_forma_organizare/id_forma_prop/ -- id_tip_soc (GROUP BY pe firme) - nerulat. -- - existenta userilor Vali/Valentina Iliescu si Raluca Ion in -- UTILIZATORI/vutilizatori si id_util al lor - nerulat. -- - id_grup uzual din vdef_util_grup - nerulat. -- - unicitate CUI 54602536 in firme (nu exista deja) - nerulat. -- Marius (sau cine are parola schemei xenoti pe ConPress) trebuie sa ruleze -- Pasul 0 manual, sau sa dea parola unei sesiuni viitoare. -- -- ============================================================================ -- PARAMETRI DE SUBSTITUIRE (sqlplus DEFINE) - reutilizabile pentru orice -- firma noua. Valorile de mai jos vin din interogarea ANAF (sursa de adevar -- pentru identificare/adresa/CAEN/data inregistrare) plus certificatul ONRC -- pentru ce ANAF nu acopera; codurile interne ROASTART si userii raman -- DE COMPLETAT -- verificarea DB (NOTA IMPORTANTA 6) a fost blocata. -- ============================================================================ -- --- identificare firma (din certificatul ONRC) --- DEFINE p_firma = 'LUDIPEDIA S.R.L.' DEFINE p_antet = 'LUDIPEDIA S.R.L.' DEFINE p_cod_fiscal = '54602536' DEFINE p_reg_comert = 'J2026028926001' DEFINE p_caen = '9329' -- CONFIRMAT: identic in raspunsul ANAF (cod_CAEN) din 16.09.2026 DEFINE p_data_inreg = '04.05.2026' -- SCHIMBAT din certificat (06.05.2026) -- sursa ANAF (date_generale.data_inregistrare), vezi NOTA IMPORTANTA 5 -- --- adresa sediu social (din certificatul ONRC) --- DEFINE p_judet = 'Constanta' DEFINE p_localitate = 'Constanta' DEFINE p_strada = 'Strada Baba Novac' DEFINE p_numar = '2A' -- SCHIMBAT din certificat ('ZA') -- sursa ANAF (date_generale.adresa / snumar_Strada), vezi NOTA IMPORTANTA 5 DEFINE p_bloc = 'L119A' DEFINE p_scara = 'A' DEFINE p_apart = '2' DEFINE p_cod_postal = '900217' -- completat din ANAF (16.09.2026), nu era in certificat DEFINE p_adresa = '&p_strada. nr. &p_numar., bl. &p_bloc., sc. &p_scara., et. Parter, ap. &p_apart.' -- --- date lipsa din certificat, obligatorii pentru FIRMEMODINSPROC --- DEFINE p_banca1 = '' -- DE COMPLETAT (serviciul public ANAF nu intoarce IBAN) DEFINE p_contb1 = '' -- DE COMPLETAT (IBAN) -- banca2..banca10 / contb2..contb10: DE COMPLETAT doar daca exista mai multe conturi DEFINE p_persoana_juridica = 'D' -- confirmat de forma_organizare ANAF = "PERSOANA JURIDICA" (D/F dupa conventia ROASTART) DEFINE p_codang = '' -- DE COMPLETAT (cod angajat / reprezentant) DEFINE p_nume = '' -- DE COMPLETAT (nume reprezentant legal / declarant) DEFINE p_prenume = '' -- DE COMPLETAT DEFINE p_telefon = '0724968582' -- completat din ANAF (16.09.2026), nu era in certificat DEFINE p_telefon2 = '' -- DE COMPLETAT DEFINE p_telefon3 = '' -- DE COMPLETAT DEFINE p_fax = '' -- DE COMPLETAT DEFINE p_email = '' -- DE COMPLETAT DEFINE p_oasp = '' -- DE COMPLETAT (da/nu, dupa conventia ROASTART) DEFINE p_capital_soc_var = '' -- DE COMPLETAT DEFINE p_capital_soc_sub = '' -- DE COMPLETAT DEFINE p_punct_luc = '' -- DE COMPLETAT (daca exista, altfel gol) DEFINE p_schema = 'LUDIPEDIA' -- CONFIRMAT de Marius DEFINE p_id_mama = '0' -- DE CONFIRMAT: 0 daca firma simpla, altfel id firma-mama existenta DEFINE p_e_mama = '' -- DE COMPLETAT doar daca p_id_mama <> 0 DEFINE p_id_loc = '' -- DE COMPLETAT (id localitate in nomenclator ROASTART) DEFINE p_id_util = '' -- DE COMPLETAT (operatorul care introduce firma in ROASTART) DEFINE p_id_forma_juridica = '' -- DE COMPLETAT -- verificare DB blocata (fara parola schema xenoti), vezi NOTA IMPORTANTA 6 DEFINE p_id_forma_organizare = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6 DEFINE p_id_forma_prop = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6 DEFINE p_id_tip_soc = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6 DEFINE p_indicativ = '' -- DE COMPLETAT DEFINE p_declarant = '' -- DE COMPLETAT (nume declarant, poate fi = p_nume/p_prenume) DEFINE p_functie = '' -- DE COMPLETAT (functia declarantului) DEFINE p_indice_itm = '' -- DE COMPLETAT DEFINE p_tip_modificare = '' -- DE COMPLETAT DEFINE p_cod_firma = '' -- DE COMPLETAT (cod intern firma in ROASTART) -- --- job schema Oracle noua (start contabil) --- DEFINE p_luna_start = '5' -- CONFIRMAT de Marius pentru LUDIPEDIA DEFINE p_an_start = '2026' -- CONFIRMAT de Marius pentru LUDIPEDIA -- --- useri carora li se dau drepturi pe firma noua (DOAR 2, confirmat de Marius) --- DEFINE p_nume_user1 = 'Iliescu' DEFINE p_prenume_user1= 'Vali' -- "Vali" / "Valentina" -- confirmat: aceeasi persoana (user 1) DEFINE p_nume_user2 = 'Ion' DEFINE p_prenume_user2= 'Raluca' DEFINE p_id_grup_useri = '' -- DE COMPLETAT -- verificare DB blocata (fara parola schema xenoti), vezi NOTA IMPORTANTA 6 DEFINE p_id_utilop = '' -- DE COMPLETAT (operator care insereaza drepturile, poate fi = p_id_util) -- ============================================================================ -- PAS 0 -- VERIFICARE (doar SELECT, sigur pe canalul sqlplus-tunel) -- Scop: (a) userii Vali/Valentina Iliescu si Raluca Ion exista deja in -- UTILIZATORI/vutilizatori? (b) firma cu acest CUI exista deja pe -- schema LUDIPEDIA (evitare duplicat)? -- ============================================================================ -- 0a. Cautare useri dupa nume (LIKE, pentru ca nu stim daca "Vali" e nume complet) SELECT id_util, utilizator, nume, prenume, inactiv FROM vutilizatori WHERE UPPER(nume) LIKE UPPER('%' || '&p_nume_user1.' || '%') OR UPPER(prenume) LIKE UPPER('%Vali%') OR UPPER(prenume) LIKE UPPER('%Valentina%') FETCH FIRST 20 ROWS ONLY; SELECT id_util, utilizator, nume, prenume, inactiv FROM vutilizatori WHERE UPPER(nume) LIKE UPPER('%' || '&p_nume_user2.' || '%') OR UPPER(prenume) LIKE UPPER('%' || '&p_prenume_user2.' || '%') FETCH FIRST 20 ROWS ONLY; -- 0b. Drepturi deja existente pe firme, ca sa vedem grupul folosit uzual -- (util pentru completarea p_id_grup_useri de mai sus) SELECT id_dug, id_grup, id_firma, firma FROM vdef_util_grup WHERE id_grup IN ( SELECT DISTINCT id_grup FROM vdef_util_grup ) FETCH FIRST 50 ROWS ONLY; -- 0c. Firma cu acest CUI exista deja? (evitare duplicat la Pasul 1) SELECT id, firma, cod_fiscal, reg_comert FROM firme WHERE REGEXP_REPLACE(UPPER(TRIM(cod_fiscal)), '[^0-9]', '') = REGEXP_REPLACE(UPPER(TRIM('&p_cod_fiscal.')), '[^0-9]', '') FETCH FIRST 10 ROWS ONLY; -- ============================================================================ -- PAS 1 -- INSERT FIRMA -- PACK_DREPTURI.FIRMEMODINSPROC(...) -- Sursa semnaturii: D:\ROA\ROASTART\COMUN\clase\ofirma.vc2:130-146 -- ATENTIE: scrie date -- NU e SELECT, vezi NOTA IMPORTANTA 1 de la inceput. -- Ordinea parametrilor de mai jos respecta exact ordinea din semnatura. -- ============================================================================ -- BEGIN -- PACK_DREPTURI.FIRMEMODINSPROC( -- p_id => NULL, -- id nou, generat de procedura/secventa -- p_firma => '&p_firma.', -- p_antet => '&p_antet.', -- p_cod_fiscal => '&p_cod_fiscal.', -- p_reg_comert => '&p_reg_comert.', -- p_banca1 => '&p_banca1.', -- p_contb1 => '&p_contb1.', -- p_banca2 => NULL, p_contb2 => NULL, -- p_banca3 => NULL, p_contb3 => NULL, -- p_banca4 => NULL, p_contb4 => NULL, -- p_banca5 => NULL, p_contb5 => NULL, -- p_banca6 => NULL, p_contb6 => NULL, -- p_banca7 => NULL, p_contb7 => NULL, -- p_banca8 => NULL, p_contb8 => NULL, -- p_banca9 => NULL, p_contb9 => NULL, -- p_banca10 => NULL, p_contb10 => NULL, -- p_adresa => '&p_adresa.', -- p_cod_firma => '&p_cod_firma.', -- p_persoana_juridica=> '&p_persoana_juridica.', -- p_codang => '&p_codang.', -- p_nume => '&p_nume.', -- p_prenume => '&p_prenume.', -- p_telefon => '&p_telefon.', -- p_telefon2 => '&p_telefon2.', -- p_telefon3 => '&p_telefon3.', -- p_fax => '&p_fax.', -- p_email => '&p_email.', -- p_oasp => '&p_oasp.', -- p_capital_soc_var => '&p_capital_soc_var.', -- p_capital_soc_sub => '&p_capital_soc_sub.', -- p_punct_luc => '&p_punct_luc.', -- p_caen => '&p_caen.', -- p_schema => '&p_schema.', -- p_judet => '&p_judet.', -- p_localitate => '&p_localitate.', -- p_strada => '&p_strada.', -- p_numar => '&p_numar.', -- p_bloc => '&p_bloc.', -- p_scara => '&p_scara.', -- p_apart => '&p_apart.', -- p_cod_postal => '&p_cod_postal.', -- p_id_mama => &p_id_mama., -- p_e_mama => '&p_e_mama.', -- p_id_loc => '&p_id_loc.', -- p_id_util => '&p_id_util.', -- p_id_forma_juridica=> '&p_id_forma_juridica.', -- p_id_forma_organizare => '&p_id_forma_organizare.', -- p_id_forma_prop => '&p_id_forma_prop.', -- p_id_tip_soc => '&p_id_tip_soc.', -- p_indicativ => '&p_indicativ.', -- p_declarant => '&p_declarant.', -- p_functie => '&p_functie.', -- p_indice_itm => '&p_indice_itm.', -- p_tip_modificare => '&p_tip_modificare.', -- p_caen_revizie => NULL -- ); -- END; -- / -- ============================================================================ -- PAS 2 -- JOB CREARE SCHEMA ORACLE (async) -- SYN_NEWSCHEMAJOB(pcSchema, pnLuna, pnAn) -- Se apeleaza doar daca firma e simpla (p_id_mama = 0), nu membra de grup. -- ATENTIE: porneste un job -- scrie/creeaza obiecte, nu e SELECT. -- ============================================================================ -- BEGIN -- IF &p_id_mama. = 0 THEN -- SYN_NEWSCHEMAJOB('&p_schema.', &p_luna_start., &p_an_start.); -- END IF; -- END; -- / -- ============================================================================ -- PAS 3 -- POLL STATUS JOB SCHEMA -- SYN_NEWSCHEMAPROGRESS(pcSchema) -- functie, intoarce status text. -- Se astepta 'FINALIZAT'. Job async: poate dura; NU se face poll fara -- timeout/numar maxim de incercari (exemplu mai jos, de adaptat manual -- sau intr-un script client, nu ca bucla PL/SQL blocanta pe productie). -- ============================================================================ -- Interogare punctuala (de rulat manual, la interval, cu numarare manuala -- a incercarilor -- max. N incercari, ex. 30, la 10 secunde): SELECT SYN_NEWSCHEMAPROGRESS('&p_schema.') AS status_job FROM dual; -- Varianta PL/SQL cu timeout explicit (DOAR ca exemplu -- de adaptat/testat -- de Marius inainte de folosire, nu se stie limita reala de reincercari): -- DECLARE -- v_status VARCHAR2(100); -- v_incercari PLS_INTEGER := 0; -- c_max_incercari CONSTANT PLS_INTEGER := 30; -- DE CONFIRMAT -- c_pauza_sec CONSTANT PLS_INTEGER := 10; -- DE CONFIRMAT -- BEGIN -- LOOP -- v_status := SYN_NEWSCHEMAPROGRESS('&p_schema.'); -- EXIT WHEN v_status = 'FINALIZAT' OR v_incercari >= c_max_incercari; -- v_incercari := v_incercari + 1; -- DBMS_LOCK.SLEEP(c_pauza_sec); -- END LOOP; -- IF v_status != 'FINALIZAT' THEN -- RAISE_APPLICATION_ERROR(-20000, 'Job schema neterminat dupa timeout, status=' || v_status); -- END IF; -- END; -- / -- ============================================================================ -- PAS 4 -- DREPTURI UTILIZATORI PE FIRMA NOUA -- PACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop) -- Sursa: D:\ROA\ROASTART\Clase\ostart_util.vc2:32-40 -- id_util / id_grup se completeaza DUPA ce Pasul 0a confirma daca userii -- exista deja. id_firma se completeaza cu id-ul intors de Pasul 1. -- ATENTIE: scrie date, nu e SELECT. -- ============================================================================ DEFINE p_id_firma_noua = '' -- DE COMPLETAT dupa Pasul 1 (id firma inserata) -- --- user 1: Vali / Valentina Iliescu (o singura persoana, confirmat) --- DEFINE p_id_util_1 = '' -- DE COMPLETAT -- Pasul 0a nerulat (verificare DB blocata, NOTA IMPORTANTA 6); gol daca userul nu exista inca -- optional, doar daca userul NU exista inca in UTILIZATORI: -- BEGIN -- PACK_DREPTURI.UTILIZATORIINSPROC( -- p_utilizator => '', -- DE COMPLETAT (login) -- p_parola => '', -- DE COMPLETAT (parola initiala) -- p_inactiv => 'N', -- p_id_utilop => &p_id_utilop. -- ); -- END; -- / -- BEGIN -- PACK_DREPTURI.UTILDREPTINSPROC( -- p_id_util => &p_id_util_1., -- p_id_grup => &p_id_grup_useri., -- p_id_firma => &p_id_firma_noua., -- p_id_utilop=> &p_id_utilop. -- ); -- END; -- / -- --- user 2: Raluca Ion --- DEFINE p_id_util_2 = '' -- DE COMPLETAT -- Pasul 0a nerulat (verificare DB blocata, NOTA IMPORTANTA 6) -- optional, doar daca userul NU exista inca: -- BEGIN -- PACK_DREPTURI.UTILIZATORIINSPROC( -- p_utilizator => '', -- DE COMPLETAT (login) -- p_parola => '', -- DE COMPLETAT (parola initiala) -- p_inactiv => 'N', -- p_id_utilop => &p_id_utilop. -- ); -- END; -- / -- BEGIN -- PACK_DREPTURI.UTILDREPTINSPROC( -- p_id_util => &p_id_util_2., -- p_id_grup => &p_id_grup_useri., -- p_id_firma => &p_id_firma_noua., -- p_id_utilop=> &p_id_utilop. -- ); -- END; -- / -- ============================================================================ -- SFARSIT SCHITA. De aprobat de Marius -- vezi NOTA IMPORTANTA 1-4 de la -- inceputul fisierului inainte de orice rulare. -- ============================================================================