{
  "openapi": "3.1.0",
  "info": {
    "title": "Bellator Schedule Intelligence APIs",
    "description": "\n    Bellator Schedule Intelligence APIs - Stateless Schedule Health APIs\n\n    ## Features\n\n    * **Schedule Analysis** - Comprehensive schedule health analysis\n    * **Critical Path** - CPM-based critical path calculation\n    * **Validation** - Schedule validation and quality checks\n    * **Future: Resource Management** - Resource allocation and leveling\n    * **Future: Simulation** - Monte Carlo and what-if analysis\n    * **Future: AI Recommendations** - LLM-powered optimization suggestions\n\n    ## Authentication\n\n    API key authentication via `x-api-key` header or OAuth 2.0 Bearer token via `Authorization` header.\n\n    ### API Key Authentication (Legacy)\n    Include API key in `x-api-key` header.\n\n    ### OAuth 2.0 / Azure AD Authentication (Recommended)\n    Include Bearer token in `Authorization` header: `Authorization: Bearer <token>`\n\n    Tiers:\n    - **Free**: 2,000 tasks, 100 req/min, 5MB payload\n    - **Professional**: 5,000 tasks, 500 req/min, 25MB payload\n    - **Enterprise**: 50,000 tasks, 2,000 req/min, 100MB payload\n    - **Government**: 100,000+ tasks, 10,000 req/min, 500MB payload\n\n    ## Usage Metering\n\n    All API requests are metered and tracked for:\n    - Request duration (milliseconds)\n    - Task count processed\n    - Token consumption (for LLM operations)\n    - Estimated cost (USD)\n\n    Metering events are emitted to logs and can be integrated with billing systems.\n\n    ## Security\n\n    * Tier-based task limits (500-100,000 tasks per request)\n    * Tier-based payload limits (5-500 MB)\n    * Input validation and sanitization\n    * Tier-based rate limiting (100-10,000 requests per 60 seconds)\n    ",
    "version": "0.3.0"
  },
  "paths": {
    "/api/v1/account/tier": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get current API tier and limits",
        "description": "Returns the subscription tier and limits for the authenticated API key. Used by the official Bellator SI Dashboard for dynamic feature gating. Fully stateless and lightweight.",
        "operationId": "get_account_tier_api_v1_account_tier_get",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountTierResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing API key"
          },
          "403": {
            "description": "API key inactive or suspended"
          },
          "429": {
            "description": "Rate limit exceeded"
          },
          "500": {
            "description": "Internal resolution error"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forensics/change-tracking": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "Time-Series Change Detection",
        "description": "Detects field-level changes across schedule snapshots in six categories.\\n\\n**Change categories:**\\n- `baseline` \u2014 unauthorized baseline date/duration modifications (GAO BP-10)\\n- `actual` \u2014 retroactive actual date changes (DCMA DECM 06A504a/b)\\n- `forecast` \u2014 forecast drift and instability patterns\\n- `logic` \u2014 dependency adds/removes/lag modifications\\n- `resource` \u2014 resource assignment modifications\\n- `progress` \u2014 progress decrease and erratic patterns\\n\\n**Comparison modes:** `all_periods` (default), `latest`, `specific_dates`.\\n\\n**Tier access:** Starter and above.\\n\\n**Output:** `comparison_summary`, `changes_by_category` (all 6 categories), `impact_analysis`, `trends`, `compliance_tags`, `processing_metadata`.",
        "operationId": "change_tracking_api_v1_forensics_change_tracking_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeTrackingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Change tracking analysis completed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ChangeTrackingData_"
                }
              }
            }
          },
          "402": {
            "description": "Tier limit exceeded \u2014 Starter tier or above required"
          },
          "422": {
            "description": "Validation error \u2014 check schedule schema or options"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        }
      }
    },
    "/api/v1/forensics/change-tracking/async": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "Time-Series Change Detection (Async)",
        "description": "Submit async change tracking for large schedules. Poll GET /api/v1/jobs/{job_id}.",
        "operationId": "change_tracking_async_api_v1_forensics_change_tracking_async_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeTrackingRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forensics/baseline-compare": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "Baseline Variance Analysis",
        "description": "Compares the current schedule against an approved baseline to detect variance, drift, and execution performance signals.\\n\\n**Performance indicators:** BEI, Critical Path BEI, SPI(t), variance severity, on-track percentage.\\n\\n**Optional analysis:**\\n- `include_trends` \u2014 multi-period variance trend analysis\\n- `include_evms_trends` \u2014 EVMS SPI/CPI/EAC indices over time\\n- `include_forecast_trends` \u2014 EAC forecast stability tracking\\n- `include_logic_changes` \u2014 dependency graph drift detection\\n\\n**Match strategies:** `id` (default), `id_and_wbs`, `wbs_hierarchy`, `fuzzy_id`.\\n\\n**Tier access:** Starter and above.\\n\\n**Standards:** GAO BP-10, DCMA Check #14 (BEI), AACE RP 29R-03.",
        "operationId": "baseline_compare_api_v1_forensics_baseline_compare_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BaselineCompareRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Baseline comparison completed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_BaselineCompareData_"
                }
              }
            }
          },
          "402": {
            "description": "Tier limit exceeded \u2014 Starter tier or above required"
          },
          "422": {
            "description": "Validation error \u2014 check schedule schema or options"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        }
      }
    },
    "/api/v1/forensics/baseline-compare/async": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "Baseline Variance Analysis (Async)",
        "description": "Submit async baseline comparison for large schedules. Poll GET /api/v1/jobs/{job_id}.",
        "operationId": "baseline_compare_async_api_v1_forensics_baseline_compare_async_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BaselineCompareRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forensics/delay-analysis": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "Delay Attribution Analysis",
        "description": "Identifies, quantifies, and attributes schedule delays across four analysis steps.\\n\\n**Steps:**\\n1. Variance detection \u2014 identifies delayed tasks vs baseline\\n2. Float analysis \u2014 tracks critical path and float consumption\\n3. Causal chains \u2014 traces delay propagation through dependency network\\n4. Recommendations \u2014 AACE RP 47R-11 prioritized recovery actions\\n\\n**Methodologies:** `windows` (default), `contemporaneous`, `collapsed_as_built`.\\n\\n**Tier access:** Starter and above.\\n\\n**Standards:** AACE RP 29R-03, AACE RP 47R-11.",
        "operationId": "delay_analysis_api_v1_forensics_delay_analysis_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DelayAnalysisRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Delay analysis completed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_DelayAnalysisData_"
                }
              }
            }
          },
          "402": {
            "description": "Tier limit exceeded \u2014 Starter tier or above required"
          },
          "422": {
            "description": "Validation error \u2014 check schedule schema or options"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        }
      }
    },
    "/api/v1/forensics/delay-analysis/async": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "Delay Attribution Analysis (Async)",
        "description": "Submit async delay analysis for large schedules. Poll GET /api/v1/jobs/{job_id}.",
        "operationId": "delay_analysis_async_api_v1_forensics_delay_analysis_async_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DelayAnalysisRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/forensics/as-planned-vs-as-built": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "As-Planned vs. As-Built Comparison",
        "description": "Compares the original as-planned schedule against actual execution (as-built), identifying task-level variance and execution performance.\\n\\n**Output:**\\n- Per-task variance (start/finish/duration)\\n- Variance classification (on_time, minor_slip, moderate_slip, severe_slip, early_completion, incomplete)\\n- Critical path overlay (planned vs. actual CP)\\n\\n**Optional analysis:**\\n- `include_logic_diff` \u2014 detect added/removed/modified dependencies\\n- `include_resource_diff` \u2014 compare resource assignment changes\\n\\n**Match strategies:** `exact_id` (default), `fuzzy_name`, `wbs`.\\n\\n**Tier access:** Starter and above.\\n\\n**Standards:** AACE RP 29R-03 (Forensic Schedule Analysis).",
        "operationId": "as_planned_vs_as_built_api_v1_forensics_as_planned_vs_as_built_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AsPlannedVsAsBuiltRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "As-planned vs. as-built comparison completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_AsPlannedVsAsBuiltData_"
                }
              }
            }
          },
          "402": {
            "description": "Tier limit exceeded \u2014 Starter tier or above required"
          },
          "422": {
            "description": "Validation error \u2014 check schedule schema or options"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        }
      }
    },
    "/api/v1/forensics/as-planned-vs-as-built/async": {
      "post": {
        "tags": [
          "Forensics"
        ],
        "summary": "As-Planned vs. As-Built Comparison (Async)",
        "description": "Submit async as-planned vs. as-built comparison for large schedules. Poll GET /api/v1/jobs/{job_id}.",
        "operationId": "as_planned_vs_as_built_async_api_v1_forensics_as_planned_vs_as_built_async_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AsPlannedVsAsBuiltRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/validate": {
      "post": {
        "tags": [
          "Analysis"
        ],
        "summary": "Validate Schedule",
        "description": "Validate schedule for errors and warnings",
        "operationId": "analysis_validate",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ValidationData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/cpm": {
      "post": {
        "tags": [
          "Analysis"
        ],
        "summary": "Calculate Critical Path",
        "description": "Calculate Critical Path Method for a schedule.\n\nThis endpoint performs two-pass CPM calculation (forward + backward pass)\nto determine critical path, project duration, and task timing.\n\n**Algorithm Steps:**\n1. Dependency parsing & DAG construction\n2. Forward pass (calculate early dates)\n3. Backward pass (calculate late dates)\n4. Float calculation (total float, free float)\n5. Critical path identification\n\n**Standards Compliance:**\n- DCMA Check #12: Critical Path Test\n- GAO BP-6: Maintain Valid Critical Path\n- PMBOK 6.5.2.2: Critical Path Method\n- AACE RP 27R-03: Schedule Flexibility\n\n**Task Limits:**\n- Minimum: 1 task\n- Maximum: 10,000 tasks (synchronous processing only)\n- For larger schedules, use async health score API\n\n**Dependency Format:**\n- Simple: [\"T1\", \"T2\"] (assumes FS with zero lag)\n- Rich: [\"T1FS+2 d\", \"T2SS-1 d\"] (relationship type + lag)\n\n**Response Time:**\n- 1-100 tasks: <10ms\n- 101-500 tasks: <25ms\n- 501-1,000 tasks: <50ms\n- 1,001-5,000 tasks: <200ms\n- 5,001-10,000 tasks: <500ms\n\nArgs:\n    request: CPM calculation request with tasks and options\n    api_key: API key for authentication (injected)\n    protection: Bot detection and rate limiting results\n\nReturns:\n    CPMResponse with critical path, task timing, and optional network details\n\nRaises:\n    HTTPException 400: Invalid request (malformed JSON, validation errors, cycles)\n    HTTPException 401: Invalid API key\n    HTTPException 429: Rate limit exceeded\n    HTTPException 500: Internal server error",
        "operationId": "analysis_cpm",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CPMRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_CPMData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/resources": {
      "post": {
        "tags": [
          "Analysis"
        ],
        "summary": "Resource Analysis",
        "description": "Run a time-phased resource analysis on a schedule.\n\nAccepts a schedule payload (tasks), optional resource availability\ndeclarations, and analysis options. Returns demand profiles per resource,\nover-allocation periods, leveling candidates, and a composite risk score.",
        "operationId": "analysis_resources",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceAnalysisRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ResourceAnalysisData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/cpm/async": {
      "post": {
        "tags": [
          "Analysis"
        ],
        "summary": "Calculate Critical Path (Async)",
        "description": "Submit CPM calculation as async job (for large schedules >1,000 tasks).\n\nThis endpoint queues a CPM calculation job for background processing.\nUse GET /api/v1/jobs/{job_id} to poll for completion.\n\n**Tier Restrictions:**\n- Demo/Free: Blocked (use sync endpoint \u22641,000 tasks)\n- Starter+: Allowed\n\n**Task Limits:**\n- Starter: 2,000 tasks\n- Professional: 5,000 tasks\n- Enterprise: 50,000 tasks\n- Government: 100,000 tasks\n\nArgs:\n    request: CPM calculation request\n    api_key: API key for authentication\n\nReturns:\n    Job submission response with job_id and polling_url\n\nRaises:\n    HTTPException 402: Task count exceeds tier limit\n    HTTPException 403: Async not available for tier (demo/free)",
        "operationId": "analysis_cpm_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CPMRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/resources/async": {
      "post": {
        "tags": [
          "Analysis"
        ],
        "summary": "Resource Analysis (Async)",
        "description": "Submit resource analysis as async job.",
        "operationId": "analysis_resources_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceAnalysisRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/score": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Calculate Schedule Health Score",
        "description": "Calculate comprehensive schedule health score (0-100) based on deterministic analysis.\n\nThis endpoint performs:\n- DAG construction and validation\n- Critical Path Method (CPM) calculation\n- Float analysis and erosion detection\n- Critical path density evaluation\n- Structural integrity assessment\n- Weighted composite scoring per DCMA/GAO/AACE standards\n\n**Performance Target:** Response time <5s for 1,000 tasks (Phase 1A)\n\n**Task Limits:**\n- Synchronous processing: up to 1,000 tasks\n- Tier-based limits: Free (500), Professional (5,000), Enterprise (50,000+)\n\n**Compliance:**\n- DCMA 14-Point Assessment\n- GAO Schedule Assessment Guide\n- AACE RP 92R-19 (Schedule Health Metrics)\n- PMBOK 8 Section 4.5",
        "operationId": "calculate_health_score_api_v1_health_score_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScheduleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success - Health score calculated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_HealthScoreData_"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required - Tier limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Task count (1500) exceeds tier limit (1000). Use async endpoint or upgrade tier.",
                  "type": "tier_limit_exceeded",
                  "upgrade_url": "/docs#/Authentication"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Validation error",
            "content": {
              "application/json": {
                "example": {
                  "detail": [
                    {
                      "loc": [
                        "body",
                        "tasks",
                        0,
                        "duration_days"
                      ],
                      "msg": "ensure this value is greater than or equal to 0",
                      "type": "value_error"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/logic-audit": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Logic Audit",
        "description": "Run a full logic audit on a schedule.\n\nAccepts a list of tasks and optional audit configuration options.\nReturns a scored, graded report with per-rule results and prioritized\nrecommended fixes.",
        "operationId": "health_logic_audit",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogicAuditRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_LogicAuditData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/progress-audit": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Progress Audit",
        "description": "Run a full progress integrity audit on a schedule.\n\nAccepts a list of tasks and required audit options (including status_date).\nReturns a scored, graded report with per-anomaly details and prioritized\nremediation recommendations.",
        "operationId": "health_progress_audit",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProgressAuditRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ProgressAuditData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/dcma-14-point": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "DCMA 14-Point Assessment",
        "description": "Run a full DCMA 14-Point assessment on a schedule.\n\nAccepts a schedule payload (tasks + metadata) and optional assessment options.\nReturns per-check results, overall pass/warning/fail status, threshold metadata,\nand prioritized remediation recommendations.",
        "operationId": "health_dcma_14_point",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DCMA14PointRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_DCMA14PointData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/dcma-decm": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "DCMA DECM Assessment",
        "description": "Run a DCMA DECM Tier 2 schedule compliance assessment.\n\nAccepts a schedule payload (tasks + metadata), optional schedule history for\nretroactive date change detection, and assessment options.\nReturns check results grouped by EVM Guideline with overall pass/warning/fail\nstatus and prioritized remediation recommendations.",
        "operationId": "health_dcma_decm",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DCMADECMRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_DCMADECMData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/planning-horizon": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Planning Horizon",
        "description": "Analyze work-readiness for upcoming tasks within horizon bands.\n\nAccepts a current schedule with status date and optional schedule history.\nReturns per-band readiness scores, at-risk tasks, and recommendations.",
        "operationId": "health_planning_horizon",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlanningHorizonRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_PlanningHorizonData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/schedule-risk-index": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Schedule Risk Index",
        "description": "Compute composite Schedule Risk Index across five sub-metrics.\n\nAccepts a schedule with optional baseline dates, actuals, and resource fields.\nSub-metrics are activated automatically based on available data (sub_metrics=\"auto\").\nReturns composite score, per-sub-metric breakdown, top risk drivers, and\nactionable recommendations.",
        "operationId": "health_schedule_risk_index",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScheduleRiskIndexRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ScheduleRiskIndexData_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/logic-audit/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Logic Audit (Async)",
        "description": "Submit logic audit as async job.",
        "operationId": "health_logic_audit_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogicAuditRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/progress-audit/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Progress Audit (Async)",
        "description": "Submit progress audit as async job.",
        "operationId": "health_progress_audit_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProgressAuditRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/dcma-14-point/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "DCMA 14-Point Assessment (Async)",
        "description": "Submit DCMA 14-Point assessment as async job.",
        "operationId": "health_dcma_14_point_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DCMA14PointRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/dcma-decm/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "DCMA DECM Assessment (Async)",
        "description": "Submit DCMA DECM assessment as async job.",
        "operationId": "health_dcma_decm_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DCMADECMRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/planning-horizon/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Planning Horizon (Async)",
        "description": "Submit planning horizon analysis as async job.",
        "operationId": "health_planning_horizon_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlanningHorizonRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/schedule-risk-index/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Schedule Risk Index (Async)",
        "description": "Submit schedule risk index as async job.",
        "operationId": "health_schedule_risk_index_async",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScheduleRiskIndexRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health/score/async": {
      "post": {
        "tags": [
          "health"
        ],
        "summary": "Submit Async Health Score Job",
        "description": "Submit asynchronous health score calculation job for large schedules.\n\nThis endpoint queues a job for background processing and returns immediately\nwith a job ID. Use the job status endpoint to poll for completion.\n\n**Use Cases:**\n- Schedules with 5,000-10,000+ tasks\n- Batch processing of multiple schedules\n- Integration with external systems via webhooks\n\n**Performance:**\n- Target completion: <30 seconds for 5,000 tasks\n- Webhook delivery: <5 seconds after completion\n- Job result TTL: 24 hours\n\n**Tier Limits:**\n- Free: 2,000 tasks\n- Professional: 5,000 tasks\n- Enterprise: 50,000 tasks\n- Government: 100,000+ tasks\n\n**Webhook Delivery:**\n- Optional callback URL for result delivery\n- Retry logic: 3 attempts with exponential backoff\n- Events: job.completed, job.failed\n\n**Compliance:**\n- DCMA 14-Point Assessment\n- GAO Schedule Assessment Guide\n- AACE RP 92R-19 (Schedule Health Metrics)\n- PMBOK 8 Section 4.5",
        "operationId": "submit_async_health_score_api_v1_health_score_async_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobSubmissionRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted - Job queued successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobSubmissionResponse"
                },
                "example": {
                  "job_id": "550e8400-e29b-41d4-a716-446655440000",
                  "status": "queued",
                  "estimated_completion_seconds": 15,
                  "status_url": "/api/v1/jobs/550e8400-e29b-41d4-a716-446655440000",
                  "created_at": "2025-01-08T12:00:00Z"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required - Tier limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Task count (10000) exceeds tier limit (5000). Upgrade to Enterprise tier.",
                  "type": "tier_limit_exceeded",
                  "upgrade_url": "/docs#/Authentication"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Async access not available for tier",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Async endpoints are not available for demo tier. Async processing requires Starter tier or higher. Please upgrade your tier or use synchronous endpoints (\u22641,000 tasks)."
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable - Queue at capacity",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Job queue is at capacity. Please try again later.",
                  "type": "queue_at_capacity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{job_id}": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Get Job Status",
        "description": "Poll async job status and retrieve result when completed.\n\nThis unified endpoint serves all async operations including:\n- Health score calculations\n- Forensics analysis (logic audit, DCMA 14-point, etc.)\n- CPM calculations\n- Resource analysis\n- And all other async endpoints\n\n**Job Lifecycle:**\n1. **queued** - Job submitted, waiting for worker\n2. **processing** - Worker executing job\n3. **completed** - Job finished successfully, result available\n4. **failed** - Job encountered error\n5. **cancelled** - Job cancelled by user\n\n**Progress Tracking:**\n- `progress_percent`: Overall progress (0-100)\n- `checks_completed` / `total_checks`: Granular progress for forensics endpoints\n\n**Polling Recommendations:**\n- Initial delay: 5 seconds\n- Interval: 2-5 seconds\n- Exponential backoff for long-running jobs\n\n**Result Expiration:**\n- Job results are stored for 24 hours\n- After expiration, job status returns 404",
        "operationId": "get_async_job_status_api_v1_jobs__job_id__get",
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Job Id"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success - Job status retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobStatusResponse"
                },
                "examples": {
                  "queued": {
                    "summary": "Job queued",
                    "value": {
                      "job_id": "550e8400-e29b-41d4-a716-446655440000",
                      "status": "queued",
                      "created_at": "2025-01-08T12:00:00Z",
                      "task_count": 5000,
                      "progress_percent": 0.0,
                      "endpoint_name": "forensics/logic-audit"
                    }
                  },
                  "processing": {
                    "summary": "Job processing with progress",
                    "value": {
                      "job_id": "550e8400-e29b-41d4-a716-446655440000",
                      "status": "processing",
                      "created_at": "2025-01-08T12:00:00Z",
                      "started_at": "2025-01-08T12:00:05Z",
                      "task_count": 5000,
                      "progress_percent": 50.0,
                      "endpoint_name": "forensics/dcma-14-point",
                      "checks_completed": 7,
                      "total_checks": 14
                    }
                  },
                  "completed": {
                    "summary": "Job completed",
                    "value": {
                      "job_id": "550e8400-e29b-41d4-a716-446655440000",
                      "status": "completed",
                      "created_at": "2025-01-08T12:00:00Z",
                      "started_at": "2025-01-08T12:00:05Z",
                      "completed_at": "2025-01-08T12:00:20Z",
                      "task_count": 5000,
                      "result": {
                        "score": 85.5,
                        "breakdown": {
                          "criticality_score": 90.0,
                          "float_erosion_score": 85.0
                        },
                        "top_signals": [
                          "High critical path density"
                        ],
                        "confidence": 0.95
                      },
                      "progress_percent": 100.0,
                      "endpoint_name": "health/score"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Job does not exist or has expired",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Job not found: 550e8400-e29b-41d4-a716-446655440000"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Jobs"
        ],
        "summary": "Delete Job",
        "description": "Delete a completed, failed, or cancelled job result.\n\n**Deletion Rules:**\n- Only completed, failed, or cancelled jobs can be deleted\n- Queued or processing jobs cannot be deleted (return 409 Conflict)\n- Job data is permanently removed from Redis\n\n**Use Cases:**\n- Cleanup after retrieving results\n- Remove sensitive job data\n- Free up storage space",
        "operationId": "delete_job_api_v1_jobs__job_id__delete",
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Job Id"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content - Job deleted successfully"
          },
          "409": {
            "description": "Conflict - Job is still queued or processing",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Cannot delete job while it is still processing. Cancel the job first."
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Job does not exist",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Job not found: 550e8400-e29b-41d4-a716-446655440000"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{job_id}/cancel": {
      "post": {
        "tags": [
          "Jobs"
        ],
        "summary": "Cancel Job",
        "description": "Cancel a queued or processing job.\n\n**Cancellation Rules:**\n- Only queued or processing jobs can be cancelled\n- Completed, failed, or already cancelled jobs cannot be cancelled\n- Celery task is revoked (terminated) if currently executing\n\n**Use Cases:**\n- User-initiated cancellation\n- Timeout or resource constraints\n- Superseded by newer job submission",
        "operationId": "cancel_async_job_api_v1_jobs__job_id__cancel_post",
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Job Id"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success - Job cancelled",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Cancel Async Job Api V1 Jobs  Job Id  Cancel Post"
                },
                "example": {
                  "job_id": "550e8400-e29b-41d4-a716-446655440000",
                  "cancelled": true,
                  "message": "Job successfully cancelled"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Job cannot be cancelled",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Job cannot be cancelled: already completed"
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Job does not exist",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Job not found: 550e8400-e29b-41d4-a716-446655440000"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/import/mpp": {
      "post": {
        "tags": [
          "Import"
        ],
        "summary": "Import MS Project XML Schedule",
        "description": "Parses an MS Project XML file (exported from MS Project as XML) and returns a Normalized Schedule JSON object compatible with all analysis APIs.\n\n**Tier access:** Starter and above.\n\n**File size limit:** 50 MB.\n\n**Input:** XML file content as a UTF-8 string in the `file_content` field.\n\n**Output:** `normalized_schedule` (ready to submit to `/health/score`, `/forensics/dcma-14-point`, etc.) plus `parse_summary`, `mapping_stats`, `warnings`, and `processing_metadata`.",
        "operationId": "import_mpp_api_v1_import_mpp_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MppImportRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Schedule successfully parsed and normalized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ImportData_"
                },
                "example": {
                  "status": "info",
                  "metadata": {
                    "task_count": 25,
                    "endpoint": "/api/v1/import/mpp",
                    "api_version": "v0.2.0",
                    "processing_time_ms": 450
                  },
                  "data": {
                    "normalized_schedule": {
                      "tasks": [
                        {
                          "id": "1",
                          "name": "Project Kickoff",
                          "duration_days": 0.0,
                          "predecessors": [],
                          "task_type": "milestone"
                        }
                      ],
                      "start_task_ids": [
                        "1"
                      ],
                      "finish_task_ids": [
                        "5"
                      ]
                    },
                    "parse_summary": {
                      "source_format": "mpp-xml",
                      "tasks_imported": 25,
                      "dependencies_imported": 22
                    },
                    "mapping_stats": {},
                    "warnings": [],
                    "processing_metadata": {
                      "import_timestamp": "2026-05-27T12:00:00Z",
                      "processing_time_ms": 450,
                      "api_version": "v0.2.0",
                      "parser_version": "1.1.0"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing required field (file_content)"
          },
          "402": {
            "description": "Tier limit exceeded \u2014 Starter tier or above required"
          },
          "415": {
            "description": "Unsupported media type (binary .mpp instead of XML)"
          },
          "422": {
            "description": "Semantic parse error \u2014 invalid XML, circular dependency, duplicate task IDs"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        }
      }
    },
    "/api/v1/import/xer": {
      "post": {
        "tags": [
          "Import"
        ],
        "summary": "Import Primavera P6 XER Schedule",
        "description": "Parses a Primavera P6 XER file and returns a Normalized Schedule JSON object compatible with all analysis APIs.\n\n**Tier access:** Starter and above.\n\n**File size limit:** 100 MB.\n\n**Input:** XER file content as a UTF-8 or Latin-1 string in the `file_content` field.\n\n**Multi-project XER:** If the XER file contains multiple projects, specify `options.project_id` to select the target project. Omitting `project_id` when multiple projects are present returns a 422 error listing available project IDs.\n\n**Output:** `normalized_schedule` (ready to submit to `/health/score`, `/forensics/dcma-14-point`, etc.) plus `parse_summary`, `mapping_stats`, `warnings`, and `processing_metadata`.",
        "operationId": "import_xer_api_v1_import_xer_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XerImportRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Schedule successfully parsed and normalized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BellatorResponse_ImportData_"
                },
                "example": {
                  "status": "info",
                  "metadata": {
                    "task_count": 120,
                    "endpoint": "/api/v1/import/xer",
                    "api_version": "v0.2.0",
                    "processing_time_ms": 380
                  },
                  "data": {
                    "normalized_schedule": {
                      "tasks": [
                        {
                          "id": "A1000",
                          "name": "Project Kickoff",
                          "duration_days": 0.0,
                          "predecessors": [],
                          "task_type": "milestone"
                        }
                      ],
                      "start_task_ids": [
                        "A1000"
                      ],
                      "finish_task_ids": [
                        "A9900"
                      ]
                    },
                    "parse_summary": {
                      "source_format": "p6-xer",
                      "tasks_imported": 120,
                      "dependencies_imported": 145
                    },
                    "mapping_stats": {},
                    "warnings": [],
                    "processing_metadata": {
                      "import_timestamp": "2026-05-27T12:00:00Z",
                      "processing_time_ms": 380,
                      "api_version": "v0.2.0",
                      "parser_version": "1.1.0"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing required field (file_content)"
          },
          "402": {
            "description": "Tier limit exceeded \u2014 Starter tier or above required"
          },
          "422": {
            "description": "Semantic parse error \u2014 malformed XER, multi-project ambiguity, circular dependency, or duplicate task IDs"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        }
      }
    },
    "/api/v1/resources/allocate": {
      "post": {
        "tags": [
          "Resource Management"
        ],
        "summary": "Allocate Resources (Placeholder)",
        "description": "Resource allocation optimization - not yet implemented",
        "operationId": "allocate_resources_api_v1_resources_allocate_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceAllocationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceAllocationResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/resources/level": {
      "post": {
        "tags": [
          "Resource Management"
        ],
        "summary": "Resource Leveling (Placeholder)",
        "description": "Resource leveling optimization - not yet implemented",
        "operationId": "level_resources_api_v1_resources_level_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceAllocationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/infrastructure/health/redis": {
      "get": {
        "tags": [
          "Infrastructure"
        ],
        "summary": "Redis Health Check",
        "description": "Check Redis connection health.\n\nReturns detailed Redis health information including:\n- Connection status\n- Ping latency\n- Server version\n- Memory usage\n- Connected clients\n- Uptime\n\nReturns:\n    Redis health status dictionary\n\nResponses:\n    200: Redis is healthy and reachable\n    503: Redis is unreachable or unhealthy (connection: false in response)\n\nExample:\n    ```json\n    {\n        \"connected\": true,\n        \"latency_ms\": 1.2,\n        \"version\": \"7.0.0\",\n        \"memory_used_mb\": 2.5,\n        \"connected_clients\": 3,\n        \"uptime_seconds\": 3600\n    }\n    ```",
        "operationId": "redis_health_check_api_v1_infrastructure_health_redis_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Redis Health Check Api V1 Infrastructure Health Redis Get"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/infrastructure/health": {
      "get": {
        "tags": [
          "Infrastructure"
        ],
        "summary": "Infrastructure Health",
        "description": "Check overall infrastructure health.\n\nAggregates health status from all infrastructure components:\n- Redis (job queue)\n\nReturns:\n    Overall infrastructure health status\n\nResponses:\n    200: All infrastructure components are healthy\n    503: One or more components are unhealthy\n\nExample:\n    ```json\n    {\n        \"status\": \"healthy\",\n        \"components\": {\n            \"redis\": {\n                \"connected\": true,\n                \"latency_ms\": 1.2\n            }\n        }\n    }\n    ```",
        "operationId": "infrastructure_health_api_v1_infrastructure_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Infrastructure Health Api V1 Infrastructure Health Get"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/register": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Register Webhook",
        "description": "Register webhook callback URL for async job notifications.\n\n**Webhook Events:**\n- `job.completed` - Job finished successfully\n- `job.failed` - Job encountered error\n- `job.cancelled` - Job was cancelled\n\n**Webhook Payload:**\n```json\n{\n    \"event\": \"job.completed\",\n    \"job_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"timestamp\": \"2025-01-08T12:00:25Z\",\n    \"data\": {\n        \"job_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n        \"status\": \"completed\",\n        \"result\": {...}\n    }\n}\n```\n\n**Signature Verification:**\n- HMAC-SHA256 signature in `X-Bellator-Signature` header\n- Format: `sha256=<hex_signature>`\n- Payload: JSON-serialized webhook payload (deterministic order)\n\n**Delivery Guarantees:**\n- At-least-once delivery\n- Max 3 retry attempts with exponential backoff\n- 5 second initial retry delay, 15 second max delay\n- Target delivery: <5 seconds after job completion\n\n**Best Practices:**\n- Return 2xx status code quickly (<1 second)\n- Process webhook payload asynchronously\n- Verify signature if secret provided\n- Implement idempotency using job_id",
        "operationId": "register_webhook_api_v1_webhooks_register_post",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookRegistration"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success - Webhook registered",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "title": "Response Register Webhook Api V1 Webhooks Register Post"
                },
                "example": {
                  "status": "registered",
                  "webhook_id": "wh_abc123",
                  "url": "https://customer.example.com/webhooks/bellator",
                  "events": [
                    "job.completed",
                    "job.failed"
                  ],
                  "message": "Webhook registered successfully. Will be used for all async jobs."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid webhook configuration",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid URL format or event types"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/registration": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Get Webhook Registration",
        "description": "Get the current webhook registration for the authenticated tenant.\n\nReturns the registered webhook URL, events, and metadata.",
        "operationId": "get_webhook_registration_api_v1_webhooks_registration_get",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success - Webhook registration found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Webhook Registration Api V1 Webhooks Registration Get"
                },
                "example": {
                  "webhook_id": "wh_abc123",
                  "url": "https://customer.example.com/webhooks/bellator",
                  "events": [
                    "job.completed",
                    "job.failed"
                  ],
                  "created_at": "2025-01-08T12:00:00Z"
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No webhook registration found",
            "content": {
              "application/json": {
                "example": {
                  "detail": "No webhook registration found for this tenant"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Rate limit exceeded",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Rate limit exceeded. Maximum 500 requests per 60 seconds.",
                  "type": "rate_limit_exceeded"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "webhooks"
        ],
        "summary": "Delete Webhook Registration",
        "description": "Delete the webhook registration for the authenticated tenant.\n\nAfter deletion, no webhooks will be sent for future async jobs.",
        "operationId": "delete_webhook_registration_api_v1_webhooks_registration_delete",
        "parameters": [
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "title": "Response Delete Webhook Registration Api V1 Webhooks Registration Delete"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/deliveries/{webhook_id}": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Get Delivery Status",
        "description": "Get delivery status for a specific webhook delivery attempt.\n\nReturns delivery metadata including attempts, success status, and errors.",
        "operationId": "get_delivery_status_api_v1_webhooks_deliveries__webhook_id__get",
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Webhook Id"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Delivery Status Api V1 Webhooks Deliveries  Webhook Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/deliveries/job/{job_id}": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Get Job Deliveries",
        "description": "Get all webhook delivery attempts for a specific job.\n\nReturns a list of all delivery attempts made for this job,\nincluding successes and failures.",
        "operationId": "get_job_deliveries_api_v1_webhooks_deliveries_job__job_id__get",
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Job Id"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response Get Job Deliveries Api V1 Webhooks Deliveries Job  Job Id  Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/webhooks/dlq": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Get Dead Letter Queue",
        "description": "Get entries from the webhook dead letter queue (DLQ).\n\nThe DLQ contains webhooks that permanently failed after all retry attempts.\nUse for monitoring and debugging webhook delivery issues.\n\n**Query Parameters:**\n- `limit`: Maximum number of entries to return (default: 100, max: 1000)\n- `offset`: Number of entries to skip for pagination (default: 0)",
        "operationId": "get_dlq_api_v1_webhooks_dlq_get",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "title": "Offset"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          },
          {
            "name": "x-bellator-internal-dispatch",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Bellator-Internal-Dispatch"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Get Dlq Api V1 Webhooks Dlq Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "Health Check",
        "description": "Health check endpoint.\n\nReturns:\n    Status and version information",
        "operationId": "health_check_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/": {
      "get": {
        "tags": [
          "Root"
        ],
        "summary": "Root",
        "description": "Root endpoint with API information.\n\nReturns:\n    API information and links",
        "operationId": "root__get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "API key for authentication. Required when API_KEY is configured."
      },
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
            "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
            "scopes": {
              "api.read": "Read access to API",
              "api.write": "Write access to API"
            }
          }
        },
        "description": "OAuth 2.0 / Azure AD authentication (recommended)"
      },
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "JWT Bearer token from OAuth 2.0 / Azure AD"
      }
    },
    "schemas": {
      "AccountTierMetadata": {
        "properties": {
          "resolved_at": {
            "type": "string",
            "title": "Resolved At",
            "description": "UTC ISO 8601 timestamp of tier resolution."
          },
          "api_version": {
            "type": "string",
            "title": "Api Version",
            "description": "API version that produced this response."
          }
        },
        "type": "object",
        "required": [
          "resolved_at",
          "api_version"
        ],
        "title": "AccountTierMetadata",
        "description": "Audit context for the tier resolution.\n\nAttributes:\n    resolved_at: UTC ISO 8601 timestamp when the tier was resolved.\n    api_version: API version that produced this response."
      },
      "AccountTierResponse": {
        "properties": {
          "tier": {
            "type": "string",
            "title": "Tier",
            "description": "Lowercase tier identifier: demo | free | starter | professional | enterprise | government"
          },
          "display_name": {
            "type": "string",
            "title": "Display Name",
            "description": "Human-readable tier display name."
          },
          "limits": {
            "$ref": "#/components/schemas/TierLimits"
          },
          "capabilities": {
            "$ref": "#/components/schemas/TierCapabilities"
          },
          "recommended_routes": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Recommended Routes",
            "description": "Accessible API route templates filtered to this tier's capabilities."
          },
          "metadata": {
            "$ref": "#/components/schemas/AccountTierMetadata"
          }
        },
        "type": "object",
        "required": [
          "tier",
          "display_name",
          "limits",
          "capabilities",
          "recommended_routes",
          "metadata"
        ],
        "title": "AccountTierResponse",
        "description": "Response model for GET /api/v1/account/tier.\n\nNot wrapped in BellatorResponse[T]. This is an identity and capability\nendpoint \u2014 no schedule is submitted, no pass/fail evaluation is made,\nand findings/recommendations are not applicable.\n\nAttributes:\n    tier: Lowercase tier identifier.\n    display_name: Human-readable tier display name.\n    limits: Numeric limits for this tier.\n    capabilities: Boolean feature flags for dashboard gating.\n    recommended_routes: Accessible API route templates for this tier.\n    metadata: Audit context \u2014 resolution timestamp and API version."
      },
      "ActualCategoryResult": {
        "properties": {
          "total_changes": {
            "type": "integer",
            "title": "Total Changes",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "dcma_decm_violations": {
            "items": {
              "$ref": "#/components/schemas/DCMADECMViolationRecord"
            },
            "type": "array",
            "title": "Dcma Decm Violations"
          },
          "changes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "title": "ActualCategoryResult",
        "description": "Result for actual date change category (includes DCMA DECM violations)."
      },
      "AddedRelationship": {
        "properties": {
          "predecessor_id": {
            "type": "string",
            "title": "Predecessor Id"
          },
          "successor_id": {
            "type": "string",
            "title": "Successor Id"
          },
          "relationship_type": {
            "type": "string",
            "title": "Relationship Type",
            "default": "FS"
          },
          "lag_days": {
            "type": "integer",
            "title": "Lag Days",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "predecessor_id",
          "successor_id"
        ],
        "title": "AddedRelationship",
        "description": "A dependency added in the as-built schedule."
      },
      "AnalysisSummary": {
        "properties": {
          "status_date": {
            "type": "string",
            "title": "Status Date",
            "default": ""
          },
          "analysis_horizon_days": {
            "type": "integer",
            "title": "Analysis Horizon Days",
            "default": 0
          },
          "day_type": {
            "type": "string",
            "title": "Day Type",
            "default": "calendar"
          },
          "bands_analyzed": {
            "type": "integer",
            "title": "Bands Analyzed",
            "default": 0
          },
          "total_tasks_in_horizon": {
            "type": "integer",
            "title": "Total Tasks In Horizon",
            "default": 0
          },
          "tasks_at_risk": {
            "type": "integer",
            "title": "Tasks At Risk",
            "default": 0
          },
          "overall_readiness_score": {
            "type": "number",
            "title": "Overall Readiness Score",
            "default": 100.0
          }
        },
        "type": "object",
        "title": "AnalysisSummary",
        "description": "High-level summary of planning horizon analysis."
      },
      "ApprovalDimensionScore": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score",
            "default": 100.0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "not_applicable"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/ReadinessIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "title": "ApprovalDimensionScore",
        "description": "Approval status readiness dimension result."
      },
      "AsBuiltScheduleInput": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "AsBuiltScheduleInput",
        "description": "As-built (actual execution) schedule."
      },
      "AsPlannedScheduleInput": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "AsPlannedScheduleInput",
        "description": "As-planned (original baseline) schedule."
      },
      "AsPlannedVsAsBuiltData": {
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/AsPlannedVsAsBuiltSummary"
          },
          "task_comparisons": {
            "items": {
              "$ref": "#/components/schemas/TaskComparison"
            },
            "type": "array",
            "title": "Task Comparisons"
          },
          "unmatched_planned_tasks": {
            "items": {
              "$ref": "#/components/schemas/UnmatchedPlannedTask"
            },
            "type": "array",
            "title": "Unmatched Planned Tasks"
          },
          "unmatched_built_tasks": {
            "items": {
              "$ref": "#/components/schemas/UnmatchedBuiltTask"
            },
            "type": "array",
            "title": "Unmatched Built Tasks"
          },
          "logic_diff": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LogicDiff"
              },
              {
                "type": "null"
              }
            ]
          },
          "critical_path_overlay": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CriticalPathOverlay"
              },
              {
                "type": "null"
              }
            ]
          },
          "resource_diff": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceDiff"
              },
              {
                "type": "null"
              }
            ]
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata"
          }
        },
        "type": "object",
        "title": "AsPlannedVsAsBuiltData",
        "description": "Data payload for POST /api/v1/forensics/as-planned-vs-as-built."
      },
      "AsPlannedVsAsBuiltOptions": {
        "properties": {
          "include_logic_diff": {
            "type": "boolean",
            "title": "Include Logic Diff",
            "default": false
          },
          "include_critical_path_overlay": {
            "type": "boolean",
            "title": "Include Critical Path Overlay",
            "default": true
          },
          "include_resource_diff": {
            "type": "boolean",
            "title": "Include Resource Diff",
            "default": false
          },
          "match_strategy": {
            "type": "string",
            "enum": [
              "exact_id",
              "fuzzy_name",
              "wbs"
            ],
            "title": "Match Strategy",
            "default": "exact_id"
          },
          "fuzzy_threshold": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Fuzzy Threshold",
            "default": 0.8
          },
          "min_variance_days": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Min Variance Days",
            "default": 1
          },
          "exclude_task_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Exclude Task Types"
          },
          "methodology": {
            "type": "string",
            "enum": [
              "direct",
              "collapsed_as_built"
            ],
            "title": "Methodology",
            "default": "direct"
          }
        },
        "type": "object",
        "title": "AsPlannedVsAsBuiltOptions",
        "description": "Options for as-planned vs. as-built analysis."
      },
      "AsPlannedVsAsBuiltRequest": {
        "properties": {
          "as_planned": {
            "$ref": "#/components/schemas/AsPlannedScheduleInput"
          },
          "as_built": {
            "$ref": "#/components/schemas/AsBuiltScheduleInput"
          },
          "options": {
            "$ref": "#/components/schemas/AsPlannedVsAsBuiltOptions"
          }
        },
        "type": "object",
        "required": [
          "as_planned",
          "as_built"
        ],
        "title": "AsPlannedVsAsBuiltRequest",
        "description": "Request body for POST /api/v1/forensics/as-planned-vs-as-built."
      },
      "AsPlannedVsAsBuiltSummary": {
        "properties": {
          "as_planned_task_count": {
            "type": "integer",
            "title": "As Planned Task Count",
            "default": 0
          },
          "as_built_task_count": {
            "type": "integer",
            "title": "As Built Task Count",
            "default": 0
          },
          "matched_tasks": {
            "type": "integer",
            "title": "Matched Tasks",
            "default": 0
          },
          "unmatched_planned_tasks": {
            "type": "integer",
            "title": "Unmatched Planned Tasks",
            "default": 0
          },
          "unmatched_built_tasks": {
            "type": "integer",
            "title": "Unmatched Built Tasks",
            "default": 0
          },
          "on_time_completion_rate": {
            "type": "number",
            "title": "On Time Completion Rate",
            "default": 0.0
          },
          "avg_start_variance_days": {
            "type": "number",
            "title": "Avg Start Variance Days",
            "default": 0.0
          },
          "avg_finish_variance_days": {
            "type": "number",
            "title": "Avg Finish Variance Days",
            "default": 0.0
          },
          "avg_duration_variance_days": {
            "type": "number",
            "title": "Avg Duration Variance Days",
            "default": 0.0
          },
          "total_project_slippage_days": {
            "type": "integer",
            "title": "Total Project Slippage Days",
            "default": 0
          },
          "critical_path_overlap_pct": {
            "type": "number",
            "title": "Critical Path Overlap Pct",
            "default": 0.0
          },
          "loe_excluded_count": {
            "type": "integer",
            "title": "Loe Excluded Count",
            "default": 0
          }
        },
        "type": "object",
        "title": "AsPlannedVsAsBuiltSummary",
        "description": "High-level comparison statistics."
      },
      "AutoDetected": {
        "properties": {
          "start_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Start Task Ids"
          },
          "finish_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finish Task Ids"
          },
          "working_hours_per_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Working Hours Per Day"
          }
        },
        "type": "object",
        "title": "AutoDetected"
      },
      "BaselineCategoryResult": {
        "properties": {
          "total_changes": {
            "type": "integer",
            "title": "Total Changes",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "changes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "title": "BaselineCategoryResult",
        "description": "Result for baseline change category."
      },
      "BaselineChartData": {
        "properties": {
          "dates": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dates"
          },
          "total_variance": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Total Variance"
          },
          "bei_values": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Bei Values"
          },
          "spi_values": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Spi Values"
          },
          "cp_variance": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Cp Variance"
          }
        },
        "type": "object",
        "title": "BaselineChartData",
        "description": "Pre-aggregated time-series arrays for dashboard charts."
      },
      "BaselineCompareCurrentSchedule": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          },
          "status_date": {
            "type": "string",
            "title": "Status Date"
          }
        },
        "type": "object",
        "required": [
          "tasks",
          "status_date"
        ],
        "title": "BaselineCompareCurrentSchedule",
        "description": "Current schedule snapshot for baseline comparison."
      },
      "BaselineCompareData": {
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/BaselineCompareSummary"
          },
          "performance_indicators": {
            "$ref": "#/components/schemas/BaselinePerformanceIndicators"
          },
          "task_variances": {
            "items": {
              "$ref": "#/components/schemas/TaskVarianceRecord"
            },
            "type": "array",
            "title": "Task Variances"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/VarianceFinding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/BaselineRecommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "variance_trends": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VarianceTrends"
              },
              {
                "type": "null"
              }
            ]
          },
          "evms_trends": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EVMSTrends"
              },
              {
                "type": "null"
              }
            ]
          },
          "forecast_trends": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForecastTrends"
              },
              {
                "type": "null"
              }
            ]
          },
          "logic_changes": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LogicChanges"
              },
              {
                "type": "null"
              }
            ]
          },
          "logic_audit_summary": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logic Audit Summary"
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata"
          }
        },
        "type": "object",
        "title": "BaselineCompareData",
        "description": "Data payload for POST /api/v1/forensics/baseline-compare."
      },
      "BaselineCompareHistorySnapshot": {
        "properties": {
          "snapshot_date": {
            "type": "string",
            "title": "Snapshot Date"
          },
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          },
          "planned_value_total": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Value Total"
          },
          "earned_value_total": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Earned Value Total"
          },
          "actual_cost_total": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Cost Total"
          },
          "budget_at_completion": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget At Completion"
          }
        },
        "type": "object",
        "required": [
          "snapshot_date",
          "tasks"
        ],
        "title": "BaselineCompareHistorySnapshot",
        "description": "One historical schedule snapshot for trend analysis."
      },
      "BaselineCompareOptions": {
        "properties": {
          "match_strategy": {
            "type": "string",
            "enum": [
              "id",
              "id_and_wbs",
              "wbs_hierarchy",
              "fuzzy_id"
            ],
            "title": "Match Strategy",
            "default": "id"
          },
          "fuzzy_match_threshold": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Fuzzy Match Threshold",
            "default": 0.85
          },
          "variance_threshold_days": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Variance Threshold Days",
            "default": 5
          },
          "include_task_variances": {
            "type": "boolean",
            "title": "Include Task Variances",
            "default": true
          },
          "include_critical_path_only": {
            "type": "boolean",
            "title": "Include Critical Path Only",
            "default": false
          },
          "include_logic_changes": {
            "type": "boolean",
            "title": "Include Logic Changes",
            "default": false
          },
          "include_oos_impact": {
            "type": "boolean",
            "title": "Include Oos Impact",
            "default": false
          },
          "include_trends": {
            "type": "boolean",
            "title": "Include Trends",
            "default": false
          },
          "trend_analysis_periods": {
            "type": "integer",
            "maximum": 12.0,
            "minimum": 2.0,
            "title": "Trend Analysis Periods",
            "default": 4
          },
          "include_evms_trends": {
            "type": "boolean",
            "title": "Include Evms Trends",
            "default": false
          },
          "eac_method": {
            "type": "string",
            "enum": [
              "cpi",
              "spi",
              "composite",
              "weighted"
            ],
            "title": "Eac Method",
            "default": "cpi"
          },
          "include_forecast_trends": {
            "type": "boolean",
            "title": "Include Forecast Trends",
            "default": false
          },
          "variance_acceleration_threshold": {
            "type": "number",
            "minimum": 0.0,
            "title": "Variance Acceleration Threshold",
            "default": 0.1
          },
          "include_chart_data": {
            "type": "boolean",
            "title": "Include Chart Data",
            "default": false
          }
        },
        "type": "object",
        "title": "BaselineCompareOptions",
        "description": "Options controlling baseline compare analysis."
      },
      "BaselineCompareRequest": {
        "properties": {
          "current_schedule": {
            "$ref": "#/components/schemas/BaselineCompareCurrentSchedule"
          },
          "baseline_schedule": {
            "$ref": "#/components/schemas/BaselineScheduleInput"
          },
          "schedule_history": {
            "items": {
              "$ref": "#/components/schemas/BaselineCompareHistorySnapshot"
            },
            "type": "array",
            "title": "Schedule History"
          },
          "options": {
            "$ref": "#/components/schemas/BaselineCompareOptions"
          }
        },
        "type": "object",
        "required": [
          "current_schedule",
          "baseline_schedule"
        ],
        "title": "BaselineCompareRequest",
        "description": "Request body for POST /api/v1/forensics/baseline-compare."
      },
      "BaselineCompareSummary": {
        "properties": {
          "comparison_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comparison Date"
          },
          "baseline_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Date"
          },
          "total_tasks": {
            "type": "integer",
            "title": "Total Tasks",
            "default": 0
          },
          "matched_tasks": {
            "type": "integer",
            "title": "Matched Tasks",
            "default": 0
          },
          "unmatched_current_tasks": {
            "type": "integer",
            "title": "Unmatched Current Tasks",
            "default": 0
          },
          "unmatched_baseline_tasks": {
            "type": "integer",
            "title": "Unmatched Baseline Tasks",
            "default": 0
          },
          "tasks_with_variance": {
            "type": "integer",
            "title": "Tasks With Variance",
            "default": 0
          },
          "total_variance_days": {
            "type": "number",
            "title": "Total Variance Days",
            "default": 0.0
          },
          "critical_path_variance_days": {
            "type": "number",
            "title": "Critical Path Variance Days",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "BaselineCompareSummary",
        "description": "High-level match and variance counts."
      },
      "BaselineDriftSubMetric": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "weight": {
            "type": "number",
            "title": "Weight"
          },
          "active": {
            "type": "boolean",
            "title": "Active"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "avg_finish_variance_days": {
            "type": "number",
            "title": "Avg Finish Variance Days",
            "default": 0.0
          },
          "bei": {
            "type": "number",
            "title": "Bei",
            "default": 1.0
          },
          "variance_acceleration": {
            "type": "boolean",
            "title": "Variance Acceleration",
            "default": false
          },
          "critical_path_delay_days": {
            "type": "number",
            "title": "Critical Path Delay Days",
            "default": 0.0
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight",
          "active"
        ],
        "title": "BaselineDriftSubMetric",
        "description": "Baseline Drift Risk sub-metric result."
      },
      "BaselinePerformanceIndicators": {
        "properties": {
          "bei": {
            "type": "number",
            "title": "Bei",
            "default": 1.0
          },
          "critical_path_bei": {
            "type": "number",
            "title": "Critical Path Bei",
            "default": 1.0
          },
          "spi_schedule": {
            "type": "number",
            "title": "Spi Schedule",
            "default": 1.0
          },
          "variance_severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Variance Severity",
            "default": "low"
          },
          "on_track_percentage": {
            "type": "number",
            "title": "On Track Percentage",
            "default": 100.0
          },
          "oos_penalty": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Oos Penalty"
          }
        },
        "type": "object",
        "title": "BaselinePerformanceIndicators",
        "description": "BEI, SPI, and severity classification."
      },
      "BaselineRecommendation": {
        "properties": {
          "priority": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Priority"
          },
          "category": {
            "type": "string",
            "enum": [
              "schedule_recovery",
              "baseline_revision",
              "resource_reallocation",
              "risk_mitigation"
            ],
            "title": "Category"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "affected_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Affected Tasks"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "category",
          "description"
        ],
        "title": "BaselineRecommendation",
        "description": "Actionable recommendation from variance analysis."
      },
      "BaselineScheduleInput": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          },
          "baseline_date": {
            "type": "string",
            "title": "Baseline Date"
          }
        },
        "type": "object",
        "required": [
          "tasks",
          "baseline_date"
        ],
        "title": "BaselineScheduleInput",
        "description": "Approved baseline schedule for comparison."
      },
      "BellatorResponse_AsPlannedVsAsBuiltData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AsPlannedVsAsBuiltData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[AsPlannedVsAsBuiltData]"
      },
      "BellatorResponse_BaselineCompareData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BaselineCompareData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[BaselineCompareData]"
      },
      "BellatorResponse_CPMData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CPMData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[CPMData]"
      },
      "BellatorResponse_ChangeTrackingData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ChangeTrackingData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[ChangeTrackingData]"
      },
      "BellatorResponse_DCMA14PointData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DCMA14PointData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[DCMA14PointData]"
      },
      "BellatorResponse_DCMADECMData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DCMADECMData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[DCMADECMData]"
      },
      "BellatorResponse_DelayAnalysisData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DelayAnalysisData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[DelayAnalysisData]"
      },
      "BellatorResponse_HealthScoreData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HealthScoreData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[HealthScoreData]"
      },
      "BellatorResponse_ImportData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ImportData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[ImportData]"
      },
      "BellatorResponse_LogicAuditData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LogicAuditData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[LogicAuditData]"
      },
      "BellatorResponse_PlanningHorizonData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PlanningHorizonData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[PlanningHorizonData]"
      },
      "BellatorResponse_ProgressAuditData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProgressAuditData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[ProgressAuditData]"
      },
      "BellatorResponse_ResourceAnalysisData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceAnalysisData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[ResourceAnalysisData]"
      },
      "BellatorResponse_ScheduleRiskIndexData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ScheduleRiskIndexData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[ScheduleRiskIndexData]"
      },
      "BellatorResponse_ValidationData_": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ResponseStatus"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "grade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Grade"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "breakdown": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ScoreComponent"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breakdown"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ValidationData"
              },
              {
                "type": "null"
              }
            ]
          },
          "simulation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SimulationEnvelope"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "$ref": "#/components/schemas/ResponseMetadata"
          }
        },
        "type": "object",
        "required": [
          "status",
          "metadata"
        ],
        "title": "BellatorResponse[ValidationData]"
      },
      "CPMData": {
        "properties": {
          "critical_path": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Critical Path",
            "description": "Task IDs on the critical path"
          },
          "project_duration": {
            "type": "number",
            "title": "Project Duration",
            "description": "Total project duration in days"
          },
          "critical_path_length": {
            "type": "number",
            "title": "Critical Path Length",
            "description": "Critical path length in days"
          },
          "task_count": {
            "type": "integer",
            "title": "Task Count",
            "description": "Number of tasks"
          },
          "dependency_count": {
            "type": "integer",
            "title": "Dependency Count",
            "description": "Number of dependencies"
          },
          "relationship_type_distribution": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Relationship Type Distribution",
            "description": "Count of dependencies by relationship type (effective view)"
          },
          "relationship_filter_applied": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Relationship Filter Applied",
            "description": "Relationship-type filter used to aggregate dependency view"
          },
          "tasks": {
            "additionalProperties": {
              "$ref": "#/components/schemas/TaskTiming"
            },
            "type": "object",
            "title": "Tasks",
            "description": "Task timing information"
          },
          "network_details": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NetworkDetails"
              },
              {
                "type": "null"
              }
            ],
            "description": "Network structure details"
          },
          "processing_metadata": {
            "$ref": "#/components/schemas/app__api__v1__schedule_analysis__cpm__ProcessingMetadata",
            "description": "Processing metadata"
          }
        },
        "type": "object",
        "required": [
          "critical_path",
          "project_duration",
          "critical_path_length",
          "task_count",
          "dependency_count",
          "tasks",
          "processing_metadata"
        ],
        "title": "CPMData",
        "description": "Data payload for CPM calculation response.\n\nPer CPM API Specification v1.0.0:\n- critical_path: Ordered list of task IDs on the critical path\n- project_duration: Total project duration in days\n- critical_path_length: Length of critical path in days (equals project_duration)\n- task_count: Number of tasks in the schedule\n- dependency_count: Total number of dependencies\n- tasks: Per-task timing information\n- network_details: Optional network structure details\n- processing_metadata: Processing time and algorithm version",
        "example": {
          "critical_path": [
            "T1",
            "T3",
            "T4"
          ],
          "critical_path_length": 14.0,
          "dependency_count": 4,
          "network_details": {
            "dependency_count_filtered": 4,
            "dependency_count_total": 4,
            "finish_tasks": [
              "T4"
            ],
            "has_negative_float": false,
            "relationship_type_distribution": {
              "FF": 1,
              "FS": 2,
              "SS": 1
            },
            "relationship_types": [
              "FF",
              "FS",
              "SS"
            ],
            "start_tasks": [
              "T1"
            ]
          },
          "processing_metadata": {
            "algorithm_version": "v0.1.0",
            "processing_time_ms": 42.5
          },
          "project_duration": 14.0,
          "relationship_type_distribution": {
            "FF": 1,
            "FS": 2,
            "SS": 1
          },
          "task_count": 4,
          "tasks": {
            "T1": {
              "criticality_index": 1.0,
              "early_finish": 5.0,
              "early_start": 0.0,
              "free_float": 0.0,
              "is_critical": true,
              "late_finish": 5.0,
              "late_start": 0.0,
              "total_float": 0.0
            }
          }
        }
      },
      "CPMOptions": {
        "properties": {
          "include_network_details": {
            "type": "boolean",
            "title": "Include Network Details",
            "description": "Include network details (start/finish tasks, relationship types)",
            "default": false
          },
          "relationship_types": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Relationship Types",
            "description": "Optional relationship-type filter for network aggregation and details (FS, SS, FF, SF)."
          }
        },
        "type": "object",
        "title": "CPMOptions",
        "description": "Options for CPM calculation."
      },
      "CPMRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "maxItems": 10000,
            "minItems": 1,
            "title": "Tasks",
            "description": "List of tasks in the schedule"
          },
          "options": {
            "$ref": "#/components/schemas/CPMOptions",
            "description": "CPM calculation options"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "CPMRequest",
        "description": "Request model for CPM calculation.",
        "example": {
          "options": {
            "include_network_details": true
          },
          "tasks": [
            {
              "duration_days": 5,
              "id": "T1",
              "predecessors": []
            },
            {
              "duration_days": 3,
              "id": "T2",
              "predecessors": [
                "T1"
              ]
            },
            {
              "duration_days": 7,
              "id": "T3",
              "predecessors": [
                "T1"
              ]
            },
            {
              "duration_days": 2,
              "id": "T4",
              "predecessors": [
                "T2",
                "T3"
              ]
            }
          ]
        }
      },
      "CPResourceAssignment": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "resource_name": {
            "type": "string",
            "title": "Resource Name"
          },
          "early_start": {
            "type": "string",
            "title": "Early Start"
          },
          "early_finish": {
            "type": "string",
            "title": "Early Finish"
          },
          "duration_days": {
            "type": "number",
            "title": "Duration Days"
          },
          "over_allocated_during_task": {
            "type": "boolean",
            "title": "Over Allocated During Task",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name",
          "resource_name",
          "early_start",
          "early_finish",
          "duration_days"
        ],
        "title": "CPResourceAssignment",
        "description": "A task on the critical path with its resource assignment."
      },
      "CalendarInfo": {
        "properties": {
          "working_hours_per_day": {
            "type": "number",
            "title": "Working Hours Per Day"
          },
          "working_days_per_week": {
            "type": "number",
            "title": "Working Days Per Week"
          },
          "holidays_detected": {
            "type": "integer",
            "title": "Holidays Detected",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "working_hours_per_day",
          "working_days_per_week"
        ],
        "title": "CalendarInfo"
      },
      "CategorizedDelays": {
        "properties": {
          "owner": {
            "type": "number",
            "title": "Owner",
            "default": 0.0
          },
          "contractor": {
            "type": "number",
            "title": "Contractor",
            "default": 0.0
          },
          "design": {
            "type": "number",
            "title": "Design",
            "default": 0.0
          },
          "procurement": {
            "type": "number",
            "title": "Procurement",
            "default": 0.0
          },
          "weather": {
            "type": "number",
            "title": "Weather",
            "default": 0.0
          },
          "force_majeure": {
            "type": "number",
            "title": "Force Majeure",
            "default": 0.0
          },
          "concurrent": {
            "type": "number",
            "title": "Concurrent",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "CategorizedDelays",
        "description": "Delay days aggregated by responsible party."
      },
      "CausalChain": {
        "properties": {
          "root_task_id": {
            "type": "string",
            "title": "Root Task Id"
          },
          "impacted_milestone": {
            "type": "string",
            "title": "Impacted Milestone"
          },
          "delay_propagation_path": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Delay Propagation Path"
          },
          "cumulative_impact_days": {
            "type": "number",
            "title": "Cumulative Impact Days",
            "default": 0.0
          },
          "chain_confidence": {
            "type": "number",
            "title": "Chain Confidence",
            "default": 1.0
          },
          "concurrency_score": {
            "type": "number",
            "title": "Concurrency Score",
            "default": 0.0
          }
        },
        "type": "object",
        "required": [
          "root_task_id",
          "impacted_milestone"
        ],
        "title": "CausalChain",
        "description": "Delay propagation chain from a root task."
      },
      "ChangeImpactAnalysis": {
        "properties": {
          "total_tasks_affected": {
            "type": "integer",
            "title": "Total Tasks Affected",
            "default": 0
          },
          "critical_path_affected": {
            "type": "boolean",
            "title": "Critical Path Affected",
            "default": false
          },
          "schedule_impact_days": {
            "type": "number",
            "title": "Schedule Impact Days",
            "default": 0.0
          },
          "cost_impact_estimate": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Cost Impact Estimate",
            "default": "low"
          },
          "downstream_effects": {
            "items": {
              "$ref": "#/components/schemas/DownstreamEffect"
            },
            "type": "array",
            "title": "Downstream Effects"
          }
        },
        "type": "object",
        "title": "ChangeImpactAnalysis",
        "description": "Impact analysis of detected changes on the schedule."
      },
      "ChangeTrackingCurrentSchedule": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Current task array"
          },
          "status_date": {
            "type": "string",
            "title": "Status Date",
            "description": "Current schedule status date (ISO 8601)"
          }
        },
        "type": "object",
        "required": [
          "tasks",
          "status_date"
        ],
        "title": "ChangeTrackingCurrentSchedule",
        "description": "The current schedule submitted for change tracking comparison."
      },
      "ChangeTrackingData": {
        "properties": {
          "comparison_summary": {
            "$ref": "#/components/schemas/ComparisonSummary"
          },
          "changes_by_category": {
            "$ref": "#/components/schemas/ChangesByCategory"
          },
          "impact_analysis": {
            "$ref": "#/components/schemas/ChangeImpactAnalysis"
          },
          "trends": {
            "$ref": "#/components/schemas/ChangeTrends"
          },
          "compliance_tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Compliance Tags"
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata"
          }
        },
        "type": "object",
        "required": [
          "comparison_summary",
          "changes_by_category"
        ],
        "title": "ChangeTrackingData",
        "description": "Data payload for POST /api/v1/forensics/change-tracking."
      },
      "ChangeTrackingMaterialityThresholds": {
        "properties": {
          "date_change_days": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Date Change Days",
            "description": "Min days for a date change to be material",
            "default": 1
          },
          "progress_change_pct": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Progress Change Pct",
            "description": "Min % decrease to flag",
            "default": 5.0
          }
        },
        "type": "object",
        "title": "ChangeTrackingMaterialityThresholds",
        "description": "Overridable materiality thresholds for change detection."
      },
      "ChangeTrackingOptions": {
        "properties": {
          "comparison_mode": {
            "type": "string",
            "enum": [
              "latest",
              "all_periods",
              "specific_dates"
            ],
            "title": "Comparison Mode",
            "default": "all_periods"
          },
          "change_categories": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Change Categories",
            "description": "Categories: baseline, actual, forecast, logic, resource, progress, all"
          },
          "include_impact_analysis": {
            "type": "boolean",
            "title": "Include Impact Analysis",
            "default": true
          },
          "include_trends": {
            "type": "boolean",
            "title": "Include Trends",
            "default": true
          },
          "include_details": {
            "type": "boolean",
            "title": "Include Details",
            "default": false
          },
          "materiality_thresholds": {
            "$ref": "#/components/schemas/ChangeTrackingMaterialityThresholds"
          }
        },
        "type": "object",
        "title": "ChangeTrackingOptions",
        "description": "Options controlling change tracking behaviour."
      },
      "ChangeTrackingRequest": {
        "properties": {
          "current_schedule": {
            "$ref": "#/components/schemas/ChangeTrackingCurrentSchedule"
          },
          "schedule_history": {
            "items": {
              "$ref": "#/components/schemas/ChangeTrackingSnapshot"
            },
            "type": "array",
            "minItems": 1,
            "title": "Schedule History",
            "description": "Historical snapshots (min 1 required)"
          },
          "options": {
            "$ref": "#/components/schemas/ChangeTrackingOptions"
          }
        },
        "type": "object",
        "required": [
          "current_schedule",
          "schedule_history"
        ],
        "title": "ChangeTrackingRequest",
        "description": "Request for POST /api/v1/forensics/change-tracking."
      },
      "ChangeTrackingSnapshot": {
        "properties": {
          "snapshot_date": {
            "type": "string",
            "title": "Snapshot Date",
            "description": "Snapshot date (ISO 8601 YYYY-MM-DD)"
          },
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Task array at snapshot time"
          }
        },
        "type": "object",
        "required": [
          "snapshot_date",
          "tasks"
        ],
        "title": "ChangeTrackingSnapshot",
        "description": "A historical schedule snapshot for change tracking."
      },
      "ChangeTrends": {
        "properties": {
          "identified_patterns": {
            "items": {
              "$ref": "#/components/schemas/TrendPattern"
            },
            "type": "array",
            "title": "Identified Patterns"
          },
          "risk_indicators": {
            "items": {
              "$ref": "#/components/schemas/RiskIndicator"
            },
            "type": "array",
            "title": "Risk Indicators"
          }
        },
        "type": "object",
        "title": "ChangeTrends",
        "description": "Systemic trend patterns and risk indicators."
      },
      "ChangesByCategory": {
        "properties": {
          "baseline_changes": {
            "$ref": "#/components/schemas/BaselineCategoryResult"
          },
          "actual_changes": {
            "$ref": "#/components/schemas/ActualCategoryResult"
          },
          "forecast_changes": {
            "$ref": "#/components/schemas/ForecastCategoryResult"
          },
          "logic_changes": {
            "$ref": "#/components/schemas/LogicCategoryResult"
          },
          "resource_changes": {
            "$ref": "#/components/schemas/ResourceCategoryResult"
          },
          "progress_changes": {
            "$ref": "#/components/schemas/ProgressCategoryResult"
          }
        },
        "type": "object",
        "title": "ChangesByCategory",
        "description": "All six change categories bundled together."
      },
      "ComparisonSummary": {
        "properties": {
          "current_status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Status Date"
          },
          "snapshots_analyzed": {
            "type": "integer",
            "title": "Snapshots Analyzed",
            "default": 0
          },
          "snapshot_dates": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Snapshot Dates"
          },
          "comparison_mode": {
            "type": "string",
            "title": "Comparison Mode",
            "default": "all_periods"
          },
          "total_changes_detected": {
            "type": "integer",
            "title": "Total Changes Detected",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "immaterial_changes_filtered": {
            "type": "integer",
            "title": "Immaterial Changes Filtered",
            "default": 0
          }
        },
        "type": "object",
        "title": "ComparisonSummary",
        "description": "High-level summary of the comparison operation."
      },
      "ConcurrentOverlap": {
        "properties": {
          "overlapping_task_id": {
            "type": "string",
            "title": "Overlapping Task Id"
          },
          "shared_days": {
            "type": "integer",
            "title": "Shared Days"
          },
          "concurrency_ratio": {
            "type": "number",
            "title": "Concurrency Ratio"
          }
        },
        "type": "object",
        "required": [
          "overlapping_task_id",
          "shared_days",
          "concurrency_ratio"
        ],
        "title": "ConcurrentOverlap",
        "description": "Concurrent delay overlap details."
      },
      "CriticalPathOverlay": {
        "properties": {
          "planned_critical_path": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Planned Critical Path"
          },
          "actual_critical_path": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Actual Critical Path"
          },
          "tasks_maintained_on_cp": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tasks Maintained On Cp"
          },
          "tasks_gained_criticality": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tasks Gained Criticality"
          },
          "tasks_lost_criticality": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tasks Lost Criticality"
          },
          "path_divergence_score": {
            "type": "number",
            "title": "Path Divergence Score",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "CriticalPathOverlay",
        "description": "Comparison of planned vs. actual critical paths."
      },
      "CriticalPathResources": {
        "properties": {
          "resource_names": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Resource Names"
          },
          "critical_path_task_assignments": {
            "items": {
              "$ref": "#/components/schemas/CPResourceAssignment"
            },
            "type": "array",
            "title": "Critical Path Task Assignments"
          },
          "resources_over_allocated_on_cp": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Resources Over Allocated On Cp"
          }
        },
        "type": "object",
        "title": "CriticalPathResources",
        "description": "Resources that appear on the critical path."
      },
      "CrossBandInsights": {
        "properties": {
          "readiness_trend": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Readiness Trend"
          },
          "trend_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trend Description"
          },
          "systemic_issues": {
            "items": {
              "$ref": "#/components/schemas/SystemicIssue"
            },
            "type": "array",
            "title": "Systemic Issues"
          }
        },
        "type": "object",
        "title": "CrossBandInsights",
        "description": "Trends and systemic issues across all horizon bands."
      },
      "CumulativeCurveBucket": {
        "properties": {
          "date": {
            "type": "string",
            "title": "Date"
          },
          "cumulative_task_days": {
            "type": "number",
            "title": "Cumulative Task Days"
          }
        },
        "type": "object",
        "required": [
          "date",
          "cumulative_task_days"
        ],
        "title": "CumulativeCurveBucket",
        "description": "One point on a cumulative resource demand curve."
      },
      "DCMA14PointCustomThresholds": {
        "properties": {
          "check_1_logic_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 1 Logic Max Pct"
          },
          "check_2_leads_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 2 Leads Max Pct"
          },
          "check_3_lags_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 3 Lags Max Pct"
          },
          "check_4_fs_min_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 4 Fs Min Pct"
          },
          "check_5_constraints_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 5 Constraints Max Pct"
          },
          "check_6_high_float_days": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 6 High Float Days"
          },
          "check_6_high_float_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 6 High Float Max Pct"
          },
          "check_7_negative_float_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 7 Negative Float Max Pct"
          },
          "check_8_high_duration_days": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 8 High Duration Days"
          },
          "check_8_high_duration_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 8 High Duration Max Pct"
          },
          "check_10_unresourced_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 10 Unresourced Max Pct"
          },
          "check_11_missed_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 11 Missed Max Pct"
          },
          "check_13_cpli_min": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 13 Cpli Min"
          },
          "check_14_bei_min": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 14 Bei Min"
          }
        },
        "type": "object",
        "title": "DCMA14PointCustomThresholds",
        "description": "Custom threshold overrides for DCMA 14-Point checks."
      },
      "DCMA14PointData": {
        "properties": {
          "overall_status": {
            "type": "string",
            "enum": [
              "pass",
              "warning",
              "fail"
            ],
            "title": "Overall Status"
          },
          "checks": {
            "items": {
              "$ref": "#/components/schemas/DCMACheckResult"
            },
            "type": "array",
            "title": "Checks",
            "description": "Results for all 14 checks."
          },
          "summary": {
            "$ref": "#/components/schemas/DCMA14PointSummary"
          },
          "threshold_metadata": {
            "$ref": "#/components/schemas/DCMAThresholdMetadata"
          },
          "recommendations": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Recommendations",
            "description": "Prioritized remediation recommendations."
          },
          "compliance_tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Compliance Tags",
            "description": "Applicable compliance standard tags."
          },
          "audit_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Audit Metadata",
            "description": "Analysis metadata (task count, options, etc.)"
          }
        },
        "type": "object",
        "required": [
          "overall_status",
          "checks",
          "summary"
        ],
        "title": "DCMA14PointData",
        "description": "Data payload for POST /api/v1/forensics/dcma-14-point."
      },
      "DCMA14PointOptions": {
        "properties": {
          "threshold_profile": {
            "type": "string",
            "title": "Threshold Profile",
            "description": "Threshold profile: 'dcma-pam-200.1' (default), 'dcma-strict', 'dcma-relaxed', 'gao-16-89g', 'aace-rp-92r-19', 'nasa-npr-7120', 'custom'.",
            "default": "dcma-pam-200.1"
          },
          "custom_thresholds": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DCMA14PointCustomThresholds"
              },
              {
                "type": "null"
              }
            ],
            "description": "Per-check threshold overrides (applied on top of selected profile)."
          },
          "include_details": {
            "type": "boolean",
            "title": "Include Details",
            "description": "Include violating task IDs and detailed evidence objects in each check result.",
            "default": false
          }
        },
        "type": "object",
        "title": "DCMA14PointOptions",
        "description": "Request options for DCMA 14-Point assessment."
      },
      "DCMA14PointRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "minItems": 2,
            "title": "Tasks",
            "description": "Schedule tasks (minimum 2)."
          },
          "start_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Start Task Ids",
            "description": "Task IDs exempt from predecessor requirements (Check #1)."
          },
          "finish_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finish Task Ids",
            "description": "Task IDs exempt from successor requirements (Check #1)."
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "Project data date (ISO 8601). Required for checks #9, #11, #14."
          },
          "target_finish_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Finish Date",
            "description": "Target finish date (ISO 8601). Required for Check #13 (CPLI)."
          },
          "loe_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Loe Task Ids",
            "description": "Level-of-Effort task IDs \u2014 excluded from all checks."
          },
          "apportioned_effort_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Apportioned Effort Task Ids",
            "description": "Apportioned Effort task IDs \u2014 excluded from all checks."
          },
          "schedule_margin_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Schedule Margin Task Ids",
            "description": "Schedule margin task IDs \u2014 excluded from all checks."
          },
          "summary_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Summary Task Ids",
            "description": "Summary/rollup task IDs \u2014 excluded from all checks."
          },
          "planning_package_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Planning Package Task Ids",
            "description": "Planning package task IDs \u2014 excluded from Check #8 only."
          },
          "summary_level_pp_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Summary Level Pp Task Ids",
            "description": "Summary-level planning package IDs \u2014 excluded from Check #8."
          },
          "schedule_visibility_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Schedule Visibility Task Ids",
            "description": "Schedule Visibility Task IDs \u2014 excluded from checks #8, #10, #11, #14."
          },
          "options": {
            "$ref": "#/components/schemas/DCMA14PointOptions",
            "description": "Assessment options."
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "DCMA14PointRequest",
        "description": "Request body for POST /api/v1/forensics/dcma-14-point."
      },
      "DCMA14PointSummary": {
        "properties": {
          "total_checks": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Checks",
            "default": 14
          },
          "passed": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Passed",
            "default": 0
          },
          "warnings": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Warnings",
            "default": 0
          },
          "failed": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Failed",
            "default": 0
          },
          "skipped": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Skipped",
            "default": 0
          },
          "compliance_ratio": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Compliance Ratio",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "DCMA14PointSummary",
        "description": "Summary of 14-point check outcomes."
      },
      "DCMACheckResult": {
        "properties": {
          "check_id": {
            "type": "integer",
            "maximum": 14.0,
            "minimum": 1.0,
            "title": "Check Id"
          },
          "check_name": {
            "type": "string",
            "title": "Check Name"
          },
          "status": {
            "type": "string",
            "enum": [
              "pass",
              "warning",
              "fail",
              "skipped"
            ],
            "title": "Status"
          },
          "measured_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Measured Value"
          },
          "threshold_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Value"
          },
          "threshold_source": {
            "type": "string",
            "title": "Threshold Source",
            "default": "dcma-pam-200.1"
          },
          "threshold_overridden": {
            "type": "boolean",
            "title": "Threshold Overridden",
            "default": false
          },
          "pass_criteria": {
            "type": "string",
            "title": "Pass Criteria",
            "default": ""
          },
          "violation_count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Violation Count",
            "default": 0
          },
          "total_items": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Items",
            "default": 0
          },
          "percentage": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Percentage"
          },
          "evidence": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "additionalProperties": true,
                "type": "object"
              }
            ],
            "title": "Evidence"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "check_id",
          "check_name",
          "status"
        ],
        "title": "DCMACheckResult",
        "description": "Result for a single DCMA 14-Point check."
      },
      "DCMADECMCustomThresholds": {
        "properties": {
          "check_06A204b_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A204B Max Pct"
          },
          "check_06A205a_lags_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A205A Lags Max Pct"
          },
          "check_06A208a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A208A Max Pct"
          },
          "check_06A209a_constraints_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A209A Constraints Max Pct"
          },
          "check_06A210a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A210A Max Pct"
          },
          "check_06A212a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A212A Max Pct"
          },
          "check_06A504a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A504A Max Pct"
          },
          "check_06A504b_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A504B Max Pct"
          },
          "check_06A505a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A505A Max Pct"
          },
          "check_06A505b_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A505B Max Pct"
          },
          "check_06A506a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A506A Max Pct"
          },
          "check_06A506b_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A506B Max Pct"
          },
          "check_06A506c_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 06A506C Max Pct"
          },
          "check_08I101a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 08I101A Max Pct"
          },
          "check_10A303a_max_pct": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Check 10A303A Max Pct"
          }
        },
        "type": "object",
        "title": "DCMADECMCustomThresholds",
        "description": "Custom threshold overrides for DCMA DECM checks."
      },
      "DCMADECMData": {
        "properties": {
          "scope_requested": {
            "type": "string",
            "title": "Scope Requested",
            "default": "schedule_only"
          },
          "scope_executed": {
            "type": "string",
            "title": "Scope Executed",
            "default": "schedule_only"
          },
          "overall_status": {
            "type": "string",
            "enum": [
              "pass",
              "warning",
              "fail"
            ],
            "title": "Overall Status"
          },
          "checks_by_guideline": {
            "additionalProperties": {
              "$ref": "#/components/schemas/DECMGuidelineResult"
            },
            "type": "object",
            "title": "Checks By Guideline"
          },
          "overall_summary": {
            "$ref": "#/components/schemas/DECMOverallSummary"
          },
          "threshold_metadata": {
            "$ref": "#/components/schemas/DECMThresholdMetadata"
          },
          "recommendations": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Recommendations",
            "description": "Prioritized remediation recommendations."
          },
          "compliance_tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Compliance Tags",
            "description": "Applicable compliance standard tags."
          },
          "audit_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Audit Metadata",
            "description": "Analysis metadata (task count, options, etc.)"
          }
        },
        "type": "object",
        "required": [
          "overall_status",
          "checks_by_guideline",
          "overall_summary"
        ],
        "title": "DCMADECMData",
        "description": "Data payload for POST /api/v1/forensics/dcma-decm."
      },
      "DCMADECMOptions": {
        "properties": {
          "threshold_profile": {
            "type": "string",
            "title": "Threshold Profile",
            "description": "Threshold profile: 'dcma-decm-default' (default), 'dcma-decm-strict'.",
            "default": "dcma-decm-default"
          },
          "custom_thresholds": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DCMADECMCustomThresholds"
              },
              {
                "type": "null"
              }
            ],
            "description": "Per-check threshold overrides (applied on top of selected profile)."
          },
          "include_details": {
            "type": "boolean",
            "title": "Include Details",
            "description": "Include violating task IDs and detailed evidence objects in each check result.",
            "default": false
          }
        },
        "type": "object",
        "title": "DCMADECMOptions",
        "description": "Request options for DCMA DECM assessment."
      },
      "DCMADECMRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "minItems": 2,
            "title": "Tasks",
            "description": "Task list (minimum 2 tasks required)"
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "Project status/data date (ISO 8601). Required for checks 06A212a, 06A506a/b/c. Skipped with informative message if absent."
          },
          "target_finish_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Finish Date",
            "description": "Contract/target finish date (ISO 8601). Reserved for future Tier 3 use."
          },
          "start_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Start Task Ids",
            "description": "Task IDs that legitimately have no predecessors (exempt from check 06A204b)."
          },
          "finish_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finish Task Ids",
            "description": "Task IDs that legitimately have no successors (exempt from check 06A204b)."
          },
          "schedule_history": {
            "items": {
              "$ref": "#/components/schemas/ScheduleHistorySnapshot"
            },
            "type": "array",
            "title": "Schedule History",
            "description": "Optional historical snapshots for retroactive date change detection (checks 06A504a/b). Each snapshot requires snapshot_date + tasks."
          },
          "scope": {
            "type": "string",
            "title": "Scope",
            "description": "Scope of evaluation. 'schedule_only' (default) = 17 Tier 2 checks. 'guideline_6', 'full' = Tier 3 (not yet implemented).",
            "default": "schedule_only"
          },
          "options": {
            "$ref": "#/components/schemas/DCMADECMOptions",
            "description": "Assessment options."
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "DCMADECMRequest",
        "description": "Request body for POST /api/v1/forensics/dcma-decm."
      },
      "DCMADECMViolationRecord": {
        "properties": {
          "check_id": {
            "type": "string",
            "title": "Check Id"
          },
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "violation": {
            "type": "string",
            "title": "Violation"
          },
          "original_date": {
            "type": "string",
            "title": "Original Date"
          },
          "changed_date": {
            "type": "string",
            "title": "Changed Date"
          },
          "snapshot_of_change": {
            "type": "string",
            "title": "Snapshot Of Change"
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Severity"
          },
          "suspicion_details": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Suspicion Details"
          }
        },
        "type": "object",
        "required": [
          "check_id",
          "task_id",
          "violation",
          "original_date",
          "changed_date",
          "snapshot_of_change",
          "severity"
        ],
        "title": "DCMADECMViolationRecord",
        "description": "A DCMA DECM 06A504a/b violation record."
      },
      "DCMAThresholdMetadata": {
        "properties": {
          "profile_used": {
            "type": "string",
            "title": "Profile Used",
            "default": "dcma-pam-200.1"
          },
          "overrides_applied": {
            "type": "integer",
            "title": "Overrides Applied",
            "default": 0
          },
          "overridden_checks": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Overridden Checks"
          },
          "custom_thresholds": {
            "additionalProperties": true,
            "type": "object",
            "title": "Custom Thresholds"
          }
        },
        "type": "object",
        "title": "DCMAThresholdMetadata",
        "description": "Threshold configuration metadata."
      },
      "DECMCheckResult": {
        "properties": {
          "check_id": {
            "type": "string",
            "title": "Check Id",
            "description": "DECM check reference ID (e.g., '06A204b')"
          },
          "check_name": {
            "type": "string",
            "title": "Check Name"
          },
          "category": {
            "type": "string",
            "title": "Category",
            "default": ""
          },
          "status": {
            "type": "string",
            "enum": [
              "pass",
              "warning",
              "fail",
              "skipped"
            ],
            "title": "Status"
          },
          "measured_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Measured Value"
          },
          "threshold_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Value"
          },
          "threshold_source": {
            "type": "string",
            "title": "Threshold Source",
            "default": "dcma-decm-default"
          },
          "threshold_overridden": {
            "type": "boolean",
            "title": "Threshold Overridden",
            "default": false
          },
          "pass_criteria": {
            "type": "string",
            "title": "Pass Criteria",
            "default": ""
          },
          "violation_count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Violation Count",
            "default": 0
          },
          "total_items": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Items",
            "default": 0
          },
          "percentage": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Percentage"
          },
          "evidence": {
            "items": {},
            "type": "array",
            "title": "Evidence"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "check_id",
          "check_name",
          "status"
        ],
        "title": "DECMCheckResult",
        "description": "Result for a single DCMA DECM check."
      },
      "DECMGuidelineResult": {
        "properties": {
          "guideline_id": {
            "type": "integer",
            "title": "Guideline Id"
          },
          "guideline_name": {
            "type": "string",
            "title": "Guideline Name"
          },
          "checks": {
            "items": {
              "$ref": "#/components/schemas/DECMCheckResult"
            },
            "type": "array",
            "title": "Checks"
          },
          "summary": {
            "$ref": "#/components/schemas/DECMGuidelineSummary"
          }
        },
        "type": "object",
        "required": [
          "guideline_id",
          "guideline_name",
          "checks",
          "summary"
        ],
        "title": "DECMGuidelineResult",
        "description": "Results grouped by EVM Guideline."
      },
      "DECMGuidelineSummary": {
        "properties": {
          "total_checks": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Checks",
            "default": 0
          },
          "passed": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Passed",
            "default": 0
          },
          "warnings": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Warnings",
            "default": 0
          },
          "failed": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Failed",
            "default": 0
          },
          "skipped": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Skipped",
            "default": 0
          },
          "compliance_ratio": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Compliance Ratio",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "DECMGuidelineSummary",
        "description": "Summary of checks within a single EVM Guideline."
      },
      "DECMOverallSummary": {
        "properties": {
          "scope": {
            "type": "string",
            "title": "Scope",
            "default": "schedule_only"
          },
          "total_checks": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Checks",
            "default": 0
          },
          "passed": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Passed",
            "default": 0
          },
          "warnings": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Warnings",
            "default": 0
          },
          "failed": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Failed",
            "default": 0
          },
          "skipped": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Skipped",
            "default": 0
          },
          "compliance_ratio": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Compliance Ratio",
            "default": 0.0
          },
          "guidelines_evaluated": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Guidelines Evaluated"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation",
            "default": ""
          }
        },
        "type": "object",
        "title": "DECMOverallSummary",
        "description": "Overall summary across all evaluated guidelines."
      },
      "DECMThresholdMetadata": {
        "properties": {
          "profile_used": {
            "type": "string",
            "title": "Profile Used",
            "default": "dcma-decm-default"
          },
          "overrides_applied": {
            "type": "integer",
            "title": "Overrides Applied",
            "default": 0
          },
          "overridden_checks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Overridden Checks"
          },
          "custom_thresholds": {
            "additionalProperties": true,
            "type": "object",
            "title": "Custom Thresholds"
          }
        },
        "type": "object",
        "title": "DECMThresholdMetadata",
        "description": "Threshold configuration metadata."
      },
      "DelayAnalysisData": {
        "properties": {
          "delay_summary": {
            "$ref": "#/components/schemas/DelaySummary"
          },
          "delay_drivers": {
            "items": {
              "$ref": "#/components/schemas/DelayDriver"
            },
            "type": "array",
            "title": "Delay Drivers"
          },
          "causal_chains": {
            "items": {
              "$ref": "#/components/schemas/CausalChain"
            },
            "type": "array",
            "title": "Causal Chains"
          },
          "float_analysis": {
            "$ref": "#/components/schemas/FloatAnalysis"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/DelayRecommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata"
          }
        },
        "type": "object",
        "title": "DelayAnalysisData",
        "description": "Data payload for POST /api/v1/forensics/delay-analysis."
      },
      "DelayAnalysisOptions": {
        "properties": {
          "min_impact_days": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Min Impact Days",
            "default": 1
          },
          "include_causal_chains": {
            "type": "boolean",
            "title": "Include Causal Chains",
            "default": true
          },
          "include_float_consumption": {
            "type": "boolean",
            "title": "Include Float Consumption",
            "default": true
          },
          "confidence_threshold": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Confidence Threshold",
            "default": 0.5
          },
          "methodology": {
            "type": "string",
            "enum": [
              "windows",
              "contemporaneous",
              "collapsed_as_built"
            ],
            "title": "Methodology",
            "default": "windows"
          },
          "include_concurrent": {
            "type": "boolean",
            "title": "Include Concurrent",
            "default": false
          },
          "include_delay_categories": {
            "type": "boolean",
            "title": "Include Delay Categories",
            "default": false
          },
          "use_half_step": {
            "type": "boolean",
            "title": "Use Half Step",
            "default": false
          }
        },
        "type": "object",
        "title": "DelayAnalysisOptions",
        "description": "Options for delay analysis."
      },
      "DelayAnalysisRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          },
          "status_date": {
            "type": "string",
            "title": "Status Date"
          },
          "options": {
            "$ref": "#/components/schemas/DelayAnalysisOptions"
          }
        },
        "type": "object",
        "required": [
          "tasks",
          "status_date"
        ],
        "title": "DelayAnalysisRequest",
        "description": "Request body for POST /api/v1/forensics/delay-analysis."
      },
      "DelayDriver": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "delay_days": {
            "type": "number",
            "title": "Delay Days"
          },
          "variance_type": {
            "type": "string",
            "enum": [
              "start_delay",
              "finish_delay",
              "duration_overrun",
              "compound_delay",
              "concurrent_delay"
            ],
            "title": "Variance Type"
          },
          "delay_category": {
            "type": "string",
            "title": "Delay Category",
            "default": ""
          },
          "baseline_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Start"
          },
          "actual_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Start"
          },
          "baseline_finish": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Finish"
          },
          "actual_finish": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Finish"
          },
          "contribution_to_total": {
            "type": "number",
            "title": "Contribution To Total",
            "default": 0.0
          },
          "on_critical_path": {
            "type": "boolean",
            "title": "On Critical Path",
            "default": false
          },
          "successors_impacted": {
            "type": "integer",
            "title": "Successors Impacted",
            "default": 0
          },
          "causal_score": {
            "type": "number",
            "title": "Causal Score",
            "default": 0.0
          },
          "confidence": {
            "type": "number",
            "title": "Confidence",
            "default": 1.0
          },
          "concurrent_overlaps": {
            "items": {
              "$ref": "#/components/schemas/ConcurrentOverlap"
            },
            "type": "array",
            "title": "Concurrent Overlaps"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name",
          "delay_days",
          "variance_type"
        ],
        "title": "DelayDriver",
        "description": "Per-task delay driver with attribution scores."
      },
      "DelayRecommendation": {
        "properties": {
          "priority": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium"
            ],
            "title": "Priority"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation"
          },
          "expected_impact": {
            "type": "string",
            "title": "Expected Impact"
          },
          "standards_citation": {
            "type": "string",
            "title": "Standards Citation"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "recommendation",
          "expected_impact",
          "standards_citation"
        ],
        "title": "DelayRecommendation",
        "description": "Actionable delay mitigation recommendation."
      },
      "DelaySummary": {
        "properties": {
          "total_delay_days": {
            "type": "number",
            "title": "Total Delay Days",
            "default": 0.0
          },
          "delayed_tasks_count": {
            "type": "integer",
            "title": "Delayed Tasks Count",
            "default": 0
          },
          "critical_path_delay_days": {
            "type": "number",
            "title": "Critical Path Delay Days",
            "default": 0.0
          },
          "float_consumed_days": {
            "type": "number",
            "title": "Float Consumed Days",
            "default": 0.0
          },
          "schedule_performance_index": {
            "type": "number",
            "title": "Schedule Performance Index",
            "default": 1.0
          },
          "categorized_delays": {
            "$ref": "#/components/schemas/CategorizedDelays"
          }
        },
        "type": "object",
        "title": "DelaySummary",
        "description": "Aggregate delay metrics."
      },
      "DependencyLink": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id",
            "description": "Predecessor task ID"
          },
          "relationship_type": {
            "$ref": "#/components/schemas/RelationshipType",
            "description": "Relationship type (FS/SS/FF/SF)",
            "default": "FS"
          },
          "lag_days": {
            "type": "number",
            "title": "Lag Days",
            "description": "Lag (positive) or lead (negative) in days",
            "default": 0.0
          },
          "is_external": {
            "type": "boolean",
            "title": "Is External",
            "description": "True if link to external project file",
            "default": false
          },
          "external_path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Path",
            "description": "Path to external file if is_external=True"
          }
        },
        "type": "object",
        "required": [
          "task_id"
        ],
        "title": "DependencyLink",
        "description": "Rich dependency link with relationship type and lag/lead.\n\nSupports parsing from various scheduling tool formats including:\n- MS Project: \"10FS+5 d\", \"/path/file.mpp/10FS+5 d\"\n- Primavera P6: Similar format with XER encoding\n- Server-based: \"<ServerFile>10FS+5 d\"\n- Simple: \"10\" (defaults to FS with zero lag)\n\nExamples:\n    >>> DependencyLink(task_id=\"10\", relationship_type=\"FS\", lag_days=5.0)\n    >>> DependencyLink.from_string(\"10FS+5 d\")\n    >>> DependencyLink.from_string(\"15SS-2 d\")",
        "examples": [
          {
            "is_external": false,
            "lag_days": 5.0,
            "relationship_type": "FS",
            "task_id": "10"
          },
          {
            "is_external": false,
            "lag_days": -2.0,
            "relationship_type": "SS",
            "task_id": "15"
          },
          {
            "external_path": "/path/to/external.mpp",
            "is_external": true,
            "lag_days": 5.0,
            "relationship_type": "FS",
            "task_id": "20"
          }
        ]
      },
      "DownstreamEffect": {
        "properties": {
          "change_task_id": {
            "type": "string",
            "title": "Change Task Id"
          },
          "affected_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Affected Task Ids"
          },
          "impact_type": {
            "type": "string",
            "enum": [
              "schedule_slip",
              "schedule_acceleration"
            ],
            "title": "Impact Type"
          },
          "impact_days": {
            "type": "number",
            "title": "Impact Days"
          }
        },
        "type": "object",
        "required": [
          "change_task_id",
          "impact_type",
          "impact_days"
        ],
        "title": "DownstreamEffect",
        "description": "Downstream schedule effect from a material change."
      },
      "DurationConversion": {
        "properties": {
          "source_unit": {
            "type": "string",
            "title": "Source Unit"
          },
          "target_unit": {
            "type": "string",
            "title": "Target Unit",
            "default": "days"
          },
          "conversion_factor": {
            "type": "number",
            "title": "Conversion Factor"
          }
        },
        "type": "object",
        "required": [
          "source_unit",
          "conversion_factor"
        ],
        "title": "DurationConversion"
      },
      "EACHistoryEntry": {
        "properties": {
          "period_date": {
            "type": "string",
            "title": "Period Date"
          },
          "forecasted_completion": {
            "type": "string",
            "title": "Forecasted Completion"
          },
          "variance_to_baseline_days": {
            "type": "integer",
            "title": "Variance To Baseline Days",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "period_date",
          "forecasted_completion"
        ],
        "title": "EACHistoryEntry",
        "description": "Forecasted completion for one period."
      },
      "EACStability": {
        "properties": {
          "variance_range_days": {
            "type": "number",
            "title": "Variance Range Days",
            "default": 0.0
          },
          "avg_monthly_change_days": {
            "type": "number",
            "title": "Avg Monthly Change Days",
            "default": 0.0
          },
          "stability_rating": {
            "type": "string",
            "enum": [
              "stable",
              "moderate",
              "volatile"
            ],
            "title": "Stability Rating",
            "default": "stable"
          },
          "is_accelerating": {
            "type": "boolean",
            "title": "Is Accelerating",
            "default": false
          }
        },
        "type": "object",
        "title": "EACStability",
        "description": "EAC forecast stability assessment."
      },
      "EVMSChartData": {
        "properties": {
          "dates": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dates"
          },
          "spi_values": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Spi Values"
          },
          "cpi_values": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Cpi Values"
          },
          "eac_values": {
            "items": {
              "type": "number"
            },
            "type": "array",
            "title": "Eac Values"
          }
        },
        "type": "object",
        "title": "EVMSChartData",
        "description": "Chart-ready EVMS time series."
      },
      "EVMSPerformanceSummary": {
        "properties": {
          "current_spi": {
            "type": "number",
            "title": "Current Spi",
            "default": 1.0
          },
          "avg_spi": {
            "type": "number",
            "title": "Avg Spi",
            "default": 1.0
          },
          "spi_trend": {
            "type": "string",
            "enum": [
              "improving",
              "stable",
              "declining"
            ],
            "title": "Spi Trend",
            "default": "stable"
          },
          "current_cpi": {
            "type": "number",
            "title": "Current Cpi",
            "default": 1.0
          },
          "avg_cpi": {
            "type": "number",
            "title": "Avg Cpi",
            "default": 1.0
          },
          "cpi_trend": {
            "type": "string",
            "enum": [
              "improving",
              "stable",
              "declining"
            ],
            "title": "Cpi Trend",
            "default": "stable"
          },
          "forecast_reliability": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "title": "Forecast Reliability",
            "default": "medium"
          }
        },
        "type": "object",
        "title": "EVMSPerformanceSummary",
        "description": "Aggregate EVMS performance across periods."
      },
      "EVMSPeriod": {
        "properties": {
          "period_date": {
            "type": "string",
            "title": "Period Date"
          },
          "sv": {
            "type": "number",
            "title": "Sv",
            "default": 0.0
          },
          "cv": {
            "type": "number",
            "title": "Cv",
            "default": 0.0
          },
          "spi": {
            "type": "number",
            "title": "Spi",
            "default": 1.0
          },
          "cpi": {
            "type": "number",
            "title": "Cpi",
            "default": 1.0
          },
          "tcpi": {
            "type": "number",
            "title": "Tcpi",
            "default": 1.0
          },
          "eac_cpi": {
            "type": "number",
            "title": "Eac Cpi",
            "default": 0.0
          },
          "eac_spi": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eac Spi"
          },
          "eac_composite": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eac Composite"
          },
          "eac_weighted": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eac Weighted"
          }
        },
        "type": "object",
        "required": [
          "period_date"
        ],
        "title": "EVMSPeriod",
        "description": "EVMS metrics for one period."
      },
      "EVMSTrends": {
        "properties": {
          "periods": {
            "items": {
              "$ref": "#/components/schemas/EVMSPeriod"
            },
            "type": "array",
            "title": "Periods"
          },
          "performance_summary": {
            "$ref": "#/components/schemas/EVMSPerformanceSummary"
          },
          "chart_data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EVMSChartData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "title": "EVMSTrends",
        "description": "EVMS trend data."
      },
      "Finding": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Stable machine-readable identifier e.g. DCMA_CHECK_8_HIGH_DURATION"
          },
          "severity": {
            "$ref": "#/components/schemas/FindingSeverity"
          },
          "title": {
            "type": "string",
            "title": "Title",
            "description": "Short human-readable label"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "Full explanation of the issue"
          },
          "standard": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Standard",
            "description": "Standard citation e.g. 'DCMA PAM 200.1 Check #8'"
          },
          "affected_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Affected Tasks",
            "description": "Task IDs implicated by this finding"
          },
          "metric_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metric Value",
            "description": "Observed measurement e.g. 60.0 days"
          },
          "threshold": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold",
            "description": "Threshold that was violated e.g. 44.0 days"
          }
        },
        "type": "object",
        "required": [
          "code",
          "severity",
          "title",
          "description"
        ],
        "title": "Finding",
        "description": "A discrete, machine-readable issue identified during analysis.\n\n`code` values are stable across versions; consumers may key logic on them.\nPattern: {STANDARD}_{CHECK_ID}_{SHORT_DESCRIPTION} in SCREAMING_SNAKE_CASE."
      },
      "FindingSeverity": {
        "type": "string",
        "enum": [
          "critical",
          "high",
          "medium",
          "low",
          "info"
        ],
        "title": "FindingSeverity",
        "description": "Severity level for findings; reused as priority level for recommendations."
      },
      "FloatAnalysis": {
        "properties": {
          "float_consumed_by_task": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object",
            "title": "Float Consumed By Task"
          },
          "near_critical_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Near Critical Tasks"
          },
          "float_erosion_rate": {
            "type": "number",
            "title": "Float Erosion Rate",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "FloatAnalysis",
        "description": "Float consumption and near-critical task tracking."
      },
      "FloatDimensionScore": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score",
            "default": 100.0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "adequate"
          },
          "total_float_days": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Float Days"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/ReadinessIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "title": "FloatDimensionScore",
        "description": "Float adequacy readiness dimension result."
      },
      "FloatRiskSubMetric": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "weight": {
            "type": "number",
            "title": "Weight"
          },
          "active": {
            "type": "boolean",
            "title": "Active"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "near_critical_task_count": {
            "type": "integer",
            "title": "Near Critical Task Count",
            "default": 0
          },
          "negative_float_task_count": {
            "type": "integer",
            "title": "Negative Float Task Count",
            "default": 0
          },
          "critical_path_density": {
            "type": "number",
            "title": "Critical Path Density",
            "default": 0.0
          },
          "float_erosion_rate": {
            "type": "number",
            "title": "Float Erosion Rate",
            "default": 0.0
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight",
          "active"
        ],
        "title": "FloatRiskSubMetric",
        "description": "Float Risk sub-metric result."
      },
      "ForecastCategoryResult": {
        "properties": {
          "total_changes": {
            "type": "integer",
            "title": "Total Changes",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "trends": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Trends"
          },
          "changes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "title": "ForecastCategoryResult",
        "description": "Result for forecast change category."
      },
      "ForecastChartData": {
        "properties": {
          "dates": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dates"
          },
          "eac_variance_days": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Eac Variance Days"
          }
        },
        "type": "object",
        "title": "ForecastChartData",
        "description": "Chart-ready EAC variance time series."
      },
      "ForecastStabilityScore": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score",
            "default": 100.0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "no_history"
          },
          "drift_days": {
            "type": "integer",
            "title": "Drift Days",
            "default": 0
          },
          "drift_count": {
            "type": "integer",
            "title": "Drift Count",
            "default": 0
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/ReadinessIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "title": "ForecastStabilityScore",
        "description": "Forecast stability readiness dimension result."
      },
      "ForecastTrends": {
        "properties": {
          "eac_history": {
            "items": {
              "$ref": "#/components/schemas/EACHistoryEntry"
            },
            "type": "array",
            "title": "Eac History"
          },
          "eac_stability": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EACStability"
              },
              {
                "type": "null"
              }
            ]
          },
          "chart_data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForecastChartData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "title": "ForecastTrends",
        "description": "EAC forecast trend analysis."
      },
      "Grade": {
        "type": "string",
        "enum": [
          "A",
          "B",
          "C",
          "D",
          "F"
        ],
        "title": "Grade",
        "description": "Letter grade derived from a 0\u2013100 score. Null on non-scoring endpoints."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "HealthScoreData": {
        "properties": {
          "score": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Score",
            "description": "Overall health score (0-100)"
          },
          "grade": {
            "type": "string",
            "title": "Grade",
            "description": "Letter grade (A-F)"
          },
          "breakdown": {
            "additionalProperties": true,
            "type": "object",
            "title": "Breakdown",
            "description": "Detailed breakdown of score components"
          },
          "top_signals": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Top Signals",
            "description": "Top risk signals or issues affecting the score"
          },
          "confidence": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Confidence",
            "description": "Confidence level in the score (0-1)"
          },
          "details": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Details",
            "description": "Detailed task-level diagnostics including recommendations per metric (when include_details=true)"
          },
          "ml_explanation": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Explanation",
            "description": "ML model explanations with SHAP values (when use_ml_scoring=true for Professional+ tiers)"
          }
        },
        "type": "object",
        "required": [
          "score",
          "grade",
          "confidence"
        ],
        "title": "HealthScoreData",
        "description": "Data payload for schedule health scoring response.",
        "example": {
          "breakdown": {
            "criticality_score": 90.0,
            "density_score": 80.0,
            "float_erosion_score": 85.0,
            "structural_score": 95.0
          },
          "confidence": 0.95,
          "details": {
            "cpm": {
              "critical_path_length": 12,
              "project_duration_days": 45
            },
            "criticality": {
              "critical_density_pct": 45.0,
              "critical_task_count": 45,
              "critical_tasks": [
                {
                  "float_days": 0,
                  "id": "T1",
                  "name": "Foundation"
                }
              ],
              "near_critical_tasks": [
                {
                  "float_days": 2.0,
                  "id": "T2",
                  "name": "Framing"
                }
              ],
              "recommendations": [
                "HIGH PRIORITY: 45 of 100 tasks (45.0%) are on the critical path",
                "[PMBOK 2.7.5.2] Review task dependencies for opportunities to create parallel work streams (fast-tracking)",
                "[AACE RP 27R-03] Add time buffers (contingency reserves) before major milestones to protect against schedule delays"
              ],
              "total_tasks": 100
            },
            "float_erosion": {
              "average_float_days": 2.3,
              "critical_ratio_pct": 45.0,
              "max_float_days": 8.5,
              "min_float_days": 0.0,
              "recommendations": [
                "[AACE RP 27R-03] Limited schedule flexibility with average schedule reserve of 2.3 days",
                "[PMBOK 2.8.4.3] Implement proactive risk management to protect remaining float"
              ],
              "tasks_with_low_float": [
                {
                  "float_days": 2.0,
                  "id": "T2",
                  "name": "Framing"
                }
              ]
            },
            "structural": {
              "dangling_tasks": [],
              "issues": [],
              "missing_logic_count": 0,
              "recommendations": []
            }
          },
          "grade": "B",
          "score": 85.5,
          "top_signals": [
            "High critical path density (45%)",
            "Low average float (2.3 days)"
          ]
        }
      },
      "HistogramBucket": {
        "properties": {
          "period_start": {
            "type": "string",
            "title": "Period Start"
          },
          "period_end": {
            "type": "string",
            "title": "Period End"
          },
          "demand_units": {
            "type": "number",
            "title": "Demand Units"
          },
          "capacity_units": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity Units"
          },
          "utilization_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Utilization Pct"
          }
        },
        "type": "object",
        "required": [
          "period_start",
          "period_end",
          "demand_units"
        ],
        "title": "HistogramBucket",
        "description": "One histogram bucket for a resource demand curve."
      },
      "HorizonBandConfig": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "days": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Days"
          }
        },
        "type": "object",
        "required": [
          "name",
          "days"
        ],
        "title": "HorizonBandConfig",
        "description": "Definition of a single horizon band."
      },
      "HorizonBandResult": {
        "properties": {
          "band_name": {
            "type": "string",
            "title": "Band Name"
          },
          "band_range_days": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Band Range Days"
          },
          "band_start_date": {
            "type": "string",
            "title": "Band Start Date"
          },
          "band_end_date": {
            "type": "string",
            "title": "Band End Date"
          },
          "tasks_in_band": {
            "type": "integer",
            "title": "Tasks In Band",
            "default": 0
          },
          "tasks_ready": {
            "type": "integer",
            "title": "Tasks Ready",
            "default": 0
          },
          "tasks_at_risk": {
            "type": "integer",
            "title": "Tasks At Risk",
            "default": 0
          },
          "band_readiness_score": {
            "type": "number",
            "title": "Band Readiness Score",
            "default": 100.0
          },
          "readiness_breakdown": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object",
            "title": "Readiness Breakdown"
          },
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/HorizonTask"
            },
            "type": "array",
            "title": "Tasks"
          },
          "top_risks": {
            "items": {
              "$ref": "#/components/schemas/TopRisk"
            },
            "type": "array",
            "title": "Top Risks"
          }
        },
        "type": "object",
        "required": [
          "band_name",
          "band_start_date",
          "band_end_date"
        ],
        "title": "HorizonBandResult",
        "description": "Results for a single horizon band."
      },
      "HorizonRecommendation": {
        "properties": {
          "priority": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Priority"
          },
          "category": {
            "type": "string",
            "title": "Category"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "action": {
            "type": "string",
            "title": "Action"
          },
          "tasks_affected": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tasks Affected"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "category",
          "description",
          "action"
        ],
        "title": "HorizonRecommendation",
        "description": "Actionable planning horizon recommendation."
      },
      "HorizonTask": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "forecast_start": {
            "type": "string",
            "title": "Forecast Start"
          },
          "days_until_start": {
            "type": "integer",
            "title": "Days Until Start"
          },
          "duration_days": {
            "type": "integer",
            "title": "Duration Days"
          },
          "on_critical_path": {
            "type": "boolean",
            "title": "On Critical Path",
            "default": false
          },
          "readiness_score": {
            "type": "number",
            "title": "Readiness Score"
          },
          "readiness_status": {
            "type": "string",
            "enum": [
              "ready",
              "mostly_ready",
              "at_risk",
              "not_ready"
            ],
            "title": "Readiness Status"
          },
          "prerequisites": {
            "$ref": "#/components/schemas/TaskPrerequisites"
          },
          "risk_rank": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Risk Rank"
          },
          "impact_if_delayed": {
            "type": "string",
            "title": "Impact If Delayed",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name",
          "forecast_start",
          "days_until_start",
          "duration_days",
          "readiness_score",
          "readiness_status"
        ],
        "title": "HorizonTask",
        "description": "Per-task readiness result within a horizon band."
      },
      "ImportData": {
        "properties": {
          "normalized_schedule": {
            "$ref": "#/components/schemas/NormalizedSchedule"
          },
          "parse_summary": {
            "$ref": "#/components/schemas/ParseSummary"
          },
          "mapping_stats": {
            "$ref": "#/components/schemas/MappingStats"
          },
          "warnings": {
            "items": {
              "$ref": "#/components/schemas/ParseWarning"
            },
            "type": "array",
            "title": "Warnings"
          },
          "processing_metadata": {
            "$ref": "#/components/schemas/app__models__schemas__ProcessingMetadata"
          },
          "msp_resource_table": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/MspResource"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Msp Resource Table",
            "description": "Full resource pool from <Resources> table. MSP imports only. Includes resource_type (0=Work, 1=Material, 2=Cost) for EVM eligibility checks."
          },
          "msp_assignment_table": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/MspAssignment"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Msp Assignment Table",
            "description": "Full assignment records from <Assignments> table. MSP imports only. actual_work_hours drives the resource progression compliance check."
          }
        },
        "type": "object",
        "required": [
          "normalized_schedule",
          "parse_summary",
          "mapping_stats",
          "processing_metadata"
        ],
        "title": "ImportData",
        "description": "Data payload for all Import API endpoints."
      },
      "JobPriority": {
        "type": "string",
        "enum": [
          "high",
          "normal",
          "low"
        ],
        "title": "JobPriority",
        "description": "Priority level for async jobs.\n\nPriority levels affect queue position:\n- HIGH: Critical jobs, processed first\n- NORMAL: Standard processing priority\n- LOW: Background jobs, processed when resources available"
      },
      "JobStatus": {
        "type": "string",
        "enum": [
          "queued",
          "processing",
          "completed",
          "failed",
          "cancelled"
        ],
        "title": "JobStatus",
        "description": "Status of an async job.\n\nJob lifecycle:\n1. QUEUED - Job submitted to queue, waiting for worker\n2. PROCESSING - Worker picked up job and is executing\n3. COMPLETED - Job finished successfully\n4. FAILED - Job encountered an error\n5. CANCELLED - Job was cancelled by user before completion"
      },
      "JobStatusResponse": {
        "properties": {
          "job_id": {
            "type": "string",
            "title": "Job Id",
            "description": "Job identifier"
          },
          "status": {
            "$ref": "#/components/schemas/JobStatus",
            "description": "Current job status"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Job creation timestamp"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At",
            "description": "Job start timestamp"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "Job completion timestamp"
          },
          "task_count": {
            "type": "integer",
            "title": "Task Count",
            "description": "Number of tasks in schedule"
          },
          "result": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result",
            "description": "Job result when completed"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message if failed"
          },
          "progress_percent": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Progress Percent",
            "description": "Job progress percentage (if available)"
          },
          "endpoint_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Endpoint Name",
            "description": "Endpoint that submitted this job"
          },
          "checks_completed": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Checks Completed",
            "description": "Number of checks/steps completed (for forensics endpoints)"
          },
          "total_checks": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Checks",
            "description": "Total number of checks/steps (for forensics endpoints)"
          }
        },
        "type": "object",
        "required": [
          "job_id",
          "status",
          "created_at",
          "task_count"
        ],
        "title": "JobStatusResponse",
        "description": "Response model for job status polling.",
        "example": {
          "completed_at": "2025-01-08T12:00:20Z",
          "created_at": "2025-01-08T12:00:00Z",
          "job_id": "550e8400-e29b-41d4-a716-446655440000",
          "progress_percent": 100.0,
          "result": {
            "breakdown": {},
            "confidence": 0.95,
            "score": 85.5,
            "top_signals": []
          },
          "started_at": "2025-01-08T12:00:05Z",
          "status": "completed",
          "task_count": 5000
        }
      },
      "JobSubmissionRequest": {
        "properties": {
          "tasks": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Tasks",
            "description": "List of tasks (same format as synchronous endpoint)"
          },
          "callback_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2083,
                "minLength": 1,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "title": "Callback Url",
            "description": "Webhook URL for result delivery (optional)"
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriority",
            "description": "Job priority level",
            "default": "normal"
          },
          "include_details": {
            "type": "boolean",
            "title": "Include Details",
            "description": "Include detailed task-level diagnostics and recommendations",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "JobSubmissionRequest",
        "description": "Request model for submitting async health score job.",
        "example": {
          "callback_url": "https://customer.example.com/webhooks/bellator",
          "include_details": false,
          "priority": "normal",
          "tasks": [
            {
              "dependencies": [],
              "duration": 10,
              "id": "T1",
              "percent_complete": 0
            }
          ]
        }
      },
      "JobSubmissionResponse": {
        "properties": {
          "job_id": {
            "type": "string",
            "title": "Job Id",
            "description": "Unique job identifier"
          },
          "status": {
            "$ref": "#/components/schemas/JobStatus",
            "description": "Initial job status (queued)"
          },
          "estimated_completion_seconds": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Estimated Completion Seconds",
            "description": "Estimated time until completion"
          },
          "status_url": {
            "type": "string",
            "title": "Status Url",
            "description": "URL to poll job status"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "Job creation timestamp"
          }
        },
        "type": "object",
        "required": [
          "job_id",
          "status",
          "estimated_completion_seconds",
          "status_url"
        ],
        "title": "JobSubmissionResponse",
        "description": "Response model for async job submission.",
        "example": {
          "created_at": "2025-01-08T12:00:00Z",
          "estimated_completion_seconds": 15,
          "job_id": "550e8400-e29b-41d4-a716-446655440000",
          "status": "queued",
          "status_url": "/api/v1/jobs/550e8400-e29b-41d4-a716-446655440000"
        }
      },
      "LevelingCandidate": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "resource_name": {
            "type": "string",
            "title": "Resource Name"
          },
          "total_float_days": {
            "type": "number",
            "title": "Total Float Days"
          },
          "free_float_days": {
            "type": "number",
            "title": "Free Float Days"
          },
          "early_start": {
            "type": "string",
            "title": "Early Start"
          },
          "latest_allowable_start": {
            "type": "string",
            "title": "Latest Allowable Start"
          },
          "leveling_window_days": {
            "type": "integer",
            "title": "Leveling Window Days"
          },
          "resolves_conflict_with": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Resolves Conflict With"
          },
          "leveling_priority": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "title": "Leveling Priority"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name",
          "resource_name",
          "total_float_days",
          "free_float_days",
          "early_start",
          "latest_allowable_start",
          "leveling_window_days",
          "leveling_priority"
        ],
        "title": "LevelingCandidate",
        "description": "A non-critical task that could be shifted to relieve over-allocation."
      },
      "LogicAuditData": {
        "properties": {
          "logic_score": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Logic Score",
            "description": "Logic quality score 0-100 (100=perfect logic)"
          },
          "grade": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "D",
              "F"
            ],
            "title": "Grade",
            "description": "Letter grade derived from logic_score"
          },
          "summary": {
            "$ref": "#/components/schemas/LogicAuditSummary",
            "description": "Finding severity counts"
          },
          "rule_results": {
            "items": {
              "$ref": "#/components/schemas/LogicRuleResult"
            },
            "type": "array",
            "title": "Rule Results",
            "description": "Per-rule check results"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/LogicFinding"
            },
            "type": "array",
            "title": "Findings",
            "description": "Actionable defect findings"
          },
          "recommended_fixes": {
            "items": {
              "$ref": "#/components/schemas/LogicRecommendedFix"
            },
            "type": "array",
            "title": "Recommended Fixes",
            "description": "Priority-sorted recommended fixes"
          },
          "network_stats": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NetworkStats"
              },
              {
                "type": "null"
              }
            ],
            "description": "Network topology statistics (if include_network_stats=True)"
          },
          "audit_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Audit Metadata",
            "description": "Analysis metadata (task count, options, etc.)"
          }
        },
        "type": "object",
        "required": [
          "logic_score",
          "grade",
          "summary",
          "rule_results"
        ],
        "title": "LogicAuditData",
        "description": "Data payload for POST /api/v1/forensics/logic-audit."
      },
      "LogicAuditOptions": {
        "properties": {
          "max_examples_per_rule": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Max Examples Per Rule",
            "description": "Maximum number of example task IDs returned per rule",
            "default": 10
          },
          "include_network_stats": {
            "type": "boolean",
            "title": "Include Network Stats",
            "description": "Include network topology statistics in response",
            "default": true
          },
          "include_forensic_paths": {
            "type": "boolean",
            "title": "Include Forensic Paths",
            "description": "Include full cycle/path details (may be large)",
            "default": false
          },
          "severity_threshold": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Severity Threshold",
            "description": "Minimum severity level to include in findings",
            "default": "low"
          },
          "enable_recommendations": {
            "type": "boolean",
            "title": "Enable Recommendations",
            "description": "Include recommended fixes in response",
            "default": true
          },
          "max_lag_days": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Max Lag Days",
            "description": "Threshold above which a lag is flagged as excessive (days)",
            "default": 5.0
          },
          "relationship_type_thresholds": {
            "$ref": "#/components/schemas/RelationshipTypeThresholds",
            "description": "Thresholds for acceptable relationship type distribution"
          }
        },
        "type": "object",
        "title": "LogicAuditOptions",
        "description": "Options controlling Logic Audit analysis behavior."
      },
      "LogicAuditRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "minItems": 2,
            "title": "Tasks",
            "description": "Schedule tasks to audit (minimum 2 tasks)"
          },
          "options": {
            "$ref": "#/components/schemas/LogicAuditOptions",
            "description": "Audit configuration options"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "LogicAuditRequest",
        "description": "Request body for POST /api/v1/forensics/logic-audit."
      },
      "LogicAuditSummary": {
        "properties": {
          "critical": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Critical",
            "default": 0
          },
          "high": {
            "type": "integer",
            "minimum": 0.0,
            "title": "High",
            "default": 0
          },
          "medium": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Medium",
            "default": 0
          },
          "low": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Low",
            "default": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total",
            "default": 0
          }
        },
        "type": "object",
        "title": "LogicAuditSummary",
        "description": "Summary of finding severity counts."
      },
      "LogicCategoryResult": {
        "properties": {
          "total_changes": {
            "type": "integer",
            "title": "Total Changes",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "added_dependencies": {
            "type": "integer",
            "title": "Added Dependencies",
            "default": 0
          },
          "removed_dependencies": {
            "type": "integer",
            "title": "Removed Dependencies",
            "default": 0
          },
          "modified_lags": {
            "type": "integer",
            "title": "Modified Lags",
            "default": 0
          },
          "changes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "title": "LogicCategoryResult",
        "description": "Result for logic change category."
      },
      "LogicChanges": {
        "properties": {
          "added_relationships": {
            "items": {
              "$ref": "#/components/schemas/LogicRelationship"
            },
            "type": "array",
            "title": "Added Relationships"
          },
          "removed_relationships": {
            "items": {
              "$ref": "#/components/schemas/LogicRelationship"
            },
            "type": "array",
            "title": "Removed Relationships"
          },
          "retyped_relationships": {
            "items": {
              "$ref": "#/components/schemas/RetypedRelationship"
            },
            "type": "array",
            "title": "Retyped Relationships"
          },
          "summary": {
            "$ref": "#/components/schemas/LogicChangesSummary"
          }
        },
        "type": "object",
        "title": "LogicChanges",
        "description": "Dependency graph changes between baseline and current."
      },
      "LogicChangesSummary": {
        "properties": {
          "total_added": {
            "type": "integer",
            "title": "Total Added",
            "default": 0
          },
          "total_removed": {
            "type": "integer",
            "title": "Total Removed",
            "default": 0
          },
          "total_retyped": {
            "type": "integer",
            "title": "Total Retyped",
            "default": 0
          },
          "drift_severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Drift Severity",
            "default": "low"
          }
        },
        "type": "object",
        "title": "LogicChangesSummary",
        "description": "Summary counts and severity for logic drift."
      },
      "LogicDiff": {
        "properties": {
          "added_relationships": {
            "items": {
              "$ref": "#/components/schemas/AddedRelationship"
            },
            "type": "array",
            "title": "Added Relationships"
          },
          "removed_relationships": {
            "items": {
              "$ref": "#/components/schemas/RemovedRelationship"
            },
            "type": "array",
            "title": "Removed Relationships"
          },
          "modified_relationships": {
            "items": {
              "$ref": "#/components/schemas/ModifiedRelationship"
            },
            "type": "array",
            "title": "Modified Relationships"
          },
          "total_relationship_changes": {
            "type": "integer",
            "title": "Total Relationship Changes",
            "default": 0
          },
          "logic_change_severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Logic Change Severity",
            "default": "low"
          }
        },
        "type": "object",
        "title": "LogicDiff",
        "description": "Dependency graph changes between as-planned and as-built."
      },
      "LogicDimensionScore": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score",
            "default": 100.0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "complete"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/ReadinessIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "title": "LogicDimensionScore",
        "description": "Logic completeness readiness dimension result."
      },
      "LogicFinding": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Finding code (e.g. LOGIC-001)"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Severity",
            "description": "Severity level"
          },
          "title": {
            "type": "string",
            "title": "Title",
            "description": "Short finding title"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "Detailed finding description"
          },
          "affected_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Affected Tasks",
            "description": "Affected task IDs"
          },
          "standard": {
            "type": "string",
            "title": "Standard",
            "description": "Compliance standard reference",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "code",
          "severity",
          "title",
          "description"
        ],
        "title": "LogicFinding",
        "description": "A single actionable logic defect finding."
      },
      "LogicRecommendedFix": {
        "properties": {
          "priority": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Priority",
            "description": "Fix priority (1=highest)"
          },
          "action": {
            "type": "string",
            "title": "Action",
            "description": "Recommended corrective action"
          },
          "affected_count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Affected Count",
            "description": "Number of items affected"
          },
          "finding_codes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finding Codes",
            "description": "Related finding codes"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "action",
          "affected_count"
        ],
        "title": "LogicRecommendedFix",
        "description": "A prioritized recommended fix for a logic defect."
      },
      "LogicRelationship": {
        "properties": {
          "predecessor_id": {
            "type": "string",
            "title": "Predecessor Id"
          },
          "successor_id": {
            "type": "string",
            "title": "Successor Id"
          },
          "relationship_type": {
            "type": "string",
            "title": "Relationship Type",
            "default": "FS"
          },
          "lag_days": {
            "type": "integer",
            "title": "Lag Days",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "predecessor_id",
          "successor_id"
        ],
        "title": "LogicRelationship",
        "description": "An added or removed dependency relationship."
      },
      "LogicRiskSubMetric": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "weight": {
            "type": "number",
            "title": "Weight"
          },
          "active": {
            "type": "boolean",
            "title": "Active"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "open_ends_count": {
            "type": "integer",
            "title": "Open Ends Count",
            "default": 0
          },
          "lag_abuse_count": {
            "type": "integer",
            "title": "Lag Abuse Count",
            "default": 0
          },
          "hard_constraint_count": {
            "type": "integer",
            "title": "Hard Constraint Count",
            "default": 0
          },
          "oos_progress_count": {
            "type": "integer",
            "title": "Oos Progress Count",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight",
          "active"
        ],
        "title": "LogicRiskSubMetric",
        "description": "Logic Risk sub-metric result."
      },
      "LogicRuleResult": {
        "properties": {
          "rule": {
            "type": "string",
            "title": "Rule",
            "description": "Rule identifier (e.g. 'leads', 'excessive_lags')"
          },
          "passed": {
            "type": "boolean",
            "title": "Passed",
            "description": "True if the rule passed (no violations found)"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Severity",
            "description": "Severity level of this rule"
          },
          "count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Count",
            "description": "Number of violations found"
          },
          "examples": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Examples",
            "description": "Example task IDs with violations (up to max_examples_per_rule)"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "Human-readable rule result summary"
          },
          "standard": {
            "type": "string",
            "title": "Standard",
            "description": "Compliance standard reference",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "rule",
          "passed",
          "severity",
          "count",
          "message"
        ],
        "title": "LogicRuleResult",
        "description": "Result for a single logic rule check."
      },
      "MappingStats": {
        "properties": {
          "constraint_mappings": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Constraint Mappings"
          },
          "relationship_mappings": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Relationship Mappings"
          },
          "duration_conversion": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DurationConversion"
              },
              {
                "type": "null"
              }
            ]
          },
          "calendar_info": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CalendarInfo"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "title": "MappingStats",
        "description": "Field mapping statistics for an import operation."
      },
      "ModifiedRelationship": {
        "properties": {
          "predecessor_id": {
            "type": "string",
            "title": "Predecessor Id"
          },
          "successor_id": {
            "type": "string",
            "title": "Successor Id"
          },
          "planned_type": {
            "type": "string",
            "title": "Planned Type"
          },
          "actual_type": {
            "type": "string",
            "title": "Actual Type"
          },
          "planned_lag": {
            "type": "integer",
            "title": "Planned Lag",
            "default": 0
          },
          "actual_lag": {
            "type": "integer",
            "title": "Actual Lag",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "predecessor_id",
          "successor_id",
          "planned_type",
          "actual_type"
        ],
        "title": "ModifiedRelationship",
        "description": "A dependency whose type or lag changed."
      },
      "MppImportOptions": {
        "properties": {
          "strict_validation": {
            "type": "boolean",
            "title": "Strict Validation",
            "default": true
          },
          "auto_detect_start_finish": {
            "type": "boolean",
            "title": "Auto Detect Start Finish",
            "default": true
          },
          "auto_classify_task_types": {
            "type": "boolean",
            "title": "Auto Classify Task Types",
            "default": true
          },
          "use_prefix_classification": {
            "type": "boolean",
            "title": "Use Prefix Classification",
            "description": "Detect task type from name prefix (e.g., 'SM-Buffer', 'LOE-Support', 'PP-Futurework', 'AE-Engineering'). Fires only when native type is not already set. See Import API Common Patterns \u00a7 Prefix Classification.",
            "default": true
          },
          "include_warnings": {
            "type": "boolean",
            "title": "Include Warnings",
            "default": true
          },
          "preserve_task_ids": {
            "type": "boolean",
            "title": "Preserve Task Ids",
            "default": true
          },
          "baseline_index": {
            "type": "integer",
            "maximum": 10.0,
            "minimum": -1.0,
            "title": "Baseline Index",
            "description": "Which baseline to import: 0 = Baseline, 1-10 = Baseline1-Baseline10, -1 = skip baseline import.",
            "default": 0
          },
          "percent_complete_source": {
            "type": "string",
            "title": "Percent Complete Source",
            "description": "Which MSP percent complete field to map to percent_complete. Options: 'auto' (resource-aware: PercentWorkComplete for resourced tasks, PercentComplete for unresourced), 'duration' (always PercentComplete), 'work' (always PercentWorkComplete), 'physical' (PhysicalPercentComplete). PhysicalPercentComplete is always captured in physical_percent_complete regardless of this setting.",
            "default": "auto"
          },
          "wbs_field_priority": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Wbs Field Priority",
            "description": "Ordered list of custom field aliases to check as the source for wbs_code. First alias found in the project definition AND having a non-empty task value wins. Falls back to native <WBS> element if none match. Case-insensitive alias match. Set to [] to always use only the native <WBS> element."
          },
          "obs_field_priority": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Obs Field Priority",
            "description": "Ordered list of custom field aliases to check as the source for organization_code. First alias with a non-empty task value wins. No native fallback \u2014 organization_code remains null if no alias matches. Set to [] to skip OBS extraction entirely."
          }
        },
        "type": "object",
        "title": "MppImportOptions",
        "description": "Options controlling MS Project XML import behavior."
      },
      "MppImportRequest": {
        "properties": {
          "file_content": {
            "type": "string",
            "title": "File Content",
            "description": "MS Project XML file content (UTF-8 encoded text)"
          },
          "options": {
            "$ref": "#/components/schemas/MppImportOptions"
          }
        },
        "type": "object",
        "required": [
          "file_content"
        ],
        "title": "MppImportRequest",
        "description": "Request model for POST /api/v1/import/mpp."
      },
      "MspAssignment": {
        "properties": {
          "uid": {
            "type": "string",
            "title": "Uid",
            "description": "Assignment UID"
          },
          "task_uid": {
            "type": "string",
            "title": "Task Uid",
            "description": "Parent task UID (join key to Task)"
          },
          "resource_uid": {
            "type": "string",
            "title": "Resource Uid",
            "description": "Assigned resource UID (join key to MspResource)"
          },
          "units": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Units",
            "description": "Allocation fraction (0.5 = 50%)"
          },
          "work_hours": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Work Hours",
            "description": "Scheduled work in hours"
          },
          "actual_work_hours": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Work Hours",
            "description": "Actual work recorded in hours. Zero on a progressed task indicates 'Updating task status updates resource status' is disabled."
          },
          "remaining_work_hours": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Remaining Work Hours",
            "description": "Remaining work in hours"
          },
          "percent_work_complete": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Percent Work Complete",
            "description": "Assignment-level percent work complete (distinct from task-level)"
          },
          "cost": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost",
            "description": "Scheduled cost"
          },
          "actual_cost": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Cost",
            "description": "Actual cost incurred"
          },
          "start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start",
            "description": "Assignment scheduled start"
          },
          "finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finish",
            "description": "Assignment scheduled finish"
          },
          "actual_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Start",
            "description": "Assignment actual start"
          },
          "actual_finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Finish",
            "description": "Assignment actual finish"
          },
          "baseline_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Start",
            "description": "Baseline scheduled start (from <Baseline><Number>N><Start>)"
          },
          "baseline_finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Finish",
            "description": "Baseline scheduled finish (from <Baseline><Number>N><Finish>)"
          },
          "baseline_work_hours": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Work Hours",
            "description": "Baseline budgeted work in hours (PT format \u2192 hours, from <Baseline><Number>N><Work>). Drives BCWS for labor EVM analysis."
          },
          "baseline_cost": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Cost",
            "description": "Baseline cost at time of baseline save (from <Baseline><Number>N><Cost>). Drives BCWS for cost accounts."
          }
        },
        "type": "object",
        "required": [
          "uid",
          "task_uid",
          "resource_uid"
        ],
        "title": "MspAssignment",
        "description": "One record per <Assignment> element in an MS Project XML file.\n\nCaptures all assignment-level fields. The actual_work_hours field is the\nkey signal for the resource progression compliance check (ANSI/EIA-748)."
      },
      "MspResource": {
        "properties": {
          "uid": {
            "type": "string",
            "title": "Uid",
            "description": "Resource UID (XML <UID>)"
          },
          "display_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Id",
            "description": "User-facing resource ID (XML <ID>)"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Resource display name"
          },
          "initials": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initials",
            "description": "Resource initials"
          },
          "group": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group",
            "description": "Resource pool / org grouping"
          },
          "resource_type": {
            "type": "integer",
            "title": "Resource Type",
            "description": "Resource type: 0=Work (EVM-bearing), 1=Material (EVM-bearing), 2=Cost (expense only)",
            "default": 0
          },
          "max_units": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Units",
            "description": "Maximum availability (1.0 = 100%)"
          },
          "calendar_uid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Calendar Uid",
            "description": "Resource calendar UID"
          }
        },
        "type": "object",
        "required": [
          "uid",
          "name"
        ],
        "title": "MspResource",
        "description": "One record per <Resource> element in an MS Project XML file.\n\nCaptures the full resource pool with type information needed for\nEVM eligibility checks and resource progression validation.\nType values: 0=Work, 1=Material, 2=Cost."
      },
      "NetworkDetails": {
        "properties": {
          "start_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Start Tasks",
            "description": "Tasks with no predecessors"
          },
          "finish_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finish Tasks",
            "description": "Tasks with no successors"
          },
          "relationship_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Relationship Types",
            "description": "Relationship types used (FS, SS, FF, SF)"
          },
          "relationship_type_distribution": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Relationship Type Distribution",
            "description": "Count of dependencies by relationship type in the effective network view"
          },
          "relationship_filter_applied": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Relationship Filter Applied",
            "description": "Relationship-type filter applied to network aggregation (if provided)"
          },
          "dependency_count_filtered": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Dependency Count Filtered",
            "description": "Dependency count after applying relationship-type filter"
          },
          "dependency_count_total": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Dependency Count Total",
            "description": "Total dependency count before applying relationship-type filter"
          },
          "has_negative_float": {
            "type": "boolean",
            "title": "Has Negative Float",
            "description": "Whether any tasks have negative float"
          }
        },
        "type": "object",
        "required": [
          "start_tasks",
          "finish_tasks",
          "relationship_types",
          "dependency_count_filtered",
          "dependency_count_total",
          "has_negative_float"
        ],
        "title": "NetworkDetails",
        "description": "Network structure details."
      },
      "NetworkStats": {
        "properties": {
          "total_tasks": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Tasks"
          },
          "total_relationships": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total Relationships"
          },
          "avg_predecessors": {
            "type": "number",
            "minimum": 0.0,
            "title": "Avg Predecessors"
          },
          "avg_successors": {
            "type": "number",
            "minimum": 0.0,
            "title": "Avg Successors"
          },
          "max_predecessors": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Max Predecessors"
          },
          "max_successors": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Max Successors"
          },
          "milestone_count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Milestone Count"
          },
          "network_density": {
            "type": "number",
            "minimum": 0.0,
            "title": "Network Density"
          }
        },
        "type": "object",
        "required": [
          "total_tasks",
          "total_relationships",
          "avg_predecessors",
          "avg_successors",
          "max_predecessors",
          "max_successors",
          "milestone_count",
          "network_density"
        ],
        "title": "NetworkStats",
        "description": "Network topology statistics."
      },
      "NormalizedSchedule": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Normalized task list"
          },
          "start_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Start Task Ids"
          },
          "finish_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finish Task Ids"
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date"
          },
          "target_finish_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Finish Date"
          },
          "baseline_approved_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Approved Date"
          },
          "milestone_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Milestone Task Ids"
          },
          "loe_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Loe Task Ids"
          },
          "apportioned_effort_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Apportioned Effort Task Ids"
          },
          "schedule_margin_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Schedule Margin Task Ids"
          },
          "summary_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Summary Task Ids"
          },
          "planning_package_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Planning Package Task Ids"
          },
          "summary_level_pp_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Summary Level Pp Task Ids"
          },
          "schedule_visibility_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Schedule Visibility Task Ids"
          },
          "resource_availability": {
            "items": {
              "$ref": "#/components/schemas/ResourceAvailability-Output"
            },
            "type": "array",
            "title": "Resource Availability"
          },
          "working_hours_per_day": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Working Hours Per Day",
            "default": 8.0
          },
          "working_days_per_week": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Working Days Per Week",
            "default": 5.0
          },
          "holidays": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Holidays"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "NormalizedSchedule",
        "description": "The canonical schedule representation produced by all Import APIs.\n\nCompatible with ScheduleRequest (can be passed directly to analysis\nendpoints). Extends ScheduleRequest with task-type exclusion arrays\nand calendar metadata per normalized-schedule-schema.md v1.4.0."
      },
      "OverAllocationPeriod": {
        "properties": {
          "period_start": {
            "type": "string",
            "title": "Period Start"
          },
          "period_end": {
            "type": "string",
            "title": "Period End"
          },
          "demand_units": {
            "type": "number",
            "title": "Demand Units"
          },
          "capacity_units": {
            "type": "number",
            "title": "Capacity Units"
          },
          "over_allocation_ratio": {
            "type": "number",
            "title": "Over Allocation Ratio"
          },
          "severity": {
            "type": "string",
            "enum": [
              "minor",
              "moderate",
              "critical"
            ],
            "title": "Severity"
          },
          "conflicting_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Conflicting Tasks"
          }
        },
        "type": "object",
        "required": [
          "period_start",
          "period_end",
          "demand_units",
          "capacity_units",
          "over_allocation_ratio",
          "severity"
        ],
        "title": "OverAllocationPeriod",
        "description": "A period when a resource exceeds its declared capacity."
      },
      "ParseSummary": {
        "properties": {
          "source_format": {
            "type": "string",
            "title": "Source Format",
            "description": "Source format: mpp-xml, p6-xer"
          },
          "source_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Version",
            "description": "Source application version string"
          },
          "tasks_imported": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Tasks Imported"
          },
          "dependencies_imported": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Dependencies Imported",
            "default": 0
          },
          "fields_populated": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Fields Populated"
          },
          "fields_missing": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Fields Missing"
          },
          "auto_detected": {
            "$ref": "#/components/schemas/AutoDetected"
          },
          "custom_fields_discovered": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Custom Fields Discovered",
            "description": "Aliases of WBS/OBS-pattern custom fields found in the project's ExtendedAttributes or OutlineCodes. Empty list when none discovered (e.g., XER imports or projects using only native <WBS>)."
          }
        },
        "type": "object",
        "required": [
          "source_format",
          "tasks_imported"
        ],
        "title": "ParseSummary",
        "description": "Summary statistics for a completed import parse operation."
      },
      "ParseWarning": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Warning type: missing_field, ambiguous_mapping, data_loss"
          },
          "severity": {
            "type": "string",
            "title": "Severity",
            "description": "Severity: info, warning, error",
            "default": "warning"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id",
            "description": "Task ID associated with the warning"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "Human-readable warning message"
          },
          "details": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Details",
            "description": "Additional structured details"
          }
        },
        "type": "object",
        "required": [
          "type",
          "message"
        ],
        "title": "ParseWarning",
        "description": "A non-fatal warning emitted during import parsing."
      },
      "PercentileResult": {
        "properties": {
          "p10": {
            "type": "number",
            "title": "P10",
            "description": "10th percentile outcome"
          },
          "p50": {
            "type": "number",
            "title": "P50",
            "description": "50th percentile (median)"
          },
          "p80": {
            "type": "number",
            "title": "P80",
            "description": "80th percentile \u2014 common contract delivery threshold"
          },
          "p90": {
            "type": "number",
            "title": "P90",
            "description": "90th percentile"
          },
          "mean": {
            "type": "number",
            "title": "Mean"
          },
          "std_dev": {
            "type": "number",
            "title": "Std Dev"
          }
        },
        "type": "object",
        "required": [
          "p10",
          "p50",
          "p80",
          "p90",
          "mean",
          "std_dev"
        ],
        "title": "PercentileResult",
        "description": "Percentile distribution across simulation trials.\n\nReserved for Tier 3 Monte Carlo / risk simulation endpoints (v0.3.0+)."
      },
      "PlanningHorizonData": {
        "properties": {
          "analysis_summary": {
            "$ref": "#/components/schemas/AnalysisSummary"
          },
          "bands": {
            "items": {
              "$ref": "#/components/schemas/HorizonBandResult"
            },
            "type": "array",
            "title": "Bands"
          },
          "cross_band_insights": {
            "$ref": "#/components/schemas/CrossBandInsights"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/HorizonRecommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "compliance_tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Compliance Tags"
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata"
          }
        },
        "type": "object",
        "title": "PlanningHorizonData",
        "description": "Data payload for POST /api/v1/forensics/planning-horizon."
      },
      "PlanningHorizonOptions": {
        "properties": {
          "horizon_bands": {
            "items": {
              "$ref": "#/components/schemas/HorizonBandConfig"
            },
            "type": "array",
            "title": "Horizon Bands"
          },
          "readiness_dimensions": {
            "items": {
              "type": "string",
              "enum": [
                "logic",
                "resources",
                "approvals",
                "float",
                "forecast_stability"
              ]
            },
            "type": "array",
            "title": "Readiness Dimensions"
          },
          "day_type": {
            "type": "string",
            "enum": [
              "calendar",
              "work"
            ],
            "title": "Day Type",
            "default": "calendar"
          },
          "include_risk_ranking": {
            "type": "boolean",
            "title": "Include Risk Ranking",
            "default": true
          },
          "include_recommendations": {
            "type": "boolean",
            "title": "Include Recommendations",
            "default": true
          },
          "min_float_days": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Min Float Days",
            "default": 5
          },
          "max_forecast_drift_days": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Max Forecast Drift Days",
            "default": 3
          }
        },
        "type": "object",
        "title": "PlanningHorizonOptions",
        "description": "Options controlling planning horizon analysis."
      },
      "PlanningHorizonRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Schedule tasks."
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "Current data date (ISO 8601, e.g. '2026-03-17'). When omitted, today's date is used as the planning horizon anchor."
          },
          "schedule_history": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schedule History"
          },
          "options": {
            "$ref": "#/components/schemas/PlanningHorizonOptions"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "PlanningHorizonRequest",
        "description": "Request body for POST /api/v1/forensics/planning-horizon."
      },
      "PoPDimension": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "weight": {
            "type": "number",
            "title": "Weight"
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight"
        ],
        "title": "PoPDimension",
        "description": "Single PoP dimension score and weight."
      },
      "PoPRiskFactor": {
        "properties": {
          "factor": {
            "type": "string",
            "title": "Factor"
          },
          "score": {
            "type": "number",
            "title": "Score"
          },
          "severity": {
            "type": "string",
            "title": "Severity"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation"
          }
        },
        "type": "object",
        "required": [
          "factor",
          "score",
          "severity",
          "description",
          "recommendation"
        ],
        "title": "PoPRiskFactor",
        "description": "A deliverability risk factor from PoP assessment."
      },
      "ProbabilityOfPerformance": {
        "properties": {
          "pop_score": {
            "type": "number",
            "title": "Pop Score"
          },
          "rating": {
            "type": "string",
            "title": "Rating"
          },
          "confidence": {
            "type": "number",
            "title": "Confidence"
          },
          "dimensions": {
            "additionalProperties": {
              "$ref": "#/components/schemas/PoPDimension"
            },
            "type": "object",
            "title": "Dimensions"
          },
          "risk_factors": {
            "items": {
              "$ref": "#/components/schemas/PoPRiskFactor"
            },
            "type": "array",
            "title": "Risk Factors"
          },
          "recommendations": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Recommendations"
          }
        },
        "type": "object",
        "required": [
          "pop_score",
          "rating",
          "confidence",
          "dimensions"
        ],
        "title": "ProbabilityOfPerformance",
        "description": "Probability of Performance (PoP) \u2014 schedule deliverability score (v0.2.0)."
      },
      "ProgressAuditData": {
        "properties": {
          "integrity_score": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Integrity Score",
            "description": "Progress integrity score 0-100 (100=no anomalies)"
          },
          "grade": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "D",
              "F"
            ],
            "title": "Grade",
            "description": "Letter grade derived from integrity_score"
          },
          "summary": {
            "$ref": "#/components/schemas/ProgressAuditSummary",
            "description": "Anomaly severity counts"
          },
          "anomalies": {
            "items": {
              "$ref": "#/components/schemas/app__models__schemas__ProgressAnomaly__2"
            },
            "type": "array",
            "title": "Anomalies",
            "description": "All detected progress anomalies"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/ProgressAuditRecommendation"
            },
            "type": "array",
            "title": "Recommendations",
            "description": "Priority-sorted remediation recommendations"
          },
          "audit_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Audit Metadata",
            "description": "Analysis metadata (task count, status_date, options, etc.)"
          }
        },
        "type": "object",
        "required": [
          "integrity_score",
          "grade",
          "summary"
        ],
        "title": "ProgressAuditData",
        "description": "Data payload for POST /api/v1/forensics/progress-audit."
      },
      "ProgressAuditOptions": {
        "properties": {
          "status_date": {
            "type": "string",
            "title": "Status Date",
            "description": "Project data date (ISO 8601, e.g. '2025-06-30'). Required."
          },
          "exclude_milestones": {
            "type": "boolean",
            "title": "Exclude Milestones",
            "description": "Exclude zero-duration tasks from progress checks.",
            "default": true
          },
          "max_examples": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Max Examples",
            "description": "Maximum anomaly examples to return per category.",
            "default": 10
          },
          "include_recommendations": {
            "type": "boolean",
            "title": "Include Recommendations",
            "description": "Include recommended remediation steps.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "status_date"
        ],
        "title": "ProgressAuditOptions",
        "description": "Configuration options for the progress audit check."
      },
      "ProgressAuditRecommendation": {
        "properties": {
          "priority": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Priority",
            "description": "Recommendation priority (1=highest)"
          },
          "category": {
            "type": "string",
            "title": "Category",
            "description": "Anomaly category this addresses"
          },
          "action": {
            "type": "string",
            "title": "Action",
            "description": "Recommended corrective action"
          },
          "affected_count": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Affected Count",
            "description": "Number of items affected"
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Severity",
            "description": "Severity of the addressed anomalies"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "category",
          "action",
          "affected_count",
          "severity"
        ],
        "title": "ProgressAuditRecommendation",
        "description": "A prioritized remediation recommendation for progress anomalies."
      },
      "ProgressAuditRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "minItems": 2,
            "title": "Tasks",
            "description": "Schedule tasks to audit (minimum 2)."
          },
          "options": {
            "$ref": "#/components/schemas/ProgressAuditOptions",
            "description": "Audit options including required status_date."
          }
        },
        "type": "object",
        "required": [
          "tasks",
          "options"
        ],
        "title": "ProgressAuditRequest",
        "description": "Request body for POST /api/v1/forensics/progress-audit."
      },
      "ProgressAuditSummary": {
        "properties": {
          "critical": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Critical",
            "default": 0
          },
          "high": {
            "type": "integer",
            "minimum": 0.0,
            "title": "High",
            "default": 0
          },
          "medium": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Medium",
            "default": 0
          },
          "low": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Low",
            "default": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Total",
            "default": 0
          }
        },
        "type": "object",
        "title": "ProgressAuditSummary",
        "description": "Summary counts of anomalies by severity."
      },
      "ProgressCategoryResult": {
        "properties": {
          "total_changes": {
            "type": "integer",
            "title": "Total Changes",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "anomalies": {
            "items": {
              "$ref": "#/components/schemas/app__models__schemas__ProgressAnomaly__1"
            },
            "type": "array",
            "title": "Anomalies"
          },
          "changes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "title": "ProgressCategoryResult",
        "description": "Result for progress anomaly category."
      },
      "ProgressIntegritySubMetric": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "weight": {
            "type": "number",
            "title": "Weight"
          },
          "active": {
            "type": "boolean",
            "title": "Active"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "anomaly_count": {
            "type": "integer",
            "title": "Anomaly Count",
            "default": 0
          },
          "future_actuals_count": {
            "type": "integer",
            "title": "Future Actuals Count",
            "default": 0
          },
          "invalid_sequence_count": {
            "type": "integer",
            "title": "Invalid Sequence Count",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight",
          "active"
        ],
        "title": "ProgressIntegritySubMetric",
        "description": "Progress Integrity Risk sub-metric result."
      },
      "ReadinessIssue": {
        "properties": {
          "issue_type": {
            "type": "string",
            "title": "Issue Type"
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Severity"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation"
          }
        },
        "type": "object",
        "required": [
          "issue_type",
          "severity",
          "description",
          "recommendation"
        ],
        "title": "ReadinessIssue",
        "description": "A single readiness issue for one dimension."
      },
      "Recommendation": {
        "properties": {
          "priority": {
            "$ref": "#/components/schemas/FindingSeverity"
          },
          "action": {
            "type": "string",
            "title": "Action",
            "description": "What to do \u2014 specific and actionable"
          },
          "standard": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Standard",
            "description": "Supporting standard citation"
          },
          "finding_codes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finding Codes",
            "description": "Finding.code values this recommendation addresses"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "action"
        ],
        "title": "Recommendation",
        "description": "An actionable item tied to one or more findings.\n\n`finding_codes` links each recommendation back to the specific Finding(s)\nit addresses, enabling consumers to correlate actions with evidence."
      },
      "RelationshipType": {
        "type": "string",
        "enum": [
          "FS",
          "SS",
          "FF",
          "SF"
        ],
        "title": "RelationshipType",
        "description": "Task relationship types per PMBOK 6.3.2.2.\n\nAttributes:\n    FINISH_START: Predecessor finish \u2192 successor start (most common, ~90%)\n    START_START: Predecessor start \u2192 successor start (~5%)\n    FINISH_FINISH: Predecessor finish \u2192 successor finish (~4%)\n    START_FINISH: Predecessor start \u2192 successor finish (rare, ~1%)"
      },
      "RelationshipTypeThresholds": {
        "properties": {
          "fs_min_percentage": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Fs Min Percentage",
            "description": "Minimum FS relationship percentage (default 80%)",
            "default": 80.0
          },
          "ss_max_percentage": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Ss Max Percentage",
            "description": "Maximum SS relationship percentage (default 20%)",
            "default": 20.0
          },
          "ff_max_percentage": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Ff Max Percentage",
            "description": "Maximum FF relationship percentage (default 20%)",
            "default": 20.0
          },
          "sf_max_percentage": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Sf Max Percentage",
            "description": "Maximum SF relationship percentage (default 5%)",
            "default": 5.0
          }
        },
        "type": "object",
        "title": "RelationshipTypeThresholds",
        "description": "Configurable thresholds for relationship type distribution checks."
      },
      "RemovedRelationship": {
        "properties": {
          "predecessor_id": {
            "type": "string",
            "title": "Predecessor Id"
          },
          "successor_id": {
            "type": "string",
            "title": "Successor Id"
          },
          "planned_type": {
            "type": "string",
            "title": "Planned Type",
            "default": "FS"
          }
        },
        "type": "object",
        "required": [
          "predecessor_id",
          "successor_id"
        ],
        "title": "RemovedRelationship",
        "description": "A dependency removed from the as-planned schedule."
      },
      "ResourceAllocationRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          },
          "resources": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Resources",
            "description": "Available resources"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "ResourceAllocationRequest",
        "description": "Request model for resource allocation (placeholder)."
      },
      "ResourceAllocationResponse": {
        "properties": {
          "allocation": {
            "additionalProperties": true,
            "type": "object",
            "title": "Allocation",
            "description": "Resource allocation results"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "default": "Resource allocation is not yet implemented"
          }
        },
        "type": "object",
        "title": "ResourceAllocationResponse",
        "description": "Response model for resource allocation (placeholder)."
      },
      "ResourceAnalysisData": {
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/ResourceAnalysisSummary"
          },
          "resource_profiles": {
            "items": {
              "$ref": "#/components/schemas/ResourceProfile"
            },
            "type": "array",
            "title": "Resource Profiles"
          },
          "critical_path_resources": {
            "$ref": "#/components/schemas/CriticalPathResources"
          },
          "leveling_candidates": {
            "items": {
              "$ref": "#/components/schemas/LevelingCandidate"
            },
            "type": "array",
            "title": "Leveling Candidates"
          },
          "unresourced_tasks": {
            "items": {
              "$ref": "#/components/schemas/UnresourcedTask"
            },
            "type": "array",
            "title": "Unresourced Tasks"
          },
          "resource_risk_score": {
            "$ref": "#/components/schemas/ResourceRiskScore"
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata",
            "description": "Processing metadata (task count, options, etc.)"
          }
        },
        "type": "object",
        "required": [
          "summary",
          "resource_risk_score"
        ],
        "title": "ResourceAnalysisData",
        "description": "Data payload for POST /api/v1/forensics/resource-analysis."
      },
      "ResourceAnalysisOptions": {
        "properties": {
          "period_size_days": {
            "type": "integer",
            "maximum": 365.0,
            "minimum": 1.0,
            "title": "Period Size Days",
            "description": "Histogram bucket size in days",
            "default": 7
          },
          "include_histogram_data": {
            "type": "boolean",
            "title": "Include Histogram Data",
            "description": "Include demand histogram per resource",
            "default": true
          },
          "include_leveling_candidates": {
            "type": "boolean",
            "title": "Include Leveling Candidates",
            "description": "Include leveling candidate tasks",
            "default": true
          },
          "include_critical_path_resources": {
            "type": "boolean",
            "title": "Include Critical Path Resources",
            "description": "Include CP resource section",
            "default": true
          },
          "include_resource_curves": {
            "type": "boolean",
            "title": "Include Resource Curves",
            "description": "Include cumulative resource curves",
            "default": false
          },
          "over_allocation_threshold": {
            "type": "number",
            "maximum": 3.0,
            "minimum": 0.5,
            "title": "Over Allocation Threshold",
            "description": "Multiplier of declared capacity (or 1.0/day default) that triggers over-allocation",
            "default": 1.0
          },
          "exclude_task_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Exclude Task Types",
            "description": "Task types to exclude from analysis (e.g. 'loe', 'summary')"
          },
          "fields": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fields",
            "description": "Response fields to include (sparse fieldset)"
          }
        },
        "type": "object",
        "title": "ResourceAnalysisOptions",
        "description": "Options controlling resource analysis behaviour."
      },
      "ResourceAnalysisRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Schedule tasks"
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "Schedule status date (ISO 8601 YYYY-MM-DD). When omitted, today's date is used as the resource loading window anchor."
          },
          "resource_availability": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/app__models__schemas__ResourceAvailability__2"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Availability",
            "description": "Optional declared resource capacities"
          },
          "options": {
            "$ref": "#/components/schemas/ResourceAnalysisOptions",
            "description": "Analysis options"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "ResourceAnalysisRequest",
        "description": "Request for POST /api/v1/forensics/resource-analysis."
      },
      "ResourceAnalysisSummary": {
        "properties": {
          "total_resources": {
            "type": "integer",
            "title": "Total Resources"
          },
          "over_allocated_resources": {
            "type": "integer",
            "title": "Over Allocated Resources"
          },
          "critical_path_resources": {
            "type": "integer",
            "title": "Critical Path Resources"
          },
          "resource_coverage_pct": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Resource Coverage Pct"
          },
          "loe_excluded_count": {
            "type": "integer",
            "title": "Loe Excluded Count"
          },
          "dcma_check_10_compliant": {
            "type": "boolean",
            "title": "Dcma Check 10 Compliant"
          },
          "dcma_check_10_details": {
            "type": "string",
            "title": "Dcma Check 10 Details"
          },
          "peak_demand_period": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Peak Demand Period"
          },
          "total_resource_days": {
            "type": "number",
            "title": "Total Resource Days"
          }
        },
        "type": "object",
        "required": [
          "total_resources",
          "over_allocated_resources",
          "critical_path_resources",
          "resource_coverage_pct",
          "loe_excluded_count",
          "dcma_check_10_compliant",
          "dcma_check_10_details",
          "total_resource_days"
        ],
        "title": "ResourceAnalysisSummary",
        "description": "High-level summary of resource analysis results."
      },
      "ResourceAvailability-Output": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "Resource name (must match tasks[*].resources)"
          },
          "available_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Available From",
            "description": "Start of availability window (ISO 8601). Null = project start."
          },
          "available_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Available To",
            "description": "End of availability window (ISO 8601). Null = project finish."
          },
          "units_per_day": {
            "type": "number",
            "minimum": 0.0,
            "title": "Units Per Day",
            "description": "Available resource-units per working day (default: 1.0 = 100%)",
            "default": 1.0
          }
        },
        "type": "object",
        "required": [
          "resource_name"
        ],
        "title": "ResourceAvailability",
        "description": "Per-resource availability window for Resource Analysis.\n\nSpecifies how many units of a resource are available over a date range.\nresource_name must match a value appearing in tasks[*].resources."
      },
      "ResourceCategoryResult": {
        "properties": {
          "total_changes": {
            "type": "integer",
            "title": "Total Changes",
            "default": 0
          },
          "material_changes": {
            "type": "integer",
            "title": "Material Changes",
            "default": 0
          },
          "resources_added": {
            "type": "integer",
            "title": "Resources Added",
            "default": 0
          },
          "resources_removed": {
            "type": "integer",
            "title": "Resources Removed",
            "default": 0
          },
          "changes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "title": "ResourceCategoryResult",
        "description": "Result for resource change category."
      },
      "ResourceDiff": {
        "properties": {
          "planned_resources": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Planned Resources"
          },
          "actual_resources": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Actual Resources"
          },
          "added_resources": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Added Resources"
          },
          "removed_resources": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Removed Resources"
          },
          "utilization_variance_pct": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object",
            "title": "Utilization Variance Pct"
          }
        },
        "type": "object",
        "title": "ResourceDiff",
        "description": "Resource allocation changes between as-planned and as-built."
      },
      "ResourceDimensionScore": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score",
            "default": 100.0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "complete"
          },
          "resources_assigned": {
            "type": "integer",
            "title": "Resources Assigned",
            "default": 0
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/ReadinessIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "title": "ResourceDimensionScore",
        "description": "Resource assignment readiness dimension result."
      },
      "ResourceProfile": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name"
          },
          "total_task_days": {
            "type": "number",
            "title": "Total Task Days"
          },
          "assigned_task_count": {
            "type": "integer",
            "title": "Assigned Task Count"
          },
          "on_critical_path": {
            "type": "boolean",
            "title": "On Critical Path"
          },
          "declared_capacity_per_day": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Declared Capacity Per Day"
          },
          "peak_demand_per_day": {
            "type": "number",
            "title": "Peak Demand Per Day"
          },
          "over_allocation_periods": {
            "items": {
              "$ref": "#/components/schemas/OverAllocationPeriod"
            },
            "type": "array",
            "title": "Over Allocation Periods"
          },
          "histogram": {
            "items": {
              "$ref": "#/components/schemas/HistogramBucket"
            },
            "type": "array",
            "title": "Histogram"
          },
          "cumulative_curve": {
            "items": {
              "$ref": "#/components/schemas/CumulativeCurveBucket"
            },
            "type": "array",
            "title": "Cumulative Curve"
          }
        },
        "type": "object",
        "required": [
          "resource_name",
          "total_task_days",
          "assigned_task_count",
          "on_critical_path",
          "peak_demand_per_day"
        ],
        "title": "ResourceProfile",
        "description": "Full demand profile for a single named resource."
      },
      "ResourceRiskComponents": {
        "properties": {
          "over_allocation_severity": {
            "type": "number",
            "title": "Over Allocation Severity"
          },
          "coverage_gap": {
            "type": "number",
            "title": "Coverage Gap"
          },
          "cp_resource_conflict": {
            "type": "number",
            "title": "Cp Resource Conflict"
          }
        },
        "type": "object",
        "required": [
          "over_allocation_severity",
          "coverage_gap",
          "cp_resource_conflict"
        ],
        "title": "ResourceRiskComponents",
        "description": "Component scores that make up the resource risk score."
      },
      "ResourceRiskScore": {
        "properties": {
          "score": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Score"
          },
          "grade": {
            "type": "string",
            "enum": [
              "A",
              "B",
              "C",
              "D",
              "F"
            ],
            "title": "Grade"
          },
          "components": {
            "$ref": "#/components/schemas/ResourceRiskComponents"
          },
          "explanation": {
            "type": "string",
            "title": "Explanation"
          }
        },
        "type": "object",
        "required": [
          "score",
          "grade",
          "components",
          "explanation"
        ],
        "title": "ResourceRiskScore",
        "description": "Composite resource risk score."
      },
      "ResourceRiskSubMetric": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "weight": {
            "type": "number",
            "title": "Weight"
          },
          "active": {
            "type": "boolean",
            "title": "Active"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "over_allocated_resources": {
            "type": "integer",
            "title": "Over Allocated Resources",
            "default": 0
          },
          "unresourced_task_pct": {
            "type": "number",
            "title": "Unresourced Task Pct",
            "default": 0.0
          },
          "cp_resource_conflict": {
            "type": "boolean",
            "title": "Cp Resource Conflict",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight",
          "active"
        ],
        "title": "ResourceRiskSubMetric",
        "description": "Resource Risk sub-metric result."
      },
      "ResponseMetadata": {
        "properties": {
          "task_count": {
            "type": "integer",
            "title": "Task Count",
            "description": "Number of tasks in the submitted schedule"
          },
          "processing_time_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Processing Time Ms",
            "description": "Wall-clock processing time in milliseconds"
          },
          "api_version": {
            "type": "string",
            "title": "Api Version",
            "description": "API version that produced this response",
            "default": "v0.2.0"
          },
          "endpoint": {
            "type": "string",
            "title": "Endpoint",
            "description": "Endpoint path e.g. /api/v1/health/score"
          },
          "standards_applied": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Standards Applied",
            "description": "Standards consulted during analysis e.g. ['DCMA PAM 200.1', 'GAO BP-2']"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence",
            "description": "Confidence in the result (0\u20131). Present on scoring endpoints."
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "ISO date used as analysis reference point. Present on time-aware analyses."
          }
        },
        "type": "object",
        "required": [
          "task_count",
          "endpoint"
        ],
        "title": "ResponseMetadata",
        "description": "Audit trail and processing context \u2014 always present, never null."
      },
      "ResponseStatus": {
        "type": "string",
        "enum": [
          "pass",
          "fail",
          "warning",
          "info"
        ],
        "title": "ResponseStatus",
        "description": "Top-level result status \u2014 always present in every response."
      },
      "RetypedRelationship": {
        "properties": {
          "predecessor_id": {
            "type": "string",
            "title": "Predecessor Id"
          },
          "successor_id": {
            "type": "string",
            "title": "Successor Id"
          },
          "baseline_type": {
            "type": "string",
            "title": "Baseline Type"
          },
          "current_type": {
            "type": "string",
            "title": "Current Type"
          }
        },
        "type": "object",
        "required": [
          "predecessor_id",
          "successor_id",
          "baseline_type",
          "current_type"
        ],
        "title": "RetypedRelationship",
        "description": "A dependency whose type changed."
      },
      "RiskDriver": {
        "properties": {
          "rank": {
            "type": "integer",
            "title": "Rank"
          },
          "driver_type": {
            "type": "string",
            "title": "Driver Type"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "task_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Name"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "contributing_sub_metrics": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Contributing Sub Metrics"
          },
          "score_contribution": {
            "type": "number",
            "title": "Score Contribution"
          },
          "severity": {
            "type": "string",
            "title": "Severity"
          },
          "on_critical_path": {
            "type": "boolean",
            "title": "On Critical Path",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "rank",
          "driver_type",
          "description",
          "score_contribution",
          "severity"
        ],
        "title": "RiskDriver",
        "description": "A top risk driver contributing to the SRI score."
      },
      "RiskIndicator": {
        "properties": {
          "indicator": {
            "type": "string",
            "title": "Indicator"
          },
          "count": {
            "type": "integer",
            "title": "Count"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Severity"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation"
          }
        },
        "type": "object",
        "required": [
          "indicator",
          "count",
          "severity",
          "recommendation"
        ],
        "title": "RiskIndicator",
        "description": "A risk indicator flagged during trend analysis."
      },
      "SRIRecommendation": {
        "properties": {
          "priority": {
            "type": "string",
            "title": "Priority"
          },
          "action": {
            "type": "string",
            "title": "Action"
          },
          "target_sub_metric": {
            "type": "string",
            "title": "Target Sub Metric"
          },
          "expected_score_reduction": {
            "type": "number",
            "title": "Expected Score Reduction"
          },
          "standards_citation": {
            "type": "string",
            "title": "Standards Citation"
          }
        },
        "type": "object",
        "required": [
          "priority",
          "action",
          "target_sub_metric",
          "expected_score_reduction",
          "standards_citation"
        ],
        "title": "SRIRecommendation",
        "description": "Prioritized SRI risk mitigation recommendation."
      },
      "SRIScore": {
        "properties": {
          "score": {
            "type": "number",
            "title": "Score"
          },
          "grade": {
            "type": "string",
            "title": "Grade"
          },
          "risk_level": {
            "type": "string",
            "title": "Risk Level"
          },
          "trend": {
            "type": "string",
            "title": "Trend",
            "default": "insufficient_data"
          },
          "confidence": {
            "type": "number",
            "title": "Confidence"
          },
          "data_completeness_pct": {
            "type": "number",
            "title": "Data Completeness Pct"
          }
        },
        "type": "object",
        "required": [
          "score",
          "grade",
          "risk_level",
          "confidence",
          "data_completeness_pct"
        ],
        "title": "SRIScore",
        "description": "Top-level SRI composite score."
      },
      "SRISubMetrics": {
        "properties": {
          "float_risk": {
            "$ref": "#/components/schemas/FloatRiskSubMetric"
          },
          "logic_risk": {
            "$ref": "#/components/schemas/LogicRiskSubMetric"
          },
          "baseline_drift_risk": {
            "$ref": "#/components/schemas/BaselineDriftSubMetric"
          },
          "progress_integrity_risk": {
            "$ref": "#/components/schemas/ProgressIntegritySubMetric"
          },
          "resource_risk": {
            "$ref": "#/components/schemas/ResourceRiskSubMetric"
          }
        },
        "type": "object",
        "required": [
          "float_risk",
          "logic_risk",
          "baseline_drift_risk",
          "progress_integrity_risk",
          "resource_risk"
        ],
        "title": "SRISubMetrics",
        "description": "All five SRI sub-metric results."
      },
      "ScheduleHistorySnapshot": {
        "properties": {
          "snapshot_date": {
            "type": "string",
            "title": "Snapshot Date",
            "description": "Snapshot date (ISO 8601)"
          },
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Task list at snapshot time"
          }
        },
        "type": "object",
        "required": [
          "snapshot_date"
        ],
        "title": "ScheduleHistorySnapshot",
        "description": "A historical snapshot of schedule tasks for retroactive date change detection."
      },
      "ScheduleInput": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks",
            "description": "List of tasks in the schedule"
          },
          "include_details": {
            "type": "boolean",
            "title": "Include Details",
            "description": "Include detailed task-level diagnostics and actionable recommendations",
            "default": false
          },
          "use_ml_scoring": {
            "type": "boolean",
            "title": "Use Ml Scoring",
            "description": "Use ML ensemble model for score aggregation with SHAP explainability (Professional+ tiers only)",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "ScheduleInput",
        "description": "Input model for schedule health scoring request.\n\nTask limit validation:\n- Uses settings.task_limit_sync (default 1000) for synchronous processing\n- Tier-based limits enforced by TierValidationMiddleware",
        "example": {
          "tasks": [
            {
              "duration_days": 10,
              "id": "T1",
              "percent_complete": 0,
              "planned_finish": "2025-01-15",
              "planned_start": "2025-01-01",
              "predecessors": []
            },
            {
              "duration_days": 15,
              "id": "T2",
              "percent_complete": 0,
              "planned_finish": "2025-02-05",
              "planned_start": "2025-01-16",
              "predecessors": [
                "T1"
              ]
            }
          ]
        }
      },
      "ScheduleRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "maxItems": 100000,
            "title": "Tasks",
            "description": "List of tasks in the schedule"
          },
          "start_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Start Task Ids",
            "description": "Task IDs that anchor the project start (DCMA Check #1). If empty, tasks with no predecessors are treated as start tasks."
          },
          "finish_task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finish Task Ids",
            "description": "Task IDs that anchor the project finish (DCMA Check #1). If empty, tasks with no successors are treated as finish tasks."
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "Data date / status date for progress validation (ISO 8601 YYYY-MM-DD)"
          },
          "target_finish_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Finish Date",
            "description": "Target project finish date or key milestone date for CPLI calculation (ISO 8601)"
          },
          "baseline_approved_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Approved Date",
            "description": "Date when baseline was approved (for governance tracking)"
          },
          "resource_availability": {
            "items": {
              "$ref": "#/components/schemas/app__models__schemas__ResourceAvailability__1"
            },
            "type": "array",
            "title": "Resource Availability",
            "description": "Per-resource availability for over-allocation detection (Resource Analysis API)."
          },
          "options": {
            "$ref": "#/components/schemas/ValidationOptions",
            "description": "Validation options including Probability of Performance (v0.2.0)."
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "ScheduleRequest",
        "description": "Request model for schedule analysis.\n\nThis is the base schedule payload used across all Tier 1 and Tier 2 APIs.\nAdditional Tier 2-specific fields enable full DCMA 14-Point compliance.",
        "example": {
          "tasks": [
            {
              "duration_days": 5,
              "id": "T1",
              "name": "Design",
              "predecessors": []
            },
            {
              "duration_days": 10,
              "id": "T2",
              "name": "Development",
              "predecessors": [
                "T1"
              ]
            },
            {
              "duration_days": 5,
              "id": "T3",
              "name": "Testing",
              "predecessors": [
                "T2"
              ]
            }
          ]
        }
      },
      "ScheduleRiskIndexData": {
        "properties": {
          "schedule_risk_index": {
            "$ref": "#/components/schemas/SRIScore"
          },
          "sub_metrics": {
            "$ref": "#/components/schemas/SRISubMetrics"
          },
          "risk_drivers": {
            "items": {
              "$ref": "#/components/schemas/RiskDriver"
            },
            "type": "array",
            "title": "Risk Drivers"
          },
          "recommendations": {
            "items": {
              "$ref": "#/components/schemas/SRIRecommendation"
            },
            "type": "array",
            "title": "Recommendations"
          },
          "sub_metric_details": {
            "additionalProperties": true,
            "type": "object",
            "title": "Sub Metric Details"
          },
          "processing_metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Processing Metadata"
          }
        },
        "type": "object",
        "required": [
          "schedule_risk_index",
          "sub_metrics"
        ],
        "title": "ScheduleRiskIndexData",
        "description": "Data payload for POST /api/v1/forensics/schedule-risk-index."
      },
      "ScheduleRiskIndexOptions": {
        "properties": {
          "sub_metrics": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "title": "Sub Metrics",
            "default": "auto"
          },
          "include_risk_drivers": {
            "type": "boolean",
            "title": "Include Risk Drivers",
            "default": true
          },
          "include_recommendations": {
            "type": "boolean",
            "title": "Include Recommendations",
            "default": true
          },
          "include_sub_metric_details": {
            "type": "boolean",
            "title": "Include Sub Metric Details",
            "default": false
          },
          "exclude_task_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Exclude Task Types"
          },
          "baseline_weight_override": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SubMetricWeights"
              },
              {
                "type": "null"
              }
            ]
          },
          "near_critical_float_threshold": {
            "type": "number",
            "minimum": 0.0,
            "title": "Near Critical Float Threshold",
            "default": 5.0
          },
          "fields": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fields"
          }
        },
        "type": "object",
        "title": "ScheduleRiskIndexOptions",
        "description": "Options for POST /api/v1/forensics/schedule-risk-index."
      },
      "ScheduleRiskIndexRequest": {
        "properties": {
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/Task"
            },
            "type": "array",
            "title": "Tasks"
          },
          "status_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Date",
            "description": "Project data date (ISO 8601, e.g. '2026-03-17'). When omitted, Progress Integrity Risk is skipped and Baseline Drift Risk runs in degraded mode. Float Risk and Logic Risk remain fully active."
          },
          "options": {
            "$ref": "#/components/schemas/ScheduleRiskIndexOptions"
          }
        },
        "type": "object",
        "required": [
          "tasks"
        ],
        "title": "ScheduleRiskIndexRequest",
        "description": "Request for POST /api/v1/forensics/schedule-risk-index."
      },
      "ScoreComponent": {
        "properties": {
          "score": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Score",
            "description": "Dimension score 0\u2013100"
          },
          "weight": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Weight",
            "description": "Contribution weight (all weights sum to 1.0)"
          },
          "label": {
            "type": "string",
            "title": "Label",
            "description": "Human-readable dimension name"
          },
          "detail": {
            "additionalProperties": true,
            "type": "object",
            "title": "Detail",
            "description": "Computed inputs that drove this score \u2014 the defensible justification layer"
          }
        },
        "type": "object",
        "required": [
          "score",
          "weight",
          "label"
        ],
        "title": "ScoreComponent",
        "description": "One named dimension in a breakdown dict.\n\nThe `detail` field carries the computed inputs that drove this score \u2014\ncounts, percentages, threshold values, standard references.  It is\nintentionally open so each dimension can surface whatever is relevant\nwithout a fixed sub-schema."
      },
      "SimulationEnvelope": {
        "properties": {
          "method": {
            "type": "string",
            "title": "Method",
            "description": "Simulation method: monte_carlo | latin_hypercube"
          },
          "trial_count": {
            "type": "integer",
            "title": "Trial Count"
          },
          "duration_days": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PercentileResult"
              },
              {
                "type": "null"
              }
            ]
          },
          "cost": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PercentileResult"
              },
              {
                "type": "null"
              }
            ]
          },
          "completion_date": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completion Date",
            "description": "Map of p-value strings to ISO completion dates e.g. {'p50': '2027-04-15'}"
          }
        },
        "type": "object",
        "required": [
          "method",
          "trial_count"
        ],
        "title": "SimulationEnvelope",
        "description": "Probabilistic simulation outputs for Tier 3 endpoints.\n\nNull on all Tier 1 and Tier 2 responses.  When Tier 3 launches, this\nfield transitions from null to populated without changing any other\nenvelope field \u2014 existing consumers are unaffected."
      },
      "SubMetricWeights": {
        "properties": {
          "float_risk": {
            "type": "number",
            "title": "Float Risk",
            "default": 0.3
          },
          "logic_risk": {
            "type": "number",
            "title": "Logic Risk",
            "default": 0.25
          },
          "baseline_drift_risk": {
            "type": "number",
            "title": "Baseline Drift Risk",
            "default": 0.2
          },
          "progress_integrity_risk": {
            "type": "number",
            "title": "Progress Integrity Risk",
            "default": 0.15
          },
          "resource_risk": {
            "type": "number",
            "title": "Resource Risk",
            "default": 0.1
          }
        },
        "type": "object",
        "title": "SubMetricWeights",
        "description": "Custom weight overrides for SRI sub-metrics (must sum to 1.0)."
      },
      "SystemicIssue": {
        "properties": {
          "issue": {
            "type": "string",
            "title": "Issue"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "affected_tasks": {
            "type": "integer",
            "title": "Affected Tasks"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation"
          }
        },
        "type": "object",
        "required": [
          "issue",
          "description",
          "affected_tasks",
          "recommendation"
        ],
        "title": "SystemicIssue",
        "description": "A systemic cross-band issue."
      },
      "Task": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique task identifier"
          },
          "duration_days": {
            "type": "number",
            "minimum": 0.0,
            "title": "Duration Days",
            "description": "Task duration in days",
            "default": 0
          },
          "predecessors": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "additionalProperties": true,
                  "type": "object"
                },
                {
                  "$ref": "#/components/schemas/DependencyLink"
                }
              ]
            },
            "type": "array",
            "title": "Predecessors",
            "description": "List of predecessor task IDs or dependency links. Supports: 'T1', 'T1FS+5 d', 'T2SS-2 d', or DependencyLink objects"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Task name"
          },
          "resource": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource",
            "description": "Resource assigned to task"
          },
          "resources": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Resources",
            "description": "List of resources assigned (for multi-resource tasks)"
          },
          "percent_complete": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Percent Complete",
            "description": "Percent complete (0-100)",
            "default": 0
          },
          "physical_percent_complete": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Physical Percent Complete",
            "description": "Physical percent complete (0-100). Manual EVM entry by scheduler (MSP PhysicalPercentComplete). Authoritative for BCWP calculations. Captured separately from percent_complete on MSP imports."
          },
          "planned_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Start",
            "description": "Planned start date (ISO 8601)"
          },
          "planned_finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Finish",
            "description": "Planned finish date (ISO 8601)"
          },
          "actual_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Start",
            "description": "Actual start date (ISO 8601)"
          },
          "actual_finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Finish",
            "description": "Actual finish date (ISO 8601)"
          },
          "baseline_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Start",
            "description": "Baseline start date (ISO 8601)"
          },
          "baseline_finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Finish",
            "description": "Baseline finish date (ISO 8601)"
          },
          "constraint_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Constraint Type",
            "description": "Constraint type: ASAP, ALAP, SNET, SNLT, FNET, FNLT, MSO, MFO"
          },
          "constraint_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Constraint Date",
            "description": "Constraint date if applicable (ISO 8601)"
          },
          "task_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Type",
            "description": "Task type classification. Valid values: task (default), milestone, loe, summary, schedule_margin, planning_package, slpp, schedule_visibility. Drives DCMA check exclusions per PAM 200.1 \u00a7 3.2."
          },
          "wbs_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ],
            "title": "Wbs Code",
            "description": "WBS code (e.g., '1.2.3')"
          },
          "organization_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organization Code",
            "description": "Org/dept identifier for anomaly categorization (Progress Audit)"
          },
          "custom_field_map": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Field Map",
            "description": "All WBS/OBS-pattern custom fields discovered in this MS Project file, keyed by alias (e.g., 'CWBS', 'OBS'). Null for XER imports or when no matching aliases exist."
          },
          "forecast_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forecast Start",
            "description": "Current forecast start date (ISO 8601)"
          },
          "forecast_finish": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forecast Finish",
            "description": "Current forecast finish date (ISO 8601)"
          },
          "total_float_days": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Float Days",
            "description": "Pre-computed total float in days. Auto-computed by CPM if absent."
          },
          "baseline_duration_days": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Baseline Duration Days",
            "description": "Baseline duration in days. Auto-computed from baseline dates if absent."
          },
          "delay_category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delay Category",
            "description": "Delay attribution category. Valid values: owner, contractor, design, procurement, weather, force_majeure."
          },
          "earned_value": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Earned Value",
            "description": "Earned Value (BCWP) in cost units. Requires options.include_ev_validation."
          },
          "budgeted_cost": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Budgeted Cost",
            "description": "Budgeted Cost of Work Scheduled (BCWS) in cost units."
          },
          "approval_required": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approval Required",
            "description": "Whether this task requires explicit approval before it can start."
          },
          "approval_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approval Status",
            "description": "Approval workflow state. Valid values: not_required, pending, approved, rejected."
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "Task",
        "description": "Unified task model for all schedule analysis endpoints.\n\nThis model is used across all Tier 1 and Tier 2 APIs. Fields are optional\nunless specifically required by an endpoint.\n\nField Naming Rationale:\n- duration_days: Explicit time unit (vs generic \"duration\")\n- predecessors: Standard scheduling terminology (vs generic \"dependencies\")\n\nDependency Format Support:\n- Simple: [\"task1\", \"task2\"]\n- Rich: [\"task1FS+5 d\", \"task2SS-2 d\"]\n- Objects: [DependencyLink(...), ...]",
        "example": {
          "duration_days": 10,
          "id": "T1",
          "name": "Design Phase",
          "percent_complete": 0,
          "planned_finish": "2026-01-15",
          "planned_start": "2026-01-01",
          "predecessors": [],
          "resource": "Team A"
        }
      },
      "TaskComparison": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "match_confidence": {
            "type": "number",
            "title": "Match Confidence",
            "default": 1.0
          },
          "planned_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Start"
          },
          "planned_finish": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Finish"
          },
          "planned_duration_days": {
            "type": "integer",
            "title": "Planned Duration Days",
            "default": 0
          },
          "actual_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Start"
          },
          "actual_finish": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual Finish"
          },
          "actual_duration_days": {
            "type": "integer",
            "title": "Actual Duration Days",
            "default": 0
          },
          "start_variance_days": {
            "type": "integer",
            "title": "Start Variance Days",
            "default": 0
          },
          "finish_variance_days": {
            "type": "integer",
            "title": "Finish Variance Days",
            "default": 0
          },
          "duration_variance_days": {
            "type": "integer",
            "title": "Duration Variance Days",
            "default": 0
          },
          "variance_classification": {
            "type": "string",
            "enum": [
              "early_completion",
              "on_time",
              "minor_slip",
              "moderate_slip",
              "severe_slip",
              "incomplete"
            ],
            "title": "Variance Classification",
            "default": "on_time"
          },
          "on_planned_critical_path": {
            "type": "boolean",
            "title": "On Planned Critical Path",
            "default": false
          },
          "on_actual_critical_path": {
            "type": "boolean",
            "title": "On Actual Critical Path",
            "default": false
          },
          "critical_path_status": {
            "type": "string",
            "enum": [
              "maintained",
              "gained_criticality",
              "lost_criticality",
              "not_critical"
            ],
            "title": "Critical Path Status",
            "default": "not_critical"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name"
        ],
        "title": "TaskComparison",
        "description": "Per-task as-planned vs. as-built comparison."
      },
      "TaskPrerequisites": {
        "properties": {
          "logic": {
            "$ref": "#/components/schemas/LogicDimensionScore"
          },
          "resources": {
            "$ref": "#/components/schemas/ResourceDimensionScore"
          },
          "approvals": {
            "$ref": "#/components/schemas/ApprovalDimensionScore"
          },
          "float": {
            "$ref": "#/components/schemas/FloatDimensionScore"
          },
          "forecast_stability": {
            "$ref": "#/components/schemas/ForecastStabilityScore"
          }
        },
        "type": "object",
        "title": "TaskPrerequisites",
        "description": "All five readiness dimension scores for a task."
      },
      "TaskTiming": {
        "properties": {
          "early_start": {
            "type": "number",
            "title": "Early Start",
            "description": "Early start time"
          },
          "early_finish": {
            "type": "number",
            "title": "Early Finish",
            "description": "Early finish time"
          },
          "late_start": {
            "type": "number",
            "title": "Late Start",
            "description": "Late start time"
          },
          "late_finish": {
            "type": "number",
            "title": "Late Finish",
            "description": "Late finish time"
          },
          "total_float": {
            "type": "number",
            "title": "Total Float",
            "description": "Total float (slack)"
          },
          "free_float": {
            "type": "number",
            "title": "Free Float",
            "description": "Free float"
          },
          "is_critical": {
            "type": "boolean",
            "title": "Is Critical",
            "description": "Whether task is on critical path"
          },
          "criticality_index": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Criticality Index",
            "description": "Criticality index (0-1)"
          }
        },
        "type": "object",
        "required": [
          "early_start",
          "early_finish",
          "late_start",
          "late_finish",
          "total_float",
          "free_float",
          "is_critical",
          "criticality_index"
        ],
        "title": "TaskTiming",
        "description": "Task timing information from CPM calculation."
      },
      "TaskVarianceRecord": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "is_critical_path": {
            "type": "boolean",
            "title": "Is Critical Path",
            "default": false
          },
          "start_variance_days": {
            "type": "integer",
            "title": "Start Variance Days",
            "default": 0
          },
          "finish_variance_days": {
            "type": "integer",
            "title": "Finish Variance Days",
            "default": 0
          },
          "duration_variance_days": {
            "type": "integer",
            "title": "Duration Variance Days",
            "default": 0
          },
          "progress_variance_pct": {
            "type": "number",
            "title": "Progress Variance Pct",
            "default": 0.0
          },
          "variance_severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Variance Severity",
            "default": "low"
          },
          "oos_impact_days": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Oos Impact Days"
          },
          "fuzzy_match_confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fuzzy Match Confidence"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name"
        ],
        "title": "TaskVarianceRecord",
        "description": "Per-task variance metrics."
      },
      "TierCapabilities": {
        "properties": {
          "tier1": {
            "type": "boolean",
            "title": "Tier1",
            "description": "Access to Tier 1 APIs: Health, CPM, Validation."
          },
          "forensics": {
            "type": "boolean",
            "title": "Forensics",
            "description": "Access to Tier 2 forensics: Logic Audit, Progress Audit, DCMA 14-Point, DCMA DECM, Resource Analysis."
          },
          "import": {
            "type": "boolean",
            "title": "Import",
            "description": "Access to Import APIs: MPP and XER file parsing."
          },
          "risk": {
            "type": "boolean",
            "title": "Risk",
            "description": "Access to Tier 3 Risk & Simulation APIs (v0.3.0+)."
          },
          "async": {
            "type": "boolean",
            "title": "Async",
            "description": "Async job submission available. True for Starter and above."
          },
          "webhooks": {
            "type": "boolean",
            "title": "Webhooks",
            "description": "Webhook callback registration supported. Same tier gate as async."
          },
          "sandbox_fixture_requests": {
            "type": "boolean",
            "title": "Sandbox Fixture Requests",
            "description": "Sandbox fixture request system available. False for Demo tier only."
          }
        },
        "type": "object",
        "required": [
          "tier1",
          "forensics",
          "import",
          "risk",
          "async",
          "webhooks",
          "sandbox_fixture_requests"
        ],
        "title": "TierCapabilities",
        "description": "Boolean feature flags for dashboard gating.\n\nThe 'async' and 'import' JSON keys are Python reserved words.\nThey are declared as 'async_jobs' and 'import_api' with serialization_alias\nset so the JSON output uses the correct names ('async' and 'import').\nConstruct from Python using async_jobs=True and import_api=True.\n\nAttributes:\n    tier1: Access to Tier 1 APIs: Health Score, CPM, Validation.\n    forensics: Access to Tier 2 forensics endpoints.\n    import_api: Access to Import APIs (MPP, XER). JSON key: \"import\".\n    risk: Access to Tier 3 Risk & Simulation APIs (v0.3.0+).\n    async_jobs: Async job submission available (Starter+). JSON key: \"async\".\n    webhooks: Webhook callback registration supported.\n    sandbox_fixture_requests: Sandbox fixture system available."
      },
      "TierLimits": {
        "properties": {
          "sync_task_limit": {
            "type": "integer",
            "title": "Sync Task Limit",
            "description": "Maximum tasks per synchronous request. Always 1,000 for all tiers."
          },
          "max_task_limit": {
            "type": "integer",
            "title": "Max Task Limit",
            "description": "Maximum tasks per request across sync + async combined. Tier-dependent."
          },
          "payload_limit_mb": {
            "type": "integer",
            "title": "Payload Limit Mb",
            "description": "Maximum request payload size in MB."
          },
          "api_calls_per_month": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Api Calls Per Month",
            "description": "Monthly API call quota. Null for unlimited tiers (Enterprise, Government)."
          },
          "monthly_calls_remaining": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Monthly Calls Remaining",
            "description": "Remaining calls this billing month. Null if Redis unavailable or tier is unlimited."
          }
        },
        "type": "object",
        "required": [
          "sync_task_limit",
          "max_task_limit",
          "payload_limit_mb"
        ],
        "title": "TierLimits",
        "description": "Numeric limits for the authenticated tier.\n\nAttributes:\n    sync_task_limit: Maximum tasks per synchronous request. Always 1,000.\n    max_task_limit: Maximum tasks per request across sync + async combined.\n    payload_limit_mb: Maximum request payload size in megabytes.\n    api_calls_per_month: Monthly API call quota. Null for unlimited tiers.\n    monthly_calls_remaining: Remaining calls this month from Redis.\n        Null if Redis unavailable or tier is unlimited."
      },
      "TopRisk": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "risk_description": {
            "type": "string",
            "title": "Risk Description"
          },
          "days_until_start": {
            "type": "integer",
            "title": "Days Until Start"
          },
          "readiness_score": {
            "type": "number",
            "title": "Readiness Score"
          },
          "impact": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Impact"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "risk_description",
          "days_until_start",
          "readiness_score",
          "impact"
        ],
        "title": "TopRisk",
        "description": "Summary of a top at-risk task within a band."
      },
      "TrendIndicators": {
        "properties": {
          "variance_trend": {
            "type": "string",
            "enum": [
              "improving",
              "stable",
              "declining"
            ],
            "title": "Variance Trend",
            "default": "stable"
          },
          "bei_trend": {
            "type": "string",
            "enum": [
              "improving",
              "stable",
              "declining"
            ],
            "title": "Bei Trend",
            "default": "stable"
          },
          "spi_trend": {
            "type": "string",
            "enum": [
              "improving",
              "stable",
              "declining"
            ],
            "title": "Spi Trend",
            "default": "stable"
          },
          "variance_acceleration": {
            "type": "number",
            "title": "Variance Acceleration",
            "default": 0.0
          },
          "projected_completion_variance": {
            "type": "number",
            "title": "Projected Completion Variance",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "TrendIndicators",
        "description": "Aggregate trend direction for variance/BEI/SPI."
      },
      "TrendPattern": {
        "properties": {
          "pattern": {
            "type": "string",
            "title": "Pattern"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "affected_tasks": {
            "type": "integer",
            "title": "Affected Tasks"
          },
          "first_detected": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "First Detected"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Severity"
          }
        },
        "type": "object",
        "required": [
          "pattern",
          "description",
          "affected_tasks",
          "severity"
        ],
        "title": "TrendPattern",
        "description": "An identified systemic trend pattern."
      },
      "UnmatchedBuiltTask": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "actual_start": {
            "type": "string",
            "title": "Actual Start",
            "default": ""
          },
          "actual_finish": {
            "type": "string",
            "title": "Actual Finish",
            "default": ""
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "default": "added_during_execution"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name"
        ],
        "title": "UnmatchedBuiltTask",
        "description": "An as-built task with no as-planned counterpart."
      },
      "UnmatchedPlannedTask": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "planned_start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Start"
          },
          "planned_finish": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned Finish"
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "default": "not_executed"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name"
        ],
        "title": "UnmatchedPlannedTask",
        "description": "An as-planned task with no as-built counterpart."
      },
      "UnresourcedTask": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "duration_days": {
            "type": "number",
            "title": "Duration Days"
          },
          "on_critical_path": {
            "type": "boolean",
            "title": "On Critical Path"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name",
          "duration_days",
          "on_critical_path"
        ],
        "title": "UnresourcedTask",
        "description": "A task with no resource assignment."
      },
      "ValidationData": {
        "properties": {
          "valid": {
            "type": "boolean",
            "title": "Valid",
            "description": "Whether the schedule is valid"
          },
          "errors": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Errors",
            "description": "List of validation errors"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings",
            "description": "List of validation warnings"
          },
          "probability_of_performance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProbabilityOfPerformance"
              },
              {
                "type": "null"
              }
            ],
            "description": "Probability of Performance (present when calculate_pop=true)"
          }
        },
        "type": "object",
        "required": [
          "valid"
        ],
        "title": "ValidationData",
        "description": "Data payload for POST /api/v1/schedule/validate."
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "ValidationOptions": {
        "properties": {
          "calculate_pop": {
            "type": "boolean",
            "title": "Calculate Pop",
            "description": "Calculate Probability of Performance (PoP) score (v0.2.0).",
            "default": false
          },
          "include_pop_details": {
            "type": "boolean",
            "title": "Include Pop Details",
            "description": "Include dimensional PoP breakdown in response.",
            "default": true
          },
          "strict_mode": {
            "type": "boolean",
            "title": "Strict Mode",
            "description": "Treat warnings as errors (fail validation on any issue).",
            "default": false
          },
          "check_dcma_compliance": {
            "type": "boolean",
            "title": "Check Dcma Compliance",
            "description": "Include DCMA-specific checks (#1, #8).",
            "default": true
          }
        },
        "type": "object",
        "title": "ValidationOptions",
        "description": "Options for POST /api/v1/schedule/validate (v0.2.0)."
      },
      "VarianceFinding": {
        "properties": {
          "finding_type": {
            "type": "string",
            "title": "Finding Type"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "title": "Severity"
          },
          "affected_tasks": {
            "type": "integer",
            "title": "Affected Tasks",
            "default": 0
          },
          "total_variance_days": {
            "type": "number",
            "title": "Total Variance Days",
            "default": 0.0
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tasks"
          }
        },
        "type": "object",
        "required": [
          "finding_type",
          "severity"
        ],
        "title": "VarianceFinding",
        "description": "A significant variance pattern finding."
      },
      "VariancePattern": {
        "properties": {
          "pattern_type": {
            "type": "string",
            "title": "Pattern Type"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "confidence": {
            "type": "number",
            "title": "Confidence",
            "default": 0.0
          }
        },
        "type": "object",
        "required": [
          "pattern_type"
        ],
        "title": "VariancePattern",
        "description": "Identified variance pattern."
      },
      "VarianceTrendPeriod": {
        "properties": {
          "period_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Period Date"
          },
          "total_variance_days": {
            "type": "number",
            "title": "Total Variance Days",
            "default": 0.0
          },
          "bei": {
            "type": "number",
            "title": "Bei",
            "default": 1.0
          },
          "spi_schedule": {
            "type": "number",
            "title": "Spi Schedule",
            "default": 1.0
          },
          "critical_path_variance_days": {
            "type": "number",
            "title": "Critical Path Variance Days",
            "default": 0.0
          }
        },
        "type": "object",
        "title": "VarianceTrendPeriod",
        "description": "Variance metrics for a single historical period."
      },
      "VarianceTrends": {
        "properties": {
          "periods": {
            "items": {
              "$ref": "#/components/schemas/VarianceTrendPeriod"
            },
            "type": "array",
            "title": "Periods"
          },
          "trend_indicators": {
            "$ref": "#/components/schemas/TrendIndicators"
          },
          "identified_patterns": {
            "items": {
              "$ref": "#/components/schemas/VariancePattern"
            },
            "type": "array",
            "title": "Identified Patterns"
          },
          "chart_data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BaselineChartData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "title": "VarianceTrends",
        "description": "Multi-period variance trend analysis."
      },
      "WebhookRegistration": {
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2083,
            "minLength": 1,
            "format": "uri",
            "title": "Url",
            "description": "Webhook callback URL"
          },
          "events": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Events",
            "description": "Events to trigger webhook"
          },
          "secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret",
            "description": "Shared secret for webhook signature validation"
          }
        },
        "type": "object",
        "required": [
          "url"
        ],
        "title": "WebhookRegistration",
        "description": "Model for webhook callback registration.",
        "example": {
          "events": [
            "job.completed",
            "job.failed"
          ],
          "secret": "whsec_abc123",
          "url": "https://customer.example.com/webhooks/bellator"
        }
      },
      "XerImportOptions": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Select a specific project from a multi-project XER. Required if XER contains more than one project."
          },
          "strict_validation": {
            "type": "boolean",
            "title": "Strict Validation",
            "default": true
          },
          "auto_detect_start_finish": {
            "type": "boolean",
            "title": "Auto Detect Start Finish",
            "default": true
          },
          "auto_classify_task_types": {
            "type": "boolean",
            "title": "Auto Classify Task Types",
            "default": true
          },
          "use_prefix_classification": {
            "type": "boolean",
            "title": "Use Prefix Classification",
            "description": "Detect task type from name prefix (e.g., 'SM-Buffer', 'PP-FuturePh3', 'AE-Engineering'). Fires only when native P6 task_type is not already set. See Import API Common Patterns \u00a7 Prefix Classification.",
            "default": true
          },
          "include_warnings": {
            "type": "boolean",
            "title": "Include Warnings",
            "default": true
          },
          "use_activity_id": {
            "type": "boolean",
            "title": "Use Activity Id",
            "description": "Use task_code (Activity ID) as task id instead of numeric task_id.",
            "default": false
          }
        },
        "type": "object",
        "title": "XerImportOptions",
        "description": "Options controlling P6 XER import behavior."
      },
      "XerImportRequest": {
        "properties": {
          "file_content": {
            "type": "string",
            "title": "File Content",
            "description": "P6 XER file content (text, any encoding \u2014 auto-detected)"
          },
          "options": {
            "$ref": "#/components/schemas/XerImportOptions"
          }
        },
        "type": "object",
        "required": [
          "file_content"
        ],
        "title": "XerImportRequest",
        "description": "Request model for POST /api/v1/import/xer."
      },
      "app__api__v1__schedule_analysis__cpm__ProcessingMetadata": {
        "properties": {
          "processing_time_ms": {
            "type": "number",
            "title": "Processing Time Ms",
            "description": "Processing time in milliseconds"
          },
          "algorithm_version": {
            "type": "string",
            "title": "Algorithm Version",
            "description": "CPM algorithm version"
          }
        },
        "type": "object",
        "required": [
          "processing_time_ms",
          "algorithm_version"
        ],
        "title": "ProcessingMetadata",
        "description": "Processing metadata."
      },
      "app__models__schemas__ProcessingMetadata": {
        "properties": {
          "import_timestamp": {
            "type": "string",
            "title": "Import Timestamp",
            "description": "ISO 8601 timestamp"
          },
          "processing_time_ms": {
            "type": "number",
            "minimum": 0.0,
            "title": "Processing Time Ms"
          },
          "api_version": {
            "type": "string",
            "title": "Api Version",
            "default": "v0.2.0"
          },
          "parser_version": {
            "type": "string",
            "title": "Parser Version"
          }
        },
        "type": "object",
        "required": [
          "import_timestamp",
          "processing_time_ms",
          "parser_version"
        ],
        "title": "ProcessingMetadata",
        "description": "Timing and version metadata for an import operation."
      },
      "app__models__schemas__ProgressAnomaly__1": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "task_name": {
            "type": "string",
            "title": "Task Name"
          },
          "anomaly_type": {
            "type": "string",
            "title": "Anomaly Type"
          },
          "snapshot_date": {
            "type": "string",
            "title": "Snapshot Date"
          },
          "previous_pct": {
            "type": "number",
            "title": "Previous Pct"
          },
          "current_pct": {
            "type": "number",
            "title": "Current Pct"
          },
          "delta_pct": {
            "type": "number",
            "title": "Delta Pct"
          },
          "is_material": {
            "type": "boolean",
            "title": "Is Material",
            "default": true
          },
          "explanation": {
            "type": "string",
            "title": "Explanation"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "task_name",
          "anomaly_type",
          "snapshot_date",
          "previous_pct",
          "current_pct",
          "delta_pct",
          "explanation"
        ],
        "title": "ProgressAnomaly",
        "description": "A progress anomaly detected during change tracking."
      },
      "app__models__schemas__ProgressAnomaly__2": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Anomaly category code (e.g. 'future_actuals')"
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Severity",
            "description": "Anomaly severity level"
          },
          "task_id": {
            "type": "string",
            "title": "Task Id",
            "description": "ID of the affected task"
          },
          "predecessor_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Predecessor Id",
            "description": "Predecessor task ID (OOS anomalies only)"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "Human-readable anomaly description"
          },
          "details": {
            "additionalProperties": true,
            "type": "object",
            "title": "Details",
            "description": "Raw anomaly detail fields"
          },
          "standard_reference": {
            "type": "string",
            "title": "Standard Reference",
            "description": "Applicable standard reference (e.g. 'DCMA Check #9')",
            "default": ""
          },
          "remediation": {
            "type": "string",
            "title": "Remediation",
            "description": "Suggested corrective action",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "type",
          "severity",
          "task_id",
          "message"
        ],
        "title": "ProgressAnomaly",
        "description": "A single detected progress integrity anomaly."
      },
      "app__models__schemas__ResourceAvailability__1": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "Resource name (must match tasks[*].resources)"
          },
          "available_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Available From",
            "description": "Start of availability window (ISO 8601). Null = project start."
          },
          "available_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Available To",
            "description": "End of availability window (ISO 8601). Null = project finish."
          },
          "units_per_day": {
            "type": "number",
            "minimum": 0.0,
            "title": "Units Per Day",
            "description": "Available resource-units per working day (default: 1.0 = 100%)",
            "default": 1.0
          }
        },
        "type": "object",
        "required": [
          "resource_name"
        ],
        "title": "ResourceAvailability",
        "description": "Per-resource availability window for Resource Analysis.\n\nSpecifies how many units of a resource are available over a date range.\nresource_name must match a value appearing in tasks[*].resources."
      },
      "app__models__schemas__ResourceAvailability__2": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "Resource name (must match task resource fields)"
          },
          "units_per_day": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Units Per Day",
            "description": "Available units per day",
            "default": 1.0
          },
          "available_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Available From",
            "description": "Availability start date (ISO 8601)"
          },
          "available_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Available To",
            "description": "Availability end date (ISO 8601)"
          }
        },
        "type": "object",
        "required": [
          "resource_name"
        ],
        "title": "ResourceAvailability",
        "description": "Declared capacity for a named resource."
      }
    }
  }
}
