/**
 * Representa os dados do beneficiário no formato da aplicação.
 */
export interface BeneficiarioData {
    identificador: string;
    inscricao: string;
    tipo: 'F' | 'J';
    convenio: string;
    nome: string;
}
/**
 * Representa um endereço.
 */
export interface Endereco {
    cep: string | null;
    logradouro: string | null;
    numero: string | null;
    complemento: string | null;
    bairro: string | null;
    cidade: string | null;
    uf: string | null;
}
/**
 * Representa os dados do pagador no formato da aplicação.
 */
export interface PagadorData {
    tipo_inscricao: '1' | '2';
    inscricao: string;
    nome: string;
    email: string | null;
    endereco: Endereco;
}
/**
 * Representa os dados do sacador no formato da aplicação.
 */
export interface SacadorData {
    tipo_inscricao: '1' | '2' | null;
    inscricao: string | null;
    nome: string | null;
    email: string | null;
    endereco: Endereco;
}
/**
 * Representa os dados do documento/título no formato da aplicação.
 */
export interface DocumentoData {
    numero: string;
    nosso_numero: string;
    especie: string;
    valor: string;
    data_emissao: string;
    data_vencimento: string;
    data_processamento: string;
    mensagem: string;
    pagamento_parcial: {
        permitido: boolean | null;
        quantidade: number | null;
    };
    protesto: any | null;
    multa: any | null;
    juros: any | null;
    desconto: any | null;
    pix_cobranca: any | null;
}
/**
 * Representa o payload completo para a criação de um boleto no formato da sua aplicação.
 */
export interface BoletoPayload {
    dadosBeneficiario: BeneficiarioData;
    dados: {
        pagador: PagadorData;
        sacador: SacadorData | null;
        documento: DocumentoData;
    };
}
/**
 * Representa o estado parcial do boleto durante a construção com o Builder.
 * Esta interface permite que as propriedades sejam adicionadas gradualmente.
 */
export interface BoletoBuilderPayload {
    dadosBeneficiario?: BeneficiarioData;
    dados?: {
        pagador?: PagadorData;
        sacador?: SacadorData | null;
        documento?: DocumentoData;
    };
}
/**
 * Configuração inicial para o SDK do Citibank.
 */
export interface CitiBankSDKConfig {
    certPath: string;
    keyPath: string;
    rejectUnauthorized?: boolean;
    timeout?: number;
    baseURL?: string;
    debug?: boolean;
    validateSchema?: boolean;
}
/**
 * Representa a estrutura de dados completa para o registro de um boleto,
 * seguindo o layout do arquivo "Layout Cobrança XML_v2.2 1.pdf".
 */
export interface BoletoData {
    GrpBenf: {
        CdtrNm: string;
        CdtrTaxId: string;
        CdtrTaxTp: 'F' | 'J';
        CdtrId: string;
    };
    GrpClPgd: {
        DbtrNm: string;
        DbtrTaxId: string;
        DbtrTaxTp: 'F' | 'J';
        GrpClPgdAdr: {
            DbtrAdrTp: string;
            DbtrCtrySubDvsn: string;
            DbtrPstCd: string;
            DbtrTwnNm: string;
        };
    };
    DbtrGrntNm?: string | null;
    DbtrMsg?: string | null;
    TitlAmt: number;
    TitlBarCdInd: '0' | '1' | '4';
    TitlCcyCd: '09';
    TitlCiaCdId: string;
    TitlDueDt: string;
    TitlInstrNmDtExec?: string;
    TitlInstrProtInd?: '1' | '';
    TitlInstrWrtOffInd?: '1' | '2' | '';
    TitlIOFAmt?: number;
    TitlIssDt: string;
    TitlOurNb: string;
    TitlPortCd: '1';
    TitlRbtAmt?: number;
    TitlTpCd: '03' | any;
    TitlYourNb: string;
    GrpDscnt?: Array<{
        TitlDscntAmtOrPrct: number;
        TitlDscntEndDt?: string;
        TitlDscntTp: '1' | '2';
    }>;
    GrpItrs?: {
        TitlItrsAmtOrPrct: number;
        TitlItrsStrDt?: string;
        TitlItrsTp: '1' | '3';
    };
    GrpFn?: {
        TitlFnAmtOrPrct: number;
        TitlFnStrDt?: string;
        TitlFnTp: '1' | '2';
    };
}
/**
 * Resposta em caso de sucesso no registro (actionCode = "0").
 */
export interface SuccessResponse {
    success: Boolean;
    message?: string;
    barcode: string;
    linhaDigitavel: string;
    linhaDigitavelFormatada?: string;
}
/**
 * Detalhe de um erro específico na resposta (actionCode = "99").
 */
export interface ErrorDetail {
    errorCode: string;
    fieldName: string;
    description: string;
}
/**
 * Resposta em caso de erro de negócio (actionCode = "99").
 */
export interface ErrorResponse {
    success: Boolean;
    errorCode: '99';
    reason: string;
    errors: ErrorDetail[];
}
/**
 * Resposta para erros de infraestrutura (HTTP 500), no formato SOAP Fault.
 */
export interface SoapFaultResponse {
    httpStatus: number;
    faultCode: string;
    faultString: string;
}
export type ApiResponse = SuccessResponse | ErrorResponse | SoapFaultResponse;
