---
title: "Time-Series Change Detection"
method: POST
path: "/api/v1/forensics/change-tracking"
tags: ["Forensics"]
---

# Time-Series Change Detection

`POST /api/v1/forensics/change-tracking`

## Request

- Base URL: `https://api.bellatorsi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.bellatorsi.com/api/v1/forensics/change-tracking`
- Auth: none declared

Detects field-level changes across schedule snapshots in six categories.\n\n**Change categories:**\n- `baseline` — unauthorized baseline date/duration modifications (GAO BP-10)\n- `actual` — retroactive actual date changes (DCMA DECM 06A504a/b)\n- `forecast` — forecast drift and instability patterns\n- `logic` — dependency adds/removes/lag modifications\n- `resource` — resource assignment modifications\n- `progress` — 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`.

## Headers

- `x-api-key` string, nullable
- `authorization` string, nullable
- `x-bellator-internal-dispatch` string, nullable

## Request body

- ChangeTrackingRequest: Request for POST /api/v1/forensics/change-tracking.
  - `current_schedule` ChangeTrackingCurrentSchedule, required: The current schedule submitted for change tracking comparison.
    - `tasks` Task[], required: Current task array
      - `id` string, required: Unique task identifier
      - `duration_days` number: Task duration in days
      - `predecessors` union[]: List of predecessor task IDs or dependency links. Supports: 'T1', 'T1FS+5 d', 'T2SS-2 d', or DependencyLink objects
        - union
          - string
          - object
          - DependencyLink: Rich dependency link with relationship type and lag/lead. Supports parsing from various scheduling tool formats including: - MS Project: "10FS+5 d", "/path/file.mpp/10FS+5 d" - Primavera P6: Similar format with XER encoding - Server-based: "<ServerFile>10FS+5 d" - Simple: "10" (defaults to FS with zero lag) Examples: >>> DependencyLink(task_id="10", relationship_type="FS", lag_days=5.0) >>> DependencyLink.from_string("10FS+5 d") >>> DependencyLink.from_string("15SS-2 d")
            - `task_id` string, required: Predecessor task ID
            - `relationship_type` 'FS' | 'SS' | 'FF' | 'SF': Task relationship types per PMBOK 6.3.2.2. Attributes: FINISH_START: Predecessor finish → successor start (most common, ~90%) START_START: Predecessor start → successor start (~5%) FINISH_FINISH: Predecessor finish → successor finish (~4%) START_FINISH: Predecessor start → successor finish (rare, ~1%)
            - `lag_days` number: Lag (positive) or lead (negative) in days
            - `is_external` boolean: True if link to external project file
            - `external_path` string, nullable: Path to external file if is_external=True
      - `name` string, nullable: Task name
      - `resource` string, nullable: Resource assigned to task
      - `resources` string[]: List of resources assigned (for multi-resource tasks)
      - `percent_complete` number: Percent complete (0-100)
      - `physical_percent_complete` number, nullable: 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` string, date, nullable: Planned start date (ISO 8601)
      - `planned_finish` string, date, nullable: Planned finish date (ISO 8601)
      - `actual_start` string, date, nullable: Actual start date (ISO 8601)
      - `actual_finish` string, date, nullable: Actual finish date (ISO 8601)
      - `baseline_start` string, date, nullable: Baseline start date (ISO 8601)
      - `baseline_finish` string, date, nullable: Baseline finish date (ISO 8601)
      - `constraint_type` string, nullable: Constraint type: ASAP, ALAP, SNET, SNLT, FNET, FNLT, MSO, MFO
      - `constraint_date` string, date, nullable: Constraint date if applicable (ISO 8601)
      - `task_type` string, nullable: 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 § 3.2.
      - `wbs_code` string, nullable: WBS code (e.g., '1.2.3')
      - `organization_code` string, nullable: Org/dept identifier for anomaly categorization (Progress Audit)
      - `custom_field_map` object, nullable: 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` string, date, nullable: Current forecast start date (ISO 8601)
      - `forecast_finish` string, date, nullable: Current forecast finish date (ISO 8601)
      - `total_float_days` number, nullable: Pre-computed total float in days. Auto-computed by CPM if absent.
      - `baseline_duration_days` number, nullable: Baseline duration in days. Auto-computed from baseline dates if absent.
      - `delay_category` string, nullable: Delay attribution category. Valid values: owner, contractor, design, procurement, weather, force_majeure.
      - `earned_value` number, nullable: Earned Value (BCWP) in cost units. Requires options.include_ev_validation.
      - `budgeted_cost` number, nullable: Budgeted Cost of Work Scheduled (BCWS) in cost units.
      - `approval_required` boolean, nullable: Whether this task requires explicit approval before it can start.
      - `approval_status` string, nullable: Approval workflow state. Valid values: not_required, pending, approved, rejected.
    - `status_date` string, required: Current schedule status date (ISO 8601)
  - `schedule_history` ChangeTrackingSnapshot[], required: Historical snapshots (min 1 required)
    - `snapshot_date` string, required: Snapshot date (ISO 8601 YYYY-MM-DD)
    - `tasks` Task[], required: Task array at snapshot time
      - `id` string, required: Unique task identifier
      - `duration_days` number: Task duration in days
      - `predecessors` union[]: List of predecessor task IDs or dependency links. Supports: 'T1', 'T1FS+5 d', 'T2SS-2 d', or DependencyLink objects
        - union
          - string
          - object
          - DependencyLink: Rich dependency link with relationship type and lag/lead. Supports parsing from various scheduling tool formats including: - MS Project: "10FS+5 d", "/path/file.mpp/10FS+5 d" - Primavera P6: Similar format with XER encoding - Server-based: "<ServerFile>10FS+5 d" - Simple: "10" (defaults to FS with zero lag) Examples: >>> DependencyLink(task_id="10", relationship_type="FS", lag_days=5.0) >>> DependencyLink.from_string("10FS+5 d") >>> DependencyLink.from_string("15SS-2 d")
            - `task_id` string, required: Predecessor task ID
            - `relationship_type` 'FS' | 'SS' | 'FF' | 'SF': Task relationship types per PMBOK 6.3.2.2. Attributes: FINISH_START: Predecessor finish → successor start (most common, ~90%) START_START: Predecessor start → successor start (~5%) FINISH_FINISH: Predecessor finish → successor finish (~4%) START_FINISH: Predecessor start → successor finish (rare, ~1%)
            - `lag_days` number: Lag (positive) or lead (negative) in days
            - `is_external` boolean: True if link to external project file
            - `external_path` string, nullable: Path to external file if is_external=True
      - `name` string, nullable: Task name
      - `resource` string, nullable: Resource assigned to task
      - `resources` string[]: List of resources assigned (for multi-resource tasks)
      - `percent_complete` number: Percent complete (0-100)
      - `physical_percent_complete` number, nullable: 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` string, date, nullable: Planned start date (ISO 8601)
      - `planned_finish` string, date, nullable: Planned finish date (ISO 8601)
      - `actual_start` string, date, nullable: Actual start date (ISO 8601)
      - `actual_finish` string, date, nullable: Actual finish date (ISO 8601)
      - `baseline_start` string, date, nullable: Baseline start date (ISO 8601)
      - `baseline_finish` string, date, nullable: Baseline finish date (ISO 8601)
      - `constraint_type` string, nullable: Constraint type: ASAP, ALAP, SNET, SNLT, FNET, FNLT, MSO, MFO
      - `constraint_date` string, date, nullable: Constraint date if applicable (ISO 8601)
      - `task_type` string, nullable: 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 § 3.2.
      - `wbs_code` string, nullable: WBS code (e.g., '1.2.3')
      - `organization_code` string, nullable: Org/dept identifier for anomaly categorization (Progress Audit)
      - `custom_field_map` object, nullable: 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` string, date, nullable: Current forecast start date (ISO 8601)
      - `forecast_finish` string, date, nullable: Current forecast finish date (ISO 8601)
      - `total_float_days` number, nullable: Pre-computed total float in days. Auto-computed by CPM if absent.
      - `baseline_duration_days` number, nullable: Baseline duration in days. Auto-computed from baseline dates if absent.
      - `delay_category` string, nullable: Delay attribution category. Valid values: owner, contractor, design, procurement, weather, force_majeure.
      - `earned_value` number, nullable: Earned Value (BCWP) in cost units. Requires options.include_ev_validation.
      - `budgeted_cost` number, nullable: Budgeted Cost of Work Scheduled (BCWS) in cost units.
      - `approval_required` boolean, nullable: Whether this task requires explicit approval before it can start.
      - `approval_status` string, nullable: Approval workflow state. Valid values: not_required, pending, approved, rejected.
  - `options` ChangeTrackingOptions: Options controlling change tracking behaviour.
    - `comparison_mode` 'latest' | 'all_periods' | 'specific_dates'
    - `change_categories` string[]: Categories: baseline, actual, forecast, logic, resource, progress, all
    - `include_impact_analysis` boolean
    - `include_trends` boolean
    - `include_details` boolean
    - `materiality_thresholds` ChangeTrackingMaterialityThresholds: Overridable materiality thresholds for change detection.
      - `date_change_days` integer: Min days for a date change to be material
      - `progress_change_pct` number: Min % decrease to flag

## Response `200`

Change tracking analysis completed successfully

- BellatorResponseChangeTrackingData
  - `status` 'pass' | 'fail' | 'warning' | 'info', required: Top-level result status — always present in every response.
  - `score` number, nullable
  - `grade` 'A' | 'B' | 'C' | 'D' | 'F': Letter grade derived from a 0–100 score. Null on non-scoring endpoints.
  - `summary` string, nullable
  - `breakdown` object, nullable
  - `findings` Finding[]
    - `code` string, required: Stable machine-readable identifier e.g. DCMA_CHECK_8_HIGH_DURATION
    - `severity` 'critical' | 'high' | 'medium' | 'low' | 'info', required: Severity level for findings; reused as priority level for recommendations.
    - `title` string, required: Short human-readable label
    - `description` string, required: Full explanation of the issue
    - `standard` string, nullable: Standard citation e.g. 'DCMA PAM 200.1 Check #8'
    - `affected_tasks` string[]: Task IDs implicated by this finding
    - `metric_value` number, nullable: Observed measurement e.g. 60.0 days
    - `threshold` number, nullable: Threshold that was violated e.g. 44.0 days
  - `recommendations` Recommendation[]
    - `priority` 'critical' | 'high' | 'medium' | 'low' | 'info', required: Severity level for findings; reused as priority level for recommendations.
    - `action` string, required: What to do — specific and actionable
    - `standard` string, nullable: Supporting standard citation
    - `finding_codes` string[]: Finding.code values this recommendation addresses
  - `data` ChangeTrackingData: Data payload for POST /api/v1/forensics/change-tracking.
    - `comparison_summary` ComparisonSummary, required: High-level summary of the comparison operation.
      - `current_status_date` string, nullable
      - `snapshots_analyzed` integer
      - `snapshot_dates` string[]
      - `comparison_mode` string
      - `total_changes_detected` integer
      - `material_changes` integer
      - `immaterial_changes_filtered` integer
    - `changes_by_category` ChangesByCategory, required: All six change categories bundled together.
      - `baseline_changes` BaselineCategoryResult: Result for baseline change category.
        - `total_changes` integer
        - `material_changes` integer
        - `changes` object[]
      - `actual_changes` ActualCategoryResult: Result for actual date change category (includes DCMA DECM violations).
        - `total_changes` integer
        - `material_changes` integer
        - `dcma_decm_violations` DCMADECMViolationRecord[]
          - `check_id` string, required
          - `task_id` string, required
          - `violation` string, required
          - `original_date` string, required
          - `changed_date` string, required
          - `snapshot_of_change` string, required
          - `severity` 'critical' | 'high' | 'medium' | 'low', required
          - `suspicion_details` object, nullable
        - `changes` object[]
      - `forecast_changes` ForecastCategoryResult: Result for forecast change category.
        - `total_changes` integer
        - `material_changes` integer
        - `trends` object
        - `changes` object[]
      - `logic_changes` LogicCategoryResult: Result for logic change category.
        - `total_changes` integer
        - `material_changes` integer
        - `added_dependencies` integer
        - `removed_dependencies` integer
        - `modified_lags` integer
        - `changes` object[]
      - `resource_changes` ResourceCategoryResult: Result for resource change category.
        - `total_changes` integer
        - `material_changes` integer
        - `resources_added` integer
        - `resources_removed` integer
        - `changes` object[]
      - `progress_changes` ProgressCategoryResult: Result for progress anomaly category.
        - `total_changes` integer
        - `material_changes` integer
        - `anomalies` AppModelsSchemasProgressAnomaly1[]
          - `task_id` string, required
          - `task_name` string, required
          - `anomaly_type` string, required
          - `snapshot_date` string, required
          - `previous_pct` number, required
          - `current_pct` number, required
          - `delta_pct` number, required
          - `is_material` boolean
          - `explanation` string, required
        - `changes` object[]
    - `impact_analysis` ChangeImpactAnalysis: Impact analysis of detected changes on the schedule.
      - `total_tasks_affected` integer
      - `critical_path_affected` boolean
      - `schedule_impact_days` number
      - `cost_impact_estimate` 'low' | 'medium' | 'high' | 'critical'
      - `downstream_effects` DownstreamEffect[]
        - `change_task_id` string, required
        - `affected_task_ids` string[]
        - `impact_type` 'schedule_slip' | 'schedule_acceleration', required
        - `impact_days` number, required
    - `trends` ChangeTrends: Systemic trend patterns and risk indicators.
      - `identified_patterns` TrendPattern[]
        - `pattern` string, required
        - `description` string, required
        - `affected_tasks` integer, required
        - `first_detected` string, nullable
        - `severity` 'low' | 'medium' | 'high' | 'critical', required
      - `risk_indicators` RiskIndicator[]
        - `indicator` string, required
        - `count` integer, required
        - `severity` 'low' | 'medium' | 'high' | 'critical', required
        - `recommendation` string, required
    - `compliance_tags` string[]
    - `processing_metadata` object
  - `simulation` SimulationEnvelope: Probabilistic simulation outputs for Tier 3 endpoints. Null on all Tier 1 and Tier 2 responses. When Tier 3 launches, this field transitions from null to populated without changing any other envelope field — existing consumers are unaffected.
    - `method` string, required: Simulation method: monte_carlo | latin_hypercube
    - `trial_count` integer, required
    - `duration_days` PercentileResult: Percentile distribution across simulation trials. Reserved for Tier 3 Monte Carlo / risk simulation endpoints (v0.3.0+).
      - `p10` number, required: 10th percentile outcome
      - `p50` number, required: 50th percentile (median)
      - `p80` number, required: 80th percentile — common contract delivery threshold
      - `p90` number, required: 90th percentile
      - `mean` number, required
      - `std_dev` number, required
    - `cost` PercentileResult: Percentile distribution across simulation trials. Reserved for Tier 3 Monte Carlo / risk simulation endpoints (v0.3.0+).
      - `p10` number, required: 10th percentile outcome
      - `p50` number, required: 50th percentile (median)
      - `p80` number, required: 80th percentile — common contract delivery threshold
      - `p90` number, required: 90th percentile
      - `mean` number, required
      - `std_dev` number, required
    - `completion_date` object, nullable: Map of p-value strings to ISO completion dates e.g. {'p50': '2027-04-15'}
  - `metadata` ResponseMetadata, required: Audit trail and processing context — always present, never null.
    - `task_count` integer, required: Number of tasks in the submitted schedule
    - `processing_time_ms` integer, nullable: Wall-clock processing time in milliseconds
    - `api_version` string: API version that produced this response
    - `endpoint` string, required: Endpoint path e.g. /api/v1/health/score
    - `standards_applied` string[]: Standards consulted during analysis e.g. ['DCMA PAM 200.1', 'GAO BP-2']
    - `confidence` number, nullable: Confidence in the result (0–1). Present on scoring endpoints.
    - `status_date` string, nullable: ISO date used as analysis reference point. Present on time-aware analyses.

## Other responses

- `402`: Tier limit exceeded — Starter tier or above required
- `422`: Validation error — check schedule schema or options
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/bellatorsi/apis/bellator-schedule-intelligence-apis.md) · [All operations](https://skmtc.dev/bellatorsi/apis/bellator-schedule-intelligence-apis/llms.txt) · [OpenAPI document](https://skmtc.dev/bellatorsi/apis/bellator-schedule-intelligence-apis/revisions/03e7b786e43b?raw)
