معماری چندکسبوکاری، تجاری و تجارت الکترونیک · فصل ۳ — Cost، Pricing، P&L، Entitlement و SLA · 238
P&L per Client و Contribution Margin
معماری یا تصمیم تجاری را با preference و الگوهای آماده میگیرد و constraint/cost/serviceability را مدل نمیکند. موضوع جاری: «P&L per Client و Contribution Margin». میتواند برای «P&L per Client و Contribution Margin» یک تصمیم bounded با constraints، cost/risk و stop/pivot condition طراحی کند.
خلاصهٔ درس
معماری یا تصمیم تجاری را با preference و الگوهای آماده میگیرد و constraint/cost/serviceability را مدل نمیکند. موضوع جاری: «P&L per Client و Contribution Margin».
میتواند برای «P&L per Client و Contribution Margin» یک تصمیم bounded با constraints، cost/risk و stop/pivot condition طراحی کند.
خروجی این درس
میتواند برای «P&L per Client و Contribution Margin» یک تصمیم bounded با constraints، cost/risk و stop/pivot condition طراحی کند.
این درس دربارهٔ «یک عدد سود برای هر مشتری» نیست. هدف این است که بتوانی دقیقاً بگویی هر نتیجه از چه لایهای میآید، چه هزینههایی داخل آن هستند و با کدام نسخهٔ تخصیص ساخته شده است.
1) مسئلهای که این درس حل میکند
درآمد مشتری معمولاً راحت دیده میشود؛ اما سودآوری واقعی وقتی خراب میشود که credit/refund، مصرف مستقیم، کارمزد پرداخت، زمان پشتیبانی و سهم هزینههای مشترک در یک سبد نامشخص ریخته شوند. در این وضعیت دو نفر میتوانند از یک مشتری دو «سود» متفاوت گزارش کنند و هر دو ظاهراً عدد درست داشته باشند.
2) مرز درس و خروجی
خروجی این درس Client P&L & Contribution Bridge v1 است. این artifact برای تصمیم مدیریتی داخلی است، نه صورت مالی قانونی، اظهارنامه مالیاتی یا invoice. خروجی باید از recognized_revenue تا fully_loaded_profit یک زنجیرهٔ قابلردیابی بسازد و cost_scope و allocation_version را کنار عدد نگه دارد.
3) Fact: Gross Profit با Overhead یکی نیست
راهنمای فعلی QuickBooks برای Invoice Profitability، revenue، direct cost/COGS و gross profit را نشان میدهد و تصریح میکند overhead و operating expenses در همان گزارش نیستند. پس اگر یک گزارش فقط direct cost را کم میکند، نباید آن را خودکار «fully-loaded client P&L» نامید.
4) Fact: Unit Economics میتواند تا سطح Customer/Cost-to-Serve برود
FinOps Unit Economics متریکهایی مثل cost per customer/tenant و cost to serve را به رسمیت میشناسد و آنها را به بحثهای margin، sustainability و pricing وصل میکند. اما خود FinOps نمیگوید MAKNOW دقیقاً کدام هزینه را contribution و کدام را shared allocation بداند؛ این مرز باید محلی و مستند باشد.
5) مدل ذهنی درست: Revenue → Contribution → Fully Loaded
سه لایه را جدا نگه دار: net_revenue، سپس contribution economics، سپس fully-loaded view. Contribution میپرسد «این مشتری بعد از هزینههای مستقیم/متغیر چه چیزی برای پوشش shared cost باقی میگذارد؟» Fully-loaded میپرسد «بعد از تخصیص سهم shared cost چه نتیجهای میماند؟» این دو سؤال یکی نیستند.
6) Period و Revenue Boundary را قفل کن
client_id و period باید قبل از هر محاسبه ثابت باشند. recognized_revenue با credits_refunds همان period به net_revenue تبدیل میشود. اگر credit بعد از بستهشدن دوره ثبت شود، عدد جدید ممکن است قابل محاسبه باشد اما بدون restatement/version نباید final تلقی شود.
7) Contribution Cost را صریح بساز
در این قرارداد، contribution cost از direct_usage_cost + payment_cost + customer_support_cost + other_variable_cost ساخته میشود. اگر پشتیبانی مشخصاً برای همان مشتری انجام شده، انتقال آن به shared overhead فقط برای بهتر شدن margin یک misclassification است، نه optimization.
8) Contribution Profit و Margin را از نو محاسبه کن
contribution_profit = net_revenue − contribution_cost. اگر net_revenue > 0 باشد، contribution_margin_pct = contribution_profit / net_revenue × 100. این خروجی هنوز fully-loaded profit نیست. نمایش درصد بدون scope، period و evidence یک عدد بیپشتوانه است.
9) Shared Allocation را لایهٔ جدا نگه دار
allocated_shared_cost باید جدا از contribution cost بماند و allocation_version داشته باشد. سپس fully_loaded_cost = contribution_cost + allocated_shared_cost و fully_loaded_profit = net_revenue − fully_loaded_cost. اگر روش تخصیص عوض شود، مقایسهٔ قبل/بعد بدون restatement یا segmentation قابل اتکا نیست.
10) Contribution-positive میتواند Fully-loaded-negative باشد
اگر contribution profit مثبت ولی fully-loaded profit منفی باشد، این درس آن را MARGINAL مینامد. این state میگوید مشتری به پوشش shared costs کمک میکند اما با allocation فعلی fully-loaded سودده نیست. حذف این لایه باعث میشود «سودده» و «زیانده» بیشازحد ساده شوند.
11) Variance Driver را کنار نتیجه منتشر کن
تغییر سود باید explanation داشته باشد: CREDIT, SUPPORT_AUTOMATION, USAGE_SPIKE, PAYMENT_FEE, ALLOCATION_V2 یا ترکیبی از آنها. variance_driver برای داستانسازی نیست؛ برای این است که reviewer بداند کدام evidence نسبت به دورهٔ قبلی تغییر کرده است.
12) Core Evidence Contract
هر Bridge باید ۲۰ بُعد زیر را حمل کند و ۱۵ بُعد بحرانی بدون evidence معتبر نمیتوانند خالی بمانند.
| Field | Critical | Purpose |
|---|---|---|
client_id | YES | Stable customer identity |
period | YES | Reporting period boundary |
recognized_revenue | NO | Revenue recognized for client/period |
credits_refunds | NO | Credits/refunds deducted from recognized revenue |
net_revenue | YES | recognized_revenue - credits_refunds |
direct_usage_cost | YES | Client-attributable model/cloud/usage cost |
payment_cost | YES | Client-attributable payment/processing cost |
customer_support_cost | YES | Client-attributable support effort cost |
other_variable_cost | NO | Other explicitly attributable variable cost |
contribution_cost | NO | Sum of contribution-layer direct/variable costs |
contribution_profit | YES | net_revenue - contribution_cost |
contribution_margin_pct | YES | Contribution profit as percent of net revenue |
allocated_shared_cost | YES | Allocated common/platform cost outside contribution layer |
fully_loaded_cost | YES | contribution_cost + allocated_shared_cost |
fully_loaded_profit | YES | net_revenue - fully_loaded_cost |
cost_scope | YES | Versioned definition of which costs belong to each layer |
allocation_version | YES | Version of shared-cost allocation logic |
variance_driver | YES | Named evidence change explaining movement |
decision_state | NO | PROFITABLE/MARGINAL/LOSS/HOLD/DISPUTED |
evidence_ref | YES | Trace to source rows or synthetic evidence |
13) Typed State جلوی «سود جعلی» را میگیرد
PROFITABLE یعنی contribution مثبت و fully-loaded غیرمنفی. MARGINAL یعنی contribution مثبت اما fully-loaded منفی. LOSS یعنی contribution غیرمثبت. HOLD برای evidence ناقص/نیاز به restatement و DISPUTED برای scope یا comparison ناسازگار است. هیچ score کلی حق ندارد HOLD یا DISPUTED را پنهان کند.
14) مقایسه باید Scope و Allocation Version مشترک داشته باشد
دو مشتری یا دو دوره فقط وقتی مستقیم قابل مقایسهاند که تعریف هزینهها و allocation version همتراز باشد. اگر cost_scope متفاوت است یا allocation method عوض شده، اول restate/segment کن؛ بعد نتیجه بگیر. این قاعده از مقایسهٔ زیبا اما بیمعنا جلوگیری میکند.
15) Lab، Transfer و Freshness
در Lab هشت fixture داری: baseline، misclassification پشتیبانی، refund بعد از close، allocation-version drift، scope mismatch، evidence مفقود، مشتری contribution-positive/fully-loaded-negative و transfer نهایی. در transfer، Client A credit میگیرد، support بعد از automation کم میشود و allocation به v2 میرود؛ باید هر دو profitability layer را از evidence جدید بسازی. منابع QuickBooks و FinOps در 2026-09-15 بازبینی شدند و هر تغییر معنادار قبل از review_due نیازمند requalification است.
ارزیابی
پاسخنامهی این درس در بستهی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار میفرستد.
ARC-019-Q1 retrieval
Explain why contribution profit and fully-loaded profit answer different management questions.
ARC-019-Q2 application
Build Client P&L & Contribution Bridge v1 for the baseline fixture and justify its typed state.
ARC-019-Q3 diagnosis
A customer-specific support cost is moved into shared overhead. Which evidence dimension fails and why?
ARC-019-Q4 transfer
Recompute after a credit, lower support cost from automation, and a new shared-allocation version.
ملاکهای ارزیابی (rubric)
Pass requires: explicit period/revenue boundary; complete critical evidence; correct contribution versus fully-loaded layer separation; visible cost scope/allocation version; no invented evidence; and independent recomputation of transfer.
منابع و تازگی
مطالعهٔ موارد (case studies)
تصاویر درس
Flow from recognized revenue through contribution economics and shared allocation to fully loaded profit and typed decision states.
فایلهای آزمایشگاه
python run_checks.py را اجرا کن. state هر fixture را ببین و هر بار فقط یک بُعد evidence را تغییر بده. دادهها کاملاً مصنوعی و آفلاین هستند. پاسخ baseline را oracle سناریوی transfer فرض نکن.