Kaizen
Browse modulesRulesrules/sharedSchemas and constants

Variable: PricingScheduleConfig

const PricingScheduleConfig: ZodObject<{
  condition_type: ZodLiteral<"PRICING_SCHEDULE">;
  date_range: ZodOptional<ZodObject<{
     end: ZodISODate;
     exclude: ZodOptional<ZodBoolean>;
     start: ZodISODate;
  }, $strip>>;
  day_of_week: ZodOptional<ZodObject<{
     days: ZodArray<ZodNumber>;
     exclude: ZodOptional<ZodBoolean>;
  }, $strip>>;
  duration: ZodOptional<ZodObject<{
     max: ZodOptional<ZodNumber>;
     max_exclusive: ZodOptional<ZodBoolean>;
     min: ZodOptional<ZodNumber>;
     min_exclusive: ZodOptional<ZodBoolean>;
     unit: ZodOptional<ZodEnum<{
        days: "days";
        hours: "hours";
        minutes: "minutes";
     }>>;
  }, $strip>>;
  end_field: ZodString;
  holidays: ZodOptional<ZodObject<{
     exclude: ZodOptional<ZodBoolean>;
     include_observed: ZodOptional<ZodBoolean>;
     names: ZodArray<ZodEnum<{
        CHRISTMAS_DAY: "CHRISTMAS_DAY";
        COLUMBUS_DAY: "COLUMBUS_DAY";
        INDEPENDENCE_DAY: "INDEPENDENCE_DAY";
        JUNETEENTH: "JUNETEENTH";
        LABOR_DAY: "LABOR_DAY";
        MEMORIAL_DAY: "MEMORIAL_DAY";
        MLK_DAY: "MLK_DAY";
        NEW_YEARS_DAY: "NEW_YEARS_DAY";
        PRESIDENTS_DAY: "PRESIDENTS_DAY";
        THANKSGIVING: "THANKSGIVING";
        VETERANS_DAY: "VETERANS_DAY";
     }>>;
  }, $strip>>;
  offered_until: ZodOptional<ZodISODate>;
  start_field: ZodString;
  time_range: ZodOptional<ZodObject<{
     end_min: ZodNumber;
     exclude: ZodOptional<ZodBoolean>;
     start_min: ZodNumber;
  }, $strip>>;
  zone: ZodOptional<ZodString>;
}, $strip>;

Defined in: shared/rules/types/conditions.ts:732

Composite condition backing a pricing-matrix "Schedule" (PLA-136). One Conditions row = one whole Schedule. Precedent: HOUSEHOLD above is already a multi-field composite condition, not a new idiom.

Evaluates against the line's start date/time only (start_field) — not "any date in the span" the way DATE_INCLUDES does; deliberate divergence, consistent with the uniform-schedule-line v1 scoping (see condition-handlers.ts's pricingSchedule handler). duration is the one dimension that reads both start_field and end_field, since it's inherently about the span.

Validation (mirrors the overlap-detection algorithm's own constraints — see schedule-overlap.ts):

  • day_of_week.days must be non-empty (.min(1) above) and must not exclude all 7 days (matches nothing — a dead schedule).
  • holidays requires a bounded date_range on the same schedule.
  • date_range.exclude is unsupported in v1 (see PricingScheduleDateRangeConfig's doc).
  • At least one of day_of_week/time_range/date_range/duration/ holidays must be present — a fully wildcard schedule would conflict with every other schedule under reject-on-write with no tiebreak.