import { SmrtClassOptions } from '@happyvertical/smrt-core'; import { CommissionAdjustment } from '../models/CommissionAdjustment.js'; import { CommissionAdjustmentKind } from '../types.js'; /** One immutable operator correction intent. */ export interface CreateCommissionAdjustmentInput { /** Stable caller-supplied UUID; retries MUST reuse it. */ operationId: string; tenantId: string; commissionId: string; /** Denormalized value, validated against the parent Commission. */ earnerId: string; adjustmentKind: CommissionAdjustmentKind; /** Signed integer cents; zero is not an adjustment. */ amountCents: number; /** ISO currency, validated against the parent Commission. */ currency: string; reason: string; /** Cross-package Profile UUID identifying the operator/automation. */ createdByProfileId: string; metadata?: Record; } export interface CreateCommissionAdjustmentResult { adjustment: CommissionAdjustment; /** `true` only when this invocation persisted the row. */ created: boolean; } export type CommissionAdjustmentReplayMismatchField = 'tenantId' | 'commissionId' | 'earnerId' | 'adjustmentKind' | 'amountCents' | 'currency' | 'reason' | 'createdByProfileId' | 'metadata'; /** Typed fail-closed result for a reused operation UUID with another intent. */ export declare class CommissionAdjustmentReplayConflictError extends Error { readonly operationId: string; readonly mismatches: readonly CommissionAdjustmentReplayMismatchField[]; readonly code: "COMMISSION_ADJUSTMENT_REPLAY_CONFLICT"; constructor(operationId: string, mismatches: readonly CommissionAdjustmentReplayMismatchField[]); } export type CommissionAdjustmentValidationReason = 'tenant_context_mismatch' | 'invalid_operation_id' | 'invalid_tenant_id' | 'invalid_commission_id' | 'invalid_earner_id' | 'invalid_operator_profile_id' | 'invalid_adjustment_kind' | 'invalid_amount' | 'invalid_currency' | 'invalid_metadata' | 'reason_required' | 'commission_not_found' | 'commission_tenant_mismatch' | 'earner_not_found' | 'earner_tenant_mismatch' | 'earner_mismatch' | 'currency_mismatch' | 'transaction_unavailable' | 'operation_adjustment_missing'; /** Actionable validation refusal raised before any adjustment is persisted. */ export declare class CommissionAdjustmentValidationError extends Error { readonly reason: CommissionAdjustmentValidationReason; readonly code: "COMMISSION_ADJUSTMENT_VALIDATION_ERROR"; constructor(reason: CommissionAdjustmentValidationReason, message: string); } export declare class CommissionAdjustmentService { private readonly deps; private constructor(); static create(options?: SmrtClassOptions): Promise; /** * Create exactly one immutable adjustment for `operationId`. * * The operation fence table's primary UUID is the serialization point. The * fence and adjustment are committed in one transaction. An exact replay * returns the persisted row; any changed immutable input raises * {@link CommissionAdjustmentReplayConflictError}. The claim primitive uses * `ON CONFLICT DO NOTHING`, so a losing PostgreSQL transaction remains * usable and can read/verify the committed winner rather than entering an * aborted transaction state. */ createAdjustment(input: CreateCommissionAdjustmentInput): Promise; private canonicalize; private assertTenant; private assertParentAndEarner; private assertExactReplay; private assertUuid; private canonicalMetadata; private replayFromOperation; private runTransaction; } export default CommissionAdjustmentService; //# sourceMappingURL=CommissionAdjustmentService.d.ts.map