Files
dmed/examples/comparador.rs
T

77 lines
2.7 KiB
Rust

// Exemplo de como usar a lib dmed em um comparador
use dmed::{processar_arquivo, Pessoa, buscar_por_cpf};
use std::collections::HashMap;
fn main() -> std::io::Result<()> {
// Processa dois arquivos diferentes
println!("=== COMPARADOR DE ARQUIVOS DMED ===\n");
let arquivo1 = "LfsIssDmed068325.txt";
let pessoas1 = processar_arquivo(arquivo1)?;
println!("Arquivo 1: {} registros", pessoas1.len());
// let pessoas2 = processar_arquivo("arquivo2.txt")?;
// println!("Arquivo 2: {} registros\n", pessoas2.len());
// Cria um mapa de CPF -> Pessoa para busca rápida
let mapa1: HashMap<&str, &Pessoa> = pessoas1
.iter()
.map(|p| (p.cpf.as_str(), p))
.collect();
// Exemplo 1: Buscar CPF específico
println!("=== Busca de CPF ===");
let cpf_busca = "00276808860";
if let Some(pessoa) = buscar_por_cpf(&pessoas1, cpf_busca) {
println!("✓ CPF {} encontrado", cpf_busca);
println!(" Nome: {}", pessoa.nome);
println!(" Valor: R$ {:.2}", pessoa.valor);
}
// Exemplo 2: Comparar valores de mesmos CPFs entre arquivos
println!("\n=== Comparação de valores ===");
// Simulando segundo arquivo com mesmos CPFs mas valores diferentes
let cpfs_exemplo = ["00276808860", "00633999032", "01133252826"];
for cpf in &cpfs_exemplo {
if let Some(p1) = mapa1.get(cpf) {
println!("\nCPF: {}", cpf);
println!(" Arquivo 1: R$ {:.2}", p1.valor);
// if let Some(p2) = mapa2.get(cpf) {
// let diferenca = p2.valor - p1.valor;
// println!(" Arquivo 2: R$ {:.2}", p2.valor);
// println!(" Diferença: R$ {:.2} ({:+.1}%)",
// diferenca,
// (diferenca / p1.valor) * 100.0
// );
// }
}
}
// Exemplo 3: Encontrar divergências
println!("\n=== Análise de divergências ===");
let total_registros = pessoas1.len();
let com_valor = pessoas1.iter().filter(|p| p.valor > 0.0).count();
let sem_valor = total_registros - com_valor;
println!("Total de registros: {}", total_registros);
println!("Com valor: {}", com_valor);
println!("Sem valor: {}", sem_valor);
// Exemplo 4: Top 5 maiores valores
println!("\n=== Top 5 maiores valores ===");
let mut pessoas_sorted = pessoas1.clone();
pessoas_sorted.sort_by(|a, b| b.valor.partial_cmp(&a.valor).unwrap());
for (i, pessoa) in pessoas_sorted.iter().take(5).enumerate() {
println!("{}. {} - R$ {:.2}",
i + 1,
pessoa.nome,
pessoa.valor
);
}
Ok(())
}