Skip to content

Instantly share code, notes, and snippets.

@saymont
Created November 22, 2019 12:14
Show Gist options
  • Save saymont/e5b7ec6a4ad454cf741b363291081f73 to your computer and use it in GitHub Desktop.
Save saymont/e5b7ec6a4ad454cf741b363291081f73 to your computer and use it in GitHub Desktop.
Script para sincronização de documentos com o Portal Consyst-e
###############################################################################
# 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 = "id,chave,emitido_em,serie,numero,valor,situacao_custodia,situacao_sefaz,emit_cnpj,emit_nome,dest_cnpj,dest_nome"
# 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.id), $($doc.chave), $($doc.emitido_em), $($doc.serie), $($doc.numero), $($doc.valor), $($doc.situacao_custodia), $($doc.situacao_sefaz), $($doc.emit_cnpj), $($doc.emit_nome), $($doc.dest_cnpj), $($doc.dest_nome)" | 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