1b7eca92072b091ef407edb404da09b90a880bd7
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!
Languages
Rust
100%