Cruzar o UUID contra o IdDocumento no Excel
A lógica é cruzar duas listas: os UUID das notas marcadas como PPD, e os UUID que cada complemento de pagamento referencia no seu campo IdDocumento. Todo UUID de uma PPD que não apareça como IdDocumento em nenhum REP é uma nota sem complemento.
Passos
- Tire os dados de dentro do XML, não do nome do arquivo: de cada nota interessam o UUID, o método de pagamento (PUE ou PPD), o total e a data.
- Faça o mesmo com os complementos de pagamento: de cada REP interessam o IdDocumento que referencia e o valor pago.
- O Power Query lê XML por pasta e com isso você monta as duas tabelas. Um script que percorra os arquivos e despeje os campos numa planilha faz o mesmo.
- Cruze as duas listas e some os valores por UUID. O que não aparecer, e o que aparecer sem cobrir o total da nota, é o que continua aberto.
Onde trava
- Power Query com XML aninhado não se monta em cinco minutos, e os espaços de nomes do CFDI 4.0 quebram a importação se a consulta não estiver bem configurada.
- O pagamento pode chegar num mês diferente do da nota, às vezes no ano seguinte. Se você cruzar só a pasta do período que fecha, vai marcar como pendente uma nota que tem o seu REP guardado em outro lugar.
- Uma PPD admite vários complementos, um por cada parcela, e continua aberta até que a soma cubra o total. Contar se existe pelo menos um REP não basta: é preciso somar valores.
- Com centenas de arquivos por cliente, um UUID exportado pela metade quebra o cruzamento em silêncio. O erro não se nota até que o SAT o note.