Manual ROAIMOB refacut in stilul ROAAUTO (docx + pdf, v. 01.10.2026)

- generat de build_manual_ROAIMOB.py; cele 15 poze existente pastrate
- adaugate Copiere, Transformare in N MF, prag fiscal 5.000 lei (OUG 8/2026)
- .doc vechi inlocuit de .docx; CLAUDE.md: sectiunea ROAIMOB

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hmc2BoKFNEQQWbj3ztiusQ
This commit is contained in:
2026-10-01 18:44:16 +03:00
parent f7b071316a
commit 3af5813dd8
5 changed files with 653 additions and 0 deletions

View File

@@ -39,3 +39,14 @@ Orice modificare de continut se face in **toate 4**.
foloseste `.encode('ascii','replace')`. foloseste `.encode('ascii','replace')`.
- `pdftotext` pierde diacriticele la afisare. E doar o problema de afisare, PDF-ul e corect. - `pdftotext` pierde diacriticele la afisare. E doar o problema de afisare, PDF-ul e corect.
- Versiunea anterioara a PDF-ului (pentru diff la istoric) e cea din `D:\ROA\ROAAUTO\Help\` inainte de copiere. - Versiunea anterioara a PDF-ului (pentru diff la istoric) e cea din `D:\ROA\ROAAUTO\Help\` inainte de copiere.
## Manual ROAIMOB - docx + pdf (fara md/txt)
| Fisier | Rol |
|---|---|
| `build_manual_ROAIMOB.py` | genereaza `manualROAIMOB.docx` (stil clonat din `manual_ROAAUTO.docx`, poze din `pozeROAIMOB\`) |
| `manualROAIMOB.pdf` | generat din docx cu soffice (comanda de mai sus) |
- Modificarile se fac in **script**, nu direct in docx. Ruleaza `python build_manual_ROAIMOB.py`, apoi soffice, apoi verificarea vizuala.
- Versiunea si istoricul urmeaza aceleasi reguli ca la ROAAUTO.
- Livrare: copiezi pdf-ul in `D:\ROA\ROAIMOB\Help\manual_ROAIMOB.pdf` (comis in SVN). Se deschide din Ajutor -> Instructiuni de utilizare (`lansare_help_meniu`, COMUN r18244). La release, Marius il copiaza in `Y:\ROAUPDATE\ROAIMOB\Help\`, ca sa intre in zip-ul de update.

642
build_manual_ROAIMOB.py Normal file
View File

@@ -0,0 +1,642 @@
# 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')

Binary file not shown.

BIN
manualROAIMOB.docx Normal file

Binary file not shown.

Binary file not shown.