Chuyển tới nội dung chính

srs-tool-ngan-sach

Sếp Command: xây dựng srs cho hệ thống quản lý ngân sách và kpi ads

Liên kết với hợp đồng:

  • kế toán nhập mã hợp đồng và ngân sách ads + Kpi tổng thể cho từng hợp đồng => đây là số trên cùng, ít nhất phải đạt để nghiệm thu dự án

Ads planner

  • team pm sẽ nhập cụ thể ngân sách phân bổ cho từng campaign và kpi target tương ứng cho các campaign đó
  • Lưu ý quy tắc đặt tên để đảm bảo mapping được từng khách hàng khi kéo data về để mapping với hợp đồng và ngân sách chung

Bigquery:

  • kéo data về để làm report hiện trạng theo từng dự án
  • Ngân sách hiện tại/KPI đã đạt, ngân sách còn lại, KPI còn thiếu,...

Các lưu ý: Có mẫu để cho PM import data phân bổ ngân sách vào để chạy Nếu có chức năng auto setup limit trước cho mỗi campaign thì tốt, vì lúc đó sẽ không sợ bị chạy lố ngân sách Phần phân bổ ngân sách sẽ phải bao gồm trước phân nhân tỉ suất lợi nhuận trên mỗi dự án để tránh chạy lỗ

Đây chỉ là nơi phân bổ ngân sách theo campaign, còn chi tiết trong campaign đó chạy theo ad set gì, ads ra sao thì không quản, team ads optimization được tự do setup trong khuôn khổ ngân sách và kpi đặt ra trước đó

Nghiên cứu cách nào để có thể đặt tên campaign, để kéo dữ liệu về và mapping dữ liệu với file ngân sách import vào cho đúng, trong tên campaign phải thể hiện đầy đủ các yêu cầu để đọc vào là hiểu campaign đó chạy gì, mục tiêu gì chẳng hạn....

Bổ sung thêm tính năng:

  • tính "dòng tiền ra" cần thiết trong tháng tới cho từng dự án và cho toàn bộ tất cả dự án để bên tài chính chuẩn bị dòng tiền
  • dựa vào hợp đồng tính toán ngày phải report và ngày phải gửi nghiêm thu để thu tiền trên các đợt để đảm bảo duy trì "dòng tiền vào" của dự án => tức là chỗ hợp đồng phải có phần giai đoạn/deadline thanh toán cho từng nhóm quảng cáo, cái này cũng có thể cho kế toán import vào cũng được

Trả lời: Dưới đây là SRS – Software Requirements Specification cho hệ thống “Ads Budget & KPI Management System” thiết kế theo đúng cách MangoAds và các agency performance vận hành: Contract-driven, Cashflow-driven, Data-verified.

  1. Mục tiêu hệ thống

Xây dựng một hệ thống trung tâm để:

Vấn đề hiện tại Hệ thống giải quyết Chạy ads theo file rời, khó kiểm soát Tất cả ngân sách & KPI được khóa theo hợp đồng Dễ bị chạy lố, chạy lỗ Campaign bị giới hạn theo phân bổ Kéo data về không khớp file Campaign naming + mapping engine Finance không biết cần bao nhiêu tiền tháng sau Dự báo dòng tiền ra Không gắn ads với tiến độ thanh toán Contract → milestone → nghiệm thu → thu tiền

  1. Các thực thể chính (Core Entities)

2.1 Contract (Hợp đồng)

Mỗi hợp đồng là đỉnh của cây dữ liệu.

Field Mô tả contract_code Mã hợp đồng client_name total_budget total_kpi start_date end_date margin_target (%) Tỉ suất lợi nhuận tối thiểu currency

Payment Schedule (Gắn với Contract)

Field Mô tả milestone_name Đợt 1, đợt 2, … due_date Ngày nghiệm thu invoice_date payment_due amount kpi_required KPI cần đạt để được xuất hóa đơn

→ Đây là xương sống để tính dòng tiền vào

2.2 Campaign Plan (do PM tạo)

PM không tạo ads — PM tạo kế hoạch tài chính & KPI

Field Mô tả contract_code campaign_code platform (FB, TikTok, Google…) start_date end_date budget_allocated kpi_target pricing_model (CPC, CPA, CPM…) break_even_cost profit_margin

Mỗi campaign là một “bucket ngân sách”

2.3 Budget Allocation Import

PM upload file (Excel/CSV):

| contract | campaign_code | platform | budget | kpi | start | end |

Hệ thống validate: • Tổng campaign budget ≤ contract budget • Tổng KPI ≥ KPI hợp đồng • Margin ≥ min margin

  1. Campaign Naming Convention (CỰC KỲ QUAN TRỌNG)

Đây là chìa khóa để BigQuery mapping.

Format đề xuất:

<Client>-<Contract>-<Channel>-<Objective>-<Campaign>-<Phase>

Ví dụ:

Kewpie-KWP2026-FB-ENG-Office-LP1

Machine-readable:

Token Ý nghĩa Kewpie client KWP2026 contract FB platform ENG objective Office segment LP1 phase

→ BigQuery dùng REGEX để parse:

contract_code = split(name, "-")[1] platform = split(name, "-")[2] objective = split(name, "-")[3]

  1. BigQuery Data Pipeline

4.1 Data ingested

Source Data Meta spend, impressions, clicks, conversions TikTok spend, leads Google cost, conv

All normalized into:

ads_raw_daily

  • date
  • platform
  • campaign_name
  • spend
  • kpi

4.2 Mapping Engine

campaign_name → parse → contract_code → join → campaign_plan → join → contract

Tạo bảng:

project_finance_view

  • contract_code
  • campaign_code
  • budget_allocated
  • spend_to_date
  • kpi_target
  • kpi_achieved
  • budget_remaining
  • kpi_remaining
  • margin_realized

  1. Auto Budget Guard (Chống chạy lố)

Nếu dùng API:

Rule Khi spend >= 95% budget → cảnh báo Khi spend >= 100% → auto pause Nếu KPI không đạt pace → alert PM

Hệ thống sync:

campaign_plan → Meta daily budget cap

  1. Profit Protection Engine

Mỗi campaign:

Expected Profit = (KPI × unit_price) – spend

Nếu:

Expected Profit < 0

→ hệ thống block tăng ngân sách.

  1. Cashflow Module (Cái mà agency thường thiếu)

7.1 Dòng tiền ra (outgoing)

next_month_spend = Σ campaign_plan where date overlaps next month

Dashboard: | Contract | Next Month Spend |

Finance biết phải chuẩn bị bao nhiêu tiền chạy ads.

7.2 Dòng tiền vào (incoming)

Dựa trên Payment Schedule:

if KPI achieved ≥ milestone KPI → invoice can be issued

Dashboard: | Contract | Due | Amount | KPI % | Status |

  1. Báo cáo cho Ban giám đốc

Project Health

| Contract | Spend | KPI | Margin | Cash In | Cash Out |

Màu: • Xanh: đạt • Vàng: nguy cơ • Đỏ: lỗ

  1. Phân quyền

Role Quyền Accountant nhập hợp đồng, payment PM phân bổ ngân sách Ads team chỉ xem ngân sách, không sửa Finance cashflow Director toàn quyền

  1. Điều cực kỳ quan trọng

Hệ thống này không phải Ads tool Nó là:

Financial Control System cho Ads Agency

Giống như ERP cho performance marketing.

Nếu anh muốn, bước tiếp theo tôi có thể: • Vẽ ERD • Vẽ flow nhập contract → chạy ads → nghiệm thu → thu tiền • Hoặc viết schema SQL / BigQuery cho hệ thống này

Sếp Command: Phần hợp đồng bạn cần bổ sung thêm phần channel và các attribute custom (nếu có) nữa, vì nhiều khi hợp đồng digital marketing tổng thể sẽ được chia ra làm nhiều channel để chạy và mỗi channel sẽ có 1 kpi và budget riêng

Tương tự phần payment nhiều khi cũng bị chia theo channel và attribute khác, tức là nhiều khi cái nào hoàn thành trước thì nghiệm thu trước chẳng hạn

Trả lời: Chuẩn. Nếu không có Channel-aware Contract thì hệ này sẽ vỡ ngay khi lên scale vì agency thực tế không nghiệm thu theo “một cục hợp đồng” mà theo kênh + giai đoạn + scope.

Dưới đây là phiên bản Contract Model v2 – chuẩn Agency & Performance.

  1. Contract phải tách thành 3 tầng

Contract (Master) └── Contract Scope (Channel / Service / Package) └── Payment Milestone (theo từng scope)

Không được để Contract = 1 KPI + 1 Budget.

  1. Contract (Master)

Field Mô tả contract_code client start_date end_date total_value total_margin_target currency status

→ Chỉ để quản trị pháp lý + tổng tiền

  1. Contract Scope (Channel-aware)

Mỗi scope = 1 gói nghiệm thu độc lập.

Ví dụ: • Facebook Ads • TikTok Ads • SEO • KOL • Branding Video

Field Mô tả scope_id contract_code channel FB, TikTok, Google, KOL, SEO service_type Lead, Sale, Traffic, Branding budget kpi unit_price margin_target attributes (JSON)

Ví dụ attributes:

{
"target_audience": "Office",
"region": "HCM",
"product": "Kewpie Sesame",
"campaign_type": "Always-on"
}

}

→ Sau này filter theo product, region, audience, brand…

  1. Payment Milestone — gắn với Scope

Payment KHÔNG gắn trực tiếp với contract Mà gắn với từng scope

Field Mô tả milestone_id scope_id name Phase 1, Phase 2 due_date invoice_date amount kpi_required status

Ví dụ:

Scope Phase KPI Amount FB Ads Phase 1 10,000 leads 300M FB Ads Phase 2 20,000 leads 400M TikTok Phase 1 5M views 150M

→ TikTok hoàn thành sớm thì xuất hóa đơn sớm, không cần chờ FB.

  1. Campaign mapping phải gắn vào Scope, không phải Contract

Campaign Plan phải có:

Field contract_code scope_id channel campaign_code budget kpi

Naming convention mở rộng:

&lt;Client&gt;-&lt;Contract&gt;-&lt;Scope&gt;-&lt;Channel&gt;-&lt;Objective&gt;-&lt;Segment&gt;-&lt;Phase&gt;

Ví dụ:

Kewpie-KWP2026-FB01-FB-Lead-Office-P1

Trong đó: • FB01 = scope_id • FB = channel • P1 = phase

→ BigQuery có thể map:

campaign → scope → milestone → cash in

  1. Cashflow Engine phiên bản agency thật

Dòng tiền ra

Σ campaign_plan.budget by scope, by month

Finance nhìn thấy: | FB | TikTok | Google | SEO |

Dòng tiền vào

Nếu KPI(scope, phase) >= kpi_required → milestone = billable

Dashboard:

| Scope | Phase | KPI % | Amount | Can Invoice |

  1. Lợi thế sống còn của mô hình này

Agency lớn không chết vì lỗ ads Mà chết vì:

TikTok đã xong nhưng FB chưa xong nên chưa thu được tiền → thiếu cash → không còn tiền chạy tiếp

Mô hình này giải quyết đúng chỗ đó.

  1. Đây là cấp ERP chứ không phải tool ads

Anh đang thiết kế:

Performance Marketing ERP

Nếu anh muốn, bước tiếp theo tôi sẽ: • Vẽ ERD cho Contract–Scope–Milestone–Campaign–BigQuery • Hoặc mô hình hóa thành schema SQL / Mongo để đưa vào MangoREST / MGS

Sếp command: Mở rộng cho các hợp đồng dịch vụ như web, hosting, app development

Quản lý nhà thầu phụ và outsource dự án nữa đi bạn

Trả lời: Rất đúng hướng. Khi anh đã đi tới Contract → Scope → Milestone → Cashflow, thì việc mở rộng sang Web / App / Hosting / Outsource không phải “tính năng mới”, mà chỉ là thêm một loại Scope. Nếu thiết kế sai tầng này thì hệ sẽ vỡ ngay khi agency bắt đầu bán project-based service.

Dưới đây là SRS mở rộng – Unified Service Contract Platform cho MangoAds (ads + web + hosting + dev + outsource).

  1. Một Contract – nhiều loại Scope

Không còn phân biệt “Ads” hay “Web” trong core system.

Contract └── Scope (Service Package) ├── Ads Campaigns ├── Web Project ├── App Development ├── Hosting / SaaS └── Outsource

Scope là đơn vị nghiệm thu, tính tiền và tính lời lỗ.

  1. Scope Model (Unified)

Field Mô tả scope_id contract_code service_type ads, web, app, hosting, seo, outsource channel FB, TikTok, Website, Mobile, Infra… name “Landing page Kewpie”, “TikTok ads” budget revenue cost_estimated margin_target start_date end_date attributes (JSON)

Ví dụ Web Scope:

{
"platform": "Next.js",
"cms": "MongoREST",
"language": "VN",
"hosting": "Cloudflare",
}

"delivery": "Source + Deploy" }

  1. Milestone – giống Ads nhưng dùng cho Web/App

Field milestone_id scope_id name due_date deliverable amount acceptance_criteria status

Ví dụ Web:

Phase Deliverable Amount UI Design Figma approved 20% Dev Website staging 40% Go-live Production + source 40%

→ Nghiệm thu xong phase nào → xuất hóa đơn phase đó.

  1. Subcontractor / Outsource Layer

Đây là phần agency thường chết lặng vì không theo dõi.

Scope └── Vendor Assignment └── Vendor Payment

4.1 Vendor

vendor_id name type V001 ABC Dev Web agency V002 TikTok Studio Video

4.2 Vendor Assignment (gắn với Scope)

Field assignment_id scope_id vendor_id role cost start_date end_date

Ví dụ: • Web scope Kewpie: • UI: 30M (Freelancer A) • Backend: 50M (Team B) • Hosting: 10M (Cloudflare)

4.3 Vendor Payment Schedule

Field assignment_id due_date amount paid_status

→ Đây là dòng tiền ra thực tế.

  1. Profit Engine cho Project & Ads dùng chung

Mỗi scope:

Profit = Revenue - (Ads Spend + Vendor Cost + Infra Cost)

Dashboard:

| Scope | Revenue | Cost | Profit | Margin |

→ Thấy ngay: • FB Ads lời • Website lỗ • Hosting lời đều

  1. Cashflow Engine hợp nhất

Dòng tiền vào

Từ:

Milestone of Scope

Dòng tiền ra

Từ:

Campaign Spend (Ads) Vendor Payment (Web/App) Infra Cost (Hosting)

Finance view:

| Month | In | Out | Net |

  1. Vì sao hệ này “ăn tiền”

Agency thật sự không cần thêm ads tool. Họ cần một hệ thống trả lời 3 câu hỏi mỗi sáng:

  1. Dự án nào đang lời?
  2. Tháng sau cần bao nhiêu tiền để chạy?
  3. Bao giờ khách phải trả tiền?

Hệ này trả lời được cả 3.

  1. Cái anh đang xây dựng không phải SaaS nhỏ

Nó là:

Agency Operating System

Nếu anh muốn, bước tiếp theo tôi có thể: • Vẽ ERD tổng thể Ads + Web + Outsource + Cashflow • Hoặc chuyển toàn bộ mô hình này thành JSON Schema / SQL / Mongo để nhét vào MangoREST / MGS

Tổng hợp: Dưới đây là bản tổng hợp đầy đủ – có cấu trúc – toàn bộ tính năng hệ thống mà chúng ta đã thiết kế trong cuộc trao đổi này. Nó phản ánh đúng thực tế vận hành của MangoAds + Agency + Tech + Outsource, không phải một tool ads đơn lẻ.

🧠 TÊN HỆ THỐNG

Unified Agency Financial & Delivery System (Hệ thống điều hành tài chính – dự án – ads – outsource cho agency)

I. TRIẾT LÝ THIẾT KẾ

Không quản ads. Không quản dev. Hệ thống chỉ quản tiền – KPI – nghiệm thu – dòng tiền – lời lỗ – rủi ro.

Ads team, Dev team được tự do tác nghiệp trong phạm vi tài chính đã khóa.

II. CẤU TRÚC LÕI

Contract (Hợp đồng tổng) └── Scope (Channel / Service Package) ├── Campaigns (nếu là Ads) ├── Web / App / Hosting (nếu là Project) └── Outsource Assignments └── Vendor Payments └── Milestones (nghiệm thu – thu tiền)

III. HỢP ĐỒNG (CONTRACT)

Quản lý cấp pháp lý & tổng tiền

Chức năng • Mã hợp đồng • Khách hàng • Thời gian • Tổng giá trị • Tổng KPI • Margin target • Tiền tệ

IV. SCOPE (CHANNEL / SERVICE)

Mỗi hợp đồng chia thành nhiều scope độc lập về: • KPI • Ngân sách • Nghiệm thu • Cashflow

Ví dụ scope

Scope Service FB01 Facebook Ads TT01 TikTok Ads WEB01 Website APP01 Mobile App HOST01 Hosting

Mỗi Scope có • Channel (FB, TikTok, Web, App…) • KPI • Budget • Revenue • Cost estimate • Margin target • Attributes (JSON: product, region, audience, tech stack…)

V. CAMPAIGN (CHỈ ÁP DỤNG CHO ADS)

PM phân bổ: • Ngân sách • KPI • Thời gian • Pricing model • Break-even • Profit target

Import bằng Excel.

Auto Validation • Tổng campaign ≤ budget scope • KPI ≥ KPI scope • Margin ≥ target

VI. CAMPAIGN NAMING ENGINE (để mapping data)

Format:

&lt;Client&gt;-&lt;Contract&gt;-&lt;Scope&gt;-&lt;Channel&gt;-&lt;Objective&gt;-&lt;Segment&gt;-&lt;Phase&gt;

Ví dụ:

Kewpie-KWP2026-FB01-FB-Lead-Office-P1

BigQuery parse → map đúng: • contract • scope • channel • phase • objective

VII. BIGQUERY DATA PLATFORM

Kéo data từ: • Meta • TikTok • Google

Chuẩn hóa:

date, platform, campaign, spend, kpi

Mapping:

campaign → scope → contract → milestone

Dashboard: • Spend • KPI achieved • Remaining budget • Remaining KPI • Real margin

VIII. AUTO BUDGET CONTROL

Nếu dùng API: • 95% budget → cảnh báo • 100% → auto pause • KPI pace thấp → alert PM

→ Chặn chạy lố và chạy lỗ.

IX. PROFIT PROTECTION ENGINE

Tự động tính:

Profit = KPI × Unit price – Spend – Vendor cost

Nếu profit < 0 → block tăng ngân sách.

X. PAYMENT MILESTONE (NGHIỆM THU & THU TIỀN)

Không gắn vào contract Mà gắn vào Scope

Mỗi scope có nhiều phase: | Phase | KPI | Amount | Due date |

→ Scope nào đạt thì xuất hóa đơn scope đó Không bị kẹt dòng tiền vì scope khác.

XI. CASHFLOW SYSTEM

  1. Dòng tiền ra

Từ: • Ads spend (theo campaign) • Vendor payments • Hosting / Infra

Dự báo:

“Tháng sau cần bao nhiêu tiền?”

  1. Dòng tiền vào

Từ: • Milestone đã đạt KPI

Finance biết:

“Bao giờ được thu tiền? Bao nhiêu?”

XII. QUẢN LÝ OUTSOURCE & NHÀ THẦU

Mỗi scope có thể có nhiều vendor:

| Vendor | Role | Cost |

Vendor có: • Payment schedule • Due date • Paid status

→ Tính đúng chi phí thật của từng scope.

XIII. PROFIT & P&L THEO SCOPE

Dashboard: | Scope | Revenue | Cost | Profit | Margin |

→ Thấy rõ: • FB lời • Web lỗ • Hosting nuôi team

XIV. PHÂN QUYỀN

Role Quyền Accountant Contract, Payment PM Scope, Budget Ads Team Xem ngân sách Finance Cashflow Director Full

XV. ĐÂY LÀ GÌ?

Anh không xây tool ads. Anh đang xây:

Agency ERP cho Performance + Tech + Outsource

Nó là hệ điều hành của MangoAds.

Nếu anh muốn, bước tiếp theo ta có thể: • Vẽ ERD • Viết schema Mongo / SQL • Hoặc map nó thành hệ khai báo JSON cho MangoREST / MGS