O firmă de contabilitate nu se îneacă în muncă grea. Se îneacă în muncă invizibilă. Problemele apar când lucrurile „de făcut" încep să scape și ajungem să stingem focuri. La mii de clienți, adevărata provocare nu e să închizi o lună — e să știi, în orice clipă, ce mai e de făcut și unde. Care client tocmai a depășit pragul de TVA. Ce client are de returnat dividende și nu a făcut-o. Ce declarație n-a plecat încă. Ce client are o cerere non-standard. Aceste fire nu trebuie să trăiască în e-mailuri și capul fiecărui contabil.
Nevoia. E diferită în funcție de persoana care lucrează în Vertigo. Un contabil bun nu are nevoie de mai multe ecrane. Are nevoie de un singur loc care să-i spună: asta ai de făcut azi, la clienții tăi, în ordinea care contează. Iar managementul are nevoie de altceva din aceeași realitate: e businessul sănătos? Cresc clienții mai repede decât pleacă? Sunt contabilii la capacitate sau înecați? S-au depus toate declarațiile la timp? Piece of mind!
Produsul. Vertigo are view-uri diferite în funcție de cine îl folosește. Pentru contabil, Vertigo nu reinventează contabilitatea. O orchestrează. Rutina lunară (rezolvare manuală facturi în IRIS și urcare documente în SAGA) rămâne rutină. Asta e munca recurentă, lunară a oricărui contabil și la BONO este 90+% automatizată. Ne folosim de Vertigo ca să arătăm ce nu merge 100% după ce munca recurentă a fost făcută: pragul TVA depășit — depune D700, cereri venite din Dublin (clientul a angajat un om nou; vrea să treacă la impozit pe profit), declarația D310 nu a putut fi trimisă automat. Fiecare devine o sarcină clară, la contabilul potrivit, cu pașii ei. Vertigo nu e locul unde lucrezi — e locul de unde știi ce ai de lucrat, și de unde pornești spre uneltele care fac treaba: IRIS, SalarEasy, SAGA, Operațiuni manuale. Iar pentru management: Vertigo arată un snapshot clar al clienților și al operațiunilor, cu posibilitatea de a intra în detaliu pe fiecare client și fiecare declarație depusă.
Profitul. Modelul unei firme de contabilitate are o limită simplă: câți clienți poate duce un contabil. Crești numărul de clienți, angajezi proporțional contabili — și marja stă pe loc. Vertigo atacă exact raportul ăsta. Când rutina e automatizată și doar excepțiile cer atenție, un contabil poate ține mai mulți clienți fără să scape nimic. Asta înseamnă mai mulți clienți pe același cost de operare — adică marjă, nu doar venit. Și mai e o latură: fiecare prag prins la timp și fiecare cerere rezolvată repede înseamnă un risc evitat și un client mulțumit! BONO nu crește angajând mai mult; crește scoțând frecarea din muncă.
Un singur sistem. Munca invizibilă, făcută vizibilă. Asta e Vertigo.
Obiectiv: definește CE face Vertigo, ca bază pentru deciziile de arhitectură (model de date, servicii, integrare). Nu prescrie implementarea.
Sursa cerințelor: prototipul funcțional (index.html) este comportamentul de referință; datele demo din el nu sunt cerințe — regulile din acest document sunt.
OUT OF SCOPE: View-ul de Management, Autentificarea, Tab-ul demonstrativ Simulare.
Vertigo este unealta internă BONO pentru administrarea portofoliului de firme-client:
— Contabil: o firmă e asignată unui singur contabil. Contabilul își vede și operează exclusiv firmele lui.
— Admin — vede absolut toate firmele, dar nu are activ niciun buton de modificare: la apăsarea pe orice acțiune de modificare apare dialogul „Doar contabilul asignat poate realiza modificări".
— Management: View-ul de Management (dashboard) rămâne în afara MVP-ului — codul există în index.html (atenție Claude!), dar nu face parte din dezvoltarea curentă.
Scop: urmărirea conectării unei firme la cele 5 sisteme ale statului (SPV CUI, e-Factura, F150, REGES, VIES) — până când fiecare acces e Conectat sau Nu se aplică.
| Status | Sub-status | Semnificație |
|---|---|---|
| Neînceput | — | Conectarea nu a fost inițiată. |
| În progres | To Do | Avem o acțiune de făcut; textul acțiunii e obligatoriu. |
| În progres | Așteptăm răspuns | Cerere depusă; se afișează vechimea așteptării (zile). |
| Conectat | — | Acces activ. Data conectării e obligatorie și e introdusă de utilizator. Are valabilitate: dată de expirare sau Permanent. În cazul VIES se salvează codul VIES; VIES nu are valabilitate. |
| Nu se aplică | — | Accesul nu e relevant pentru firmă; motivul e obligatoriu. Alegerea aparține utilizatorului — nu există nicio regulă automată. |
Timestamp. La orice modificare de status sau sub-status, sistemul reține timestamp-ul la care utilizatorul a făcut acțiunea. Timestamp-ul e afișat în istoric, iar „Așteptăm răspuns · de X zile" se calculează de la Timestamp.
Țintă. Ținta de onboarding este 7 zile (hardcodat v1); depășirea se semnalează vizual progresiv (praguri +3 și +7 zile peste țintă).
Ordinea obținerii acceselor (dependențe):
— Prima oară se obțin: SPV CUI, F150 și REGES.
— Conectarea e-Factura — după obținerea accesului SPV CUI.
— După obținerea dreptului F150 se poate obține codul VIES.
Roboți (în V2). Evenimentele de robot modifică statusul și scriu în jurnal cu autor „Robotel" (vezi secțiunea 7); textele standard: „Eroare Robo, acțiune manuală." (eșec tehnic) și „Vezi răspuns autorități" (răspuns ANAF, cu textul integral atașat).
Scop: semnalarea automată a expirărilor și a situațiilor care afectează conformitatea. Alertele sunt derivate din date — nu se creează și nu se închid manual; dispar când datele se corectează.
| Tip | Se declanșează pe | Severitate în funcție de zile | Dispare când |
|---|---|---|---|
| Expirare sediu social | data de expirare a sediului firmei | ≤ 60 zile → info · ≤ 30 → warn · ≤ 15 → urgent · expirat → expirat | data de expirare e prelungită |
| Expirare CI | CI-ul asociatului și al administratorului | ≤ 30 zile → warn · ≤ 15 → urgent · expirat → expirat | CI-ul persoanei e actualizat |
| Micro fără angajat activ | firmă pe regim micro fără niciun angajat activ | imediat → expirat | firma are din nou un angajat activ sau iese din micro |
Severitatea nu e un status setat de utilizator — se calculează din numărul de zile, conform tabelului, și dă ordinea din feed și stilul vizual al alertei.
Scop: punctul de intrare în portofoliu — găsirea unei firme și deschiderea paginii ei.
Scop: politicile, pragurile și termenele BONO — la nivel de sistem (nu per client), cu istoric complet al modificărilor.
| Categorie | Setare | Valoare | Explicație |
|---|---|---|---|
| Praguri fiscale | Plătitor TVA | 395.000 lei | |
| Praguri fiscale | Microîntreprindere | 100.000 € | |
| Praguri fiscale | TVA lunar / trimestrial | 100.000 € | |
| Praguri fiscale | TVA la încasare | 5.000.000 lei | |
| Praguri fiscale | Majorare capital social | 400.000 lei | majorare capital la 5.000 lei |
| Politici contabile | Metodă amortizare | Liniară | implicit la mijloace fixe noi |
| Politici contabile | Prag mijloc fix (fiscal) | 5.000 lei | sub prag → obiect de inventar |
| Termene | Închidere lună | ziua 5 | ziua închiderii datelor lunare |
| Termene | Transmitere în e-Factura | +24h | delay față de emiterea facturii |
Editare. Valoare nouă + data intrării în vigoare, cu confirmare explicită. Istoric per setare: intervale {valoare, de la, până la}; valoarea curentă = capul istoricului, iar intervalul precedent se închide automat. La fiecare modificare se salvează și timestamp-ul + utilizatorul care a făcut-o — doar în baza de date, nu se afișează în istoric. Doar contabilul editează.
Efect. Pragurile fiscale alimentează plafoanele operaționale din profilul firmei (secțiunea 9).
| Declarație | Cod ERP | Obligativitate | Termen | Condiție (doar la obligatorii) |
|---|---|---|---|---|
| Lunare | ||||
| D112 | B28 | Obligatorie | 25 ale lunii următoare | are salariați activi |
| D311 | B29 | Obligatorie | 25 ale lunii următoare | Status ANAF = Activ fiscal · inactiv TVA sau Inactiv fiscal |
| D100 (lunar) | B26 | La decizia contabilului | 25 ale lunii următoare | |
| D301 CUI | B24 | La decizia contabilului | 25 ale lunii următoare | |
| D301 VIES | B27 | La decizia contabilului | 25 ale lunii următoare | |
| D390 | B25 | La decizia contabilului | 25 ale lunii următoare | |
| Trimestriale | ||||
| D100 (trimestrial) | C2 | Obligatorie | 25 ale lunii următoare trimestrului | — |
| D406 SAF-T (trimestrial) | C3 | Obligatorie | ultima zi a lunii următoare trimestrului | — |
| Bilanț (S1120) | C5 | La decizia contabilului | ultima zi a lunii următoare trimestrului | |
| Anuale | ||||
| D101 | D9 | Obligatorie | 25 martie (anul N+1) | regim de impozitare = impozit pe profit |
| Bilanț anual | D11 | Obligatorie | 150 de zile de la închiderea exercițiului | — |
| SAF-T anual | D10 | Obligatorie | 150 de zile de la închiderea exercițiului | — |
| D205 | D13 | La decizia contabilului | 28 februarie (anul N+1) |
Coloana Cod ERP e doar pentru dezvoltare — nu se afișează în UI.
Declarațiile obligatorii — condiții (logica exactă):
Declarații lunare
— IF firma are cel puțin un salariat activ THEN D112 (lunar) e obligatorie.
— IF Status ANAF = „Activ fiscal · inactiv TVA" OR „Inactiv fiscal" THEN D311 (lunar) e obligatorie.
Declarații trimestriale
— D100 (trimestrial) și D406 SAF-T (trimestrial): obligatorii pentru orice firmă (micro sau impozit pe profit).
Declarații anuale
— IF regim impozitare = Impozit pe profit THEN D101 (anual) e obligatorie. IF regim = Microîntreprindere THEN D101 nu apare în ERP Conta.
— Bilanțul anual (D11) și SAF-T anual (D10): obligatorii pentru orice firmă.
Declarațiile marcate ca obligatorii: apar în Tab Declarații; în ERP Conta nu au butonul N/A — adică nu pot fi marcate ca Not Applicable.
Declarațiile marcate „la decizia contabilului": nu apar în Tab Declarații (adică nu este obligatoriu să fie depuse în perioada respectivă); în ERP Conta pot fi marcate cu N/A.
Regula importantă: orice declarație marcată ca depusă apare în pagina companiei, în secțiunea Declarații și raportări, în secțiunea Depuse!
Alte condiții:
— IF firma are cod VIES obținut THEN D390 apare în ERP Conta (la decizia contabilului); ELSE nu apare.
— IF Status ANAF = „Activ fiscal · activ TVA", D311 nu apare în ERP Conta.
Scop: starea de conformitate a depunerii declarațiilor, pe trei piloni: Contabilitate, TVA–VIES, Salarii.
| Stare | Când |
|---|---|
| La zi | toate declarațiile pilonului sunt depuse pentru perioada selectată |
| De depus: lista coduri declarații | există declarații nedepuse, încă în termen; se afișează lista codurilor (ex. D301, D390). Obligativitatea depunerii și termenul (deadline-ul) unei declarații este un atribut în Setări contabile — secțiunea 5.2, Calendar declarații |
| Întârziat: <coduri> | cel puțin o declarație obligatorie, cu termenul depășit; se afișează lista codurilor cu termen depășit (ex. D301, D390) |
| — | pilonul nu se aplică firmei |
Sursă. Starea se agregă din declarațiile fiecărei firme. Vezi secțiunea 10.
O declarație trece prin următoarele stadii:
— Încărcată în Vertigo (declarația se încarcă, manual sau prin Robotel, prin apăsarea butonului „Încarcă" în ERP Conta, în pagina fiecărei firme).
— Depusă (declarația se marchează ca Depusă, manual sau prin Robotel, prin apăsarea butonului „Depune" în ERP Conta, în pagina fiecărei firme).
Grupare. Fiecare declarație aparține unui pilon: Contabilitate — D100 (lunar și trimestrial), D101, D205, D406 SAF-T (trimestrial), SAF-T anual, Bilanț (S1120), Bilanț anual · TVA–VIES — D301 CUI, D301 VIES, D390, D311 · Salarii — D112. Gruparea e configurare de administrare (hardcoded), folosită de acest tab pentru afișare; nu apare în UI-ul Setărilor contabile.
Există o serie de acțiuni care pot fi făcute de Roboți:
În V1 construim un sistem pentru ca toate operațiunile să fie realizate manual.
În Vertigo V2 va trebui suportată integrarea cu sisteme externe de automatizare („Roboți"): evenimentele lor vor modifica statusuri, vor descărca și vor încărca documente. Arhitectura v1 nu trebuie să blocheze această integrare.
Scop: tot ce ține de o singură firmă, într-un loc. Se ajunge aici prin click pe firmă din Clienți, Onboarding ANAF sau Alerte; aterizarea e mereu pe secțiunea Profil firmă.
De exemplu: avem SPV CUI în status Conectat. Dacă pornim un flux nou SPV CUI, acesta pornește cu status Neînceput și înlocuiește fluxul vechi, care era deja conectat. Istoricul fluxului înlocuit este reținut de sistem.
Scop: cartea de identitate a firmei — date de identificare, statut fiscal, plafoane, persoane, sediu, flotă, documente. Orice atribut editabil are același mecanism: meniu pe card cu Modifică și Istoric (intervale {valoare, de la, până la, autor}); modificarea cere valoare nouă + data intrării în vigoare.
| Atribut | Editabil | Specific |
|---|---|---|
| Denumire, CUI, Data înființării | nu | Data înființării vine din actele firmei și este distinctă de data adăugării firmei în Vertigo (creația firmei în Vertigo). Data adăugării firmei în Vertigo este folosită de Onboarding ANAF și de KPI-ul „Adăugat în Vertigo" din ERP Conta |
| Sediu social | da | pilulă Găzduit la BONO / La client (adresa la hover) + data expirării; schimbarea sediului cere 4 documente atașate (justificativ, comodat, act constitutiv, declarație) și generează evenimentul E12 în ERP Conta |
| Cod VIES | nu (aici) | se obține prin accesul VIES (secțiunea 2) |
| Capital social | da | modificarea prin evenimentul E1 (ERP) cere document justificativ |
| Cod CAEN principal + secundare | da | secundarele expandabile („+N secundare"); modificarea cere 3 documente și generează evenimentul E13 |
| Conturi bancare | nu | sincronizate din aplicația de facturare; status Activ / Închis |
| Status ANAF, Status ONRC | da | atribute sensibile — dublă confirmare la salvare |
| Regim impozitare | da | schimbarea cere D700 + recipisă ANAF atașate; flag contextual dacă e micro fără angajat activ |
| Regim TVA + TVA la încasare | da | schimbarea cere D700 + recipisă ANAF atașate și generează evenimentul E11 |
| Tip TVA (lunar / trimestrial) | da | „—" la neplătitor |
Sediu. Atributele editabile: Activitate la sediu (Da / Nu), Formă de deținere (Proprietate firmă / Închiriere / Comodat), Tip imobil (Locuință / Clădire de birouri), Regim utilizare (Exclusiv business / Mixt / Exclusiv personal), % suprafață alocată firmei (număr între 1 și 100). „Activitate la sediu" e poarta formularului: până e aleasă, celelalte câmpuri sunt inactive. Deductibilitatea se calculează — prima condiție îndeplinită, de sus în jos:
| Condiție (în ordinea evaluării) | Deductibil | Efect în formular |
|---|---|---|
| Sediu găzduit la BONO | 0% | atributele sediului nu se pot modifica (secțiunea nu are Modifică, atributele afișează „N/A"). Modificarea sediului se face prin atributul Sediu social din secțiunea Date de identificare |
| Activitate la sediu = Nu | 0% | câmpurile Tip imobil, Regim utilizare și % suprafață devin inactive, afișând „N/A" |
| Activitate la sediu = Da | % suprafață × regim: Exclusiv business 100% · Mixt 50% · Exclusiv personal 0% | — |
Procentul apare pe secțiune. La Formă de deținere = Închiriere, apare nota „chirie 100% (valoarea din contract)" lângă procentul de deductibilitate. Fiecare atribut modificat intră în istoricul lui (intervale, ca peste tot în Profil).
Vehicule. Card per vehicul, cu atributele fiscale editabile: Categorie auto (≤ 3,5 t și ≤ 9 locuri / > 3,5 t sau > 9 locuri), Formă de deținere, Scop utilizare (Exclusiv business / Mixt / Exclusiv personal), Categorie specială (Da / Nu), Categorie RAR. Deductibilitatea se calculează din ele — prima condiție îndeplinită, de sus în jos:
| Condiție (în ordinea evaluării) | Deductibil | Efect în formular |
|---|---|---|
| Categorie auto = > 3,5 t sau > 9 locuri | 100% | câmpurile Scop utilizare și Categorie specială devin inactive, afișând Scop utilizare = „Exclusiv business", respectiv Categorie specială = „N/A" |
| Categorie specială = Da | 100% | câmpul Scop utilizare devine inactiv, afișând Scop utilizare = „Exclusiv business" |
| Scop utilizare = Exclusiv business | 100% | — |
| Scop utilizare = Exclusiv personal | 0% | — |
| Scop utilizare = Mixt | 50% | — |
Procentul apare pe card.
Fișa mijlocului fix (read-only) — datele ei vin din IRIS.
Scop: vederea de consultare a contabilității firmei — totul read-only, cu deschidere de documente; excepția e adăugarea manuală de documente în Documente primite. Patru sub-pagini în sidebar:
| Sub-pagină | Conținut |
|---|---|
| Documente primite | documentele justificative ale lunii: nr., dată, partener, tip, sumă + documentul și nota contabilă; filtre: Toate / Facturi intrare / Facturi ieșire / Extrase bancare / Contracte & polițe / Diverse; selector de lună; buton „Adaugă doc" (mai jos) |
| Evidențe contabile | Balanță de verificare (lunar), Registru inventar (anual), solduri Clienți / Furnizori (cu țară și CUI), Imobilizări (cu fișa MF) |
| Declarații și raportări | De depus pentru perioada curentă (cod, perioadă, scadență; butonul „Document" descarcă documentul declarației) + Depuse (cod, perioadă, data depunerii, index ANAF — cel introdus la depunere, secțiunea 11.2 —, recipisă) |
| P&L | Venituri, Cheltuieli deductibile, Profit + tabel detaliu; selector an (dropdown) + Q1–Q4 / An |
„Adaugă doc". Butonul deschide un modal: Tip document (Contract / Poliță asigurare / Proces verbal / Declarație vamală) + câmpurile per tip + încărcarea documentului (obligatorie):
Sursele documentelor. Documentele primite vin din Dublin (le încarcă clientul) și din e-Factura; nota contabilă a fiecărui document vine din IRIS. Documentele din Evidențe contabile și Declarații și raportări vin din SAGA — sunt descărcate din SAGA și încărcate în Vertigo în ERP Conta; se rețin timestamp-ul încărcării și utilizatorul care le-a încărcat.
Scop: to-do-ul contabilului pentru firmă în ERP (SAGA) — 68 de activități de checklist (A1–A6, B1–B29, C1–C7, D1–D13, E1–E13), fiecare cu cod, denumire, trigger și calea exactă în SAGA, grupate pe etape și organizate pe perioade.
| Tip | Activități | Apare |
|---|---|---|
| Configurare (o dată) | A1–A5: configurare firmă, plan de conturi, IBAN, serii facturi, subscriere capital | la firmă nouă e singurul card; perioadele recurente apar abia când configurarea e completă — fiecare pas bifat sau N/A, cel puțin unul bifat. KPI „Adăugat în Vertigo": data adăugării firmei în Vertigo + numărul de zile scurse până la data curentă |
| Lunar | B1–B29, pe 5 etape: import/validare facturi → bancă → salarial și diverse → închidere de lună → documente și declarații | pentru fiecare lună |
| Trimestrial | C1–C7: calcule, apoi declarații (D100, SAF-T, bilanț interimar…) | pentru fiecare trimestru |
| Anual | D1–D13: repartizare rezultat, inventariere, declarații, depunere | pentru fiecare an |
| Ocazional | A6 + E1–E13, pe grupuri: capital, mijloace fixe, dividende, declarații și modificări fiscale | catalog permanent; o înregistrare aterizează în perioada lunii alese |
Dependențe în checklist
1. Când toți pașii A1–A5 din Configurare sunt bifați sau N/A, se „deblochează" restul checklist-ului.
2. B23–B29 din Generare documente și declarații se „deblochează" după ce B21 — Închidere lună a fost bifat cu bifă (nu N/A sau amânare).
3. C1 din Trimestru se „deblochează" după ce B22 — Generare balanță a fost bifat cu bifă (nu N/A sau amânare).
4. C2–C7 din Trimestru se „deblochează" după ce C1 a fost bifat cu bifă (nu N/A sau amânare).
5. D12 se „deblochează" după generarea situațiilor financiare (D11).
Fișierele de import. La activitățile de import (B1, B2, B3, B5, B7, B8, B10, B12), Vertigo generează fișierul de încărcat în SAGA (.csv sau .xml); pe rândul activității există un buton de download, iar contabilul îl descarcă și îl încarcă manual în SAGA. Capul de tabel al fiecărui fișier e documentat pe Drive: https://drive.google.com/drive/folders/1IdnFtcdQgRDa48fz6h-Mf317JYH48oSC?usp=sharing
! Pentru generarea celor 2 fișiere .XML revenim cu detalii suplimentare până la momentul implementării.
Blocarea tranzacțiilor raportate. Odată raportată — inclusă într-un fișier generat — tranzacția se blochează, ca să se evite dubla raportare.
Roboții de import (versiuni viitoare). În V1 nu există roboți — toate activitățile, inclusiv importurile, se fac manual. În Vertigo V2 vrem ca un Robot să descarce fișierele din Vertigo → le importe în SAGA → revină în Vertigo și marcheze acțiunea cu Succes sau Eroare.
Înregistrări ocazionale. Click pe o activitate din catalog → dialog cu data evenimentului + câmpurile specifice; unele cer document atașat (E1, E2 — justificativ; E10 — D205). Înregistrarea ocazională nu dispare din tabul Ocazional odată realizată, dar apare atribuită la luna respectivă, în filtrul Lunar, într-un card denumit „Alte operațiuni", poziționat înainte de închiderea de lună; rândul din card afișează doar codul și denumirea activității (datele complete rămân în înregistrare).
Alte reguli cu privire la înregistrările ocazionale:
Trei evenimente se generează automat din Profil:
— E11 (schimbare regim/TVA),
— E12 (schimbare sediu),
— E13 (modificare CAEN).
— A6 dispare din catalog după prima înregistrare.
Scop: starea lunară a obligațiilor salariale, per angajat. Card per angajat cu starea globală („La zi cu toate" / „Are restanțe"), expandabil pe trei acțiuni:
| Acțiune | Stare | Detaliul la restanță |
|---|---|---|
| Depunere D112 | La zi / Restant | „Nedepusă pentru: <lunile>" |
| Plată taxe salariale | La zi / Restant | suma restantă |
| Plată salariu | La zi / Restant | suma restantă |
— Documentele de angajare vin din SalarEasy, periodic (la o angajare nouă, la modificarea contractului — Anexă).
— Documentele salariale vin lunar din SalarEasy.
— Statusul depunerii D112 vine din sistemul de Depuneri declarații.
— Plata taxelor salariale, respectiv plata salariilor, le mutăm pentru Vertigo V2.