- Implemented server and client script management tools in `frappe_mcp/tools/scripts.py` - Added translation and user permission management tools in `frappe_mcp/tools/translations.py` - Created user and role management tools in `frappe_mcp/tools/users.py` - Developed webhook and API key management tools in `frappe_mcp/tools/webhooks.py` - Introduced workflow management tools in `frappe_mcp/tools/workflow_tools.py` - Added `pyproject.toml` for project metadata and dependencies
348 lines
20 KiB
Markdown
348 lines
20 KiB
Markdown
# Dine360 Architecture Plan
|
|
> Generated: 2026-04-20 | Platform: Frappe 15.105.0 + ERPNext 15.104.3
|
|
> Instance: http://147.93.40.215:10009/
|
|
|
|
---
|
|
|
|
## 1. Platform Foundation
|
|
|
|
| Layer | Version | Notes |
|
|
|-------|---------|-------|
|
|
| Frappe Framework | 15.105.0 | Core DocType engine, workflow, notifications, scheduler |
|
|
| ERPNext | 15.104.3 | CRM, Accounts, HR modules available for reuse |
|
|
| Custom Module | Dine360 | Registered under `frappe` app |
|
|
|
|
---
|
|
|
|
## 2. Standard ERPNext DocTypes — Reuse Opportunities
|
|
|
|
These exist out of the box and can be linked from Dine360 DocTypes rather than recreating:
|
|
|
|
| ERPNext DocType | Dine360 Purpose | How Reused |
|
|
|-----------------|-----------------|------------|
|
|
| **Customer** | Advertiser billing account | Link from Advertiser → Customer for sales invoices |
|
|
| **Supplier** | Restaurant Partner payout | Link from Restaurant Partner → Supplier for purchase invoices |
|
|
| **Sales Invoice** | Advertiser billing | Create against Customer when campaign runs |
|
|
| **Purchase Invoice** | Restaurant payout | Create against Supplier on settlement |
|
|
| **Payment Entry** | Record actual payments | Link from Restaurant Settlement after payout |
|
|
| **Address** | Branch physical location | Link from Restaurant Branch → Address |
|
|
| **Contact** | Partner/advertiser contacts | Standard Contact linked to Restaurant Partner/Advertiser |
|
|
| **Employee** | Internal operations staff | Assign campaigns, escalations |
|
|
| **User** | Portal access | All 8 Dine360 roles assigned to Users |
|
|
| **File** | Creative asset storage | Ad Creative links to File for media uploads |
|
|
| **Communication** | Email/SMS log | Auto-logged on notification send |
|
|
| **Activity Log** | Audit trail | Auto-logged on all document changes |
|
|
| **ToDo** | Onboarding task reminders | Auto-created from Onboarding Checklist workflow |
|
|
|
|
---
|
|
|
|
## 3. Custom Dine360 DocTypes (19 Total)
|
|
|
|
### 3a. Child Tables (4)
|
|
|
|
| DocType | Parent | Purpose |
|
|
|---------|--------|---------|
|
|
| **Screen Group Member** | Screen Group | Lists Screen Devices belonging to a group |
|
|
| **Campaign Creative Item** | Ad Campaign | Creative assets (video/image) with duration per campaign |
|
|
| **Campaign Target Item** | Ad Campaign | Target screen groups and time slots per campaign |
|
|
| **Settlement Ledger Item** | Restaurant Settlement | Per-restaurant line items in a batch settlement |
|
|
|
|
### 3b. Master / Configuration DocTypes (6)
|
|
|
|
| DocType | Submittable | Key Fields | Autoname |
|
|
|---------|-------------|------------|----------|
|
|
| **Restaurant Partner** | No | partner_name, contact_email, status (Active/Inactive/Suspended), linked_supplier | `field:partner_name` |
|
|
| **Advertiser** | No | advertiser_name, contact_email, industry, linked_customer | `field:advertiser_name` |
|
|
| **Restaurant Branch** | No | branch_name, restaurant_partner (Link), city, address, is_active | `BRANCH-.#####` |
|
|
| **Ad Creative** | No | creative_name, advertiser (Link), media_type (Video/Image/HTML), file_url, duration_seconds, status (Draft/Approved/Rejected) | `CRTV-.YYYY.-.#####` |
|
|
| **Screen Device** | No | device_name, restaurant_branch (Link), screen_group (Link), device_serial, status (Active/Inactive/Maintenance), last_heartbeat | `SCRN-.#####` |
|
|
| **Screen Group** | No | group_name, description, screen_group_members (child table) | `field:group_name` |
|
|
|
|
### 3c. Transaction DocTypes (9)
|
|
|
|
| DocType | Submittable | Key Fields | Autoname |
|
|
|---------|-------------|------------|----------|
|
|
| **Ad Campaign** | **Yes** | campaign_name, advertiser (Link), start_date, end_date, budget, status, campaign_creative_items (child), campaign_target_items (child) | `CAMP-.YYYY.-.#####` |
|
|
| **Revenue Rule** | No | rule_name, advertiser (Link), restaurant_partner (Link), revenue_split_percent, effective_from, effective_to | `RULE-.YYYY.-.#####` |
|
|
| **API Sync Log** | No | sync_type, sync_status (Success/Failed/Partial), synced_at, records_processed, error_message | `SYNC-.YYYY.-.#####` |
|
|
| **Campaign Schedule** | No | ad_campaign (Link), screen_device (Link), scheduled_date, start_time, end_time, status (Pending/Confirmed/Cancelled) | `SCHED-.YYYY.-.#####` |
|
|
| **Playback Log** | No | screen_device (Link), ad_campaign (Link), played_at, duration_played, completion_status | `PLAY-.YYYY.-.#####` |
|
|
| **Device Heartbeat** | No | screen_device (Link), heartbeat_at, ip_address, cpu_load, memory_used, status (Online/Offline/Warning) | `HB-.YYYY.-.#####` |
|
|
| **Revenue Ledger** | No | restaurant_partner (Link), ad_campaign (Link), revenue_rule (Link), period_start, period_end, gross_revenue, platform_share, partner_share, status (Draft/Calculated/Approved) | `RLGR-.YYYY.-.#####` |
|
|
| **Restaurant Settlement** | **Yes** | settlement_name, settlement_period_start, settlement_period_end, total_payout, status, settlement_ledger_items (child) | `SETL-.YYYY.-.#####` |
|
|
| **Onboarding Checklist** | No | restaurant_partner (Link), assigned_to, current_stage, lead_date, review_date, agreement_date, setup_date, go_live_date | `OB-.YYYY.-.#####` |
|
|
|
|
---
|
|
|
|
## 4. Entity Relationship Map
|
|
|
|
```
|
|
┌─────────────────┐
|
|
│ Advertiser │──────────────────────────┐
|
|
└────────┬────────┘ │
|
|
│ 1 │ 1
|
|
▼ N ▼ N
|
|
┌────────────────┐ ┌────────────────────┐
|
|
│ Ad Creative │ │ Revenue Rule │
|
|
└────────┬───────┘ └────────────────────┘
|
|
│ N │
|
|
▼ M (via child table) │
|
|
┌────────────────┐ │
|
|
│ Ad Campaign │─────────────────────────┘
|
|
└────┬───────┬───┘
|
|
│ │ via Campaign Target Items
|
|
│ ▼ N
|
|
│ ┌─────────────┐ ┌──────────────────┐
|
|
│ │ Screen Group│───────│ Screen Group │
|
|
│ └─────────────┘ │ Member (child) │
|
|
│ │ └──────────────────┘
|
|
│ │ N
|
|
│ ▼ 1
|
|
│ ┌─────────────┐ ┌───────────────────┐
|
|
│ │Screen Device│───────│Restaurant Branch │
|
|
│ └──────┬──────┘ └────────┬──────────┘
|
|
│ │ │ N
|
|
│ │ 1 ▼ 1
|
|
│ ┌──────┴──────┐ ┌──────────────────────┐
|
|
│ │ Playback │ │ Restaurant Partner │
|
|
│ │ Log │ └────────────┬─────────┘
|
|
│ └─────────────┘ │ 1
|
|
│ ▼ N
|
|
│ ┌──────────────────────┐
|
|
└─────────────────────────►│ Revenue Ledger │
|
|
└──────────┬───────────┘
|
|
│ N
|
|
▼ 1 (via child)
|
|
┌──────────────────────┐
|
|
│Restaurant Settlement │
|
|
└──────────────────────┘
|
|
|
|
Device Heartbeat ──► Screen Device
|
|
Campaign Schedule ──► Ad Campaign + Screen Device
|
|
API Sync Log ──► (standalone audit log)
|
|
Onboarding Checklist ──► Restaurant Partner
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Role Permission Matrix
|
|
|
|
| Role | Masters | Campaigns | Revenue | Devices | Settlement | Onboarding |
|
|
|------|---------|-----------|---------|---------|------------|------------|
|
|
| **Dine360 Admin** | Full | Full | Full | Full | Full | Full |
|
|
| **Campaign Manager** | Read | Full | Read | Read | None | None |
|
|
| **Operations Manager** | Read | Read/Write | Read | Full | Read | Full |
|
|
| **Finance Manager** | Read | Read | Full | None | Full | None |
|
|
| **Support Executive** | Read | Read | None | Read | None | Read/Write |
|
|
| **Restaurant Manager** | Own | Own | Own | Own | Own | Own |
|
|
| **Restaurant Viewer** | Read-Own | Read-Own | Read-Own | None | Read-Own | None |
|
|
| **Device Agent** | None | Read | None | Write-Own | None | None |
|
|
|
|
---
|
|
|
|
## 6. Workflow Map
|
|
|
|
### 6a. Campaign Approval Workflow (Ad Campaign)
|
|
|
|
```
|
|
Draft ──[Submit for Review]──► Pending Approval ──[Approve]──► Approved ──[Schedule]──► Scheduled
|
|
│ │ │
|
|
[Reject] [Reject] [Activate]
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
Rejected Rejected Running ──[Complete]──► Completed
|
|
│
|
|
[Cancel]
|
|
│
|
|
▼
|
|
Cancelled
|
|
```
|
|
|
|
| Transition | From | To | Action | Roles |
|
|
|------------|------|----|--------|-------|
|
|
| Submit for Review | Draft | Pending Approval | Submit for Review | Campaign Manager |
|
|
| Approve | Pending Approval | Approved | Approve | Dine360 Admin, Operations Manager |
|
|
| Reject | Pending Approval | Rejected | Reject | Dine360 Admin, Operations Manager |
|
|
| Schedule | Approved | Scheduled | Schedule | Campaign Manager, Operations Manager |
|
|
| Activate | Scheduled | Running | Activate | Device Agent, Operations Manager |
|
|
| Complete | Running | Completed | Complete | Device Agent, Operations Manager |
|
|
| Cancel | Running | Cancelled | Cancel | Dine360 Admin, Operations Manager |
|
|
|
|
### 6b. Restaurant Onboarding Workflow (Onboarding Checklist)
|
|
|
|
```
|
|
Lead ──[Move to Review]──► Review ──[Sign Agreement]──► Agreement ──[Begin Setup]──► Setup ──[Go Live]──► Live
|
|
```
|
|
|
|
| Transition | From | To | Action | Roles |
|
|
|------------|------|----|--------|-------|
|
|
| Move to Review | Lead | Review | Move to Review | Operations Manager, Support Executive |
|
|
| Sign Agreement | Review | Agreement | Sign Agreement | Operations Manager, Dine360 Admin |
|
|
| Begin Setup | Agreement | Setup | Begin Setup | Operations Manager |
|
|
| Go Live | Setup | Live | Go Live | Operations Manager, Dine360 Admin |
|
|
|
|
### 6c. Settlement Payout Workflow (Restaurant Settlement)
|
|
|
|
```
|
|
Draft ──[Calculate]──► Calculated ──[Approve Payout]──► Approved ──[Mark Paid]──► Paid
|
|
│ │ │
|
|
[Hold] [Hold] [Raise Dispute]
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
Held Held Disputed ──[Resolve]──► Paid
|
|
```
|
|
|
|
| Transition | From | To | docstatus | Action | Roles |
|
|
|------------|------|----|-----------|--------|-------|
|
|
| Calculate | Draft | Calculated | 0→0 | Calculate | Finance Manager |
|
|
| Approve Payout | Calculated | Approved | 0→1 | Approve Payout | Finance Manager, Dine360 Admin |
|
|
| Hold | Calculated | Held | 0→0 | Hold | Finance Manager |
|
|
| Hold | Approved | Held | 1→1 | Hold | Finance Manager, Dine360 Admin |
|
|
| Mark Paid | Approved | Paid | 1→1 | Mark Paid | Finance Manager |
|
|
| Raise Dispute | Paid | Disputed | 1→1 | Raise Dispute | Restaurant Manager, Finance Manager |
|
|
| Resolve Dispute | Disputed | Paid | 1→1 | Resolve Dispute | Finance Manager, Dine360 Admin |
|
|
|
|
---
|
|
|
|
## 7. Naming Series Reference
|
|
|
|
| DocType | Series | Example |
|
|
|---------|--------|---------|
|
|
| Restaurant Branch | `BRANCH-.#####` | BRANCH-00001 |
|
|
| Ad Creative | `CRTV-.YYYY.-.#####` | CRTV-2026-00001 |
|
|
| Screen Device | `SCRN-.#####` | SCRN-00001 |
|
|
| Ad Campaign | `CAMP-.YYYY.-.#####` | CAMP-2026-00001 |
|
|
| Revenue Rule | `RULE-.YYYY.-.#####` | RULE-2026-00001 |
|
|
| API Sync Log | `SYNC-.YYYY.-.#####` | SYNC-2026-00001 |
|
|
| Campaign Schedule | `SCHED-.YYYY.-.#####` | SCHED-2026-00001 |
|
|
| Playback Log | `PLAY-.YYYY.-.#####` | PLAY-2026-00001 |
|
|
| Device Heartbeat | `HB-.YYYY.-.#####` | HB-2026-00001 |
|
|
| Revenue Ledger | `RLGR-.YYYY.-.#####` | RLGR-2026-00001 |
|
|
| Restaurant Settlement | `SETL-.YYYY.-.#####` | SETL-2026-00001 |
|
|
| Onboarding Checklist | `OB-.YYYY.-.#####` | OB-2026-00001 |
|
|
| Restaurant Partner | `field:partner_name` | Metatron Cubes |
|
|
| Advertiser | `field:advertiser_name` | Coca-Cola India |
|
|
| Screen Group | `field:group_name` | Zone A Screens |
|
|
|
|
---
|
|
|
|
## 8. Status Values Reference
|
|
|
|
| DocType | Status Field | Allowed Values |
|
|
|---------|-------------|----------------|
|
|
| Restaurant Partner | status | Active, Inactive, Suspended |
|
|
| Ad Creative | status | Draft, Approved, Rejected |
|
|
| Screen Device | status | Active, Inactive, Maintenance |
|
|
| Campaign Schedule | status | Pending, Confirmed, Cancelled |
|
|
| Playback Log | completion_status | Completed, Partial, Failed |
|
|
| Device Heartbeat | status | Online, Offline, Warning |
|
|
| Revenue Ledger | status | Draft, Calculated, Approved |
|
|
| API Sync Log | sync_status | Success, Failed, Partial |
|
|
|
|
---
|
|
|
|
## 9. Notification Map (5 Active Notifications)
|
|
|
|
| Notification | DocType | Trigger | Recipients |
|
|
|-------------|---------|---------|-----------|
|
|
| Campaign Submitted for Review | Ad Campaign | workflow_state → Pending Approval | Dine360 Admin, Operations Manager |
|
|
| Campaign Approved | Ad Campaign | workflow_state → Approved | Campaign Manager |
|
|
| Campaign Rejected | Ad Campaign | workflow_state → Rejected | Campaign Manager |
|
|
| Settlement Approved for Payout | Restaurant Settlement | workflow_state → Approved | Finance Manager |
|
|
| Campaign Ending Soon | Ad Campaign | end_date within 3 days | Campaign Manager |
|
|
|
|
---
|
|
|
|
## 10. Dashboard & Reporting Map
|
|
|
|
### 10a. Existing Dashboard Charts (6)
|
|
|
|
| Chart | Type | DocType | X-Axis | Y-Axis |
|
|
|-------|------|---------|--------|--------|
|
|
| Campaigns by Status | Donut | Ad Campaign | — | status (count) |
|
|
| Active Screen Devices | Donut | Screen Device | — | status (count) |
|
|
| Restaurant Partners by Status | Donut | Restaurant Partner | — | status (count) |
|
|
| Monthly Revenue Ledger | Bar | Revenue Ledger | period_start (monthly) | partner_share (sum) |
|
|
| Settlements Over Time | Bar | Restaurant Settlement | settlement_period_start (monthly) | total_payout (sum) |
|
|
| Playback Log Volume | Line | Playback Log | played_at (daily) | name (count) |
|
|
|
|
### 10b. Recommended Future Reports (Phase 2)
|
|
|
|
| Report | Type | Purpose |
|
|
|--------|------|---------|
|
|
| Campaign Performance Summary | Query Report | Impressions, completion rate, revenue per campaign |
|
|
| Revenue Split Breakdown | Script Report | Per-partner revenue vs platform share over period |
|
|
| Device Uptime Report | Query Report | Heartbeat-based uptime % per device/branch |
|
|
| Settlement Audit Trail | Query Report | Full ledger→settlement→payment chain |
|
|
| Advertiser Billing Statement | Script Report | Invoice-ready summary for advertiser |
|
|
| Onboarding Pipeline | Query Report | Checklist stage distribution + SLA |
|
|
|
|
---
|
|
|
|
## 11. Server-Side Automation Map (Phase 2)
|
|
|
|
| Automation | Type | Trigger | Action |
|
|
|------------|------|---------|--------|
|
|
| Revenue Split Calculator | Server Script | On Playback Log save | Calculate partner_share in Revenue Ledger |
|
|
| Device Offline Alert | Scheduled Job | Every 5 min | Flag Device Heartbeat > 10 min old as Offline |
|
|
| Campaign Auto-Complete | Scheduled Job | Daily | Set Running campaigns past end_date → Completed |
|
|
| Settlement Auto-Batch | Scheduled Job | Monthly | Batch Calculated Revenue Ledgers → new Settlement |
|
|
| Creative Auto-Expire | Scheduled Job | Daily | Flag Ad Creatives not updated in 90 days |
|
|
| Device Sync API | API Endpoint | REST POST | Accept heartbeat + playback data from devices |
|
|
|
|
---
|
|
|
|
## 12. Phase 2 Implementation Order
|
|
|
|
All 19 DocTypes, 3 workflows, 5 notifications, 6 charts, and 1 workspace are **already live**.
|
|
Phase 2 items in recommended build order:
|
|
|
|
```
|
|
Step 1 — Server Scripts (business logic)
|
|
1.1 Revenue split auto-calculation on Playback Log save
|
|
1.2 Settlement batch-creation script (aggregate Revenue Ledger → Settlement)
|
|
1.3 Campaign status auto-complete (scheduled)
|
|
1.4 Device offline detection (scheduled heartbeat check)
|
|
|
|
Step 2 — Query / Script Reports
|
|
2.1 Campaign Performance Summary (Query Report)
|
|
2.2 Revenue Split Breakdown (Script Report)
|
|
2.3 Device Uptime Report (Query Report)
|
|
2.4 Settlement Audit Trail (Query Report)
|
|
|
|
Step 3 — Print Formats
|
|
3.1 Settlement Payout Slip (Restaurant Settlement)
|
|
3.2 Advertiser Campaign Summary (Ad Campaign)
|
|
|
|
Step 4 — Portal / Role Permissions
|
|
4.1 Tighten user permissions per Role Permission Matrix (Section 5)
|
|
4.2 Configure Restaurant Manager portal view
|
|
4.3 Configure Advertiser self-service portal (if needed)
|
|
|
|
Step 5 — API Endpoints
|
|
5.1 Device heartbeat sync endpoint (POST /api/method/dine360.heartbeat)
|
|
5.2 Playback log ingestion endpoint (POST /api/method/dine360.playback)
|
|
5.3 Campaign schedule fetch endpoint (GET /api/method/dine360.schedule)
|
|
|
|
Step 6 — Integration
|
|
6.1 Link Restaurant Partner → Supplier (for Purchase Invoice on settlement)
|
|
6.2 Link Advertiser → Customer (for Sales Invoice on campaign billing)
|
|
6.3 Auto-create Payment Entry on Settlement marked Paid
|
|
```
|
|
|
|
---
|
|
|
|
## 13. Key Design Decisions & Constraints
|
|
|
|
1. **Dine360 is a custom module** on the `frappe` app — not a separate installable app. Upgrade-safe as long as customizations live in DocType/Server Script/Client Script records.
|
|
|
|
2. **Submittable DocTypes**: Only `Ad Campaign` and `Restaurant Settlement` are submittable. Revenue Ledger uses a status field (not docstatus) to allow edits through the approval cycle.
|
|
|
|
3. **Workflow docstatus rule**: Frappe forbids transitions from submitted (docstatus=1) → draft (docstatus=0). All dispute/hold states in the Settlement workflow are docstatus=1.
|
|
|
|
4. **ERPNext accounting integration** is optional but available: Settlement → Purchase Invoice → Payment Entry chain uses native ERPNext accounting. Disable if a simpler ledger-only approach is preferred.
|
|
|
|
5. **Device authentication**: Screen Devices should authenticate via API key (generate one API key per device via `frappe_generate_api_key`). The Device Agent role limits read access to only Campaign Schedule.
|
|
|
|
6. **Revenue Rule priority**: If multiple Revenue Rules match an Advertiser + Partner pair, use the most recently effective rule. Overlap validation should be enforced via server script.
|