Files
dmed/README.md
T
FelipeCN 3a888a058f feat: add DMED comparador library with TXT and XLS processing
- Implemented TXT processor for DMED files, extracting RPPSS records.
- Added XLS processor for Prosoft reports, supporting both XLS and XLSX formats.
- Created a comparison tool to identify discrepancies between TXT and XLS data.
- Developed a GUI using eframe for user-friendly interaction.
- Included detailed README documentation for setup and usage instructions.
- Added error handling for file processing and improved data extraction methods.
- Implemented tests for data processing functions and utilities.
- Introduced a build script for Windows resource management.
- Added example scripts for basic and complete comparisons.
- Included a report generation feature for discrepancies found during comparisons.
2026-01-30 10:42:23 -03:00

5.5 KiB

DMED - Comparador TXT vs XLS

Biblioteca Rust para processar e comparar arquivos DMED (TXT) com relatórios Prosoft (XLS).

📋 Funcionalidades

1️⃣ Processador TXT (DMED)

  • Lê arquivos TXT do formato DMED
  • Extrai registros RPPSS (CPF, Nome, Valor)
  • Pula as 4 primeiras linhas automaticamente
  • Converte valores (últimos 2 dígitos são decimais)

2️⃣ Processador XLS (Prosoft)

  • Lê arquivos XLS e XLSX (detecção automática)
  • Extrai CPF (coluna E) e Valor (coluna H)
  • Remove formatação de CPF (pontos e hífens)
  • Agrupa por CPF e soma valores de múltiplas notas
  • Filtra apenas CPF (11 dígitos), descarta CNPJ

3️⃣ Comparador

  • Compara valores entre TXT e XLS
  • Identifica divergências
  • Gera relatório detalhado
  • Estatísticas completas

🚀 Como usar

Instalação

Adicione ao seu Cargo.toml:

[dependencies]
dmed = { path = "../dmed" }

Como biblioteca

use dmed::{processar_arquivo, xls::processar_xls};

fn main() -> std::io::Result<()> {
    // Processa TXT
    let pessoas_txt = processar_arquivo("LfsIssDmed068325.txt")?;
    
    // Processa XLS
    let pessoas_xls = processar_xls("RELATORIO_PROSOFT_MOD_51.xls")?;
    
    // Comparar, buscar, etc.
    Ok(())
}

Executar exemplos

1. Comparador básico (só TXT)

cargo run --example comparador

2. Comparador completo (TXT + XLS)

# Coloque o arquivo RELATORIO_PROSOFT_MOD_51.xls na pasta do projeto
cargo run --example comparador_completo

3. Main (demonstração)

cargo run

📁 Estrutura do projeto

dmed/
├── src/
│   ├── lib.rs          # API principal
│   ├── xls.rs          # Processador XLS
│   └── main.rs         # Exemplo de uso
├── examples/
│   ├── comparador.rs           # Exemplo com TXT
│   └── comparador_completo.rs  # Exemplo TXT vs XLS
├── Cargo.toml
└── README.md

🔧 API Pública

Structs

pub struct Pessoa {
    pub cpf: String,    // CPF (11 dígitos, sem formatação)
    pub nome: String,   // Nome completo
    pub valor: f64,     // Valor em reais
}

Funções

Processamento TXT

// Processa arquivo TXT
pub fn processar_arquivo(caminho: &str) -> io::Result<Vec<Pessoa>>

// Processa string (útil para testes)
pub fn processar_conteudo(conteudo: &str) -> io::Result<Vec<Pessoa>>

Processamento XLS

// Processa arquivo XLS/XLSX (módulo xls)
pub fn processar_xls(caminho: &str) -> io::Result<Vec<Pessoa>>

Nota: Aceita tanto .xls quanto .xlsx - a detecção é automática!

Utilidades

// Converte para JSON
pub fn para_json(pessoas: &[Pessoa]) -> Result<String, serde_json::Error>

// Busca por CPF
pub fn buscar_por_cpf<'a>(pessoas: &'a [Pessoa], cpf: &str) -> Option<&'a Pessoa>

// Filtra por valor mínimo
pub fn filtrar_por_valor_minimo(pessoas: &[Pessoa], valor_minimo: f64) -> Vec<&Pessoa>

📊 Formato dos arquivos

TXT (DMED)

Dmed|2026|2025|N|||                                    <- Linha 1 (pular)
RESPO|...|...                                          <- Linha 2 (pular)
DECPJ|...|...                                          <- Linha 3 (pular)
PSS|                                                   <- Linha 4 (pular)
RPPSS|00276808860|MARCO ANTONIO MACHADO|2200000|      <- Processar
RPPSS|00633999032|ELISANDRA BARBOSA TORRES|600000|    <- Processar
...

Campos:

  • Campo 1: RPPSS (filtro)
  • Campo 2: CPF (11 dígitos)
  • Campo 3: Nome
  • Campo 4: Valor (últimos 2 dígitos = decimais)

XLS (Prosoft)

A B C D E (CPF) F G H (Valor)
... ... ... ... 123.456.789-01 ... ... 1500.50
... ... ... ... 123.456.789-01 ... ... 500.00
  • Linhas 1-3: Identificação (pular)
  • Linha 4: Cabeçalho (pular)
  • Coluna E: CPF/CNPJ (manter apenas CPF)
  • Coluna H: Valores (somar por CPF)

🧪 Testes

cargo test

📝 Exemplo de saída

═══════════════════════════════════════════════
   COMPARADOR DMED (TXT) vs PROSOFT (XLS)
═══════════════════════════════════════════════

📄 Processando arquivo TXT (DMED)...
   ✓ 336 registros encontrados

📊 Processando arquivo XLS (Prosoft)...
   ✓ 245 registros únicos encontrados

═══════════════════════════════════════════════
                   ANÁLISE
═══════════════════════════════════════════════

📊 Estatísticas:
   Total de CPFs únicos: 400
   Presentes em ambos: 181
   Apenas no TXT: 155
   Apenas no XLS: 64

📈 Divergências de valores:
   Total: 12 registros com diferenças

═══════════════════════════════════════════════
            TOP 10 DIVERGÊNCIAS
═══════════════════════════════════════════════

1. CPF: 00276808860
   Nome: MARCO ANTONIO MACHADO
   TXT (DMED):    R$    22000.00
   XLS (Prosoft): R$    22500.00
   Diferença:     R$      500.00 (+2.3%)
...

📄 Licença

MIT

🤝 Contribuindo

Pull requests são bem-vindos!