/**
 * @fileoverview Reusable schema helpers for nullable PocketSmith API fields
 */
import { z } from "zod";
/**
 * Creates a nullable field schema that accepts both the type and null
 */
export declare const createNullableField: <T extends z.ZodTypeAny>(baseType: T, description: string) => z.ZodUnion<[T, z.ZodNull]>;
/**
 * Creates an optional nullable field schema
 */
export declare const createOptionalNullableField: <T extends z.ZodTypeAny>(baseType: T, description: string) => z.ZodOptional<z.ZodUnion<[T, z.ZodNull]>>;
/**
 * Common nullable field definitions used across PocketSmith tools
 */
export declare const NULLABLE_FIELDS: {
    parent_id: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodNull]>>;
    category_id: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodNull]>>;
    colour: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    note: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    memo: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    safe_balance: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodNull]>>;
    current_balance_exchange_rate: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodNull]>>;
    safe_balance_in_base_currency: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodNull]>>;
    updated_at: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    created_at: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    symbol: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    description: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
    number: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
};
/**
 * Required nullable fields (not optional, but can be null)
 */
export declare const REQUIRED_NULLABLE_FIELDS: {
    parent_id: z.ZodUnion<[z.ZodNumber, z.ZodNull]>;
    colour: z.ZodUnion<[z.ZodString, z.ZodNull]>;
    note: z.ZodUnion<[z.ZodString, z.ZodNull]>;
    memo: z.ZodUnion<[z.ZodString, z.ZodNull]>;
    safe_balance: z.ZodUnion<[z.ZodNumber, z.ZodNull]>;
    current_balance_exchange_rate: z.ZodUnion<[z.ZodNumber, z.ZodNull]>;
    safe_balance_in_base_currency: z.ZodUnion<[z.ZodNumber, z.ZodNull]>;
    number: z.ZodUnion<[z.ZodString, z.ZodNull]>;
};
/**
 * Helper function to clean up data to match nullable schemas
 */
export declare function cleanNullableFields<T extends Record<string, unknown>>(data: T, fieldNames: (keyof T)[]): T;
/**
 * Helper to validate that nullable fields are properly handled
 */
export declare function validateNullableField(value: unknown, field: string, allowNull?: boolean): unknown;
