- 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.
211 lines
5.5 KiB
Markdown
211 lines
5.5 KiB
Markdown
# 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<Vec<Pessoa>>
|
|
|
|
// Processa string (útil para testes)
|
|
pub fn processar_conteudo(conteudo: &str) -> io::Result<Vec<Pessoa>>
|
|
```
|
|
|
|
#### Processamento XLS
|
|
```rust
|
|
// 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
|
|
```rust
|
|
// 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
|
|
|
|
```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!
|