Lotus · cadrul legal și analiza tehnică

Analiza tehnică Lotus — de la analiză la prototip, PRD și implementare

Lotus · facturi emise și facturi primite · în lucru, punct cu punct · de discutat cu CTO și Product Owner Bono

Brief — ce face Lotus

Rezumat

Lotus lucrează, pentru fiecare client, cu două liste: facturi deschise și linii din extras deschise.
Potrivirea = o alocare: factura · linie · sumă.
Starea facturii și starea liniei (inchisa/deschisa) decurg din alocări.
O rulare a lui Lotus = liniile deschise X facturile deschise; ce se potrivește devine alocare și iese din ambele liste; ce rămâne e reluat la rularea următoare.

Scope MVP

Intră: facturi emise și primite; linii OP și card; bonuri; facturi în valută; toate facturile din Nucleu, indiferent de sursă sau vechime.

Nu intră: taxe și salarii (trec la IRIS); TVA la încasare (clienții vin după MVP).

1. Arhitectura sistemului Lotus

Variantele

1 — Lotus cu bază proprie, facturi în copie
Pro: Lotus de sine stătător, poate trăi oriunde, cu istoric propriu.
Contra: aceeași factură în două locuri. Orice schimbare în Nucleu (storno, anulare, modificare, duplicat prins de IRIS) trebuie trimisă și la Lotus, altfel Lotus închide pe o factură care nu mai există. La 1.000 de clienți sincronizarea e un proiect în sine, iar ecranele tot din Nucleu citesc — starea facturii ar fi în Lotus, factura în Nucleu.

2 — pachet la fiecare apel
Pro: o singură sursă de adevăr; Lotus e o funcție — aceleași date, același răspuns; se testează cu fișiere (exact cum am făcut simularea), se rulează de oricâte ori, se înlocuiește ușor; poate fi construit și în afara IT, pe un contract clar.
Contra: Nucleu trebuie să aplice răspunsul și să țină starea (sold rămas pe factură, linie închisă / în așteptare, alerte) — o parte din logică stă în Nucleu; pachetul trebuie să aducă și liniile vechi rămase deschise, nu doar extrasul nou.

3 — acces direct la baza Nucleu
Pro: zero integrare, zero copii, zero pachete; Lotus citește ce-i trebuie și scrie alocările în aceeași bază; un singur loc pentru stări și corecții.
Contra: legat de schema Nucleu — orice schimbare acolo poate rupe Lotus; aceeași echipă, același stack, același deploy; nu se testează fără bază; nu poate fi construit în afara IT.

Bruce: Varianta 2. Respinge 1 — sincronizarea copiilor e fatală la 1.000 de clienți. 2 peste 3: „aceleași date = același răspuns” → motorul se testează pe fișierele reale, precizia se măsoară, nu se presupune; o singură sursă de adevăr → desfacerea alocărilor e trivială; se poate construi acum, în afara IT. Ușă reversibilă: motorul e identic în 2 și 3, IT îl absoarbe mai târziu fără rescriere.

3. Ce input primește Lotus

Concluzie

Lotus primește de la Nucleu, pe client:

  • liniile din extras deschise (de_corelat), OP și card, cu datele extrase de IRIS;
  • facturile și bonurile deschise, de intrare și de ieșire, cu soldul rămas;
  • setările firmei: conturile proprii, N zile până la alerta „fără document".

Bruce — de decis conștient: datele învățate (IBAN-uri, dicționar de comercianți) sunt stare. În varianta 2 trebuie să trăiască în Nucleu și să călătorească în pachet la fiecare rulare; Lotus întoarce mapările actualizate. Dacă nu intră explicit în contract, diferențiatorul rămâne pe dinafară.

4. Ce output dă Lotus

Concluzie

Lotus întoarce, pe client, pentru liniile procesate:

  • alocările: factura · linie · sumă;
  • alertele pentru contabil, la linia respectivă — ex.: suma plătită mai mare decât toate facturile deschise ale partenerului (plată în plus); CUI-ul primit de la IRIS se potrivește, dar numele firmei diferă → nu stinge, alertă.

5. Cu ce sisteme comunică Lotus

Cu ce sisteme comunică Lotus. Doar cu Nucleu sau si cu IRIS.
Cine ii da comenzi lui Lotus pentru o reconciliere si catre cine intoarce Lotus raspunsul?

Propunere

  • IRIS scrie liniile din extras în Nucleu → Lotus le citește de acolo, nu de la IRIS.
  • Facturile vin în Nucleu (facturare, IRIS, e-Factura) → Lotus le citește de acolo.
  • Alocările și alertele → Lotus le scrie în Nucleu.
  • SAGA primește XML-ul de Încasări / Plăți cu FacturaID → îl generează Nucleu din alocări; Lotus nu vorbește cu SAGA.
  • Dublin și Vertigo citesc stările din Nucleu; corecția contabilului se scrie în Nucleu, ca alocare manuală; Lotus o vede la rularea următoare.

Concluzie: Lotus comunica doar cu Nucleul

Bruce: confirmă — Lotus doar cu Nucleu. O singură suprafață de integrare, exact ce ține varianta 2 curată. Lotus nu atinge SAGA deloc. De acord integral.

6. Când rulează Lotus

Ce declanșează o rulare pe client:

  • a) un extras nou procesat de IRIS — linii noi în Nucleu;
  • b) un document nou în Nucleu — factură sau bon venit după extras (canalul întârziat);
  • c) o corecție a contabilului în Vertigo — alocare manuală sau desfăcută;
  • d) la cerere — buton în Vertigo;
  • e) programat — o dată pe zi, ca plasă de siguranță.

Ce face rularea e același lucru indiferent de declanșator: ia liniile deschise × facturile deschise ale clientului. Lotus nu trebuie să știe de ce rulează. Și fiindcă aceleași date dau același răspuns, o rulare în plus nu strică nimic — poate rula oricât de des.

Propunere MVP: a + b (orice schimbare pe client → rulare), plus d pentru contabil. c și e vin gratis din același mecanism.

Bruce: toate 5 declanșatoarele pornite, nu doar a + b + d. Rularea e idempotentă, costul ~zero. e) — rularea zilnică — obligatorie, nu opțională: plasa care repară singură orice declanșator ratat, în 24 h; nimic nu rămâne blocat deschis.

7. Modelul de date și stările

O parte e deja în Brief (alocarea; stările derivate). Ce rămâne aici sunt cazurile care schimbă o alocare după ce a fost făcută:

  • factură anulată — alocarea se desface, linia redevine deschisă, alertă;
  • factură stornată — originalul neplătit: storno-ul îl închide fără bani; originalul plătit: alocarea rămâne, storno-ul stă deschis până vine restituirea sau o factură nouă pe care să se compenseze;
  • plată returnată de bancă (linia inversă) — alocarea se desface, factura redevine deschisă;
  • factură modificată (altă sumă) — alocarea se desface și se reia potrivirea.

8. Corecțiile — plata ajunsă în SAGA înainte de factură

Contabil clarificat (cele trei note):

  • Plata 473 = 5121
  • Înregistrarea facturii 6xx = 401
  • Corecția 401 = 473

În SAGA — de verificat cum se bifează factura plătită pe baza notei 401 = 473; până atunci, manual. Această operațiune manuală poate fi automatizată printr-un robotel.

Plus decizia de design: Nucleu trimite plățile fără factură în SAGA la închiderea lunii, nu pe loc, ca să fie cazul rar.

Bruce: fără robotel în MVP. Exportul la închiderea lunii face cazul rar oricum. Automatizarea UI-ului SAGA e fragilă; reziduul se rezolvă manual; se reconsideră doar dacă doare post-MVP.

9. Drumul spre SAGA

Stabilit deja: XML-ul de Încasări / Plăți cu FacturaID îl generează Nucleu din alocări; Lotus nu vorbește cu SAGA; plățile fără factură pleacă la închiderea lunii.

De clarificat, ambele în Nucleu, nu în Lotus:

a) Când pleacă în SAGA o plată legată de factură. Două opțiuni: pe loc, după fiecare rulare Lotus (SAGA e mereu la zi, dar o alocare desfăcută după export cere corecție în SAGA — cazul de la 8, invers); sau într-un singur export la închiderea lunii (SAGA primește totul odată, deja așezat; corecțiile de după export devin rare). Întrebarea e: contabilul are nevoie să vadă în SAGA plățile în cursul lunii, sau îi ajunge Vertigo până la închidere?

b) Cum știe Nucleu ce a trimis deja. O linie din extras trebuie să ajungă în SAGA o singură dată, chiar dacă Lotus rulează de zece ori între timp. Deci Nucleu ține pe fiecare linie „exportată în SAGA la data X". Nu e dilemă, e o cerință.

Dilema reală e doar a).

Bruce: a) la închiderea lunii, nu pe loc. Contabilul lucrează în Vertigo (live, din Nucleu), nu în SAGA în cursul lunii. Export unic la închidere → corecțiile de după export devin rare. Consistent cu 8.

13. Luna închisă

Vine o factură după ce luna este închisă. Lotus leagă plata de factură în Nucleu; corecția nu mai poate intra în luna închisă din SAGA.

De decis: ce trebuie să facă contabilul în acest caz.

Bruce: Nucleu leagă normal; corecția SAGA intră în luna deschisă următoare + alertă în Vertigo. Adevărul intern e mereu corect și live; SAGA recuperează în perioada următoare. Legătura din Nucleu nu se blochează niciodată pe calendarul SAGA.

15. Cine construiește

Întrebare deschisă, de decis cu CTO-ul. Închide și punctul 1:

  • IT, lângă Nucleu → varianta 3;
  • Cristi cu Claude → varianta 2.

Motorul e același în ambele.

Bruce: acum Cristi + Claude, ca varianta 2; IT absoarbe ulterior, ca varianta 3, dacă se dovedește. „Dovedește, apoi absoarbe” — contractul e artefactul de de-riscare.