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).
(1) Cont de plată sau factură fiscală
Secțiune intitulată „(1) Cont de plată sau factură fiscală”Firma alege punctul de pornire:
Cont de plată (proforma)
Secțiune intitulată „Cont de plată (proforma)”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 |
|---|---|
Draft | editabil |
Sent | trimis clientului |
Paid | bani primiți (marcat manual), dar încă nefacturat fiscal |
ConvertedToInvoice | s-a creat o Invoice cu link înapoi (ConvertedToInvoiceId) |
Expired | a depășit ExpiryDate fără plată |
Cancelled | anulat |
La plată, contul de plată se poate converti într-o Invoice reală, cu ConvertedToInvoiceId + ConvertedAt
pentru audit trail.
Factură fiscală
Secțiune intitulată „Factură fiscală”Alternativ, firma emite direct o Invoice (asydata-app-backend-dotnet/src/Asy.Domain/Invoicing/Invoice.cs)
Outgoing, cu lifecycle propriu:
InvoiceStatus | Înțeles |
|---|---|
Draft | ciornă, încă netrimisă |
Validated | confirmată local (lock + număr fixat), gata de trimis |
Sent | trimisă (poate include postare la SFS) |
Partial | parțial plătită |
Paid | integral plătită |
Overdue | neplătită după scadență |
Cancelled | anulată (corectată de altă factură) |
Pentru fluxul e-Factură (semnare XML + postare la SFS) vezi operare zilnică.
(2) Generare PDF din template
Secțiune intitulată „(2) Generare PDF din template”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.
(3) Semnare MSign (opțional)
Secțiune intitulată „(3) Semnare MSign (opțional)”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.
(4) Trimitere
Secțiune intitulată „(4) Trimitere”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).
(5) Clientul plătește prin transfer IBAN
Secțiune intitulată „(5) Clientul plătește prin transfer IBAN”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 |
|---|---|
Queued | creată local, încă neexportată la bancă |
Exported | inclusă într-un PaymentBatch și exportul a fost descărcat |
Confirmed | confirmată că apare în extrasul bancar |
Cancelled | anulată înainte de export (păstrată pentru audit) |
Metoda implicită e PaymentMethod.BankTransfer (mai există Cash, Card, Other).
(6) MarkPaid
Secțiune intitulată „(6) MarkPaid”La încasare, firma marchează documentul plătit:
- Factura:
Invoice.MarkPaid(paidAt)→InvoiceStatus.Paid(sauMarkPartial→Partialpentru plată parțială). - Contul de plată: trece în
PaymentRequestStatus.Paid(sauConvertedToInvoicedacă se emite factura fiscală).
(7) Act de verificare (reconciliere)
Secțiune intitulată „(7) Act de verificare (reconciliere)”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 |
Generated | snapshot înghețat, gata de export |
Sent | trimis la partener |
Signed | confirmat de partener (SignedAt, SignedByPartnerEmail) |
Disputed | partenerul a refuzat / are remarci (DisputeReason) |
Cancelled | anulat |
Rezumat flux
Secțiune intitulată „Rezumat flux”Cont de plată (Draft→Sent→Paid) ┐ │ (eventual ConvertedToInvoice) │ └──────────────────────────────────────► │ PDF → MSign (opțional) → trimitereFactură 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)- Achiziție client — contractul care generează facturile recurente.
- Operare zilnică — fluxul e-Factură la SFS.
- Comunicare și semnare — trimiterea documentelor.
- Stări și lifecycle — toate enum-urile.