import { DataSource } from 'typeorm';
import { PdfService } from '../pdf/pdf.service';
import { PackField, PackStage } from './pack.rules';
export interface PackFields {
    docReview?: string | null;
    prepareDate?: string | null;
    approvedDate?: string | null;
    numEmployees?: number | string | null;
    naceEacCodes?: string | null;
    md?: string | null;
    mdRisk?: 'Low' | 'Medium' | 'High' | string | null;
    technicalExpert?: string | null;
    date?: string | null;
    scheduleSlot?: 'MORNING' | 'AFTERNOON' | 'FULL' | string | null;
    leadAuditorId?: number | null;
    standardIds?: number[];
    expectedSurveillanceDate?: string | null;
    expectedIADate?: string | null;
    expectedMRMDate?: string | null;
    expectedInitialInquiryDate?: string | null;
    expectedInitial_Stage1_Date?: string | null;
}
export interface GenerateBody {
    audit_schedule_row_id: number;
    stage: PackStage;
    forms: string[];
    fields: PackFields;
    pack_id?: number;
}
export declare class CompanyDocumentsService {
    private readonly db;
    private readonly cert;
    private readonly pdf;
    private readonly logger;
    private queue;
    constructor(db: DataSource, cert: DataSource, pdf: PdfService);
    canUse(userId: number): Promise<boolean>;
    private assertCanUse;
    private fileExists;
    catalogue(): {
        key: string;
        stage: PackStage;
        title: string;
        form_no: string | null;
        fields: PackField[];
        variant_for: string | null;
        for_std: import("./pack.rules").StdKey | null;
    }[];
    listAudits(companyId: number, userId: number): Promise<{
        company: any;
        audits: {
            id: any;
            audit_code: any;
            audit_type: any;
            audit_stage: any;
            audit_mode: any;
            status: any;
            schedule_date: any;
            audit_time: any;
            lead_auditor_id: any;
            lead_auditor: any;
            standards: {
                id: any;
                name: any;
                title: any;
            }[];
            default_stage: PackStage;
            default_forms: {
                stage1: string[];
                stage2: string[];
            };
            prefill: {
                date: any;
                scheduleSlot: string;
                leadAuditorId: any;
                standardIds: any[];
                expectedSurveillanceDate: string | null;
                expectedIADate: string | null;
                expectedMRMDate: string | null;
                expectedInitialInquiryDate: any;
                expectedInitial_Stage1_Date: any;
                docReview: string;
                prepareDate: string;
            };
        }[];
        catalogue: {
            key: string;
            stage: PackStage;
            title: string;
            form_no: string | null;
            fields: PackField[];
            variant_for: string | null;
            for_std: import("./pack.rules").StdKey | null;
        }[];
        packs: any[];
        can_generate: boolean;
    }>;
    listPacks(companyId: number, userId: number): Promise<any[]>;
    private listPacksRaw;
    codebook(q: string): Promise<any>;
    generate(companyId: number, body: GenerateBody, userId: number): Promise<any>;
    getPackForUser(packId: number, userId: number): Promise<any>;
    private getPack;
    filePath(packId: number, which: string, userId: number): Promise<{
        abs: string;
        name: string;
        type: string;
    }>;
    private runPack;
    private zip;
    private buildContext;
    private templateData;
    private saveJob;
    private nextJobCode;
    private cleanFields;
    private json;
    private isMissingTable;
    static readonly FIELD_LIST: PackField[];
}
