Skip to main content
Glama

impacted_as_planned

Impacted As-Planned (IAP) on an unprogressed as-planned baseline. Implements AACE RP 29R-03 MIP 3.6 (Modeled / Additive / Single Base) and SCL Protocol 2nd ed. §11.6(a). Two modes.

        **screen** (default): inserts each delay fragnet into the
        as-planned baseline, first one at a time and then all together,
        re-runs CPM, and reads the joint impact against verdict bands
        (NO SIGNAL, LOW SIGNAL, MODERATE SIGNAL, STRONG SIGNAL, or
        INDETERMINATE when the joint pass fails). Use it as a quick read
        on whether a delay claim has legs before a fuller analysis. The
        sum of the one-at-a-time impacts is reported beside the joint
        impact; ``overstatement_days`` is the difference, from fragnets
        that share a path. Check each ``per_fragnet[].status`` before
        quoting a figure: a fragnet that failed on its own carries
        ``status`` "error" and its ``error``, and is left out of the
        one-at-a-time sum. The joint pass inserts every fragnet
        together, so read ``joint.status`` and the "iap-joint" warnings
        too: with a bad fragnet the joint pass can fail (verdict
        INDETERMINATE) or run without the ties it could not insert.

        **rebut**: tests an opposing expert's IAP submission. Supply at
        least one of: ``opposing_impacted_xer_path`` or
        ``opposing_impacted_xer_content`` (tier A: re-runs their
        impacted schedule and diffs it against the baseline),
        ``opposing["fragnets"]`` (tier B: re-models their fragnets on
        the baseline), or ``opposing["claimed_impact_days"]`` (tier C:
        their stated figure).

        IAP does not look at what actually happened on site: it
        measures the planned logic plus the inserted delays. The result
        carries ``iap_method_caveat`` saying so, and a ``precondition``
        block that flags a baseline carrying progress (not a pure
        as-planned schedule). Every activity is laid out on one uniform
        timeline with no weekends or holidays, each timeline day being
        one working day of that activity's own calendar. Where every
        unfinished activity is on one calendar, each impact is exact in
        working days on it, apart from constraint dates and any stretch
        before the data date, which the run places on the project's
        default calendar. With more than one calendar, paths on
        different calendars change length against each other on that
        timeline, so float, the driving path and the impact can differ
        from a calendar-aware run, and the impact is a mix of those
        calendars' working days; the result lists the calendars
        (``calendars_in_use``, and ``opposing_calendars_in_use`` for a
        tier A file) and warns when there is more than one. The absolute
        dates the run shows are not P6 calendar dates (``date_basis``):
        quote the day counts, not the dates. For an impact measured on each event's own
        contemporaneous baseline use ``time_impact_analysis_fragnet``
        (MIP 3.7); for retrospective windows use
        ``forensic_windows_analysis`` (MIP 3.3); for a subtractive
        but-for use ``collapsed_as_built`` (MIP 3.8).

        Args:
            baseline_xer_path:    server-side as-planned baseline XER.
            baseline_xer_content: full text of the as-planned baseline
                                  XER (alternative for hosted/remote use).
                                  Supply EXACTLY ONE of path/content.
            fragnets: SCREEN (required): list of fragnet dicts, each
                with ``id``, ``name``, ``liability`` (responsible
                party), ``activities`` (list of {code, name,
                duration_days}; duration_days in working days) and
                ``ties`` (list of {from_code, to_code, type, lag_days};
                pred/succ are accepted aliases for from_code/to_code;
                type is FS, SS, FF or SF in any case, with or without
                P6's PR_ prefix; a missing type is FS and any other
                type is refused).
            mode: "screen" (default) or "rebut" (case does not matter).
            opposing: REBUT: dict of the opposing material, with any of
                ``fragnets`` (same shape as above),
                ``claimed_impact_days`` (number), ``claimed_finish``
                (YYYY-MM-DD), ``proj_id``, ``expert_name``,
                ``report_ref``. Other keys are refused. Pass the
                opposing impacted schedule through the two arguments
                below, not in this dict.
            opposing_impacted_xer_path:    REBUT tier A: server-side
                                           opposing impacted XER.
            opposing_impacted_xer_content: REBUT tier A: full text of
                                           the opposing impacted XER.
                                           Supply at most ONE of this
                                           path/content pair.
            own_results: REBUT, optional: your own results from the
                primary methods in working days, {windows_days,
                tia_days, collapsed_days}, read beside the opposing
                figure.
            proj_id: optional project selector inside a multi-project
                baseline XER.
            screen_bands: SCREEN, optional: verdict band overrides,
                {low_pct, strong_pct, wd_floor_moderate}. Defaults
                2.0, 5.0 and 20; low_pct must stay below strong_pct.
            baseline_name / opposing_name: optional file names to
                print in the report for XERs sent as content (a
                content upload has no file name of its own).
            preparer / company: optional, printed on the report and
                dashboard as who prepared the analysis. Both are blank
                unless supplied.
            output_dir: output dir for the HTML dashboard, TXT report
                and CSVs (tempdir if "").
            project_name: optional override.

        Limits for hosted use: 500 fragnets on each side, and 5,000
        inserted activities and 20,000 ties across all of them.

        Returns:
            {
              "mode": "screen" | "rebut",
              "method": "Impacted As-Planned — AACE 29R-03 §3.6 / MIP 3.6 ...",
              "baseline": {project_finish, plan_start,
                           baseline_duration_wd, critical_count, ...},
              "precondition": {progressed_count, total_count,
                               pure_as_planned},
              "per_fragnet": [{fragnet_id, status, error,
                               impact_days, impact_working_days, ...}],  # SCREEN
              "joint": {status, impact_days, impact_working_days, ...},  # SCREEN
              "sum_isolated_days": int,           # SCREEN
              "sum_isolated_working_days": int,   # SCREEN
              "overstatement_days": int,          # SCREEN: sum minus joint
              "screen_verdict": {band, pct, joint_wd, bands_used, basis},  # SCREEN
              "rebut": {...},         # REBUT: tiers A/B/C and findings
              "critique": {...},
              "iap_method_caveat": str,
              "date_basis": str,
              "day_unit_basis": str,  # what every day count counts
              "calendars_in_use": [str] | None,  # None: could not be read
              "opposing_calendars_in_use": [str] | None,  # REBUT tier A
              "output_files": {report, events_csv, dashboard, ...},
              "warnings": [...],
              "baseline_sha256": str, "baseline_sha256_basis": str,
              "opposing_impacted_sha256": str,        # REBUT tier A
              "opposing_impacted_sha256_basis": str,  # REBUT tier A
            }
        

Input Schema

NameRequiredDescriptionDefault
modeNoscreen
companyNo
proj_idNo
fragnetsNo
opposingNo
preparerNo
output_dirNo
own_resultsNo
project_nameNo
screen_bandsNo
baseline_nameNo
opposing_nameNo
baseline_xer_pathNo
baseline_xer_contentNo
opposing_impacted_xer_pathNo
opposing_impacted_xer_contentNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does so: it discloses the method's core limitation (IAP ignores as-built reality), the iap_method_caveat and precondition block emitted in the result, per-fragnet and joint failure semantics, calendar/timeline distortion effects, that displayed dates are not P6 calendar dates, and hosted limits (500 fragnets, 5,000 inserted activities, 20,000 ties).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the two modes and the sibling routing before the long Args block, and nearly every sentence carries operational information. It is nonetheless very long, with an embedded Returns tree that partly re-states fields discussed earlier in prose (overstatement_days, calendars_in_use), which is borderline duplication even without an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, nested, dual-mode analytical tool with no output schema and no annotations, the definition covers method caveats, preconditions, parameter constraints, failure modes, returned fields and artifact outputs. An agent can select a mode, assemble a valid call, and interpret the verdict bands without further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 16 parameters, so the description must compensate and does: it documents the EXACTLY-ONE constraint on baseline path/content, the at-most-one constraint on the opposing file pair, the nested fragnet dict shape (id, name, liability, activities, ties) and tie type normalization rules, the accepted keys of the opposing dict, and the meaning of screen_bands defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific method (Impacted As-Planned on an unprogressed as-planned baseline), the governing standards (AACE RP 29R-03 MIP 3.6, SCL Protocol §11.6(a)), and its two modes (screen, rebut). It also explicitly distinguishes itself from the sibling methods time_impact_analysis_fragnet (MIP 3.7), forensic_windows_analysis (MIP 3.3) and collapsed_as_built (MIP 3.8).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is spelled out per mode: 'screen' is framed as a quick read on whether a delay claim has legs, 'rebut' as testing an opposing expert's submission, with the minimum inputs required for each of tiers A/B/C. It goes further and routes the agent to alternative tools for contemporaneous-baseline, retrospective-window and subtractive but-for analyses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.