Skip to content

Instantly share code, notes, and snippets.

@saymont
Created December 18, 2019 18:59
Show Gist options
  • Save saymont/97ef13b62edca4902eb399ab4f63f763 to your computer and use it in GitHub Desktop.
Save saymont/97ef13b62edca4902eb399ab4f63f763 to your computer and use it in GitHub Desktop.
Adiciona campos: tipo_operacao_id e finalidade. Ajusta a exportação para CSV
###############################################################################
# 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,tipo_operacao_id,finalidade"
# 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 CSV
$FileName = Get-Date -Format "MM-dd-yyyy-HHmmss"
$Documentos | Export-Csv -Path "$OutDir\$FileName.csv" -NoTypeInformation
# 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