This commit is contained in:
gpt-engineer-app[bot] 2025-11-25 23:08:15 +00:00
parent 40c8d44778
commit d118161389

View File

@ -12,6 +12,7 @@ export async function parseCSV(file: File, contaBancariaId?: string): Promise<Tr
Papa.parse(file, { Papa.parse(file, {
header: true, header: true,
skipEmptyLines: true, skipEmptyLines: true,
delimiter: ';', // Suporta CSV com ponto e vírgula
complete: (results) => { complete: (results) => {
try { try {
const transacoes: TransacaoImportada[] = []; const transacoes: TransacaoImportada[] = [];
@ -25,8 +26,8 @@ export async function parseCSV(file: File, contaBancariaId?: string): Promise<Tr
const primeiraLinha = data[0]; const primeiraLinha = data[0];
const colunas = Object.keys(primeiraLinha); const colunas = Object.keys(primeiraLinha);
// Encontrar colunas relevantes // Encontrar colunas relevantes (suporta nomes com acentos e espaços)
const colunaData = detectarColuna(colunas, ['data', 'date', 'quando', 'dt']); const colunaData = detectarColuna(colunas, ['data', 'date', 'quando', 'dt', 'lancamento']);
const colunaDescricao = detectarColuna(colunas, ['descricao', 'description', 'historico', 'memo', 'estabelecimento']); const colunaDescricao = detectarColuna(colunas, ['descricao', 'description', 'historico', 'memo', 'estabelecimento']);
const colunaValor = detectarColuna(colunas, ['valor', 'value', 'amount', 'quantia']); const colunaValor = detectarColuna(colunas, ['valor', 'value', 'amount', 'quantia']);
const colunaTipo = detectarColuna(colunas, ['tipo', 'type', 'natureza', 'credito', 'debito']); const colunaTipo = detectarColuna(colunas, ['tipo', 'type', 'natureza', 'credito', 'debito']);
@ -114,11 +115,20 @@ function parseData(dataStr: string): string | null {
} }
function parseValor(valorStr: string): number { function parseValor(valorStr: string): number {
// Remove símbolos de moeda, espaços e converte vírgula em ponto // Remove símbolos de moeda e espaços
const valorLimpo = valorStr let valorLimpo = valorStr.replace(/[R$\s€£¥]/g, '').trim();
.replace(/[R$\s€£¥]/g, '')
.replace(/\./g, '') // Detecta formato brasileiro (usa vírgula como decimal)
.replace(',', '.'); // Ex: 1.234,56 ou -2.390,22
if (valorLimpo.includes(',')) {
valorLimpo = valorLimpo.replace(/\./g, '').replace(',', '.');
}
// Senão, assume formato americano (ponto como decimal)
// Ex: 1234.56 ou 1,234.56
else if (valorLimpo.includes('.')) {
// Remove vírgulas de milhares se existirem
valorLimpo = valorLimpo.replace(/,/g, '');
}
return parseFloat(valorLimpo); return parseFloat(valorLimpo);
} }