import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core'; export declare class SupportCompensationPlan extends SmrtObject { tenantId: string | null; /** Specialist this plan compensates; null = tenant default plan. */ specialistId: string | null; /** Display name (inherited `name`; uniqueness comes from conflictColumns). */ name: string; /** * Earning rate for delivered support time, in **minor units per hour**, so * `hours * hourlyRate` yields integer minor units once rounded. Stays * DECIMAL: a rate is inherently fractional and INTEGER would truncate * sub-unit rates (#2401). */ hourlyRate: number; currency: string; /** Effective-dating: null bounds mean open-ended. */ effectiveFrom: Date | null; effectiveTo: Date | null; /** `active` | `archived`. */ status: string; /** Additional agreement terms (JSON object; free-form, snapshotted). */ terms: string; getTerms(): Record; setTerms(value: Record): void; /** Whether the plan is effective at the given instant. */ isEffectiveAt(at?: Date): boolean; } export declare class SupportCompensationPlanCollection extends SmrtCollection { static readonly _itemClass: typeof SupportCompensationPlan; /** * Resolve the plan compensating a specialist at a work instant: * specialist-specific first, then the tenant default. Ties (overlapping * effective ranges) prefer an exact tenant match over a global * (NULL-tenant) plan, then the latest `effectiveFrom`. * * Pass `options.tenantId` (the work's tenant) whenever resolution may run * without an ambient tenant context (system/job paths list across * tenants): candidates are then limited to that tenant's plans plus * global NULL-tenant plans, so another tenant's default can never price * this tenant's work. */ resolveForSpecialist(specialistId: string, at?: Date, options?: { tenantId?: string | null; }): Promise; } export default SupportCompensationPlan; //# sourceMappingURL=support-compensation-plan.d.ts.map