> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequency.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Update action card status

> Update action card status and/or outcome.

## Status Transitions

- **draft** -> active (via promote endpoint when actionable)
- **draft/active** -> dismissed (user dismissal)
- **draft/active** -> expired (auto-expiry)
- **active** -> executed (trade taken)
- **active** -> invalidated (market conditions changed)

## Outcome Tracking

When status changes to 'executed', provide outcome data:
- executed_at, fill_price
- exit_price, exit_time
- pnl_dollars, pnl_pct, r_multiple
- exit_reason, hold_days
- institutional_validation

## Performance Target

<200ms response time.



## OpenAPI

````yaml /api/openapi.json patch /api/graph/v1/action-cards/{card_id}
openapi: 3.1.0
info:
  title: Sequency Graph API
  description: >

    # Sequency Graph-Native Trading API


    Graph-native API for trading intelligence, built on FalkorDB.


    ## Features


    - **Screener**: Filter stocks using graph-native queries with relationship
    expansion

    - **Stock Detail**: Complete stock context with all relationships

    - **Confluence Scoring**: Setup quality assessment with weighted components

    - **Strategy Matching**: Find matching options strategies via graph
    traversal

    - **Market Context**: Current market-wide context for trading decisions


    ## Data Sources


    All data is sourced from the FalkorDB knowledge graph, populated by:

    - Pattern detector (Go) - Technical indicators, patterns

    - Graph sync service - Levels, volume profiles, news, day classification
  version: 1.0.0
servers: []
security: []
paths:
  /api/graph/v1/action-cards/{card_id}:
    patch:
      tags:
        - Action Cards
      summary: Update action card status
      description: |-
        Update action card status and/or outcome.

        ## Status Transitions

        - **draft** -> active (via promote endpoint when actionable)
        - **draft/active** -> dismissed (user dismissal)
        - **draft/active** -> expired (auto-expiry)
        - **active** -> executed (trade taken)
        - **active** -> invalidated (market conditions changed)

        ## Outcome Tracking

        When status changes to 'executed', provide outcome data:
        - executed_at, fill_price
        - exit_price, exit_time
        - pnl_dollars, pnl_pct, r_multiple
        - exit_reason, hold_days
        - institutional_validation

        ## Performance Target

        <200ms response time.
      operationId: update_action_card_api_graph_v1_action_cards__card_id__patch
      parameters:
        - name: card_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Card Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActionCardUpdateRequest'
      responses:
        '200':
          description: Action card updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActionCard'
        '404':
          description: Action card not found
        '422':
          description: Validation error
components:
  schemas:
    ActionCardUpdateRequest:
      properties:
        status:
          $ref: '#/components/schemas/app__models__action_card__ActionCardStatus'
        status_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Status Reason
        outcome:
          anyOf:
            - $ref: '#/components/schemas/Outcome-Input'
            - type: 'null'
      type: object
      required:
        - status
      title: ActionCardUpdateRequest
      description: Request to update action card status.
    ActionCard:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        scan_id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Scan Id
        symbol:
          type: string
          title: Symbol
        direction_bias:
          $ref: '#/components/schemas/DirectionBias'
        thesis:
          anyOf:
            - type: string
            - type: 'null'
          title: Thesis
        run_meta:
          $ref: '#/components/schemas/RunMeta-Output'
        regime:
          $ref: '#/components/schemas/Regime-Output'
        day_type:
          $ref: '#/components/schemas/app__models__action_card__DayType-Output'
        institutional_levels:
          $ref: '#/components/schemas/InstitutionalLevels-Output'
        trend:
          $ref: '#/components/schemas/Trend-Output'
        volume:
          $ref: '#/components/schemas/Volume-Output'
        pattern:
          anyOf:
            - $ref: '#/components/schemas/app__models__action_card__Pattern-Output'
            - type: 'null'
        confluence:
          $ref: '#/components/schemas/Confluence-Output'
        contract:
          anyOf:
            - $ref: '#/components/schemas/Contract-Output'
            - type: 'null'
        position_sizing:
          anyOf:
            - $ref: '#/components/schemas/PositionSizing-Output'
            - type: 'null'
        entry:
          anyOf:
            - $ref: '#/components/schemas/Entry-Output'
            - type: 'null'
        exit_plan:
          anyOf:
            - $ref: '#/components/schemas/ExitPlan-Output'
            - type: 'null'
        risk_status:
          anyOf:
            - $ref: '#/components/schemas/RiskStatus-Output'
            - type: 'null'
        quality:
          anyOf:
            - $ref: '#/components/schemas/Quality'
            - type: 'null'
        status:
          $ref: '#/components/schemas/app__models__action_card__ActionCardStatus'
          default: draft
        completeness:
          $ref: >-
            #/components/schemas/app__models__action_card__ActionCardCompleteness
          default: signal_only
        status_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Status Reason
        outcome:
          anyOf:
            - $ref: '#/components/schemas/Outcome-Output'
            - type: 'null'
        created_at:
          type: string
          format: date-time
          title: Created At
        expires_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Expires At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - symbol
        - direction_bias
        - run_meta
        - regime
        - day_type
        - institutional_levels
        - trend
        - volume
        - confluence
        - created_at
        - updated_at
      title: ActionCard
      description: Complete action card aligned with v3 spec (lines 1625-1931).
    app__models__action_card__ActionCardStatus:
      type: string
      enum:
        - draft
        - active
        - executed
        - expired
        - dismissed
        - invalidated
      title: ActionCardStatus
      description: Action card lifecycle status.
    Outcome-Input:
      properties:
        executed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Executed At
        fill_price:
          anyOf:
            - type: number
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Fill Price
        exit_price:
          anyOf:
            - type: number
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Exit Price
        exit_time:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Exit Time
        pnl_dollars:
          anyOf:
            - type: number
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pnl Dollars
        pnl_pct:
          anyOf:
            - type: number
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pnl Pct
        r_multiple:
          anyOf:
            - type: number
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: R Multiple
        exit_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Exit Reason
        hold_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Hold Days
        institutional_validation:
          anyOf:
            - $ref: '#/components/schemas/InstitutionalValidation'
            - type: 'null'
      type: object
      title: Outcome
      description: 'v3: outcome object - post-trade tracking.'
    DirectionBias:
      type: string
      enum:
        - bull
        - bear
      title: DirectionBias
      description: Trade direction bias.
    RunMeta-Output:
      properties:
        date:
          type: string
          title: Date
          description: Scan date YYYY-MM-DD
        time:
          type: string
          title: Time
          description: Scan time HH:MM:SS
        tz:
          type: string
          title: Tz
          description: Timezone
          default: America/Chicago
        account_value:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Account Value
          description: Account value at scan time
        account_tier:
          type: string
          title: Account Tier
          description: tier_1, tier_2, or tier_3
      type: object
      required:
        - date
        - time
        - account_value
        - account_tier
      title: RunMeta
      description: 'v3: run_meta object - scan execution context.'
    Regime-Output:
      properties:
        classification:
          type: string
          title: Classification
          description: bull, bear, neutral
        confidence:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Confidence
        conditions_met:
          items:
            type: string
          type: array
          title: Conditions Met
        conditions_failed:
          items:
            type: string
          type: array
          title: Conditions Failed
        vix:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Vix
        vix_context:
          anyOf:
            - $ref: '#/components/schemas/VixContext-Output'
            - type: 'null'
      type: object
      required:
        - classification
        - confidence
        - vix
      title: Regime
      description: 'v3: regime object - Module A market regime output.'
    app__models__action_card__DayType-Output:
      properties:
        classification:
          type: string
          title: Classification
          description: trending, rotational, uncertain
        day_type_detail:
          anyOf:
            - type: string
            - type: 'null'
          title: Day Type Detail
          description: strong_trend, weak_trend, etc.
        day_type_confidence:
          type: integer
          maximum: 100
          minimum: 0
          title: Day Type Confidence
        trend_score:
          type: integer
          maximum: 100
          minimum: 0
          title: Trend Score
        rotation_score:
          type: integer
          maximum: 100
          minimum: 0
          title: Rotation Score
        signals:
          items:
            type: string
          type: array
          title: Signals
          description: narrow_cpr, narrow_ib, gap_and_go, etc.
        size_modifier:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Size Modifier
          default: '1.0'
      type: object
      required:
        - classification
        - day_type_confidence
        - trend_score
        - rotation_score
      title: DayType
      description: 'v3: day_type object - Module A day classification.'
    InstitutionalLevels-Output:
      properties:
        vwap:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Vwap
        vwap_plus_1sd:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Vwap Plus 1Sd
        vwap_plus_2sd:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Vwap Plus 2Sd
        vwap_minus_1sd:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Vwap Minus 1Sd
        vwap_minus_2sd:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Vwap Minus 2Sd
        price_vs_vwap_sd:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Price Vs Vwap Sd
        ib_high:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Ib High
        ib_low:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Ib Low
        ib_range:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Ib Range
        ib_range_vs_atr:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Ib Range Vs Atr
        ib_1_5x:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Ib 1 5X
        ib_2x:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Ib 2X
        prior_vah:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Prior Vah
        prior_val:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Prior Val
        prior_poc:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Prior Poc
        dev_vah:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Dev Vah
        dev_val:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Dev Val
        dev_poc:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Dev Poc
        pp:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pp
        r1:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: R1
        r2:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: R2
        r3:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: R3
        s1:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: S1
        s2:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: S2
        s3:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: S3
        pdh:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pdh
        pdl:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pdl
        pdc:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pdc
        onh:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Onh
        onl:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Onl
      type: object
      required:
        - vwap
        - ib_high
        - ib_low
        - ib_range
      title: InstitutionalLevels
      description: 'v3: institutional_levels object - key price levels.'
    Trend-Output:
      properties:
        price:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Price
        ema20:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Ema20
        sma50:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Sma50
        sma200:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Sma200
        stack_valid:
          type: boolean
          title: Stack Valid
          description: Price > EMA20 > SMA50 > SMA200
        dist_to_ema20_atr:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Dist To Ema20 Atr
      type: object
      required:
        - price
        - ema20
        - sma50
        - stack_valid
      title: Trend
      description: 'v3: trend object - MA stack and trend context.'
    Volume-Output:
      properties:
        rvol:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Rvol
          description: Relative volume vs 20-day average
        trend:
          type: string
          title: Trend
          description: increasing, decreasing, flat
        breakout_node:
          anyOf:
            - type: string
            - type: 'null'
          title: Breakout Node
          description: hvn, lvn, or null
      type: object
      required:
        - rvol
        - trend
      title: Volume
      description: 'v3: volume object - volume confirmation.'
    app__models__action_card__Pattern-Output:
      properties:
        detected:
          anyOf:
            - type: string
            - type: 'null'
          title: Detected
          description: bull_flag, vcp, ascending_triangle, etc.
        confidence:
          type: integer
          maximum: 100
          minimum: 0
          title: Confidence
        institutional_bonus:
          type: integer
          maximum: 3
          minimum: 0
          title: Institutional Bonus
          default: 0
        vcp_metrics:
          anyOf:
            - $ref: '#/components/schemas/VCPMetrics-Output'
            - type: 'null'
      type: object
      required:
        - confidence
      title: Pattern
      description: 'v3: pattern object - detected chart pattern.'
    Confluence-Output:
      properties:
        confluence_score:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Confluence Score
        tier:
          type: string
          title: Tier
          description: EXCELLENT, GOOD, MODERATE, WEAK, POOR
        recommendation:
          type: string
          title: Recommendation
        weights_version:
          type: string
          title: Weights Version
          default: 3.0.0
        components:
          additionalProperties:
            $ref: '#/components/schemas/ConfluenceComponent-Output'
          type: object
          title: Components
      type: object
      required:
        - confluence_score
        - tier
        - recommendation
      title: Confluence
      description: 'v3: confluence object - weighted scoring output.'
    Contract-Output:
      properties:
        ticker:
          type: string
          title: Ticker
          description: OCC symbol e.g. AAPL251219C00185000
        strike:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Strike
        expiration:
          type: string
          title: Expiration
          description: YYYY-MM-DD
        dte:
          type: integer
          title: Dte
        delta:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Delta
        gamma:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Gamma
        theta:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Theta
        vega:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Vega
        bid:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Bid
        ask:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Ask
        mid:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Mid
        iv:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Iv
        iv_percentile:
          anyOf:
            - type: integer
            - type: 'null'
          title: Iv Percentile
        spread_pct:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Spread Pct
        oi:
          type: integer
          title: Oi
          description: Open interest
        volume:
          anyOf:
            - type: integer
            - type: 'null'
          title: Volume
      type: object
      required:
        - ticker
        - strike
        - expiration
        - dte
        - delta
        - bid
        - ask
        - mid
        - iv
        - spread_pct
        - oi
      title: Contract
      description: 'v3: contract object - Module B Stage B output.'
    PositionSizing-Output:
      properties:
        risk_per_trade_pct:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Risk Per Trade Pct
        max_risk_dollars:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Max Risk Dollars
        premium:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Premium
        stop_loss_pct:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Stop Loss Pct
          description: As percentage e.g. 40 for 40%
        risk_per_contract:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Risk Per Contract
        max_contracts:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Max Contracts
        suggested_contracts:
          type: integer
          title: Suggested Contracts
        allocation_pct:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Allocation Pct
      type: object
      required:
        - risk_per_trade_pct
        - max_risk_dollars
        - premium
        - stop_loss_pct
        - risk_per_contract
        - max_contracts
        - suggested_contracts
        - allocation_pct
      title: PositionSizing
      description: 'v3: position_sizing object - Module E output.'
    Entry-Output:
      properties:
        trigger_type:
          type: string
          title: Trigger Type
          description: breakout_confirmation, pullback_to_support, etc.
        trigger_level:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Trigger Level
        trigger_name:
          type: string
          title: Trigger Name
          description: ib_high, vwap, prior_vah, etc.
        status:
          type: string
          title: Status
          description: pending, confirmed, missed
          default: pending
        entry_window:
          anyOf:
            - type: string
            - type: 'null'
          title: Entry Window
          description: 10:30-11:30 ET
        timing_modifier:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Timing Modifier
          default: '1.0'
        order_type:
          type: string
          title: Order Type
          description: limit, market, stop_limit
          default: limit
        limit_price:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Limit Price
        scale_plan:
          items:
            $ref: '#/components/schemas/ScalePlanStep'
          type: array
          title: Scale Plan
      type: object
      required:
        - trigger_type
        - trigger_level
        - trigger_name
      title: Entry
      description: 'v3: entry object - Module C output.'
    ExitPlan-Output:
      properties:
        targets:
          items:
            $ref: '#/components/schemas/ExitTarget-Output'
          type: array
          title: Targets
        stop:
          $ref: '#/components/schemas/ExitStop-Output'
        trail:
          anyOf:
            - $ref: '#/components/schemas/ExitTrail'
            - type: 'null'
        time_stops:
          anyOf:
            - $ref: '#/components/schemas/ExitTimeStops'
            - type: 'null'
        invalidations:
          items:
            $ref: '#/components/schemas/ExitInvalidation-Output'
          type: array
          title: Invalidations
      type: object
      required:
        - stop
      title: ExitPlan
      description: 'v3: exit_plan object - Module D output.'
    RiskStatus-Output:
      properties:
        daily_pnl_pct:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Daily Pnl Pct
        weekly_pnl_pct:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Weekly Pnl Pct
        portfolio_heat_pct:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Portfolio Heat Pct
        max_heat_pct:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Max Heat Pct
        open_positions:
          type: integer
          title: Open Positions
        available_slots:
          type: integer
          title: Available Slots
        cleared_to_trade:
          type: boolean
          title: Cleared To Trade
          default: true
      type: object
      required:
        - portfolio_heat_pct
        - max_heat_pct
        - open_positions
        - available_slots
      title: RiskStatus
      description: 'v3: risk_status object - Module E context at card creation.'
    Quality:
      properties:
        liquidity_grade:
          type: string
          title: Liquidity Grade
          description: A, B, C, D, F
        spread_grade:
          type: string
          title: Spread Grade
        iv_grade:
          type: string
          title: Iv Grade
        composite:
          type: string
          title: Composite
      type: object
      required:
        - liquidity_grade
        - spread_grade
        - iv_grade
        - composite
      title: Quality
      description: 'v3: quality object - contract quality grades.'
    app__models__action_card__ActionCardCompleteness:
      type: string
      enum:
        - signal_only
        - with_contract
        - actionable
      title: ActionCardCompleteness
      description: Action card completeness level based on module outputs present.
    Outcome-Output:
      properties:
        executed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Executed At
        fill_price:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Fill Price
        exit_price:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Exit Price
        exit_time:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Exit Time
        pnl_dollars:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pnl Dollars
        pnl_pct:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Pnl Pct
        r_multiple:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: R Multiple
        exit_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Exit Reason
        hold_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Hold Days
        institutional_validation:
          anyOf:
            - $ref: '#/components/schemas/InstitutionalValidation'
            - type: 'null'
      type: object
      title: Outcome
      description: 'v3: outcome object - post-trade tracking.'
    InstitutionalValidation:
      properties:
        ib_target_hit:
          anyOf:
            - type: string
            - type: 'null'
          title: Ib Target Hit
        vwap_held:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Vwap Held
        prior_vah_held:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Prior Vah Held
      type: object
      title: InstitutionalValidation
      description: Post-trade institutional level validation.
    VixContext-Output:
      properties:
        current:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Current
        sma50:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Sma50
        percentile_252d:
          type: integer
          title: Percentile 252D
        term_structure:
          type: string
          title: Term Structure
          description: contango, backwardation, flat
      type: object
      required:
        - current
        - sma50
        - percentile_252d
        - term_structure
      title: VixContext
      description: VIX market context.
    VCPMetrics-Output:
      properties:
        atr_compression_ratio:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Atr Compression Ratio
          description: Legacy. Prefer range_vs_atr_14.
        range_vs_atr_14:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Range Vs Atr 14
          description: Today's range / daily ATR(14)
        range_compression_pct:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Range Compression Pct
      type: object
      title: VCPMetrics
      description: VCP pattern metrics.
    ConfluenceComponent-Output:
      properties:
        score:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Score
        weight:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Weight
      type: object
      required:
        - score
        - weight
      title: ConfluenceComponent
      description: Single confluence scoring component.
    ScalePlanStep:
      properties:
        contracts:
          type: integer
          title: Contracts
        trigger:
          type: string
          title: Trigger
          description: at_signal, pullback, confirmation
      type: object
      required:
        - contracts
        - trigger
      title: ScalePlanStep
      description: Single scale-in step.
    ExitTarget-Output:
      properties:
        level:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Level
        basis:
          type: string
          title: Basis
          description: ib_1_5x, ib_2x, r3, prior_vah, etc.
        premium:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Premium
        pct:
          type: integer
          title: Pct
          description: Cumulative % to exit at this target
        action:
          type: string
          title: Action
          description: sell_50_move_stop_be, sell_25_trail, full_exit
      type: object
      required:
        - level
        - basis
        - pct
        - action
      title: ExitTarget
      description: Single exit target level.
    ExitStop-Output:
      properties:
        price:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Price
        basis:
          type: string
          title: Basis
          description: 0.15_atr_below_ib_high, val, etc.
        premium:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Premium
        premium_basis:
          anyOf:
            - type: string
            - type: 'null'
          title: Premium Basis
          description: minus_40pct
      type: object
      required:
        - price
        - basis
      title: ExitStop
      description: Stop loss definition.
    ExitTrail:
      properties:
        activation:
          type: string
          title: Activation
          description: plus_25pct, plus_50pct
        method:
          type: string
          title: Method
          description: institutional_level, atr_multiple, pct_from_high
      type: object
      required:
        - activation
        - method
      title: ExitTrail
      description: Trailing stop configuration.
    ExitTimeStops:
      properties:
        no_progress_hours:
          anyOf:
            - type: integer
            - type: 'null'
          title: No Progress Hours
        max_hold_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Hold Days
        dte_floor:
          anyOf:
            - type: integer
            - type: 'null'
          title: Dte Floor
      type: object
      title: ExitTimeStops
      description: Time-based exit rules.
    ExitInvalidation-Output:
      properties:
        trigger:
          type: string
          title: Trigger
          description: close_below_ib_high, close_below_vwap, vix_above_25
        level:
          anyOf:
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
            - type: 'null'
          title: Level
      type: object
      required:
        - trigger
      title: ExitInvalidation
      description: Invalidation trigger.

````