/**
 * Type definitions for SHAAM uniform format generator
 */
import { z } from 'zod';
import { DocumentTypeEnum } from './enums.js';
export * from './enums.js';
export declare const BusinessMetadataSchema: z.ZodObject<{
    businessId: z.ZodString;
    name: z.ZodString;
    taxId: z.ZodString;
    address: z.ZodOptional<z.ZodObject<{
        street: z.ZodOptional<z.ZodString>;
        houseNumber: z.ZodOptional<z.ZodString>;
        city: z.ZodOptional<z.ZodString>;
        zip: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    reportingPeriod: z.ZodObject<{
        startDate: z.ZodString;
        endDate: z.ZodString;
    }, z.core.$strip>;
}, z.core.$strip>;
export declare const DocumentSchema: z.ZodObject<{
    id: z.ZodString;
    type: z.ZodEnum<{
        100: "100";
        200: "200";
        210: "210";
        300: "300";
        305: "305";
        320: "320";
        325: "325";
        330: "330";
        340: "340";
        400: "400";
        410: "410";
        420: "420";
        430: "430";
        500: "500";
        600: "600";
        700: "700";
        710: "710";
    }>;
    date: z.ZodString;
    amount: z.ZodNumber;
    description: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export declare const JournalEntrySchema: z.ZodObject<{
    id: z.ZodString;
    date: z.ZodString;
    amount: z.ZodNumber;
    accountId: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    transactionNumber: z.ZodOptional<z.ZodNumber>;
    transactionLineNumber: z.ZodOptional<z.ZodNumber>;
    batchNumber: z.ZodOptional<z.ZodNumber>;
    transactionType: z.ZodOptional<z.ZodString>;
    referenceDocument: z.ZodOptional<z.ZodString>;
    referenceDocumentType: z.ZodOptional<z.ZodEnum<{
        100: "100";
        200: "200";
        210: "210";
        300: "300";
        305: "305";
        320: "320";
        325: "325";
        330: "330";
        340: "340";
        400: "400";
        410: "410";
        420: "420";
        430: "430";
        500: "500";
        600: "600";
        700: "700";
        710: "710";
    }>>;
    referenceDocument2: z.ZodOptional<z.ZodString>;
    referenceDocumentType2: z.ZodOptional<z.ZodEnum<{
        100: "100";
        200: "200";
        210: "210";
        300: "300";
        305: "305";
        320: "320";
        325: "325";
        330: "330";
        340: "340";
        400: "400";
        410: "410";
        420: "420";
        430: "430";
        500: "500";
        600: "600";
        700: "700";
        710: "710";
    }>>;
    valueDate: z.ZodOptional<z.ZodString>;
    counterAccountKey: z.ZodOptional<z.ZodString>;
    debitCreditIndicator: z.ZodOptional<z.ZodEnum<{
        1: "1";
        2: "2";
    }>>;
    currencyCode: z.ZodOptional<z.ZodEnum<{
        AUD: "AUD";
        CAD: "CAD";
        EUR: "EUR";
        GBP: "GBP";
        ILS: "ILS";
        JPY: "JPY";
        SEK: "SEK";
        USD: "USD";
        CHF: "CHF";
        CNY: "CNY";
        RUB: "RUB";
        BRL: "BRL";
        HKD: "HKD";
        SGD: "SGD";
        THB: "THB";
        MXN: "MXN";
        TRY: "TRY";
        NZD: "NZD";
        NOK: "NOK";
        DKK: "DKK";
        KRW: "KRW";
        INR: "INR";
        PLN: "PLN";
        ZAR: "ZAR";
        CZK: "CZK";
        HUF: "HUF";
    }>>;
    transactionAmount: z.ZodOptional<z.ZodNumber>;
    foreignCurrencyAmount: z.ZodOptional<z.ZodNumber>;
    quantityField: z.ZodOptional<z.ZodNumber>;
    matchingField1: z.ZodOptional<z.ZodString>;
    matchingField2: z.ZodOptional<z.ZodString>;
    branchId: z.ZodOptional<z.ZodString>;
    entryDate: z.ZodOptional<z.ZodString>;
    operatorUsername: z.ZodOptional<z.ZodString>;
    reserved: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export declare const AccountSchema: z.ZodObject<{
    id: z.ZodString;
    name: z.ZodOptional<z.ZodString>;
    sortCode: z.ZodObject<{
        key: z.ZodString;
        name: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>;
    address: z.ZodOptional<z.ZodObject<{
        street: z.ZodOptional<z.ZodString>;
        houseNumber: z.ZodOptional<z.ZodString>;
        city: z.ZodOptional<z.ZodString>;
        zip: z.ZodOptional<z.ZodString>;
        country: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    countryCode: z.ZodOptional<z.ZodString>;
    parentAccountKey: z.ZodOptional<z.ZodString>;
    vatId: z.ZodOptional<z.ZodString>;
    accountOpeningBalance: z.ZodNumber;
    totalDebits: z.ZodOptional<z.ZodNumber>;
    totalCredits: z.ZodOptional<z.ZodNumber>;
    accountingClassificationCode: z.ZodOptional<z.ZodString>;
    branchId: z.ZodOptional<z.ZodString>;
    openingBalanceForeignCurrency: z.ZodOptional<z.ZodNumber>;
    foreignCurrencyCode: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export declare const InventoryItemSchema: z.ZodObject<{
    id: z.ZodString;
    name: z.ZodString;
    quantity: z.ZodNumber;
}, z.core.$strip>;
export declare const ReportInputSchema: z.ZodObject<{
    business: z.ZodObject<{
        businessId: z.ZodString;
        name: z.ZodString;
        taxId: z.ZodString;
        address: z.ZodOptional<z.ZodObject<{
            street: z.ZodOptional<z.ZodString>;
            houseNumber: z.ZodOptional<z.ZodString>;
            city: z.ZodOptional<z.ZodString>;
            zip: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        reportingPeriod: z.ZodObject<{
            startDate: z.ZodString;
            endDate: z.ZodString;
        }, z.core.$strip>;
    }, z.core.$strip>;
    documents: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        type: z.ZodEnum<{
            100: "100";
            200: "200";
            210: "210";
            300: "300";
            305: "305";
            320: "320";
            325: "325";
            330: "330";
            340: "340";
            400: "400";
            410: "410";
            420: "420";
            430: "430";
            500: "500";
            600: "600";
            700: "700";
            710: "710";
        }>;
        date: z.ZodString;
        amount: z.ZodNumber;
        description: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    journalEntries: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        date: z.ZodString;
        amount: z.ZodNumber;
        accountId: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        transactionNumber: z.ZodOptional<z.ZodNumber>;
        transactionLineNumber: z.ZodOptional<z.ZodNumber>;
        batchNumber: z.ZodOptional<z.ZodNumber>;
        transactionType: z.ZodOptional<z.ZodString>;
        referenceDocument: z.ZodOptional<z.ZodString>;
        referenceDocumentType: z.ZodOptional<z.ZodEnum<{
            100: "100";
            200: "200";
            210: "210";
            300: "300";
            305: "305";
            320: "320";
            325: "325";
            330: "330";
            340: "340";
            400: "400";
            410: "410";
            420: "420";
            430: "430";
            500: "500";
            600: "600";
            700: "700";
            710: "710";
        }>>;
        referenceDocument2: z.ZodOptional<z.ZodString>;
        referenceDocumentType2: z.ZodOptional<z.ZodEnum<{
            100: "100";
            200: "200";
            210: "210";
            300: "300";
            305: "305";
            320: "320";
            325: "325";
            330: "330";
            340: "340";
            400: "400";
            410: "410";
            420: "420";
            430: "430";
            500: "500";
            600: "600";
            700: "700";
            710: "710";
        }>>;
        valueDate: z.ZodOptional<z.ZodString>;
        counterAccountKey: z.ZodOptional<z.ZodString>;
        debitCreditIndicator: z.ZodOptional<z.ZodEnum<{
            1: "1";
            2: "2";
        }>>;
        currencyCode: z.ZodOptional<z.ZodEnum<{
            AUD: "AUD";
            CAD: "CAD";
            EUR: "EUR";
            GBP: "GBP";
            ILS: "ILS";
            JPY: "JPY";
            SEK: "SEK";
            USD: "USD";
            CHF: "CHF";
            CNY: "CNY";
            RUB: "RUB";
            BRL: "BRL";
            HKD: "HKD";
            SGD: "SGD";
            THB: "THB";
            MXN: "MXN";
            TRY: "TRY";
            NZD: "NZD";
            NOK: "NOK";
            DKK: "DKK";
            KRW: "KRW";
            INR: "INR";
            PLN: "PLN";
            ZAR: "ZAR";
            CZK: "CZK";
            HUF: "HUF";
        }>>;
        transactionAmount: z.ZodOptional<z.ZodNumber>;
        foreignCurrencyAmount: z.ZodOptional<z.ZodNumber>;
        quantityField: z.ZodOptional<z.ZodNumber>;
        matchingField1: z.ZodOptional<z.ZodString>;
        matchingField2: z.ZodOptional<z.ZodString>;
        branchId: z.ZodOptional<z.ZodString>;
        entryDate: z.ZodOptional<z.ZodString>;
        operatorUsername: z.ZodOptional<z.ZodString>;
        reserved: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    accounts: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        name: z.ZodOptional<z.ZodString>;
        sortCode: z.ZodObject<{
            key: z.ZodString;
            name: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>;
        address: z.ZodOptional<z.ZodObject<{
            street: z.ZodOptional<z.ZodString>;
            houseNumber: z.ZodOptional<z.ZodString>;
            city: z.ZodOptional<z.ZodString>;
            zip: z.ZodOptional<z.ZodString>;
            country: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>;
        countryCode: z.ZodOptional<z.ZodString>;
        parentAccountKey: z.ZodOptional<z.ZodString>;
        vatId: z.ZodOptional<z.ZodString>;
        accountOpeningBalance: z.ZodNumber;
        totalDebits: z.ZodOptional<z.ZodNumber>;
        totalCredits: z.ZodOptional<z.ZodNumber>;
        accountingClassificationCode: z.ZodOptional<z.ZodString>;
        branchId: z.ZodOptional<z.ZodString>;
        openingBalanceForeignCurrency: z.ZodOptional<z.ZodNumber>;
        foreignCurrencyCode: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    inventory: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        name: z.ZodString;
        quantity: z.ZodNumber;
    }, z.core.$strip>>;
}, z.core.$strip>;
export declare const ReportOutputSchema: z.ZodObject<{
    iniText: z.ZodString;
    dataText: z.ZodString;
    iniFile: z.ZodCustom<File, File>;
    dataFile: z.ZodCustom<File, File>;
    summary: z.ZodObject<{
        totalRecords: z.ZodNumber;
        perType: z.ZodRecord<z.ZodString, z.ZodNumber>;
        errors: z.ZodOptional<z.ZodArray<z.ZodObject<{
            recordType: z.ZodString;
            recordIndex: z.ZodNumber;
            field: z.ZodString;
            message: z.ZodString;
        }, z.core.$strip>>>;
    }, z.core.$strip>;
}, z.core.$strip>;
export type DocumentType = z.infer<typeof DocumentTypeEnum>;
export type BusinessMetadata = z.infer<typeof BusinessMetadataSchema>;
export type Document = z.infer<typeof DocumentSchema>;
export type JournalEntry = z.infer<typeof JournalEntrySchema>;
export type Account = z.infer<typeof AccountSchema>;
export type InventoryItem = z.infer<typeof InventoryItemSchema>;
export type ReportInput = z.infer<typeof ReportInputSchema>;
export type ReportOutput = z.infer<typeof ReportOutputSchema>;
export interface ValidationError {
    recordType: string;
    recordIndex: number;
    field: string;
    message: string;
    value?: unknown;
}
export interface GenerationOptions {
    validationMode?: 'fail-fast' | 'collect-all';
    fileNameBase?: string;
}
