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
128 lines • 4.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.analyzeCNJ = analyzeCNJ;
exports.writeCNJ = writeCNJ;
exports.analyzeCNJBatch = analyzeCNJBatch;
exports.isValidCNJComplete = isValidCNJComplete;
exports.getBatchStatistics = getBatchStatistics;
const segments_1 = require("../data/segments");
const errors_1 = require("../types/errors");
const court_analyzer_1 = require("./court-analyzer");
const decomposer_1 = require("./decomposer");
const source_unit_analyzer_1 = require("./source-unit-analyzer");
const validator_1 = require("./validator");
/**
* Realiza análise completa de um número CNJ
* @param cnj Número CNJ a ser analisado
* @returns Estrutura AnalysisCNJ com todas as informações
*/
function analyzeCNJ(cnj) {
try {
// Decompõe o CNJ
const decomposed = (0, decomposer_1.decomposeCNJ)(cnj);
// Valida o CNJ
const validation = (0, validator_1.validateCNJ)(cnj);
// Obtém informações do segmento
const segment = (0, segments_1.getSegment)(decomposed.segment);
if (!segment) {
throw errors_1.CNJValidationError.invalidSegment(decomposed.segment);
}
// Obtém informações da unidade de origem
const sourceUnit = (0, source_unit_analyzer_1.getSourceUnit)(decomposed.sourceUnit, segment);
// Obtém informações do tribunal de origem
const originCourt = (0, court_analyzer_1.getOriginCourt)(decomposed.court, segment);
return {
receivedCNJ: cnj,
validCNJ: validation.isValid,
segmentName: segment.name,
segmentShort: segment.short,
sourceUnitType: sourceUnit.sourceUnitType,
sourceUnitNumber: sourceUnit.sourceUnitNumber,
courtType: originCourt.originCourtType,
courtNumber: originCourt.originCourtNumber,
detailed: decomposed,
};
}
catch (error) {
if (error instanceof errors_1.CNJValidationError) {
throw error;
}
throw new errors_1.CNJValidationError('CALCULATION_ERROR', error instanceof Error ? error.message : 'Erro desconhecido na análise', 'ANALYSIS_ERROR', { cnj });
}
}
/**
* Gera descrição textual de um processo CNJ
* @param analysis Análise CNJ completa
* @returns Descrição formatada do processo
*/
function writeCNJ(analysis) {
if (!analysis.detailed.lawsuitNumber) {
throw new Error('AnalysisCNJ não possui dados utilizáveis');
}
const lawsuit = analysis.detailed.lawsuitNumber;
const year = analysis.detailed.protocolYear;
const segment1 = analysis.segmentName;
const segment2 = analysis.segmentShort;
const sourceU1 = analysis.sourceUnitType;
const ct1 = analysis.courtType;
// Determina o nome da unidade de origem
const sourceU2 = analysis.detailed.district || analysis.sourceUnitNumber;
// Determina a identificação do tribunal
const ct2 = analysis.detailed.uf || analysis.courtNumber;
// Determina a preposição baseada na unidade de origem
const preposition = analysis.detailed.sourceUnit !== '8' ? 'o' : 'a';
return `Processo número: ${lawsuit}, protocolado n${preposition} ${sourceU1} de ${sourceU2}, no ano ${year} | ${ct1}: ${ct2} | ${segment1} (${segment2})`;
}
/**
* Analisa múltiplos CNJs
* @param cnjs Array de números CNJ
* @returns Array de análises
*/
function analyzeCNJBatch(cnjs) {
return cnjs.map((cnj) => {
try {
return analyzeCNJ(cnj);
}
catch (error) {
return {
error: error instanceof Error ? error.message : 'Erro desconhecido',
cnj,
};
}
});
}
/**
* Analisa CNJ e retorna apenas se é válido ou não
* @param cnj Número CNJ a ser analisado
* @returns true se válido, false se inválido
*/
function isValidCNJComplete(cnj) {
try {
const analysis = analyzeCNJ(cnj);
return analysis.validCNJ;
}
catch {
return false;
}
}
/**
* Obtém estatísticas de uma análise em lote
* @param analyses Array de análises ou erros
* @returns Estatísticas do processamento
*/
function getBatchStatistics(analyses) {
const total = analyses.length;
const errors = analyses.filter((item) => 'error' in item).length;
const valid = analyses.filter((item) => 'validCNJ' in item && item.validCNJ).length;
const invalid = analyses.filter((item) => 'validCNJ' in item && !item.validCNJ).length;
return {
total,
successful: total - errors,
errors,
valid,
invalid,
successRate: total > 0 ? ((total - errors) / total) * 100 : 0,
validityRate: total > 0 ? (valid / total) * 100 : 0,
};
}
//# sourceMappingURL=analyzer.js.map