cnj-validate
Version:
Biblioteca TypeScript para validação e análise de números de processos em conformidade com o CNJ (Conselho Nacional de Justiça) do Brasil
277 lines • 8.66 kB
TypeScript
/**
* Estrutura principal de análise CNJ contendo todas as informações processadas
*
* @description
* Interface completa que retorna análise detalhada de um número CNJ,
* incluindo validação, decomposição e informações jurisdicionais.
*
* @example
* ```typescript
* import { analyzeCNJ, AnalysisCNJ } from 'cnj-validate'
*
* const analysis: AnalysisCNJ = analyzeCNJ('0001327-64.2018.8.26.0158')
* console.log(analysis.segmentName) // "Justiça dos Estados..."
* console.log(analysis.detailed.district) // "São Paulo"
* ```
*/
export interface AnalysisCNJ {
/** CNJ original recebido para análise */
readonly receivedCNJ: string;
/** Indica se o CNJ possui dígito verificador válido */
readonly validCNJ: boolean;
/** Nome completo do segmento do Poder Judiciário */
readonly segmentName: string;
/** Nome curto/sigla do segmento */
readonly segmentShort: string;
/** Tipo da unidade de origem (foro, vara, etc.) */
readonly sourceUnitType: string;
/** Número da unidade de origem */
readonly sourceUnitNumber: string;
/** Tipo do tribunal de origem */
readonly courtType: string;
/** Número/código do tribunal de origem */
readonly courtNumber: string;
/** Informações detalhadas decompostas do CNJ */
readonly detailed: DecomposedCNJ;
}
/**
* CNJ decomosto em seus componentes individuais
* Formato: [NNNNNNN]-[DD].[AAAA].[J].[CT].[0000]
*/
export interface DecomposedCNJ {
/** CNJ no formato completo padronizado */
lawsuitCNJFormat: string;
/** Número sequencial do processo (NNNNNNN) */
lawsuitNumber: string;
/** Dígito verificador (DD) */
verifyingDigit: string;
/** Ano de protocolo do processo (AAAA) */
protocolYear: string;
/** Código do segmento do Poder Judiciário (J) */
segment: string;
/** Código do tribunal (CT) */
court: string;
/** Código da unidade de origem (0000) */
sourceUnit: string;
/** Número de argumento para cálculo do dígito verificador */
argNumber: string;
/** Nome do distrito/comarca onde o processo foi proposto */
district: string;
/** Sigla da Unidade Federativa */
uf: string;
/** Sigla do tribunal (TJ, STJ, TRF, etc.) */
tj: string;
}
/**
* Resultado de validação simples
*
* @example
* ```typescript
* const result: ValidationResult = validateCNJ('0001327-64.2018.8.26.0158')
* if (result.isValid) {
* console.log('CNJ válido!')
* } else {
* console.log(`Erro: ${result.error}`)
* }
* ```
*/
export interface ValidationResult {
/** Indica se o CNJ é válido */
readonly isValid: boolean;
/** Dígito verificador esperado (quando calculável) */
readonly expectedDigit?: string;
/** Dígito verificador recebido no CNJ */
readonly receivedDigit?: string;
/** Mensagem de erro se inválido */
readonly error?: string;
/** Código do erro (para tratamento programático) */
readonly errorCode?: string;
}
/**
* Opções para processamento CSV
*
* @example
* ```typescript
* const options: CSVOptions = {
* separator: ';',
* includeHeader: true,
* encoding: 'utf8'
* }
* await processFile('input.csv', 'output.csv', options)
* ```
*/
export interface CSVOptions {
/** Separador de campos (padrão: ',') */
readonly separator?: ',' | ';' | '\t' | '|';
/** Inclui cabeçalho no arquivo de saída (padrão: true) */
readonly includeHeader?: boolean;
/** Nome do arquivo de saída (opcional) */
readonly outputFileName?: string;
/** Codificação do arquivo (padrão: 'utf8') */
readonly encoding?: 'utf8' | 'latin1' | 'ascii';
}
/**
* Erro encontrado durante processamento CSV
*/
export interface CSVProcessingError {
/** Número da linha onde ocorreu o erro */
readonly line: number;
/** CNJ que causou o erro */
readonly cnj: string;
/** Descrição do erro */
readonly error: string;
/** Tipo do erro (opcional) */
readonly type?: string;
}
/**
* Estatísticas de processamento CSV
*/
export interface CSVStatistics {
/** Total de registros processados */
readonly totalProcessed: number;
/** Número de CNJs válidos */
readonly validCount: number;
/** Número de CNJs inválidos */
readonly invalidCount: number;
/** Tempo de processamento em milissegundos */
readonly processingTimeMs: number;
/** Taxa de sucesso (0-1) */
readonly successRate: number;
/** CNJs processados por segundo */
readonly throughputPerSecond: number;
}
/**
* Resultado de processamento CSV (versão compatível)
*
* @example
* ```typescript
* const result: CSVProcessingResult = processCSV(content)
* console.log(`Processados: ${result.totalProcessed}`)
* console.log(`Válidos: ${result.validCount}`)
* ```
*/
export interface CSVProcessingResult {
/** Total de registros processados */
readonly totalProcessed: number;
/** Número de CNJs válidos */
readonly validCount: number;
/** Número de CNJs inválidos */
readonly invalidCount: number;
/** Lista de erros encontrados */
readonly errors: readonly CSVProcessingError[];
/** Caminho do arquivo de saída gerado */
readonly outputPath?: string;
}
/**
* Resultado avançado de processamento CSV com estatísticas detalhadas
*
* @example
* ```typescript
* const result: CSVProcessingResultAdvanced = await processFileAdvanced('data.csv')
* console.log(`Taxa de sucesso: ${(result.statistics.successRate * 100).toFixed(1)}%`)
* console.log(`Velocidade: ${result.statistics.throughputPerSecond} CNJs/segundo`)
* ```
*/
export interface CSVProcessingResultAdvanced {
/** Estatísticas detalhadas do processamento */
readonly statistics: CSVStatistics;
/** Lista de erros encontrados */
readonly errors: readonly CSVProcessingError[];
/** Caminho do arquivo de saída gerado */
readonly outputPath?: string;
/** Indica se o processamento foi bem-sucedido */
readonly success: boolean;
/** Resultado base para compatibilidade */
readonly base: CSVProcessingResult;
}
/**
* Formatos de entrada aceitos para CNJ
*/
export type CNJFormat = 'formatted' | 'unformatted' | 'mixed';
/**
* Tipo de retorno para funções que podem falhar
*
* @template T Tipo dos dados de sucesso
* @template E Tipo do erro
*/
export type Result<T, E = Error> = {
readonly success: true;
readonly data: T;
} | {
readonly success: false;
readonly error: E;
};
/**
* Tipos utilitários para trabalhar com CNJs
*/
export declare namespace CNJTypes {
/** String representando um CNJ válido */
type ValidCNJ = string & {
readonly __brand: 'ValidCNJ';
};
/** String representando um CNJ formatado */
type FormattedCNJ = string & {
readonly __brand: 'FormattedCNJ';
};
/** String representando um CNJ sem formatação */
type UnformattedCNJ = string & {
readonly __brand: 'UnformattedCNJ';
};
/** Ano válido para protocolo (1998-atual) */
type ProtocolYear = number & {
readonly __brand: 'ProtocolYear';
};
/** Código de segmento válido (1-9) */
type SegmentCode = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
/** Dígito verificador válido (00-99) */
type VerifyingDigit = string & {
readonly __brand: 'VerifyingDigit';
};
}
/**
* Configurações de validação
*
* @example
* ```typescript
* const config: ValidationConfig = {
* strictMode: true,
* validateYear: true,
* minYear: 1998
* }
* ```
*/
export interface ValidationConfig {
/** Modo estrito de validação */
readonly strictMode?: boolean;
/** Permitir entrada formatada */
readonly allowFormattedInput?: boolean;
/** Permitir entrada sem formatação */
readonly allowUnformattedInput?: boolean;
/** Validar ano do protocolo */
readonly validateYear?: boolean;
/** Ano mínimo aceito */
readonly minYear?: number;
/** Ano máximo aceito */
readonly maxYear?: number;
}
/**
* Resultado de análise em lote
*/
export interface BatchAnalysisResult {
/** CNJs processados com sucesso */
readonly successful: readonly AnalysisCNJ[];
/** CNJs que falharam na análise */
readonly failed: readonly {
readonly cnj: string;
readonly error: string;
readonly index: number;
}[];
/** Estatísticas do processamento */
readonly statistics: {
readonly total: number;
readonly successful: number;
readonly failed: number;
readonly successRate: number;
};
}
//# sourceMappingURL=analysis.d.ts.map