AgentSkillsCN

Crm Data Model

CRM 数据模型

SKILL.md

CRM Data Model

Activate when: User mentions opportunities, pipeline, Biz Funnel, CRM workflow, or Notion databases

Oportunidades Database

Collection ID: collection://201b1882-308d-4524-8a86-6672d5502299

🔗 Direct Access: Open in Notion

Purpose: Track business opportunities through sales funnel

Fields Reference

FieldTypeNotes
Nome OportunidadetitlePrimary identifier
Biz Funnelselect11 stages (see below)
Statusstatus8 options (see below)
PriorityselectHigh / Medium / Low
BTAGmulti-selectBusiness tags
Update LogtextNewest first, DD/MM format, APPEND only
Next ActiontextVerb + object, specific
NAction DuedateUse date:NAction Due:start format
AI Advancement Recommendationtext2-3 sentences, can be empty
DuedateOverall deadline
Days in StageformulaRead-only, auto-calculated
Days Until DueformulaRead-only, auto-calculated
AnotaçõesrelationMeeting notes (inline or linked)
relTasksNotesrelationSecondary notes link
ContatosrelationPeople
ClienterelationCompanies
SourcerelationOpportunity source
Last Edited TimesystemAuto-tracked

Biz Funnel Stages (11 stages)

Flow: Marketing → Suspect → Prospect → Contato → Credibilidade → Oferta → Proposta → Negociação → Fechamento → Relacionamento → done!

Most active stages: Credibilidade, Oferta, Proposta, Negociação

Stage Definitions

  1. Marketing: General awareness, no specific lead yet
  2. Suspect: Potential lead identified, not qualified
  3. Prospect: Qualified lead, fit confirmed
  4. Contato: First contact made, relationship starting
  5. Credibilidade: Building trust, demonstrating expertise
  6. Oferta: Client interested, discussing solutions/pricing
  7. Proposta: Formal proposal presented
  8. Negociação: Negotiating terms, price, timeline
  9. Fechamento: Closing the deal, final signatures
  10. Relacionamento: Ongoing relationship, delivery phase
  11. done!: Project completed

RULE: Never skip stages (e.g., cannot go Credibilidade → Proposta directly)

Status Options

8 options in 3 groups:

  • To-do: Not started, In Planning
  • In Progress: Scheduled, On Hold, Waiting Feedback, In progress
  • Complete: Done, Archived

Primary Status Decision Logic

  • User has action to take → "In progress"
  • Awaiting client response → "Waiting Feedback"
  • Next meeting booked → "Scheduled"
  • Temporarily paused → "On Hold"

Meeting Data Patterns

Inline: Content has <transcript>, <summary>, <notes> tags Linked: Anotações property contains page URLs Priority: Check inline first, then linked relations Content hierarchy: transcript > summary > notes

Update Log Format

DD/MM: [key decision/action/result] - Max 10 words, newest first

Log only: Decisions, advancement signals, stage triggers, blockers Never log: Generic meetings, vague descriptions, no-value entries CRITICAL: Always APPEND, never replace

Strategic Analysis

Advancement Signals (Biz Funnel Stage Transitions)

  • Credibilidade → Oferta: "how much?" or pricing questions
  • Oferta → Proposta: formal proposal request
  • Proposta → Negociação: discussing terms/adjustments
  • Negociação → Fechamento: purchase confirmation/signature
  • RULE: Never skip stages

Pattern Detection Priority

  1. Recent interactions WITH advancement signals
  2. Multi-interaction patterns (escalating interest, stalling, triggers)
  3. Strategic context (blockers, dependencies, competition)

AI Recommendation Format

  • 2-3 sentences max, data-driven, actionable
  • Focus: patterns across interactions, opportunities, risks, blind spots
  • Can be empty if no significant insights

Recommendation Patterns

  • Pattern recognition: "X mentioned 3x + Y confirmed = ideal for Z"
  • Opportunity: "High response rate + defined timeline = accelerate"
  • Risk: "No movement 21d despite interest = proactive unblock needed"
  • Strategic: "Timeline requires proposal by [date] to enable implementation"
  • Avoid: Generic statements without specific data or actions

Date Property Format

When updating date properties via MCP:

json
{
  "date:NAction Due:start": "YYYY-MM-DD",
  "date:NAction Due:is_datetime": 0
}

Note: Field name is "NAction Due" (not "Next Action Date")

Common Queries

Search by name:

code
mcp__notion__notion-search
query: "opportunity name"
data_source_url: "collection://201b1882-308d-4524-8a86-6672d5502299"

Fetch opportunity:

code
mcp__notion__notion-fetch
id: {page_url or page_id}

Update properties:

code
mcp__notion__notion-update-page
page_id: {page_id}
command: "update_properties"
properties: {
  "Update Log": "{new_entry}\n{existing_log}",
  "Next Action": "...",
  "date:NAction Due:start": "YYYY-MM-DD",
  "date:NAction Due:is_datetime": 0,
  "Biz Funnel": "...",
  "Status": "...",
  "AI Advancement Recommendation": "..."
}

Opportunity Search Protocol

Purpose: Ensure agents use validated database ID and handle multiple results correctly.

Search Rules

  1. Always use validated database ID:

    • Correct: collection://201b1882-308d-4524-8a86-6672d5502299
    • NEVER use: shortcuts, aliases, or unvalidated IDs
  2. Multiple results handling:

    • If search returns multiple matches → show ALL to user for selection
    • NEVER auto-select first result
    • Display: Name, Biz Funnel stage, Status for each
    • Wait for user to choose by number
  3. Search validation:

    • Before searching: verify database ID is correct
    • After searching: log result count
    • If 0 results: clear error message with guidance
    • If 1 result: proceed (but confirm with user)
    • If 2+ results: trigger selection flow

Example Flow

code
SENSE Phase:
1. User provides: "opportunity ABC"
2. Agent validates: database ID = collection://201b1882-308d-4524-8a86-6672d5502299
3. Agent searches with notion-search
4. Results: 3 opportunities found
5. Agent displays:
   "Found 3 opportunities matching 'ABC':
   1. ABC Corp - Oferta - In Progress
   2. ABC Industries - Proposta - Waiting Feedback
   3. ABC Holdings - Credibilidade - Scheduled

   Which opportunity? (enter number)"
6. User selects: 2
7. Agent proceeds with ABC Industries

Memory Logging

After search, log to .claude/memory/opportunity-search-log.jsonl:

json
{
  "timestamp": "ISO-8601",
  "search_term": "user input",
  "database_id": "collection://...",
  "database_validated": true,
  "result_count": 3,
  "selected_index": 2,
  "selected_name": "ABC Industries"
}

Post-Search Relevance Filtering

Purpose: Reduce false positives from Notion AI search by filtering results based on name relevance.

When to Apply:

  • After MCP notion-search returns results
  • Before showing results to user
  • Before logging result_count in memory

Algorithm:

  1. Normalize query: lowercase, split into words (min 3 chars each)
  2. Normalize each result name: lowercase
  3. For each result, check if name contains ANY query word
  4. Keep only results with at least one word match
  5. If all results filtered out: treat as "0 results found"

Example:

  • Query: "ferreira costa"
  • Words: ["ferreira", "costa"]
  • Result: "Ferreira Costa - Savio" → KEEP (contains both words)
  • Result: "Aida Stellantis" → FILTER OUT (contains neither)

Edge Cases:

  • Single-word query: "sustentec" → keep if name contains "sustentec"
  • Multi-word query: "Siemens Agentes" → keep if contains "siemens" OR "agentes"
  • Minimum word length: 3 characters (skip "de", "e", "da", etc.)
  • Missing Nome property: skip that result (defensive)

After filtering:

  • 0 results → Clear error: "No opportunities found for '[query]'"
  • 1 result → Proceed to validation
  • 2+ results → Display filtered list for user selection

Memory Impact:

  • result_count logs filtered count (more accurate than raw MCP count)
  • No schema changes to memory log
  • Filtering is transparent to memory system