@company-manager/docs

Opportunity Stages

Sales pipeline stages, probability forecasting, and deal progression diagrams

Opportunity Stages

This page covers the sales opportunity pipeline including stages, probability forecasting, and deal management.

Opportunity State Machine

stateDiagram-v2
    [*] --> PROSPECTING: Create Opportunity

    PROSPECTING --> QUALIFICATION: Initial Meeting
    PROSPECTING --> CLOSED_LOST: Disqualified

    QUALIFICATION --> NEEDS_ANALYSIS: Qualified
    QUALIFICATION --> CLOSED_LOST: Not a Fit

    NEEDS_ANALYSIS --> PROPOSAL: Requirements Gathered
    NEEDS_ANALYSIS --> QUALIFICATION: Back to Qualify

    PROPOSAL --> NEGOTIATION: Proposal Sent
    PROPOSAL --> NEEDS_ANALYSIS: Revise Requirements

    NEGOTIATION --> CLOSED_WON: Agreement Signed
    NEGOTIATION --> CLOSED_LOST: Deal Lost
    NEGOTIATION --> PROPOSAL: Revise Proposal

    CLOSED_WON --> [*]
    CLOSED_LOST --> [*]

    note right of PROSPECTING: 10% probability
    note right of QUALIFICATION: 20% probability
    note right of NEEDS_ANALYSIS: 40% probability
    note right of PROPOSAL: 60% probability
    note right of NEGOTIATION: 80% probability

Pipeline Stages Detail

StageProbabilityExit CriteriaActivities
Prospecting10%Initial meeting scheduledResearch, outreach
Qualification20%BANT criteria metDiscovery call, qualification
Needs Analysis40%Requirements documentedDeep dive, demo
Proposal60%Proposal presentedCreate & send proposal
Negotiation80%Terms agreedNegotiate, close
Closed Won100%Contract signedHandoff to success
Closed Lost0%Deal lostDocument reasons

Pipeline Visualization

flowchart LR
    subgraph "Active Pipeline"
        P[Prospecting<br/>$500K<br/>15 deals]
        Q[Qualification<br/>$300K<br/>10 deals]
        N[Needs Analysis<br/>$400K<br/>8 deals]
        PR[Proposal<br/>$250K<br/>5 deals]
        NE[Negotiation<br/>$150K<br/>3 deals]
    end

    P --> Q
    Q --> N
    N --> PR
    PR --> NE

    subgraph "Outcomes"
        W[Won<br/>$200K]
        L[Lost<br/>$100K]
    end

    NE --> W
    NE --> L

    style W fill:#c8e6c9
    style L fill:#ffcdd2

Stage Progression Sequence

sequenceDiagram
    participant Rep as Sales Rep
    participant UI as CRM UI
    participant API as TRPC Router
    participant Service as Opportunity Service
    participant DB as Database
    participant Notify as Notification Service

    Rep->>UI: Move to next stage
    UI->>API: updateOpportunityStage(id, stage)
    API->>Service: updateStage(id, newStage)

    Service->>DB: Get opportunity
    DB-->>Service: Opportunity data

    Service->>Service: Validate stage transition
    Note over Service: Check required fields for stage

    alt Missing requirements
        Service-->>API: Error: Missing fields
        API-->>UI: Show requirements
    else Valid transition
        Service->>Service: Update probability
        Service->>DB: Update opportunity
        Service->>DB: Log stage change activity

        alt Critical stage
            Service->>Notify: notifyManager(opportunity)
        end

        DB-->>Service: Updated
        Service-->>API: Success
        API-->>UI: Show updated pipeline
    end

Opportunity Creation Flow

flowchart TD
    START[Create Opportunity] --> SOURCE{Source}

    SOURCE -->|Lead Conversion| FROM_LEAD[From Qualified Lead]
    SOURCE -->|Existing Client| FROM_CLIENT[From Client Account]
    SOURCE -->|Manual| MANUAL[Manual Entry]

    FROM_LEAD --> PREFILL[Pre-fill from Lead Data]
    FROM_CLIENT --> PREFILL_CLIENT[Pre-fill from Client]
    MANUAL --> ENTRY[Enter Details]

    PREFILL --> FORM[Opportunity Form]
    PREFILL_CLIENT --> FORM
    ENTRY --> FORM

    FORM --> REQUIRED{Required Fields}
    REQUIRED -->|Name| NAME[Opportunity Name]
    REQUIRED -->|Amount| AMOUNT[Deal Amount]
    REQUIRED -->|Close Date| DATE[Expected Close]
    REQUIRED -->|Owner| OWNER[Assigned Owner]

    NAME --> VALIDATE
    AMOUNT --> VALIDATE
    DATE --> VALIDATE
    OWNER --> VALIDATE

    VALIDATE[Validate] --> CREATE[Create Opportunity]
    CREATE --> ASSIGN[Assign Stage: Prospecting]
    ASSIGN --> NOTIFY[Notify Owner]

    style CREATE fill:#e8f5e9

Deal Amount Forecasting

flowchart TD
    subgraph "Weighted Pipeline"
        OPP1[Opp 1: $100K × 20% = $20K]
        OPP2[Opp 2: $50K × 60% = $30K]
        OPP3[Opp 3: $200K × 80% = $160K]
    end

    OPP1 --> TOTAL[Weighted Total: $210K]
    OPP2 --> TOTAL
    OPP3 --> TOTAL

    subgraph "Forecast Categories"
        COMMIT[Commit: 80%+ probability]
        BEST[Best Case: 40%+ probability]
        PIPELINE[Pipeline: All active]
    end

    TOTAL --> COMMIT
    TOTAL --> BEST
    TOTAL --> PIPELINE

Win/Loss Analysis

flowchart TD
    CLOSE[Opportunity Closing] --> OUTCOME{Outcome}

    OUTCOME -->|Won| WON_FLOW[Won Flow]
    OUTCOME -->|Lost| LOST_FLOW[Lost Flow]

    subgraph "Won Processing"
        WON_FLOW --> RECORD_WIN[Record Win]
        RECORD_WIN --> CREATE_ORDER[Create Order/Contract]
        CREATE_ORDER --> HANDOFF[Handoff to Success]
        HANDOFF --> CELEBRATE[Update Metrics]
    end

    subgraph "Lost Processing"
        LOST_FLOW --> REASON[Capture Loss Reason]
        REASON --> COMPETITOR[Lost to Competitor?]
        REASON --> PRICE[Price Issue?]
        REASON --> TIMING[Timing Issue?]
        REASON --> OTHER[Other Reason]

        COMPETITOR --> ANALYZE
        PRICE --> ANALYZE
        TIMING --> ANALYZE
        OTHER --> ANALYZE

        ANALYZE[Analyze & Learn] --> FUTURE[Improve Future Deals]
    end

    style WON_FLOW fill:#e8f5e9
    style LOST_FLOW fill:#ffebee

Loss Reasons Distribution

pie title Lost Deal Reasons
    "Lost to Competitor" : 30
    "Price/Budget" : 25
    "No Decision" : 20
    "Timing" : 15
    "Product Fit" : 10

Opportunity Activity Tracking

sequenceDiagram
    participant Rep as Sales Rep
    participant CRM as CRM System
    participant DB as Database
    participant Calendar as Calendar

    Note over Rep,Calendar: Throughout opportunity lifecycle

    Rep->>CRM: Log call
    CRM->>DB: Create activity (CALL)

    Rep->>CRM: Log email
    CRM->>DB: Create activity (EMAIL)

    Rep->>CRM: Schedule meeting
    CRM->>Calendar: Create calendar event
    CRM->>DB: Create activity (MEETING)

    Rep->>CRM: Log note
    CRM->>DB: Create activity (NOTE)

    Rep->>CRM: Create task
    CRM->>DB: Create activity (TASK)

    Note over CRM: Auto-track activities
    CRM->>DB: Activity timeline complete

Products in Opportunity

erDiagram
    OPPORTUNITY ||--o{ OPPORTUNITY_PRODUCT : contains

    OPPORTUNITY {
        string id PK
        string name
        decimal amount
        enum stage
    }

    OPPORTUNITY_PRODUCT {
        string id PK
        string opportunityId FK
        string productId FK
        int quantity
        decimal unitPrice
        decimal discount
        decimal totalPrice
    }

    OPPORTUNITY_PRODUCT }o--|| PRODUCT : references

    PRODUCT {
        string id PK
        string name
        decimal listPrice
    }

Stage-Gate Requirements

flowchart TD
    subgraph "Prospecting Exit"
        P1[Initial contact made]
        P2[Basic info gathered]
        P3[Interest confirmed]
    end

    subgraph "Qualification Exit"
        Q1[BANT completed]
        Q2[Key stakeholders identified]
        Q3[Next steps agreed]
    end

    subgraph "Needs Analysis Exit"
        N1[Requirements documented]
        N2[Technical fit confirmed]
        N3[ROI calculated]
    end

    subgraph "Proposal Exit"
        PR1[Proposal delivered]
        PR2[Pricing approved]
        PR3[Stakeholder buy-in]
    end

    subgraph "Negotiation Exit"
        NE1[Terms negotiated]
        NE2[Legal review complete]
        NE3[Contract signed]
    end

    P1 --> Q1
    P2 --> Q1
    P3 --> Q1

    Q1 --> N1
    Q2 --> N1
    Q3 --> N1

    N1 --> PR1
    N2 --> PR1
    N3 --> PR1

    PR1 --> NE1
    PR2 --> NE1
    PR3 --> NE1

Sales Velocity Calculation

flowchart LR
    subgraph "Components"
        OPPS[# of Opportunities]
        WIN[Win Rate %]
        DEAL[Avg Deal Size]
        CYCLE[Sales Cycle Days]
    end

    subgraph "Formula"
        CALC[Velocity = Opps × Win% × Deal Size ÷ Cycle]
    end

    subgraph "Example"
        EX[100 × 25% × $10K ÷ 30 = $8,333/day]
    end

    OPPS --> CALC
    WIN --> CALC
    DEAL --> CALC
    CYCLE --> CALC
    CALC --> EX