O que é Adesão?
Adesão (ou “carona”) permite que um órgão compre usando uma ATA de outro órgão , sem fazer nova licitação.
Vantagem Compra rápida - sem licitação
Requisito ATA deve estar vigente
Passo a Passo
1. Encontre ATAs vigentes
import requests
from datetime import date
API_KEY = "ak_sua_chave"
BASE = "https://api.ata360.com.br"
headers = { "Authorization" : f "Bearer { API_KEY } " }
# Buscar ATAs vigentes para Papel A4
resp = requests.get( f " { BASE } /api/items/vigentes" ,
params = { "codigo" : 150233 },
headers = headers
)
atas = resp.json()[ "atas" ]
print ( f "Encontradas { len (atas) } ATAs vigentes" )
2. Filtre por estado
# ATAs vigentes no Paraná
resp = requests.get( f " { BASE } /api/items/vigentes" ,
params = { "codigo" : 150233 , "uf" : "PR" },
headers = headers
)
atas_pr = resp.json()[ "atas" ]
for ata in atas_pr[: 5 ]:
print ( f "ATA: { ata[ 'numero_controle_pncp_ata' ] } " )
print ( f " Preço: R$ { ata[ 'valor_unitario' ] :.2f} " )
print ( f " Fornecedor: { ata[ 'nome_fornecedor' ] } " )
print ( f " Válida até: { ata[ 'data_vigencia_final' ] } " )
print ()
3. Ordene por preço
# Ordenar do mais barato ao mais caro
atas_ordenadas = sorted (atas, key = lambda x : x[ "valor_unitario" ])
print ( "Top 5 menores preços:" )
for i, ata in enumerate (atas_ordenadas[: 5 ], 1 ):
print ( f " { i } . R$ { ata[ 'valor_unitario' ] :.2f} - { ata[ 'nome_fornecedor' ] } " )
4. Verifique detalhes da ATA escolhida
from urllib.parse import quote
ata_id = atas_ordenadas[ 0 ][ "numero_controle_pncp_ata" ]
encoded_id = quote(ata_id, safe = "" )
# Buscar detalhes completos
resp = requests.get( f " { BASE } /api/atas/ { encoded_id } " , headers = headers)
ata_completa = resp.json()
print ( f "Órgão gerenciador: { ata_completa[ 'metadata' ][ 'nomeOrgao' ] } " )
print ( f "Objeto: { ata_completa[ 'metadata' ][ 'objetoContratacao' ] } " )
print ( f "Vigência: { ata_completa[ 'metadata' ][ 'vigenciaInicio' ] } a { ata_completa[ 'metadata' ][ 'vigenciaFim' ] } " )
5. Baixe os documentos
# Baixar PDFs para análise
resp = requests.get( f " { BASE } /api/atas/ { encoded_id } /arquivos" , headers = headers)
arquivos = resp.json()[ "arquivos" ]
for arq in arquivos:
print ( f "- { arq[ 'titulo' ] } : { arq[ 'url' ] } " )
Script Completo
def buscar_ata_para_adesao ( codigo_item , uf = None , max_resultados = 10 ):
"""
Busca ATAs vigentes para adesão, ordenadas por preço
"""
params = { "codigo" : codigo_item}
if uf:
params[ "uf" ] = uf
resp = requests.get( f " { BASE } /api/items/vigentes" ,
params = params,
headers = headers
)
atas = resp.json()[ "atas" ]
# Ordenar por preço
atas_ordenadas = sorted (atas, key = lambda x : x[ "valor_unitario" ])
print ( f " { '=' * 60 } " )
print ( f "ATAs VIGENTES PARA ADESÃO" )
print ( f "Item: { codigo_item } | UF: { uf or 'Todas' } " )
print ( f " { '=' * 60 } " )
for i, ata in enumerate (atas_ordenadas[:max_resultados], 1 ):
print ( f " \n { i } . ATA: { ata[ 'numero_controle_pncp_ata' ] } " )
print ( f " Preço: R$ { ata[ 'valor_unitario' ] :.2f} " )
print ( f " Fornecedor: { ata[ 'nome_fornecedor' ] } " )
print ( f " UF: { ata[ 'uf' ] } " )
print ( f " Válida até: { ata[ 'data_vigencia_final' ] } " )
print ( f " Qtd disponível: { ata.get( 'quantidade_disponivel' , 'N/A' ) } " )
return atas_ordenadas[:max_resultados]
# Uso
melhores_atas = buscar_ata_para_adesao( 150233 , uf = "PR" )
Checklist para Adesão
Verificar vigência
A ATA deve estar dentro do período de validade
Verificar quantidade
Deve haver quantidade disponível para adesão
Contatar órgão gerenciador
Solicitar autorização para adesão
Contatar fornecedor
Confirmar que aceita fornecer para seu órgão
Formalizar adesão
Emitir termo de adesão e empenho
Nem toda ATA permite adesão. Verifique no edital se há previsão de “carona”.