Sari la conținut

Monetizare

Monetizarea închide ciclul: firma emite un cont de plată (proforma) sau o factură fiscală, eventual o semnează și o trimite clientului, clientul plătește prin transfer, plata se marchează, iar la final soldul se reconciliază printr-un act de verificare. Pagina descrie pas cu pas actorii și stările din cod.

Corespondentul vizual (swimlane) e pe board-ul FigJam: ASYDATA pe Figma.

  • Firma de contabilitate — emite documentul de plată, îl trimite, marchează încasarea.
  • ASYDATA (System) — generează PDF-ul, ține stările, leagă plata de factură.
  • Clientul — primește documentul și plătește.
  • MSign — semnătură electronică opțională pe document.
  • Banca — canalul transferului (IBAN).

Firma alege punctul de pornire:

PaymentRequest (asydata-app-backend-dotnet/src/Asy.Domain/Billing/PaymentRequest.cs) e o cerere de plată către client — nu e factură fiscală (fără TVA collectable, fără serie SPV). Util când plata se face anticipat. Numerotat ex. „CP” + counter. Lifecycle:

PaymentRequestStatusÎnțeles
Drafteditabil
Senttrimis clientului
Paidbani primiți (marcat manual), dar încă nefacturat fiscal
ConvertedToInvoices-a creat o Invoice cu link înapoi (ConvertedToInvoiceId)
Expireda depășit ExpiryDate fără plată
Cancelledanulat

La plată, contul de plată se poate converti într-o Invoice reală, cu ConvertedToInvoiceId + ConvertedAt pentru audit trail.

Alternativ, firma emite direct o Invoice (asydata-app-backend-dotnet/src/Asy.Domain/Invoicing/Invoice.cs) Outgoing, cu lifecycle propriu:

InvoiceStatusÎnțeles
Draftciornă, încă netrimisă
Validatedconfirmată local (lock + număr fixat), gata de trimis
Senttrimisă (poate include postare la SFS)
Partialparțial plătită
Paidintegral plătită
Overdueneplătită după scadență
Cancelledanulată (corectată de altă factură)

Pentru fluxul e-Factură (semnare XML + postare la SFS) vezi operare zilnică.

Documentul (cont de plată sau factură) primește un PDF generat dintr-un template (Google-Docs style), salvat în MinIO. Pe PaymentRequest, cheia se păstrează în PdfObjectKey. Pe Invoice, fișierele e-Factură se țin în EFacturaPdfObjectKey / EFacturaXmlObjectKey (când vin din SPV) sau FilePath.

Documentul poate fi semnat electronic prin MSign (MsignRequest, asydata-app-backend-dotnet/src/Asy.Domain/Msign/MsignRequest.cs), cu state machine MsignStatus { Pending, CallbackReceived, Completed, Failed }. Pentru factura fiscală e-Factură, semnătura poate declanșa auto-postarea la SFS (PostBackTarget) — vezi MSign.

Documentul se trimite clientului prin Document Hub (link public /share/{token}), prin Telegram sau email. Vezi comunicare și semnare — același mecanism de DocumentShare cu vizualizare și semnare publică (ShareableDocumentType include Invoice și Act).

Clientul transferă banii în contul firmei. IBAN-ul destinatar e indicat pe document (Invoice.BankAccountId, respectiv PaymentRequest.BankAccountId). Încasarea se înregistrează ca Payment (asydata-app-backend-dotnet/src/Asy.Domain/Banking/Payment.cs), legat de factură (InvoiceId):

PaymentStatusÎnțeles
Queuedcreată local, încă neexportată la bancă
Exportedinclusă într-un PaymentBatch și exportul a fost descărcat
Confirmedconfirmată că apare în extrasul bancar
Cancelledanulată înainte de export (păstrată pentru audit)

Metoda implicită e PaymentMethod.BankTransfer (mai există Cash, Card, Other).

La încasare, firma marchează documentul plătit:

  • Factura: Invoice.MarkPaid(paidAt) → InvoiceStatus.Paid (sau MarkPartial → Partial pentru plată parțială).
  • Contul de plată: trece în PaymentRequestStatus.Paid (sau ConvertedToInvoice dacă se emite factura fiscală).

Periodic, firma reconciliază soldul cu clientul printr-un act de verificare a decontărilor reciproce. ActDeVerificare (asydata-app-backend-dotnet/src/Asy.Domain/Billing/ActDeVerificare.cs) e un snapshot al tranzacțiilor (Invoices + Payments) pe o perioadă — nu e document fiscal. Calculează ClosingBalance = OpeningBalance + Σ debit − Σ credit (pozitiv = în favoarea noastră), cu rândurile înghețate în LinesJson. Lifecycle:

ActDeVerificareStatusÎnțeles
Draftîn lucru, rândurile refreshable
Generatedsnapshot înghețat, gata de export
Senttrimis la partener
Signedconfirmat de partener (SignedAt, SignedByPartnerEmail)
Disputedpartenerul a refuzat / are remarci (DisputeReason)
Cancelledanulat
Cont de plată (Draft→Sent→Paid) ┐
│ (eventual ConvertedToInvoice) │
└──────────────────────────────────────► │ PDF → MSign (opțional) → trimitere
Factură fiscală (Draft→Validated→Sent) ┘ (Share / Telegram / email)
│
client plătește prin transfer IBAN
│
Payment (Queued→Exported→Confirmed) + MarkPaid → Paid
│
Act de verificare (Draft→Generated→Sent→Signed)