{
  "tool_id": "art-626-deterministic-amortization-schedule",
  "kernel_id": "art-626-deterministic-amortization-schedule",
  "display_name": "Deterministic Amortization Schedule",
  "tool_version": "1.0.0",
  "mandate_type": "compliance_mandate",
  "purpose": "Demonstrator node for the shared _amort.bundle.mjs kernel: a deterministic amortization-schedule engine over seven closed day-count conventions (six calendar conventions from ISDA 2006 Definitions Section 4.16 -- 30/360 US, 30E/360, 30E/360 (ISDA), Actual/360, Actual/365 Fixed, Actual/Actual (ISDA) -- plus UNIT_PERIOD for lease/revenue schedules that discount over equal periods rather than calendar day counts). Computes, per period, the effective-interest method's period_fraction, periodic_rate, interest, principal_component and closing_balance, each an independently-declared rounding step, plus a mandatory final-period plug that absorbs rounding residue so the schedule amortizes to exactly zero within a declared bound. Supports a bracketed-bisection rate solve (art-215's discipline, generalized: constant 200-step bound, sign-change bracket required before any rate is reported, no Newton/secant), scoped honestly to UNIT_PERIOD only -- a calendar convention's period_fraction is a real-valued fraction of a year that need not align with the solver's ordinal-integer-period PV formula, so calendar conventions require a caller-supplied annual_rate rather than a mismatched solve. Mid-stream remeasurement is modeled as schedule SEGMENTATION, never mutation: a new segment's opening balance is always the prior segment's exact closing balance, asserted as a continuity_invariant, with the prior segment retained unmodified. No engine transcendentals anywhere (SPEC.md Section 18.5): every exponent is an integer computed by repeated squaring and every rounding step multiplies by a literal power-of-ten, never Math.pow. This is a reusable shared kernel's demonstrator, not itself an ASC 842 / ASC 606 / CECL wave-specific tool -- waves 6, 7 and 10 inline this bundle directly rather than calling this node.",
  "control_description": "Demonstrator node for the shared _amort.bundle.mjs kernel: a deterministic amortization-schedule engine over seven closed day-count conventions (six calendar conventions from ISDA 2006 Definitions Section 4.16 -- 30/360 US, 30E/360, 30E/360 (ISDA), Actual/360, Actual/365 Fixed, Actual/Actual (ISDA) -- plus UNIT_PERIOD for lease/revenue schedules that discount over equal periods rather than calendar day counts). Computes, per period, the effective-interest method's period_fraction, periodic_rate, interest, principal_component and closing_balance, each an independently-declared rounding step, plus a mandatory final-period plug that absorbs rounding residue so the schedule amortizes to exactly zero within a declared bound. Supports a bracketed-bisection rate solve (art-215's discipline, generalized: constant 200-step bound, sign-change bracket required before any rate is reported, no Newton/secant), scoped honestly to UNIT_PERIOD only -- a calendar convention's period_fraction is a real-valued fraction of a year that need not align with the solver's ordinal-integer-period PV formula, so calendar conventions require a caller-supplied annual_rate rather than a mismatched solve. Mid-stream remeasurement is modeled as schedule SEGMENTATION, never mutation: a new segment's opening balance is always the prior segment's exact closing balance, asserted as a continuity_invariant, with the prior segment retained unmodified. No engine transcendentals anywhere (SPEC.md Section 18.5): every exponent is an integer computed by repeated squaring and every rounding step multiplies by a literal power-of-ten, never Math.pow. This is a reusable shared kernel's demonstrator, not itself an ASC 842 / ASC 606 / CECL wave-specific tool -- waves 6, 7 and 10 inline this bundle directly rather than calling this node.",
  "declared_inputs": [],
  "declared_outputs": [],
  "kernel_digest": "sha256:32ee03f89954474c9d09d90e18eba3acc47dc757fc8cab6bd19fd7bf8e6f4e06",
  "trust_label": "deferred: deterministic source published, zkVM proof not yet generated; New gpu:false node, art-626, staged 2026-08-15 (ACCT-AMORT-K-1). Sec 18 steady-state rule (RIDER-KERNEL.md): GPU proving is an async queue, not a per-wave gate. cycle_preflight: PENDING -- GPU-CYCLE-PREFLIGHT-1's exec-cycle tool (runq-cpu) is not present in this session's environment (same absence precedent as art-619), so no user_cycles figure could be measured and no GPU proving was attempted. Static pre-screen (GPU-CYCLE-PREFLIGHT-SPEC.md): this kernel has no in-guest signature/hash verification loop, no policy_parameters-driven loop bound (MAX_PERIODS=600 is a constant), and no non-sqrt transcendental anywhere (every exponent is an integer via repeated squaring; every round is a literal power-of-ten multiply) -- expected FAST per the build spec, but this is a prediction, not a measurement, and the row's check-off says so plainly rather than claiming FAST.",
  "data_vintage": "2026-08-15",
  "last_validated": "2026-08-15",
  "conformance_fixtures_vendored": true,
  "compute_proof_ready": "deferred",
  "wave": 102,
  "source_url": "https://ainumbers.co/chaingraph/art-626-deterministic-amortization-schedule.html",
  "generated_at": "2026-08-16T17:51:51.949Z"
}
