TermsAmendmentInput

A saved amendment: the whole pending terms set, plus why and from when (CRM-9353).

items is typed as the preview's item model on purpose rather than as a near-identical twin. Preview and save must accept exactly the same line shape, or CRM-9353's "no case where preview succeeds and the save then fails" cannot hold at the type level — a field the save rejected and the preview accepted would only surface after the user pressed Save.

An omitted field on an existing line means "leave it alone", not "clear it": every field is optional, so the save merges what was sent over the stored row (amendment._build_lines), the same way update_entity does.

  • When the new terms take effect. Today or earlier applies immediately; a future date is held pending and applied on the day

  • The pending terms set in full. Required: the set is the terms, so an omitted key would read as an amendment that removes every service

    Properties: 22
  • Free-text reason shown on the terms timeline