Agency Flow · Prezentare de flux
F1 · Per deliverable — două roluri, o linie pe livrabil
Cel mai bogat flux din sistem: serviciul nu are supplier — fiecare linie de livrabil
și-l alege pe al ei. Specialistul introduce costurile, Finance/Ops pune fee-ul,
iar fiecare linie își parcurge propriul lifecycle. Singurul tip care folosește starea
awaiting_fee.
O singură dată · la vânzarea serviciului
Setup: nici parametri, nici supplier
Account managerCa la E, nu există tabel de pricing. În plus, câmpul Supplier din drawer dispare: F1 e singurul tip supplier fără furnizor la nivel de serviciu — furnizorii trăiesc pe linii, și un singur serviciu F1 poate traversa oricâți. Numele compus rămâne fără supplier, ca la tipurile labor.
1 august + pe parcursul lunii
Specialistul construiește liniile
SpecialistPerioada se naște cost_entry, goală. Pe măsură ce livrabilele se conturează, specialistul adaugă linii: descriere, supplier (per linie!), cantitate, cost/unitate. Coloana de fee nici nu-i apare în UI — e teritoriul finance. Cu „Submit cost", linia pleacă spre finance.
Pe măsură ce liniile sosesc · rol: Finance/Ops
Finance pune fee-ul — sau trimite înapoi
Finance / Ops
Finance vede liniile în awaiting_fee și completează fee/unit —
„Enter fee" → linia devine ready. Dacă ceva nu e în regulă, „Send back" o întoarce
la specialist. Iar dacă specialistul reeditează costul unei linii deja ready,
linia se resetează automat la cost_entry — fee-ul trebuie reconfirmat.
| deliverable | supplier | qty | cost/u | fee/u | client | state | acțiune |
|---|---|---|---|---|---|---|---|
| Article — Outreach | Outreach Media | 4 | 350 | 90 | 1.760 | ready | Send back |
| Article — Native | Contentbox | 2 | 280 | 70 | 700 | ready | Send back |
| Static design | Contentbox | 6 | 120 | — | — | awaiting_fee | Enter fee |
| Video | Webify | 1 | — | — | — | cost_entry | Awaiting specialist |
| Preview subtotal (linii ready) | 2.460 | ||||||
1 septembrie + la sosirea facturilor furnizorilor
O factură client, mai multe facturi furnizor
Finance modulul Billing — urmeazăAR (Accounts Receivable): după rezolvarea sau mutarea liniilor incomplete, toate liniile rămase ajung ready; abia atunci perioada intră integral în factura clientului cu suma combinată (2.460 + TVA), iar toate liniile devin invoiced împreună. AP (Accounts Payable): fiecare linie se leagă de factura propriului supplier — Outreach Media își revendică linia de 1.400, Contentbox pe a lui de 560. Un serviciu, doi (sau zece) furnizori, reconciliere rând cu rând.
service_billing_period — ce se scrie și ce se actualizează
La F1 rândul lunar NU primește inputuri și NU se editează direct — snapshot-urile se AGREGĂ din linii (service_cost_line), iar starea perioadei e DERIVATĂ din stările liniilor.
service_cost_line — introdusă de oameni, una per livrabil
La F1 liniile NU sunt materializate de engine — le introduce specialistul (cost) și le completează Finance (fee). Sunt N linii/lună, fiecare cu supplierul ei, fiecare cu propriul lifecycle. Aici e singura intrare umană în service_cost_line.
ready + invoiced intră în agregatele perioadei (cele cu
unit_fee NULL sunt excluse), iar starea perioadei se derivă din stările liniilor.
Simulare · construiește liniile tu
interactiv · doar vizual
Exact cum funcționează F1 în realitate: specialistul adaugă linii de livrabil (cost, fără fee)
și le trimite spre finance; Finance/Ops pune fee-ul → linia devine ready și intră
în subtotalul de preview. Fiecare linie își are propriul lifecycle, starea perioadei se derivă
din linii, iar Issue devine disponibil numai când toate liniile sunt ready; atunci toate
devin invoiced împreună. Nimic nu se salvează — e o schiță.
| deliverable | supplier | qty | cost/u | fee/u | client | state | acțiune |
|---|---|---|---|---|---|---|---|
| Preview subtotal (ready; final după Issue) | 0 | ||||||
cost_entry sau awaiting_fee nu intră în totaluri până nu
ajunge ready. Facturarea rămâne all-or-nothing pe perioadă: cât timp există o linie
incompletă, finance/ops trebuie să o completeze, să o trimită înapoi, să o șteargă sau să o
mute explicit în luna următoare.
De ce F1 justifică singur designul
Trei decizii de schemă există în primul rând pentru fluxul ăsta:
Supplier per linie
service.supplier_idNULL la F1 — impus de CHECK- fiecare
service_cost_line.supplier_idobligatoriu - un serviciu → oricâți furnizori, AP atribuit corect
Stare per linie
- singurul tip care folosește
awaiting_fee - editarea costului resetează linia la
cost_entry - starea perioadei = rezumat derivat, recalculat de engine
Fee nullable
unit_feeNULL = „finance n-a decis încă" — NULL de lifecycle- devine obligatoriu la
ready— regulă de engine - linia este exclusă din agregate cât fee-ul este NULL