# Genereaza manualROAIMOB.docx in stilul manual_ROAAUTO.docx (clonare elemente model, doar textul se schimba). # Rulare: python build_manual_ROAIMOB.py (din D:\ROA\Manual ROA) import copy import os import re import docx from docx.shared import Cm from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.text.paragraph import Paragraph from docx.enum.text import WD_ALIGN_PARAGRAPH from PIL import Image BASE = os.path.dirname(os.path.abspath(__file__)) POZE = os.path.join(BASE, 'pozeROAIMOB') OUT = os.path.join(BASE, 'manualROAIMOB.docx') doc = docx.Document(os.path.join(BASE, 'manual_ROAAUTO.docx')) body = doc.element.body els = list(body.iterchildren()) W = qn def tpl(i): return copy.deepcopy(els[i]) # Elemente model din manual_ROAAUTO.docx (indici in body) T = dict(title=tpl(0), ver=tpl(1), sub=tpl(2), h1=tpl(3), h2=tpl(4), empty=tpl(6), body=tpl(8), h3=tpl(56), note=tpl(58), num=tpl(50), tbl=tpl(5), warn=tpl(25), info=tpl(60), code=tpl(37), footer=tpl(141)) def rpr_of(el, path): return copy.deepcopy(el.findall('.//' + W('w:r'))[path].find(W('w:rPr'))) tr_hdr = T['tbl'].findall(W('w:tr'))[0] tr_row = T['tbl'].findall(W('w:tr'))[1] R = dict( body=rpr_of(T['body'], 0), bodyb=rpr_of(tpl(21), 0), num=rpr_of(T['num'], 0), cell=rpr_of(tr_row, 0), path=rpr_of(tr_row, 2), arrow=rpr_of(tr_row, 3), hdr=rpr_of(tr_hdr, 0), ) def bold(rpr): r = copy.deepcopy(rpr) if r.find(W('w:b')) is None: b = OxmlElement('w:b') r.insert(1, b) r.insert(2, OxmlElement('w:bCs')) return r def mkrun(text, rpr): r = OxmlElement('w:r') r.append(copy.deepcopy(rpr)) t = OxmlElement('w:t') t.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') t.text = text r.append(t) return r def fill(p, text, base='body'): """Inlocuieste run-urile lui p. Markup: **bold**, `Cale → Meniu` (Courier rosu, sageti gri).""" for r in p.findall(W('w:r')): p.remove(r) rn = R['cell'] if base == 'cell' else R['body'] rb = bold(rn) for tok in re.split(r'(\*\*.+?\*\*|`.+?`)', text): if not tok: continue if tok.startswith('**'): p.append(mkrun(tok[2:-2], rb)) elif tok.startswith('`'): parts = tok[1:-1].split(' → ') for k, part in enumerate(parts): if k: p.append(mkrun(' → ', R['arrow'])) p.append(mkrun(part, R['path'])) else: p.append(mkrun(tok, rn)) return p sectPr = body.find(W('w:sectPr')) for el in list(body): if el is not sectPr: body.remove(el) def add(el): sectPr.addprevious(el) return el def keep_next(p): Paragraph(p, doc).paragraph_format.keep_with_next = True return p def para(kind, text=''): p = copy.deepcopy(T[kind]) if kind in ('title', 'ver', 'sub', 'footer', 'note', 'h1', 'h2', 'h3'): for r in p.findall(W('w:r'))[1:]: p.remove(r) p.find('.//' + W('w:t')).text = text else: fill(p, text) if kind in ('h1', 'h2', 'h3'): keep_next(p) return add(p) def H1(t): return para('h1', t) def H2(t): return para('h2', t) def H3(t): return para('h3', t) def P(t): return para('body', t) def NOTE(t): return para('note', t) def EMPTY(): return add(copy.deepcopy(T['empty'])) def STEPS(items): for i, t in enumerate(items, 1): p = copy.deepcopy(T['num']) fill(p, t) p.insert(1, mkrun('%d. ' % i, R['num'])) add(p) def set_shd(tc, fill_color): tc.find(W('w:tcPr')).find(W('w:shd')).set(W('w:fill'), fill_color) def TABLE(headers, rows, widths): t = copy.deepcopy(T['tbl']) for tr in t.findall(W('w:tr')): t.remove(tr) grid = t.find(W('w:tblGrid')) for g in list(grid): grid.remove(g) for w in widths: g = OxmlElement('w:gridCol') g.set(W('w:w'), str(w)) grid.append(g) def mkrow(tr_t, cells, color=None, hdr=False): tr = copy.deepcopy(tr_t) tcs = tr.findall(W('w:tc')) tc_t = tcs[0] for tc in tcs: tr.remove(tc) if not hdr: trPr = tr.find(W('w:trPr')) if trPr is None: trPr = OxmlElement('w:trPr') tr.insert(0, trPr) trPr.append(OxmlElement('w:cantSplit')) for text, w in zip(cells, widths): tc = copy.deepcopy(tc_t) tc.find(W('w:tcPr')).find(W('w:tcW')).set(W('w:w'), str(w)) if color: set_shd(tc, color) p = tc.find(W('w:p')) if hdr: for r in p.findall(W('w:r')): p.remove(r) p.append(mkrun(text, R['hdr'])) else: fill(p, text, 'cell') tr.append(tc) return tr t.append(mkrow(tr_hdr, headers, hdr=True)) for i, row in enumerate(rows): t.append(mkrow(tr_row, row, 'FFFFFF' if i % 2 == 0 else 'F2F4F8')) if len(rows) <= 12: # tabel scurt: nu se rupe intre pagini for tr in t.findall(W('w:tr'))[:-1]: for p in tr.iter(W('w:p')): keep_next(p) add(t) EMPTY() def no_split(t): tr = t.find(W('w:tr')) trPr = tr.find(W('w:trPr')) if trPr is None: trPr = OxmlElement('w:trPr') tr.insert(0, trPr) trPr.append(OxmlElement('w:cantSplit')) return t def BOX(text, kind='warn'): t = no_split(copy.deepcopy(T[kind])) fill(t.find('.//' + W('w:p')), text) add(t) EMPTY() def CODE(lines): t = no_split(copy.deepcopy(T['code'])) tc = t.find('.//' + W('w:tc')) ps = tc.findall(W('w:p')) for p in ps[1:]: tc.remove(p) for line in lines: p = copy.deepcopy(ps[0]) p.find('.//' + W('w:t')).text = line tc.append(p) tc.remove(ps[0]) add(t) EMPTY() def poza(nr): for f in os.listdir(POZE): if f.split('_')[0] == str(nr) or f.split(' ')[0] == str(nr): return os.path.join(POZE, f) raise FileNotFoundError(nr) IMG_LOG = [] def IMG(nr, caption, max_w=16.0, max_h=9.0): path = poza(nr) w_px, h_px = Image.open(path).size w = min(max_w, w_px / 96 * 2.54) h = w * h_px / w_px if h > max_h: w = max_h * w_px / h_px p = doc.add_paragraph() # se insereaza inaintea sectPr, deci in ordine p.alignment = WD_ALIGN_PARAGRAPH.CENTER p.paragraph_format.keep_with_next = True p.paragraph_format.space_before = Cm(0.2) p.paragraph_format.space_after = Cm(0) p.add_run().add_picture(path, width=Cm(w)) c = para('note', caption) Paragraph(c, doc).alignment = WD_ALIGN_PARAGRAPH.CENTER IMG_LOG.append((nr, caption)) # ============================================================ CONTINUT para('title', 'Manual ROAIMOB — Imobilizări') para('ver', 'v. 01.10.2026') para('sub', 'Evidența imobilizărilor corporale, necorporale și în curs — de la intrarea în patrimoniu ' 'până la ieșirea din gestiune.') # ---------------------------------------------------------------- Quickstart H1('Quickstart — Operații uzuale') NOTE('Capturile de ecran sunt din versiuni mai vechi ale programului. Aspectul poate diferi puțin, ' 'dar denumirile și pașii sunt aceiași.') P('**Firma, anul și luna contabilă** le schimbi cu **click dreapta pe imaginea de fundal** a aplicației. ' 'Se deschide formularul „Alegeți firma / anul / luna”: alegi **Firma**, **Anul** și **Luna**, apoi ' 'confirmi cu butonul **Terminare** (Ctrl+F).') H2('Scenariul 1 — Introducere mijloc fix nou') P('Folosești **Introducere** când achiziția nu este încă înregistrată în contabilitate.') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Deschizi formularul de introducere', '`Imobilizări corporale → Introducere`'], ['2', 'Completezi denumirea, codul din catalog, durata normală de serviciu (DNS), contul și numărul de inventar', 'Formularul „Introducere imobilizări”'], ['3', 'Completezi documentul de achiziție: număr, dată, valoare', 'Tot în formular'], ['4', 'Completezi numărul și data PIF, tipul de amortizare, gestiunea, responsabilul', 'Tot în formular'], ['5', 'Bifezi, dacă e cazul, „Bun de capital” și „Amort. max. deductibil”', 'Tot în formular'], ['6', 'Validezi cu butonul verde ✓. Programul întreabă dacă mai introduci o imobilizare', '—'], ], [600, 4700, 3900]) P('Din 2026, pragul fiscal pentru mijloc fix este **5.000 lei** (vezi Capcane frecvente). ' 'Programul nu verifică pragul la introducere.') IMG(4, 'Formularul de introducere a unei imobilizări noi') H2('Scenariul 2 — Preluare din contabilitate') P('Folosești **Preluare din contabilitate** când achiziția este deja înregistrată în ROACONT. ' 'Numărul, data și valoarea documentului se preiau din contabilitate.') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Deschizi lista documentelor de achiziție', '`Imobilizări corporale → Preluare din contabilitate`'], ['2', 'Alegi documentul de achiziție din listă', 'Fereastra „Documente achiziție”'], ['3', 'Completezi ce lipsește: cod, DNS, tip amortizare, gestiune, responsabil', 'Formularul de introducere'], ['4', 'Validezi cu butonul verde ✓', '—'], ], [600, 4700, 3900]) P('Se preia și contul analitic din nota contabilă. Apar și documentele cu dată de achiziție din lunile ' 'anterioare, înregistrate în luna curentă.') H2('Scenariul 3 — Amortizare lunară, verificare și notă de închidere') P('Rata lunară se calculează de program pentru luna contabilă deschisă. Tu verifici și listezi nota.') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Deschizi lista și verifici rata lunii (coloana „Amortizment lunar”)', '`Imobilizări corporale → Vizualizare amortizare contabilă`'], ['2', 'Apeși butonul **Verifică** (două semne de exclamare, dreapta sus). Compară conturile cu ROACONT', 'Lista imobilizărilor'], ['3', 'Dacă apar diferențe, corectezi conturile indicate', 'ROAIMOB sau ROACONT'], ['4', 'Listezi nota de închidere a amortizării', '`Situații analitice → Rapoarte → Închidere imobilizări corporale`'], ['5', 'Repeți pentru imobilizările necorporale', '`Imobilizări necorporale`'], ], [600, 4700, 3900]) IMG(7, 'Verificare cu contabilitatea: valorile sunt egale') IMG(8, 'Verificare cu contabilitatea: conturile cu diferențe') IMG(9, 'Meniul pentru nota de închidere a amortizării') IMG(10, 'Nota de închidere a amortizării imobilizărilor corporale') H2('Scenariul 4 — Transformare imobilizare în curs în mijloc fix') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Deschizi lista imobilizărilor în curs', '`Imobilizări în curs → Vizualizare`'], ['2', 'Bifezi coloana „Ales” la imobilizările care formează mijlocul fix', 'Lista imobilizărilor în curs'], ['3', 'Modifici „Valoare reținută” dacă nu transformi toată valoarea', 'Tot în listă'], ['4', 'Apeși **Operațiuni** și alegi tipul transformării (tabelul de mai jos)', 'Tot în listă'], ['5', 'Completezi formularul mijlocului fix, ca la introducere, și validezi cu ✓', '—'], ], [600, 4700, 3900]) TABLE(['Opțiune din Operațiuni', 'Rezultat'], [ ['Transformare în imobilizare corporală / necorporală', 'Un mijloc fix nou, cu valoarea egală cu suma valorilor reținute'], ['Adăugare la imobilizare corporală / necorporală', 'Majorare pe un mijloc fix existent. Scade valoarea imobilizării în curs'], ['Transformare în N imobilizări corporale / necorporale', 'N mijloace fixe identice dintr-o singură imobilizare în curs (vezi capitolul Imobilizări în curs)'], ], [4200, 5000]) IMG(11, 'Alegerea imobilizărilor în curs care se transformă (ecran vechi; azi bifezi coloana „Ales” din listă)') IMG(12, 'Formularul mijlocului fix obținut din imobilizări în curs') H2('Scenariul 5 — Ieșire din gestiune (vânzare, casare)') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Selectezi mijlocul fix', '`Imobilizări corporale → Vizualizare amortizare contabilă`'], ['2', 'Apeși **Operațiuni** și alegi „ieșire din gestiune”', 'Fereastra „Alegeți operațiunea”'], ['3', 'Completezi data și numărul documentului, tipul (vânzare, casare etc.), explicația și data ieșirii', 'Fereastra „Ieșire din gestiune”'], ['4', 'Validezi cu butonul verde ✓', '—'], ['5', 'Tipărești procesul-verbal de casare', 'Lista → **Listare** → „Proces-verbal de casare”'], ], [600, 4700, 3900]) IMG(6, 'Ieșire din gestiune: documentul, tipul și data ieșirii') H2('Scenariul 6 — Operații pe durata de folosire') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Selectezi mijlocul fix', '`Imobilizări corporale → Vizualizare amortizare contabilă`'], ['2', 'Apeși **Operațiuni**', 'Lista imobilizărilor'], ['3', 'Alegi operația și validezi cu ✓', 'Fereastra „Alegeți operațiunea”'], ['4', 'Completezi documentul și valorile cerute, apoi validezi', 'Fereastra operației'], ], [600, 4700, 3900]) TABLE(['Operație', 'Când o folosești'], [ ['majorarea valorii de intrare', 'Investiții care modifică valoarea (pozitiv sau negativ)'], ['reevaluarea valorii de intrare', 'Reevaluarea mijlocului fix'], ['conservare / scoatere din conservare', 'Mijlocul fix intră în conservare sau iese din conservare'], ['schimbare DNS', 'Se modifică durata normală de serviciu'], ['schimbare DNS + reevaluare', 'Modifici împreună valoarea de inventar, amortizarea totală, DNS, uzura totală, valoarea reziduală'], ['ieșire / intrare în gestiune', 'Vânzare, casare etc. (Scenariul 5); intrarea anulează o ieșire'], ], [3800, 5400]) IMG(5, 'Fereastra „Alegeți operațiunea” deschisă din lista imobilizărilor corporale') H2('Scenariul 7 — Copiere imobilizare') P('Copiezi când introduci un mijloc fix asemănător cu unul existent.') TABLE(['Pas', 'Ce faci', 'Unde'], [ ['1', 'Selectezi mijlocul fix sursă', '`Imobilizări corporale → Vizualizare amortizare contabilă`'], ['2', 'Apeși butonul **Copiază** (dreapta sus)', 'Lista imobilizărilor'], ['3', 'Se deschide formularul de introducere, completat cu situația din luna curentă', 'Titlul „Copie după nr. inv. …”'], ['4', 'Modifici ce diferă (denumire, număr de inventar, valori) și validezi cu ✓', 'Tot în formular'], ['5', 'Programul întreabă dacă mai creezi o copie după același mijloc fix', '—'], ], [600, 4700, 3900]) H2('Scenariul 8 — Rapoarte') TABLE(['Ce cauți', 'Unde'], [ ['Amortizări lunare, fișe, listă de inventar pentru selecția din listă', 'Lista → **Listare**'], ['Situația lunară, lista fișelor, lista de inventar, evidența MF', '`Imobilizări corporale → Rapoarte`'], ['Rulajul și totalul amortismentelor', '`Situații analitice → Rulaj amortismente`'], ['Nota de închidere a amortizării', '`Situații analitice → Rapoarte`'], ['Datele din listă în Excel', 'Lista → butonul **Excel**'], ], [4600, 4600]) IMG(13, 'Raportul „Evidența mijloacelor fixe” în previzualizare') IMG(14, 'Meniul Rapoarte al paginii Imobilizări corporale') IMG(15, 'Evidența mijloacelor fixe listată din meniul Rapoarte') H2('Capcane frecvente') BOX('**Pragul fiscal pentru mijloc fix este 5.000 lei începând cu anul fiscal 2026** (anterior 2.500 lei). ' 'Codul fiscal art. 28 alin. (2) lit. b), modificat prin OUG 8/2026 (MO nr. 147/25.02.2026), art. 6 pct. 7 ' 'și art. 10 alin. (2). Mijloacele fixe cu valoarea fiscală de intrare între 2.500 și 5.000 lei, existente ' 'la 31.12.2025, se amortizează în continuare pe durata normală rămasă (art. 45 alin. (21³)). ' 'OUG 8/2026 nu modifică reglementările contabile: pragul contabil îl stabilește politica contabilă a ' 'firmei. Programul nu verifică pragul.') BOX('**Numărul de inventar duplicat nu este blocat.** Programul te avertizează la introducere, dar permite ' 'salvarea. Verifică „Registrul numerelor de inventar” înainte să confirmi.') BOX('**Autoturismele din contul 2133 au amortizarea deductibilă limitată.** Pentru vehiculele de categoria M1 ' '(cel mult 9 locuri, inclusiv șoferul), Codul fiscal (art. 28 alin. (14)) limitează amortizarea deductibilă ' 'la 1.500 lei/lună, cu excepțiile prevăzute de lege (taxi, curierat, închiriere, agenți de vânzări etc.). ' 'Bifezi „Amort. max. deductibil” și completezi plafonul lunar. Nota de închidere separă partea ' 'deductibilă de cea nedeductibilă.') BOX('**Fără bifa „Amort. max. deductibil”, toată amortizarea este deductibilă.** Cu bifa activă și valoarea 0, ' 'toată amortizarea este nedeductibilă. Folosești 0 de exemplu la un mijloc fix amortizat integral și reevaluat.') BOX('**O singură operație de valoare pe mijloc fix pe lună.** Două operații pe același mijloc fix în aceeași lună ' '(de exemplu majorare și reevaluare) pot da calcule greșite. Cumulează-le într-o singură operație.') BOX('**Operațiile se fac doar din „Vizualizare amortizare contabilă”.** Dacă ștergi o operație din lista ' 'contabilă, o ștergi și din „Vizualizare amortizare fiscală”. Altfel cele două situații nu mai corespund.') # ---------------------------------------------------------------- Privire de ansamblu H1('Fluxul de lucru — Privire de ansamblu') CODE(['[1] Introducere sau preluare din contabilitate', ' ↓', '[2] Amortizare lunară (calculată de program) + verificare cu ROACONT', ' ↓', '[3] Operații: majorare, reevaluare, conservare, DNS, gestiune', ' ↓', '[4] Nota de închidere a amortizării', ' ↓', '[5] Ieșire din gestiune: vânzare, casare']) H2('Accesul în aplicație') P('Pornești ROAIMOB din lansatorul ROA: `Managementul imobilizărilor → Imobilizări`. ' 'Firma, anul și luna se schimbă cu **click dreapta pe imaginea de fundal**, în formularul ' '„Alegeți firma / anul / luna”.') IMG(1, 'Lansarea aplicației din lansatorul ROA') H2('Cele două axe ale ecranului') P('**Axa orizontală** conține, de sus în jos:') STEPS(['Bara de informare: aplicația, firma și luna contabilă', 'Meniul: Utile, Editare, Inițializare, Ajutor', 'Iconițele de acces rapid în celelalte aplicații ROA, pe aceeași firmă și lună', 'Paginile: Situații analitice, Imobilizări corporale, Imobilizări necorporale, Imobilizări în curs']) P('**Axa verticală** se schimbă cu pagina aleasă. Conține operațiile, vizualizarea și rapoartele paginii.') IMG(2, 'Axa orizontală și bara verticală a paginii Imobilizări în curs') TABLE(['Pagina', 'Bara verticală'], [ ['**Situații analitice**', 'Istoric operații, Rulaj amortismente, Total amortismente, Rapoarte (nota de închidere)'], ['**Imobilizări corporale**', 'Introducere, Preluare din contabilitate, Vizualizare amortizare contabilă, ' 'Vizualizare amortizare fiscală, Rapoarte, Bunuri de capital'], ['**Imobilizări necorporale**', 'La fel ca la corporale, fără Bunuri de capital'], ['**Imobilizări în curs**', 'Introducere, Preluare din contabilitate, Vizualizare, Rapoarte'], ], [3000, 6200]) IMG(3, 'Bara verticală a paginii Imobilizări corporale') H2('Amortizare contabilă și amortizare fiscală') P('Pentru imobilizările corporale și necorporale programul ține separat amortizarea contabilă și amortizarea ' 'fiscală. Le vezi în două liste: „Vizualizare amortizare contabilă” și „Vizualizare amortizare fiscală”.') BOX('**Toate operațiile se fac din „Vizualizare amortizare contabilă”.** Lista fiscală nu are butoanele ' 'Operațiuni, Modifică, Copiază și Șterge.', 'info') H2('Meniul aplicației') TABLE(['Meniu', 'Ce găsești'], [ ['`Utile`', 'Intrare, Calculator, Notepad, Ieșire'], ['`Inițializare → Serii`', 'Seriile de numere, inclusiv pentru numerele de inventar'], ['`Ajutor`', 'Instrucțiuni de utilizare, Despre program, Jurnal modificări'], ], [3400, 5800]) # ---------------------------------------------------------------- Corporale H1('Imobilizări corporale') H2('Introducere și preluare') P('Pașii sunt în Scenariile 1 și 2. Câmpurile principale ale formularului:') TABLE(['Câmp', 'Ce completezi'], [ ['**Denumire, Cod, Cont**', 'Denumirea, codul din catalogul de imobilizări și contul contabil'], ['**Nr. inventar**', 'Se propune din serie (`Inițializare → Serii`). La duplicat primești avertizare'], ['**Document achiziție**', 'Numărul, data și valoarea de achiziție'], ['**Nr. și data PIF**', 'Punerea în funcțiune'], ['**DNS, Tip amortizare**', 'Durata normală de serviciu, în luni, și metoda de amortizare'], ['**Amortizare și uzură precedentă**', 'Pentru mijloacele fixe parțial amortizate înainte de introducere'], ['**Valoare reziduală**', 'Valoarea care nu se amortizează'], ['**Gestiune, Secție, Responsabil, Lucrare**', 'Locul și persoana care răspunde de mijlocul fix'], ['**Amort. max. deductibil**', 'Plafonul lunar deductibil (vezi Capcane frecvente)'], ['**Bun de capital**', 'Urmărește ajustarea TVA dedus; cere cota TVA, prorata și baza TVA'], ], [3400, 5800]) P('Grupa „01. Obiecte de inventar” permite urmărirea obiectelor de inventar amortizate într-o singură lună.') H2('Lista imobilizărilor') P('Deschizi lista din `Imobilizări corporale → Vizualizare amortizare contabilă`. Bifezi criteriile ' '(număr document, denumire, număr de inventar, gestiune, cont etc.), completezi valorile și apeși **Caută**. ' '**Reset** golește criteriile. Click dreapta pe capul de tabel deschide filtrul rapid.') TABLE(['Buton', 'Ce face'], [ ['**Operațiuni**', 'Operațiile cu istoric (Scenariul 6)'], ['**Istoric Mișcări**', 'Operațiile și ratele mijlocului fix. Adaugi, modifici sau ștergi o operație, inclusiv numărul și data documentului'], ['**Modifică**', 'Atributele mijlocului fix: gestiune, responsabil, secție, lucrare etc.'], ['**Copiază**', 'Mijloc fix nou cu datele celui selectat (Scenariul 7)'], ['**Șterge**', 'Elimină mijlocul fix, după confirmare'], ['**Verifică**', 'Compară valorile pe conturi cu contabilitatea'], ['**Listare / Excel**', 'Rapoarte pentru selecția din listă / export în Excel'], ], [2600, 6600]) P('Operațiuni și Istoric Mișcări apar doar dacă ai drept de modificare.') H2('Operații cu istoric') P('Operațiile se aleg din **Operațiuni**, pe mijlocul fix selectat. Lista lor e în Scenariul 6.') STEPS(['**Majorare:** introduci suma majorării; programul calculează valoarea nouă de intrare.', '**Schimbare DNS + reevaluare:** modifici împreună valoarea de inventar, amortizarea totală, DNS, ' 'uzura totală și valoarea reziduală.', '**Conservare:** pentru un mijloc fix aflat în conservare, opțiunea devine „scoatere din conservare”.', '**Ieșire din gestiune:** pentru un mijloc fix ieșit, opțiunea devine „intrare în gestiune”.']) P('O operație greșită se corectează sau se șterge din **Istoric Mișcări**.') H2('Copiere imobilizare') P('Butonul **Copiază** deschide formularul de introducere completat cu situația mijlocului fix din luna curentă:') STEPS(['Denumirea, contul, codul, DNS, gestiunea, responsabilul și celelalte atribute.', 'Valoarea, amortizarea precedentă și uzura, fără rata lunii curente.', 'Numărul și data documentului de achiziție.']) P('Toate câmpurile se pot modifica. Numărul de inventar se alocă la fel ca la o introducere nouă. Salvarea ' 'creează un mijloc fix nou; sursa rămâne neschimbată. Butonul nu apare în lista fiscală.') H2('Verificare cu contabilitatea') P('Butonul **Verifică** compară, pe fiecare cont, valoarea imobilizărilor și amortizarea cu soldurile din ' 'ROACONT. Dacă valorile sunt egale, primești un mesaj de confirmare. Altfel vezi conturile și diferențele.') NOTE('Opțiunea „IMOB_OBI” din Definirea Companiei stabilește dacă verificarea include și contul 303.') H2('Bunuri de capital') P('Pentru imobilizările marcate „Bun de capital”, programul urmărește ajustarea TVA dedus la intrare, în ' 'funcție de activitatea efectivă. Registrul se deschide din `Imobilizări corporale → Bunuri de capital`.') H2('Rapoarte') TABLE(['Raport', 'Unde', 'Ce conține'], [ ['Listare situație lunară', '`Rapoarte`', 'Situația lunii, ordonată după data și numărul PIF'], ['Lista fișelor', '`Rapoarte`', 'Fișa fiecărui mijloc fix: standard sau cu lista operațiilor'], ['Lista de inventar', '`Rapoarte`', 'Ordonată după număr de inventar, denumire sau data PIF'], ['Evidența MF', '`Rapoarte`', 'Evidența mijloacelor fixe; se salvează și în format xls'], ['Registrul numerelor de inventar', '`Rapoarte`', 'Numerele de inventar folosite'], ['Situația reevaluărilor', '`Rapoarte`', 'Reevaluările și diferențele de valoare'], ['Diferențe amortizare contabilă / fiscală', '`Rapoarte`', 'Listare sau Excel'], ['Amortizări lunare, amortizare luna curentă', 'Lista → **Listare**', 'Pe interval sau pe luna curentă; grupat pe gestiune și cont sau pe cont'], ['Situația reevaluărilor / majorărilor / modificărilor', 'Lista → **Listare**', 'Pentru selecție sau pentru toate imobilizările'], ['Proces-verbal de casare', 'Lista → **Listare**', 'Câte un proces-verbal pentru fiecare document de casare'], ], [3300, 2000, 3900]) # ---------------------------------------------------------------- Necorporale H1('Imobilizări necorporale') P('Pagina funcționează la fel ca Imobilizări corporale: introducere, preluare, lista contabilă și fiscală, ' 'operații, copiere, verificare și rapoarte. Diferențele:') TABLE(['Element', 'Diferență'], [ ['Bunuri de capital', 'Nu există în bara verticală'], ['Lista fișelor', 'O singură variantă'], ['Nota de închidere', '`Situații analitice → Rapoarte → Închidere imobilizări necorporale`'], ], [3000, 6200]) # ---------------------------------------------------------------- In curs H1('Imobilizări în curs') H2('Introducere și preluare') P('Imobilizările în curs se introduc din `Imobilizări în curs → Introducere` sau se preiau din contabilitate. ' 'Completezi denumirea, contul și contul analitic, numărul de inventar, documentul și valoarea de achiziție, ' 'gestiunea, responsabilul, secția și lucrarea.') H2('Lista imobilizărilor în curs') P('Deschizi lista din `Imobilizări în curs → Vizualizare`. Culoarea rândului arată starea:') TABLE(['Culoare', 'Înseamnă'], [ ['Negru', 'Imobilizare netransformată'], ['Verde', 'Transformată parțial'], ['Albastru', 'Transformată integral (valoare rămasă 0)'], ], [2600, 6600]) TABLE(['Buton', 'Ce face'], [ ['**Operațiuni**', 'Transformări în mijloace fixe și adăugări la mijloace fixe existente'], ['**Istoric Mișcări**', 'Adaugi, modifici sau ștergi operații. Așa ajustezi valoarea rămasă'], ['**Modifică / Șterge**', 'Modifici sau elimini imobilizarea în curs'], ['**Verifică**', 'Compară doar valoarea de inventar cu soldul din balanță'], ['**Listare / Excel**', 'Listare simplă sau grupată pe lucrări / export în Excel'], ], [2600, 6600]) H2('Transformare în mijloc fix') P('Pașii sunt în Scenariul 4. Bifezi „Ales” la una sau mai multe imobilizări în curs. „Valoare reținută” ' 'trebuie să fie cel mult egală cu valoarea rămasă. Ce nu transformi rămâne în curs.') P('Mijlocul fix nou apare în lista imobilizărilor corporale sau necorporale, cu valoarea egală cu suma ' 'valorilor reținute.') H2('Transformare în N mijloace fixe') P('Creezi N mijloace fixe identice dintr-o singură imobilizare în curs. De exemplu, 10 laptopuri cumpărate pe ' 'aceeași factură.') STEPS(['Bifezi „Ales” la **o singură** imobilizare în curs.', 'Apeși **Operațiuni** → „Transformare în N imobilizări corporale” (sau necorporale).', 'Introduci numărul de mijloace fixe, între 2 și 999.', 'Confirmi împărțirea: valoarea totală, numărul de bucăți și valoarea pe bucată.', 'Completezi formularul o singură dată. Titlul arată „Transformare în N mijloace fixe — valoare pe bucată”.', 'Validezi cu ✓ și alegi cum se dau numerele de inventar.']) TABLE(['Regulă', 'Cum funcționează'], [ ['Valoarea', 'Se împarte egal la N. Ultima bucată ia restul, ca suma să fie exactă'], ['Denumirea', 'Primește sufixul „01” … „N”, de exemplu „Laptop 01”, „Laptop 02”'], ['Nr. inventar, cu serie configurată', '**Da** = numere diferite, alocate din serie. **Nu** = același număr pentru toate bucățile'], ['Nr. inventar, fără serie', 'Numere consecutive, începând cu numărul din formular'], ['La final', 'Mesaj cu numărul de mijloace fixe create și numerele de inventar'], ], [3300, 5900]) BOX('**Dacă o bucată dă eroare, nu se salvează nimic.** Toate cele N mijloace fixe se creează într-o singură ' 'tranzacție. La eroare primești mesajul „Eroare la MF k din N”, iar imobilizarea în curs rămâne neschimbată.') H2('Adăugare la un mijloc fix existent') P('„Adăugare la imobilizare corporală / necorporală” face o majorare pe un mijloc fix existent și scade ' 'valoarea imobilizării în curs.') BOX('**Anularea unei adăugări:** ștergi din Istoric Mișcări atât majorarea de pe mijlocul fix, cât și ' 'operațiile de transformare de pe imobilizările în curs.', 'info') H2('Rapoarte') TABLE(['Raport', 'Ce conține'], [ ['Lista imobilizărilor în curs', 'Listare simplă sau grupată pe lucrări'], ['Registrul numerelor de inventar', 'Numerele de inventar ale imobilizărilor în curs'], ['Situația reevaluărilor', 'Reevaluările imobilizărilor în curs'], ], [4000, 5200]) # ---------------------------------------------------------------- Inchiderea lunii H1('Închiderea lunii și trecerea la luna următoare') STEPS(['Verifici că toate intrările, operațiile și ieșirile lunii sunt introduse.', 'Apeși **Verifică** în lista imobilizărilor corporale, necorporale și în curs. Rezolvi diferențele.', 'Listezi nota de închidere: `Situații analitice → Rapoarte → Închidere imobilizări corporale` ' '(apoi necorporale). Programul întreabă dacă defalcă nota pe secție; dacă folosești câmpul ' '„Lucrare”, și pe lucrare.', 'Dacă nu lucrezi cu ROACONT, introduci nota manual în contabilitate.', 'Pentru luna următoare, dai **click dreapta pe imaginea de fundal**. În formularul „Alegeți firma / ' 'anul / luna” alegi **Luna** nouă (și **Anul**, la trecerea în anul următor) și confirmi cu **Terminare**.']) BOX('**Nota de închidere separă amortizarea deductibilă de cea nedeductibilă.** Pentru mijloacele fixe cu ' '„Amort. max. deductibil” (de exemplu autoturismele din 2133), partea peste plafon apare pe rând separat.', 'info') BOX('**Luna blocată nu mai acceptă introduceri.** Dacă luna este închisă, programul afișează „Luna este ' 'blocată!” și nu permite introduceri sau transformări.') # ---------------------------------------------------------------- Rezumat, FAQ, istoric H1('Rapoarte disponibile — Rezumat') TABLE(['Categorie', 'Rapoarte disponibile'], [ ['**Amortizare**', 'Amortizări lunare, amortizare luna curentă (pe gestiune și cont, pe cont), rulaj și total amortismente'], ['**Închidere**', 'Nota de închidere a amortizării, corporale și necorporale'], ['**Evidență**', 'Situație lunară, lista fișelor, lista de inventar, evidența MF'], ['**Numere de inventar**', 'Registrul numerelor de inventar, pe fiecare pagină'], ['**Operații**', 'Situația reevaluărilor, majorărilor și modificărilor; istoric operații'], ['**Contabil / fiscal**', 'Diferențe între amortizarea contabilă și cea fiscală'], ['**Ieșiri**', 'Proces-verbal de casare'], ['**În curs**', 'Lista imobilizărilor în curs, simplă sau grupată pe lucrări'], ], [2800, 6400]) H1('Întrebări frecvente (FAQ)') H2('Î: Am introdus greșit o operație. Cum o anulez?') P('**R:** Selectezi mijlocul fix în „Vizualizare amortizare contabilă” și apeși **Istoric Mișcări**. Modifici ' 'sau ștergi operația. Dacă o ștergi, o ștergi și din „Vizualizare amortizare fiscală”.') H2('Î: De ce nu văd butoanele Operațiuni și Istoric Mișcări?') P('**R:** Apar doar dacă ai drept de modificare. În lista fiscală, Operațiuni nu apare deloc.') H2('Î: Transformarea în N mijloace fixe a dat eroare. Ce s-a salvat?') P('**R:** Nimic. Imobilizarea în curs rămâne neschimbată. Corectezi cauza și reiei transformarea.') H2('Î: Cum schimb firma, anul sau luna contabilă?') P('**R:** Dai click dreapta pe imaginea de fundal a aplicației. Se deschide formularul „Alegeți firma / anul / ' 'luna”. Alegi **Firma**, **Anul** și **Luna** și confirmi cu **Terminare** (Ctrl+F).') H2('Î: Pot crea mai multe copii după același mijloc fix?') P('**R:** Da. După fiecare salvare programul întreabă dacă mai creezi o copie după același mijloc fix.') H1('Istoric versiuni') P('**v. 01.10.2026** — Manual refăcut în format nou; adăugate Copiere și Transformare în N MF; schimbarea ' 'firmei/lunii prin click dreapta pe fundal; plafonul de 1.500 lei verificat pentru 2026; pragul fiscal de 5.000 lei pentru mijloace fixe ' '(OUG 8/2026).') P('**v. 07.2021** — Versiunea anterioară, în format vechi.') EMPTY() para('footer', 'Manual generat pe baza documentației tehnice ROAIMOB') doc.core_properties.title = 'Manual ROAIMOB' doc.save(OUT) print('OK', len(IMG_LOG), 'imagini')