import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core'; import { CoverageWindow, EscalationStep, ServiceTargetMinutes, SeverityDefinition, TimeApprovalPolicy } from '../types.js'; /** Default target minutes applied when a plan omits a severity's targets. */ export declare const DEFAULT_TARGET_MINUTES: ServiceTargetMinutes; export declare class SupportPlan extends SmrtObject { tenantId: string | null; /** Natural key, unique per tenant (`conflictColumns`). */ planKey: string; /** Display name (inherited `name` field). */ name: string; description: string; /** `draft` | `active` | `archived`. */ status: string; /** Channels this plan covers (JSON array of channel kinds). */ channels: string; /** IANA timezone the coverage calendar is expressed in. */ timezone: string; /** * Coverage calendar: JSON array of {@link CoverageWindow}. Empty array * means 24×7 coverage (clocks always run). */ coverage: string; /** Holiday dates excluded from coverage (JSON array of `YYYY-MM-DD`). */ holidays: string; /** * Severity vocabulary for this plan: JSON map of severity key → * {@link SeverityDefinition}. Empty object falls back to * `DEFAULT_SEVERITY_DEFINITIONS`. */ severityDefinitions: string; /** * Service Targets per severity: JSON map of severity key → * {@link ServiceTargetMinutes}. Missing severities fall back to * `DEFAULT_TARGET_MINUTES`; explicit `null` minutes disable that clock. */ targets: string; /** * Case statuses that pause Service Target clocks (FR-29b: waiting periods * pause clocks only when the plan says so). JSON array of statuses. */ pauseStatuses: string; /** Escalation policy: JSON array of {@link EscalationStep}, level order. */ escalationPolicy: string; /** * Recurring availability/retainer fee, in **integer minor units** of * {@link currency} — `$19.99` is `1999`; `0` means pure hourly support. * * The `= 0` initializer is load-bearing: SMRT maps an integer literal to * INTEGER and a decimal literal to DECIMAL, and money is exact (#2401). */ availabilityFeeAmount: number; currency: string; /** Included support minutes per period (0 = none included). */ includedMinutes: number; /** * Metered rate for time beyond the included minutes, in **minor units per * hour**, so `hours * rate` yields minor units. Stays DECIMAL: a rate is * inherently fractional and INTEGER would truncate sub-unit rates (#2401). */ overageHourlyRate: number; /** * Premium rate for on-call work, in minor units per hour (`0.0` = use the * overage rate). Stays DECIMAL for the same reason as * {@link overageHourlyRate} (#2401). */ onCallHourlyRate: number; /** * Time-entry approval policy for work under this plan (FR-36): JSON * {@link TimeApprovalPolicy}. Empty object = operator approval. */ timeApprovalPolicy: string; /** Optional `@happyvertical/smrt-subscriptions` plan natural key binding. */ subscriptionPlanKey: string; metadata: string; getChannels(): string[]; setChannels(channels: string[]): void; getCoverage(): CoverageWindow[]; setCoverage(windows: CoverageWindow[]): void; getHolidays(): string[]; setHolidays(dates: string[]): void; getSeverityDefinitions(): Record; setSeverityDefinitions(defs: Record): void; getTargets(): Record>; setTargets(targets: Record>): void; /** Effective target minutes for a severity, with defaults applied. */ targetsForSeverity(severity: string): ServiceTargetMinutes; getPauseStatuses(): string[]; setPauseStatuses(statuses: string[]): void; getEscalationPolicy(): EscalationStep[]; setEscalationPolicy(steps: EscalationStep[]): void; getTimeApprovalPolicy(): TimeApprovalPolicy; setTimeApprovalPolicy(policy: TimeApprovalPolicy): void; getMetadata(): Record; setMetadata(value: Record): void; /** * The plan terms captured onto a case at apply time (`planSnapshot`), so * later plan edits never rewrite the terms a case was handled under. */ snapshotTerms(): Record; } export declare class SupportPlanCollection extends SmrtCollection { static readonly _itemClass: typeof SupportPlan; byPlanKey(planKey: string): Promise; } export default SupportPlan; //# sourceMappingURL=support-plan.d.ts.map