-
-
Save fabiob/15796e7ab21494aa7131deab9f78d69d to your computer and use it in GitHub Desktop.
Script para sincronização de documentos com o Portal Consyst-e
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################################################### | |
# Script para sincronização de documentos com o Portal Consyst-e | |
# Documentação da integração: https://portal.consyste.com.br/doc/api | |
############################################################################### | |
param ( | |
[Parameter(Mandatory=$true)][string]$AuthToken, # o token de autenticação no Consyst-e | |
[string]$OutDir = '/tmp/csv', # o diretório onde o CSV será salvo | |
[string]$Kind = 'nfe', # o tipo de documento a consultar ('nfe' ou 'cte') | |
[string]$Query = 'recebido_em: [now-30d TO *]' # consulta a rodar | |
) | |
$ErrorActionPreference = 'Stop' | |
$baseUri = 'https://portal.consyste.com.br/api/v1' | |
# cria o diretório de saída, se não existir | |
New-Item -ItemType Directory -Force -Path $OutDir | Out-Null | |
# função para chamar a API da Consyst-e | |
function Call-Consyste { | |
param ( | |
[Parameter(Position=0)][string]$path, | |
$OutFile | |
) | |
$uri = "$baseUri$path" | |
$pp = $progressPreference | |
$progressPreference = 'silentlyContinue' | |
Invoke-RestMethod -Headers @{ 'X-Consyste-Auth-Token' = $AuthToken } -Uri $uri -OutFile $OutFile | |
$progressPreference = $pp | |
} | |
# inicia um cronômetro | |
$sw1 = New-Object Diagnostics.Stopwatch | |
$sw1.Start() | |
# Lista de campos a retornar | |
$CamposParametros = "emit_cnpj,dest_cnpj,chave,numero,emitido_em,manifestacao_cd,manifestacao_realizada_em,manifestacao_justificativa,ultima_manifestacao_cd,ultima_manifestacao_data,ultima_manifestacao_descricao" | |
# Chama a API com a consulta solicitada | |
$Url = "/$Kind/lista/recebidos?q=$([uri]::EscapeDataString($Query))&campos=$CamposParametros" | |
$Res = Call-Consyste $Url | |
$Documentos = $Res.documentos | |
$ProximaPagina = $Res.proxima_pagina | |
# Continua Listagem se necessário | |
while ($Documentos.Count -lt $Res.total) { | |
$Continua = Call-Consyste "/$Kind/lista/continua/$ProximaPagina" | |
$Documentos = [array]$Documentos + $Continua.documentos | |
$ProximaPagina = $Continua.proxima_pagina | |
Write-Progress "Coletando documentos " -PercentComplete ($Documentos.Count / $Res.Total * 100) | |
} | |
Write-Progress "Coletando documentos" -Completed | |
# Cria o arquivo csv com as colunas da planilha | |
$FileName = Get-Date -Format "MM-dd-yyyy-HHmmss" | |
$CamposParametros | Out-File -Append "$OutDir\$FileName.csv" -Encoding UTF8 | |
# Popula a panilha | |
# Deve-se colocar os campos na mesma ordem que está no $CamposParametros | |
Foreach ($doc in $Documentos){ | |
"$($doc.emit_cnpj),$($doc.dest_cnpj),$($doc.chave),$($doc.numero),$($doc.emitido_em),$($doc.manifestacao_cd),$($doc.manifestacao_realizada_em),$($doc.manifestacao_justificativa),$($doc.ultima_manifestacao_cd),$($doc.ultima_manifestacao_data),$($doc.ultima_manifestacao_descricao)" | Out-File -Append "$OutDir\$FileName.csv" -Encoding UTF8 | |
} | |
# encerra o cronômetro | |
$sw1.Stop() | |
Write-Host | |
Write-Host | |
Write-Host | |
Write-Host | |
Write-Host | |
Write-Host "Obtidos $($Documentos.Count) documentos em $($sw1.Elapsed)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment