# 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`: ```toml [dependencies] dmed = { path = "../dmed" } ``` ### Como biblioteca ```rust 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) ```bash cargo run --example comparador ``` #### 2. Comparador completo (TXT + XLS) ```bash # Coloque o arquivo RELATORIO_PROSOFT_MOD_51.xls na pasta do projeto cargo run --example comparador_completo ``` #### 3. Main (demonstração) ```bash 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 ```rust 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 ```rust // Processa arquivo TXT pub fn processar_arquivo(caminho: &str) -> io::Result> // Processa string (útil para testes) pub fn processar_conteudo(conteudo: &str) -> io::Result> ``` #### Processamento XLS ```rust // Processa arquivo XLS/XLSX (módulo xls) pub fn processar_xls(caminho: &str) -> io::Result> ``` **Nota:** Aceita tanto `.xls` quanto `.xlsx` - a detecção é automática! #### Utilidades ```rust // Converte para JSON pub fn para_json(pessoas: &[Pessoa]) -> Result // 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 ```bash 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!