Community研究与数据分析github.com

19970836597/-agent

为物业项目经理制作"月度经营分析汇报"PPT。当用户需要物业项目月度/季度经营分析、经营汇报、收入分析、欠款/欠费原因归因、收缴率分析、人均效能分析等 PPTX 成果,或提到"项目经理月度汇报""物业经营分析会"时使用。按"收入→欠款与催缴→收缴率→人均效能→异常科目归因→总结行动"的认知顺序生成 16:9 演示文稿,交付后自动附带逐页话术。

-agent 是什么?

-agent is a Claude Code agent skill that 为物业项目经理制作"月度经营分析汇报"PPT。当用户需要物业项目月度/季度经营分析、经营汇报、收入分析、欠款/欠费原因归因、收缴率分析、人均效能分析等 PPTX 成果,或提到"项目经理月度汇报""物业经营分析会"时使用。按"收入→欠款与催缴→收缴率→人均效能→异常科目归因→总结行动"的认知顺序生成 16:9 演示文稿,交付后自动附带逐页话术。.

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/19970836597/-agent/tree/HEAD/skills/buttin/ppt_skill

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Property Project Manager · Monthly Operations Performance PPT

The core isn't 'putting data on slides', it's arranging the story according to the audience's cognitive sequence: first make the operational fundamentals clear, then pinpoint anomalies to responsible people with deadlines.


This Skill's Knowledge is Stored in Two Places

FileWho Reads ItWhat It Contains
SKILL.md (this file)Humans / AgentWhy it's presented this way: narrative rationale, attribution methods, expression discipline
deck_spec.jsonToolHow to implement: number of slides, order, conclusion sentence templates, color palette

deck_spec.json is this skill's machine-readable knowledge. Change it to adjust the PPT's slide count and narrative approach—no Python code changes needed:

{
  "page_rules": [                       // ← 'How many slides for the PPT' is defined here
    {"max_minutes": 10, "sections": [7 sections]},
    {"max_minutes": 20, "sections": [11 sections]},
    {"max_minutes": 40, "sections": [16 sections]}
  ],
  "sections": [{
    "key": "revenue", "label": "Revenue", "layout": "chart",
    "data": {"value_column": "Bill Amount (CNY)", "group_column": "Charge Item"},
    "narrative": [                      // ← Conclusion sentence templates: from 'reciting numbers' to 'giving judgment'
      {"when": "top_share > 0.9",
       "so_what": "{top_name} accounts for {top_share_pct}% of revenue; the structure is singular and risk-resistance is weak; next month, public-area income should be made a special focus."},
      {"when": "", "so_what": "...default clause..."}
    ]
  }],
  "theme": {"colors": {...}, "palette": [...]}   // ← Color scheme is also knowledge
}

How the Conclusion Sentence Templates Work

The engine selects the first matching template from the list based on the when condition and fills the {placeholders} with actual data.

Available placeholders (auto-calculated from data): {total} {count} {top_name} {top_share} {top_share_pct} {group_count} {bottom_name} {bottom_value} …

Formatting suffixes: {total:万} (÷10000) {share:1%} (ratio → percentage) {count:,} (thousands separator) {value:2} (decimal places)

Supported conditions: > >= < <= == !=, and/or/not, has(x)/empty(x). Unparseable conditions are treated as 'not matched' and will not cause errors.

When data is missing, honestly degrade: annotate the page title with 'Data missing, pending supplement', and never impersonate using a different column. For example, if the 'Cost' page declares the column Cost Item but the data lacks it, the page will explicitly state what is missing.

Metrics Must Be Calculated from Data, Not Manually Transmitted

The derived section declares 'how to calculate', and the tool handles the calculation:

"derived": {
  "Received Amount (CNY)": {"expr": "Bill Amount (CNY) - Unpaid Amount (CNY)"},          // row-by-row, becomes a new column
  "Collection Rate": {"expr": "Received Amount (CNY) / Bill Amount (CNY) * 100",
             "scope": "total", "format": "{:.2f}%"}                  // Calculates one **single number** for the total sum
}

⚠ The default scope is row (calculates row by row, result becomes a new column); ratio-type metrics MUST use scope: "total" — calculating ratios row by row and then summing will lead to absurd values like 1,476,800%.

The calculated values are automatically merged into the narrative fact table, so {Collection Rate} can be directly used in conclusion sentence templates.

Verified with actual data (2、应收信息.xlsx): Collection rate = 92.48%, Arrears rate = 7.52%. Cross-checking by 'Payment Status' group matches perfectly (sum of unpaid for paid rows = 0).

Expressions are only allowed to reference column names and numeric constants, parsed with an ast whitelist — no eval. Expressions like __import__('os') will be rejected.

Cross-Table Joins Are Only Necessary When Dimensional Data is Not in the Main Table

Use datasets + join to declare 'which table to use, which columns to pick, and which key to join on':

"datasets": {
  "properties": {"file": "1、房产客户信息.xlsx", "key_column": "Property Code",
                 "pick": {"Actual Chargeable Area (m²)": "Actual Chargeable Area"}}
},
"join": {"dataset": "properties", "left_on": "Property Full Name", "how": "left"}

Order: join first, then calculate derived metrics — otherwise, the dimensional columns referenced by the derived expression won't exist yet.

Lesson Learned: Measure first, then decide if a join is needed. Initially, we thought 'the collection rate needs a cross-table join', but after measuring, we found Table 2 already contained both the bill amount and unpaid amount—the calculation could be done with only one table. The real need for a join was for the 'Average Unit Price' (the area data was in Table 1).


Three Deliverables Are Mandatory

DeliverableFormPurpose
① PPTX Report16:9 Editable PresentationSlides for 'viewing'
② Validation Report checks.jsonJSON (output by the pptx_check tool)Evidence of structural integrity
③ Speaking ScriptChat body / Markdown (template in references/03-SpeakingScript.md)Verbatim script for 'speaking'

When to Use This Skill

  • Property project monthly/quarterly operations analysis PPT
  • Regional operations center, general manager performance report
  • Need cost overrun attribution, collection rate analysis, per-capita efficiency analysis
  • Keywords: 'Project manager monthly report', 'Operations review meeting materials', 'Project operations dashboard PPT'

Five-Stage Processing Pipeline

User Input Data
      |
      v
+-------------------+
| Stage 1:       |  Parse input, fill defaults, validate metrics
| Data Understanding  |
+-------------------+
      |
      v
+-------------------+
| Stage 2: Data   |  Revenue/Cost/Collection/Efficiency calculation, sort deviations, anomaly attribution
| Analysis          |
+-------------------+
      |
      v
+-------------------+
| Stage 3: PPT    |  Determine page count, chart types, conclusion titles for each page
| Structure Planning |
+-------------------+
      |
      v
+-------------------+
| Stage 4: Content |  Construct DATA dictionary, generate conclusion sentences, fill script
| Generation        |
+-------------------+
      |
      v
+-------------------+
| Stage 5: Call PPT |  Execute build_deck.py → Validate → Deliver
| Tool              |
+-------------------+
      |
      v
Generate .pptx + checks.json + Speaking Script

Stage 1: Data Understanding

1.0 Where the Data Comes From (Three Paths, by Priority)

PriorityMethodDescription
1User provides data in the conversationAgent fills data into the data parameter
2User provides a file name / clueSkill automatically searches common directories for the file and extracts data (see below)
3Neither providedGenerate with default template, and issue a data insufficiency warning

Automatic Data Retrieval: When data is empty, the skill will:

  1. Parse the request for file name clues (e.g., 'last month's sales table')
  2. Perform a fuzzy file match in data/common and data/inbox
  3. Read the file with pandas, automatically infer date column / amount column / grouping column
  4. Convert to the contract structure (amount ÷10000 to 10k CNY, ratios as decimals)
  5. Save as input_data.json for the generation script

So the user only needs to say 'Use last month's sales table to make an operations analysis PPT' without providing the path — provided the file is already in data/common.

Override the search root: SKILL_COMMON_DIRS=D:\Tables;E:\MonthlyReports Disable automatic data retrieval: auto_resolve_data=False

Property Project Data Sources (Measured Metrics in data/common)

TableFilePurposeMetric Explanation
Table 22、应收信息.xlsxMain Table (15,876 rows)Revenue grouped by 'Charge Item'; 'Bill Amount/Unpaid Amount' derives collection rate (measured 92.48%)
Table 11、房产客户信息.xlsxDimension Table: Actual Chargeable AreaJoin on 'Property Code' = Main Table's 'Property Full Name' → derive Average Unit Price (measured 0.30 CNY/m²·period)
Table 44、欠款明细报表.xlsxDimension Table: Arrears Causes (7 types)Header is on row 2 (header_row=1), footer has a total row (auto-dropped); join on 'Property Full Name' → Arrears Attribution page
Table 55、房产收缴率明细表.xlsxNot usedThree-row composite header, wide-table format, prone to conflict with Table 2's derived metrics; always use Table 2's derivation as the standard

Honest Degradation Statement: This project's data has no cost, budget, headcount, or work order data. The Cost page has been replaced with an 'Arrears & Collections' page (with real usable data), and the Efficiency page only retains 'Average Unit Price' which is supported by data. The aging quartile (0-30/31-90/91-180/180+ days) data is not in Table 2 — when needed, the main agent should first invoke the collections sub-agent (arrears_analysis) for aging analysis, then inject the results into this skill via extra_facts.

1.1 Parse User Input → Extract Basic Information

ElementDefault / ExampleDescription
Project NameXX CommunityRequired; if missing, mark as 'To be supplemented'
Report PeriodThis MonthRequired
Currency Unit10k CNYUnified throughout the entire report, no mixing; if raw data is in 'CNY', must ÷10000
Ratio FormatDecimal0.952 = 95.2%; passing 95.2 will be rendered as 9520%
Comparison BaselineMonthly Budget + Previous MonthAt least one reference system
Presentation Duration20 minutesDetermines the page count

1.2 Data Completeness Check — Seven Required Data Groups

Check if the user has provided the following seven groups of data. For each missing group, mark the corresponding page as 'Pending Supplement':

#Data GroupSpecific Fields
1Revenue BreakdownProperty Fee, Public Area Income, Diversified Operations, Other (Actual + Budget values)
2Cost BreakdownLabor, Public Energy, Outsourcing, Maintenance & Repair, Materials, Management Fee (Actual + Budget values)
3Collection DataCurrent Receivable / Current Received / Opening Old Arrears / Old Arrears Recovered
4Aging Stratification0-30 / 31-90 / 91-180 / 180+ days overdue balance
5Efficiency DataHeadcount, Managed Area, Work Order Volume, Labor Cost
6Anomaly AccountsTop 3-5 accounts with largest deviation and their traceable events
7Last Month's Action ItemsCompletion status (must be reported back to form a closed loop)

1.3 Data Metric Validation

Before proceeding to analysis, the following red lines must be checked against the data metrics:

  • Public Area Income legally belongs to all owners and must be listed separately; it cannot be counted as operating profit
  • Current Period Collection Rate denominator = current month's receivable bill amount; must not include old arrears recovery
  • Labor Cost must include social insurance, housing fund, overtime pay, and outsourced labor converted to equivalent
  • Energy Consumption must distinguish between 'public area apportionment' and 'property's own use'
  • One-time expenditures (emergency repairs, major repairs) are listed separately and not included in the monthly comparable metrics
  • Per-capita efficiency must be judged in conjunction with the labor cost rate, not just by headcount changes

Stage 2: Data Analysis

2.1 Analysis Sequence (MUST follow this order, do not change)

Revenue Analysis → Cost Analysis → Collection Rate Analysis → Per-Capita Efficiency Analysis → Anomaly Account Attribution

Reason for the order: The collection rate is the result of service quality (unresolved complaints → owners refuse to pay), so placing it after revenue/cost analysis makes the causal relationship valid; anomaly attribution must be built on the four operational fundamentals, otherwise the discussion will be unfocused.

2.2 Revenue Analysis

  • Calculate actual vs budget deviation for each revenue item
  • Calculate budget completion rate = Current month recognized revenue / Current month budgeted revenue
  • Calculate revenue structure proportion
  • Public area income listed separately, annotated 'Belongs to all owners, not included in operating profit'

2.3 Arrears Attribution Analysis (Originally Cost Analysis, No Cost Data in This Project)

This project data has no cost accounts, so this section is changed to arrears attribution by reason for non-payment — a page that affects cash flow as much as costs in property operations:

  • Use the main table's 'Unpaid Amount (CNY)' grouped and aggregated by the joined 'Arrears Cause' (measured total 36,400 CNY, fully reconciled with the arrears detail report on a per-household basis)
  • ⚠ Do not use the joined 'Total Arrears Amount (CNY)' for aggregation — it's a per-household total and will be duplicated by multiple bill rows for the same household
  • Arrears causes are stratified into four types with corresponding collection strategies: Service Disputes (reform first, then collect) / Objective Difficulties (installment plan) / Malicious Default (escalate with formal letter) / Lost Contact Vacant (on-site verification)
  • When cost data becomes available, simply replace the arrears section in deck_spec.json with the cost section; the tool chain doesn't need to change

2.4 Collection Rate Analysis — Three-Level Indicator Breakdown

IndicatorCalculation Method
Current Period Collection RateCurrent month received / Current month receivable (excluding old arrears recovery)
Cumulative Collection RateYear-to-date received / Year-to-date receivable
Old Arrears Recovery RateHistorical arrears recovered this period / Total old arrears at beginning of period

Combined with an Aging Pyramid: 0-30 / 31-90 / 91-180 / 180+ days. The longer the aging, the lower the recovery probability (only 10%~20% for 180+ days).

Arrears cause stratification: Service Disputes / Objective Difficulties / Malicious Default / Lost Contact Vacant. The first two rely on service recovery, the latter two rely on collection mechanisms.

2.5 Per-Capita Efficiency Analysis

IndicatorCalculation Method
Managed Area per CapitaManaged building area ÷ (Own + Outsourced equivalent headcount)
Output per CapitaOperating revenue ÷ Total project headcount
Work Orders per CapitaCompleted work orders ÷ Number of engineering staff
Labor Cost RateLabor cost ÷ Operating revenue (inverse indicator, lower is better)

⚠ Trap: Replacing in-house staff with outsourced staff will make the denominator smaller and the numbers look better. This must be judged in conjunction with the labor cost rate.

2.6 Anomaly Account Attribution — Three-Layer Penetration Method

This is the most valuable step of the entire analysis.

LayerQuestion to AnswerOutput
Layer 1: Quantify DeviationIs it a volume variance, price variance, or metric variance?Deviation amount + Deviation rate
Layer 2: Driving FactorsBreak down to a traceable eventA single verifiable event description
Layer 3: Responsibility AssignmentControllable / Partially controllable / Uncontrollable; who is primary responsibleResponsible department + Correction action + Deadline

Example of labor cost deviation breakdown:

Deviation = Headcount deviation × Budget average wage (volume variance)
           + Budget headcount × Average wage deviation (price variance)
           + Method / One-time factors (method variance)

Writing Rules:

  • ❌ 'Energy consumption increased' → ✅ 'Energy consumption exceeded budget by 21,000 CNY: the basement lighting renovation delay led to full-month use of old fixtures (12,000 CNY) + extended test runs for three elevator annual inspections (9,000 CNY)'
  • ❌ 'Maintenance costs exceeded budget' → ✅ 'Maintenance costs exceeded budget by 13,000 CNY: emergency repair of a burst sewage pipe in Building #5 cost 13,000 CNY (uncontrollable)'

Attribution without a responsible person and deadline is no attribution at all.


Stage 3: PPT Structure Planning

3.1 Presentation Order (Six-Section Format, Do Not Change)

① One-Page Conclusion (30-second decision)
② Revenue: Where the money comes from → Property Fee / Public Area Income / Diversified Operations / Other
③ Arrears and Collections: Who owes the money → Four strata of arrears causes: Service Disputes / Difficulties / Malice / Lost Contact
④ Collection Rate: Collecting it or not → Current / Cumulative / Old Arrears / Aging Stratification
⑤ Per-Capita Efficiency: Is the headcount worth it → Average Unit Price / Area per Capita / Labor Cost Rate / Work Orders per Capita
⑥ Anomaly Account Attribution → Three-Layer Penetration: Quantified Deviation → Driving Event → Responsibility & Controllability
⑦ Summary and Action Items → 3~5 items, each with responsible person + deadline + quantified acceptance criteria

3.2 Page Count Planning

DurationSuggested PagesStructure Handling
10 minutes6~8 pagesOne-page conclusion + Revenue & Cost + Anomaly TOP3 + Action items
20 minutes12~16 pagesFull six sections, anomaly attribution selects TOP5
40 minutes20~28 pagesAdd trend comparisons (3~6 month), peer benchmarking, deep dives on specific topics

3.3 Chart Selection

Analysis ContentChart Type
Revenue Actual vs BudgetDual-series column chart
Cost Deviation RankingBar chart (Red/Yellow/Green semantic colors)
Collection Rate + AgingLayered column chart + Three-level indicator cards
Per-Capita Efficiency TrendColumn + Line combo chart (secondary axis for cost rate)
Anomaly AttributionBar chart + Attribution table
Action ItemsAction cards (Responsible person/Deadline/Acceptance criteria)

3.4 Page Structure Template

┌──────────────────────────────────────────────────────────────────┐
│ Header: Page Number + Conclusion-Type Title + Phase Tag        │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│                     Chart / Data Visualization Area              │
│                                                                  │
├──────────────────────────────────────────────────────────────────┤
│ Conclusion Bar: so_what conclusion sentence                      │
├──────────────────────────────────────────────────────────────────┤
│ Footer: Metric explanation                                      │
└──────────────────────────────────────────────────────────────────┘

Stage 4: Content Generation

4.1 Construct the DATA Dictionary

Based on the analysis results from Stage 2, populate the standardized DATA dictionary.

DATA = {
    "Project": "<Project Name>",
    "Period": "<YYYY Month M>",
    "Revenue": {"Property Fee": 0, "Public Area Income": 0, "Diversified Operations": 0, "Other": 0},
    "Revenue Budget": {...},
    "Costs": {"Labor Cost": 0, "Public Energy": 0, "Outsourcing Fee": 0, "Maintenance & Repair": 0, "Materials & Consumables": 0, "Management Fee & Others": 0},
    "Cost Budget": {...},
    "Collection": {"Current Receivable": 0, "Current Received": 0, "Old Arrears Opening": 0, "Old Arrears Recovered": 0},
    "Aging": {"0-30 days": 0, "31-90 days": 0, "91-180 days": 0, "180+ days": 0},
    "Efficiency": {"Managed Area per Capita": 0, "Output per Capita": 0, "Labor Cost Rate": 0, "Work Orders per Capita": 0},
    "Trend Months": [...],
    "Trend Revenue": [...],
    "Trend Costs": [...],
    "Budget Completion Rate": 0,
    "Cost Rate": 0,
    "Budget Cost Rate": 0,
    "This Month's Conclusion": "<Three-sentence summary: operation result + largest anomaly + first action for next month>",
    "Largest Anomaly": "<Account with the largest deviation and its amount>",
    "First Action": "<Highest priority action for next month>",
}

4.2 Generate Conclusion Sentences for Each Page (so_what)

Each page must generate a conclusion sentence; do not leave it blank for the audience to guess.

PageConclusion Sentence Pattern
One-Page Conclusion"Revenue is essentially on target; cost is the only area where we lost points this month; fix costs first, and the collection rate will naturally recover."
Revenue"The diversified operations gap of X 10k CNY needs to be recovered next month; public area income cannot be counted as operating profit to beautify performance."
Costs"The first two deviations are partially controllable and are accounts that must be corrected this month; the latter two are due to uncontrollable/method factors."
Collection Rate"The collection rate is the result of service quality: this month's complaint closure rate is X%, and repair timeliness rate is Y%, which are the upstream causes of the collection rate gap."
Per-Capita Efficiency"Efficiency hasn't deteriorated, but the cost rate has been rising for two consecutive months; structural adjustments in scheduling and outsourcing settlement are needed next month."
Anomaly Attribution"The delay in last month's action item (XXX) is the direct cause of the energy overrun; it must be closed this month, otherwise it will recur next month."
Summary Actions"Next month's targets: Revenue X 10k CNY, cost rate to drop below Y%; Risk alert: XXX needs to be reported in advance."

4.3 Content Expression Discipline

These 6 rules determine whether the report is professional; they must be followed during content generation:

  1. The title states the conclusion, not the section name. ❌ 'Cost Analysis' → ✅ 'Cost exceeds budget by 39,000 CNY; labor and energy together account for 92% of the deviation'
  2. One 'so what' per page. There must be a conclusion line below every chart
  3. Numbers must include their metric definition and timeframe. ❌ 'Collection rate 92%' → ✅ 'Current period collection rate 92.0% (metric: current month received / current month receivable, excluding old arrears recovery)'
  4. Color semantics are fixed throughout the entire report: On Target = Green (#2EA06A), Warning = Yellow (#E8A31D), Below Target = Red (#D9453D)
  5. Anomaly attribution must close the loop: Account / Deviation Amount / Deviation Rate / Primary Cause / Controllability / Responsible Department / Deadline
  6. Details go in the appendix; the main body only contains conclusion charts

4.4 Generate the Speaking Script

Following the template in references/03-SpeakingScript.md, generate a three-segment script for each page:

SegmentContentDuration
Conclusion FirstWhat is the conclusion of this page10 seconds
Data SupportKey numbers + metric + reference system30 seconds
Root Cause & ActionWhy + whose + when + how to verify30 seconds

Script Red Lines:

  1. Conclusion first, process second
  2. Quantifiers must be actionable: ❌ 'Cost reduction and efficiency improvement' → ✅ 'Overtime pay decreased by 30% month-over-month; account check at month-end'
  3. Don't speak without numbers: Any adjective must be backed by a number
  4. Must be verifiable: For every number, you must be able to answer 'Where can I check this?'
  5. Proactively take ownership of controllable issues: Start by saying 'It's my responsibility; I will fix it by [time]'
  6. Don't fabricate what you can't answer: The standard reply is 'I need to verify this number with finance; I will provide a written response by the end of today'

Stage 5: Call PPT Tool

5.1 Execute the Generation Script

Dependency on the python-pptx library. Execute this skill's generation script:

pip install python-pptx
python <skill-dir>/scripts/build_deck.py

The script reads the DATA dictionary and outputs a 16:9 (13.333 × 7.5 inches) editable presentation.

build_pptx(data, output_path) produces 4 files (same name, different suffixes) in one call:

FileContent
<name>.pptxPresentation file
<name>.speech.jsonPage-by-page speaking script (machine-readable version of deliverable ③)
<name>.speech.mdPage-by-page speaking script (can be directly pasted into chat body)
<name>.deck.jsonPage ↔ Section metadata (for alignment check by validation tool)

To add a new page: Follow the page function pattern in the script:

add_slide() → header(s, idx, Conclusion-Type Title, Phase Tag) → chart → so_what(s, Conclusion Sentence)

When adding a new section, remember to register the key content keywords for that section in SECTION_KEYWORDS, otherwise the validation tool cannot verify the content of each page.

5.2 Structural Validation (Must Execute)

Call the pptx_check tool in the Capability Center to perform structural validation and produce checks.json:

router.execute("pptx_check", {
    "file_path": "<output>.pptx",
    "expected_count": <page_count>,
    "must_contain": "Anomaly account attribution,Current period collection rate,Per-capita,Action items",
    "out": "<output>.checks.json",
})

It checks the following aspects and gives a pass / warn / fail verdict:

CheckDescription
package / ooxml / openFile validity, OOXML package structure, can it be opened
aspectIs it 16:9
countDoes page count match expectations
containsDo key content items exist
section_contentPer-page check for 'the key content that section should have'
so_whatDoes each page have a conclusion sentence at the bottom (cover page/roadmap/appendix exempted)
overflowDoes text overflow shapes (estimation based on font metrics)
color_semanticsAre only the defined semantic colors used
chart_dataDo the number of categories/series in charts match the source
no_empty_slideAre there any empty slides

Verdict rules: Any fail → must be fixed before delivery; warn → requires manual confirmation (usually an estimation error).

overflow is an estimation, not a true layout. Getting a warn with very few items is normal; if there are many items or text is clearly cropped, use visual validation in 5.3 to confirm.

If the tool name is unavailable, fall back to calling the module function directly: tool.common.pptx_check_tool.check_pptx(...).

5.3 Visual Validation (Optional, Depending on the Environment)

libreoffice --headless --convert-to png <file.pptx> --outdir preview

⚠ LibreOffice may not be installed in the environment. If unavailable, fall back to:

  • Reading the shapes and text of each page with python-pptx and manually checking key pages; or
  • Drawing approximate thumbnails with PIL based on page dimensions (only to see layout distribution, not a true rendering)

Check each page: Check if text is cropped, if chart numbers match the data source, and if color semantics are consistent.

5.4 Deliver

Deliver all three items simultaneously:

  1. PPTX File — Editable 16:9 presentation
  2. checks.json — Structural integrity validation report (produced by pptx_check, verdict should be pass)
  3. Speaking Script — Written directly in the chat body, format as per references/03-SpeakingScript.md, with a time allocation table + leader follow-up Q&A contingency plan (≥6 pairs)

Pitfalls and Anti-Patterns

  • ❌ Starting with a specific complaint or dispute — without establishing the operational fundamentals, the audience can't gauge its significance
  • ❌ A page full of numbers — only 'what it is', no 'why' or 'so what'
  • ❌ Only reporting deviation amounts without naming the responsible person — no tasks can be formed from the meeting
  • ❌ Using 'objective factors' as an explanation — must fall back to specific events
  • ❌ Not reporting back on last month's action items — the report loses its closed loop
  • ❌ Reporting only one number for the collection rate — must break it down into Current / Cumulative / Old Arrears / Aging

Directory Structure

ppt_skill/
├── SKILL.md                          # This file: Five-stage pipeline instructions
├── references/
│   ├── 01-ReportLogic.md                # Six-section framework, page count control, expression discipline
│   ├── 02-IndicatorSystemAndAttribution.md  # Indicator metrics table, three-layer attribution, chart selection
│   └── 03-SpeakingScript.md                # Per-page script template, time allocation, follow-up Q&A contingency plan
├── assets/
│   └── Sample-PropertyProjectMonthlyPerformanceAnalysis.pptx
├── scripts/
│   └── build_deck.py                 # Generation script (just change DATA to reuse)
└── checks.json                       # Sample historical validation report (re-generated by pptx_check at runtime)

Dependent Capability Tools

CapabilityLocationPurposeMandatory
pptx_checktool/common/pptx_check_tool.pyStage 5.2 structural validation, produces checks.jsonMandatory
LibreOfficeExternal ApplicationStage 5.3 visual validation (convert to PNG)Optional, falls back if not installed

pptx_check is a general-purpose tool independent of this skill, provided through the Capability Center:

from core.capability import CapabilityRouter
from tool.common.pptx_check_tool import PptxCheckTool

router = CapabilityRouter()
router.add_tool(PptxCheckTool())  # Skill and tool are registered at the same level

A Skill is not a Tool, so registration uses add_skill (build_capability_router handles this automatically), while pptx_check is a tool and uses add_tool.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相关技能