UNPKG

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

185 lines 5.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processCSV = processCSV; exports.generateCSV = generateCSV; exports.processCNJBatch = processCNJBatch; exports.validateCSVFormat = validateCSVFormat; const analyzer_1 = require("../core/analyzer"); /** * Processa arquivo CSV com números CNJ * @param csvContent Conteúdo do arquivo CSV * @param options Opções de processamento * @returns Resultado do processamento */ function processCSV(csvContent, options = {}) { const { separator = ',' } = options; const lines = csvContent.split('\n').filter((line) => line.trim()); const results = []; const errors = []; lines.forEach((line, index) => { const cnj = line.split(separator)[0]?.trim(); if (!cnj) { errors.push({ line: index + 1, cnj: line, error: 'Linha vazia ou CNJ não encontrado', }); return; } try { const analysis = (0, analyzer_1.analyzeCNJ)(cnj); results.push(analysis); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Erro desconhecido'; errors.push({ line: index + 1, cnj, error: errorMessage, }); // Adiciona resultado com erro para manter consistência results.push({ receivedCNJ: cnj, validCNJ: false, segmentName: errorMessage, segmentShort: 'ERRO', sourceUnitType: errorMessage, sourceUnitNumber: '', courtType: errorMessage, courtNumber: '', detailed: { lawsuitCNJFormat: '', lawsuitNumber: '', verifyingDigit: '', protocolYear: '', segment: '', court: '', sourceUnit: '', argNumber: '', district: '', uf: '', tj: '', }, }); } }); const validCount = results.filter((r) => r.validCNJ).length; const invalidCount = results.length - validCount; return { totalProcessed: lines.length, validCount, invalidCount, errors, }; } /** * Gera conteúdo CSV a partir de análises CNJ * @param analyses Array de análises * @param includeHeader Se deve incluir cabeçalho * @returns Conteúdo CSV formatado */ function generateCSV(analyses, includeHeader = true) { const headers = [ 'CNJ_original', 'CNJ_é_válido', 'Segmento', 'Segmento_short', 'Tipo_Unidade_Judiciária', 'Número_Unidade_Judiciária', 'Nome_Unidade_Judiciária', 'Tipo_Região', 'Número_Região', 'Nome_Região', 'Número_Processo', 'Dígito_Verificador', 'Ano_Protocolo', 'Poder_Judiciário', 'Região', 'Unidade_Judiciária', ]; const rows = analyses.map((analysis) => [ analysis.receivedCNJ, analysis.validCNJ ? 'true' : 'false', analysis.segmentName, analysis.segmentShort, analysis.sourceUnitType, analysis.sourceUnitNumber, analysis.detailed.district, analysis.courtType, analysis.courtNumber, analysis.detailed.uf, analysis.detailed.lawsuitNumber, analysis.detailed.verifyingDigit, analysis.detailed.protocolYear, analysis.detailed.segment, analysis.detailed.court, analysis.detailed.sourceUnit, ]); const lines = []; if (includeHeader) { lines.push(headers.join(',')); } rows.forEach((row) => { const escapedRow = row.map((cell) => { // Escapa células que contêm vírgulas ou aspas if (cell.includes(',') || cell.includes('"') || cell.includes('\n')) { return `"${cell.replace(/"/g, '""')}"`; } return cell; }); lines.push(escapedRow.join(',')); }); return lines.join('\n'); } /** * Processa array de CNJs em lote * @param cnjs Array de números CNJ * @returns Resultado do processamento */ function processCNJBatch(cnjs) { const results = []; const errors = []; cnjs.forEach((cnj, index) => { try { const analysis = (0, analyzer_1.analyzeCNJ)(cnj.trim()); results.push(analysis); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Erro desconhecido'; errors.push({ line: index + 1, cnj, error: errorMessage, }); } }); const validCount = results.filter((r) => r.validCNJ).length; const invalidCount = results.length - validCount; return { totalProcessed: cnjs.length, validCount, invalidCount, errors, }; } /** * Valida formato de arquivo CSV * @param content Conteúdo do arquivo * @param separator Separador esperado * @returns true se válido */ function validateCSVFormat(content, separator = ',') { if (!content || content.trim().length === 0) { return false; } const lines = content.split('\n').filter((line) => line.trim()); if (lines.length === 0) { return false; } // Verifica se todas as linhas têm pelo menos uma coluna return lines.every((line) => { const fields = line.split(separator); return fields.length > 0 && fields[0].trim().length > 0; }); } //# sourceMappingURL=processor.js.map