import base64
import json
from datetime import datetime, date
[documentos]
class Sei:
def __init__(self, aria):
self.aria = aria
[documentos]
def get_modelos_html(self, id_unidade_stn : int = None) -> list[dict]:
"""Obtém uma lista de modelos HTML do SEI Administrar.
Example:
.. code-block:: python
modelos_html_unidade = sei.get_modelos_html(id_unidade_stn=1)
for modelo_html in modelos_html_unidade:
print(modelo_html.get("idModeloHtml"))
print(modelo_html.get("nome"))
print(modelo_html.get("html"))
print(modelo_html.get("idUnidadeStn"))
Args:
id_unidade_stn (int, optional): ID da Unidade a qu pertence os Modelos HTML. É opcional. Defaults to None.
Returns:
_type_: a lista de Modelos Html.
"""
query_string_parameters = {}
if id_unidade_stn != None:
query_string_parameters['idUnidadeStn'] = id_unidade_stn
registros = self.__get_registros_modelos_html(query_string_parameters=query_string_parameters)
return registros
[documentos]
def get_modelo_html(self, id : int ) -> dict:
"""Obtém um modelo HTML com base em seu id.
Example:
.. highlight:: python
.. code-block:: python
modelo_html = sei.get_modelo_html(id=1)
print(modelo_html.get("idModeloHtml"))
print(modelo_html.get("nome"))
print(modelo_html.get("html"))
print(modelo_html.get("idUnidadeStn"))
Args:
id (int): ID do Modelo HTML. Defaults to None.
Returns:
_type_: _description_
"""
query_string_parameters = {}
if id != None:
query_string_parameters['idModeloHtml'] = id
registros = self.__get_registros_modelos_html(query_string_parameters=query_string_parameters)
if len(registros) >=1:
return registros[0]
[documentos]
def get_procedimentos(self) -> list[dict]:
"""Obtém a lista de Processos/Procedimentos no SEI Administrar.
Basicamente, esta função irá trazer todos os Processos/Procedimentos
que foram criados utilizando esta API.
Example:
.. highlight:: python
.. code-block:: python
procedimentos = sei.get_procedimentos()
for procedimento in procedimentos:
print(procedimento.get("idProcedimento"))
print(procedimento.get("codigoProcedimentoSei"))
Returns:
_type_: Lista de Processos/procedimentos.
"""
return self.__get_registros_procedimentos()
[documentos]
def get_procedimento(self, id : int = None, codigo : str = None) -> dict:
"""Obtém um procedimento/processo específico pelo seu id ou pelo seu código.
Example:
.. highlight:: python
.. code-block:: python
procedimento_por_id = sei.get_procedimento(id=1)
print(procedimento_por_id.get("idProcedimento"))
print(procedimento_por_id.get("codigoProcedimentoSei"))
procedimento_por_codigo = sei.get_procedimento(codigo="17944.100005/2022-06")
print(procedimento_por_codigo.get("idProcedimento"))
print(procedimento_por_codigo.get("codigoProcedimentoSei"))
Args:
id (int, optional): ID do procedimento/processo. Defaults to None.
codigo (str, optional): Código do procedimento/processo. Defaults to None.
Returns:
_type_: O procedimento.
"""
query_string_parameters = {}
if id != None:
query_string_parameters['idProcedimentoSei'] = id
if codigo != None:
query_string_parameters['codigoProcedimentoSei'] = codigo
registros = self.__get_registros_procedimentos(query_string_parameters=query_string_parameters)
if len(registros) >=1:
return registros[0]
[documentos]
def get_series(self) -> list[dict]:
"""Obtém a lista de séries do SEI.
Example:
.. highlight:: python
.. code-block:: python
series = sei.get_series()
for serie in series:
print(serie.get("idSerie"))
print(serie.get("nome"))
print(serie.get("aplicabilidade"))
Returns:
_type_: a lista de séries do SEI.
"""
return self.__get_registros_series()
[documentos]
def get_serie(self, nome : str) -> dict:
"""Obtém uma série do SEI pelo seu nome.
Example:
.. highlight:: python
.. code-block:: python
serie = sei.get_serie(nome="Volume de Processo")
print(serie.get("idSerie"))
print(serie.get("nome"))
print(serie.get("aplicabilidade"))
Args:
nome (str): o nome da série.
Returns:
_type_: _description_
"""
query_string_parameters = {'nomeSerie': nome}
registros = self.__get_registros_series(query_string_parameters=query_string_parameters)
if len(registros) >=1:
return registros[0]
[documentos]
def get_documento(self, codigo : str) -> dict:
"""Obtém um documento pelo seu código do SEI.
Example:
.. highlight:: python
.. code-block:: python
documento_novo = sei.get_documento(codigo="134112")
Args:
codigo (str): código SEI do Documento.
Returns:
dict: Documento SEI.
"""
query_string_parameters = {'codigoDocumentoSei': codigo}
resposta = self.aria.request('get', 1, 'sei', 'sei/consultarDocumento', query_string_params=query_string_parameters)
return resposta.json().get('retorno')
[documentos]
def get_documentos(self, codigo_procedimento_sei : str = None) -> list[dict]:
"""Obtém uma lista de documentos de um determindo procedimento/processo.
Procedimento é o mesmo que processo.
Somente vai trazer se o processo tiver sido feito pela API.
Example:
.. highlight:: python
.. code-block:: python
documentos_procedimento = sei.get_documentos(codigo_procedimento_sei="17944.100037/2023-84")
for doc in documentos_procedimento:
print(doc)
Args:
codigo_procedimento_sei (str, optional): Código do procedimento/processo SEI. Defaults to None.
Returns:
_type_: _description_
"""
procedimento = self.get_procedimento(codigo=codigo_procedimento_sei)
lista_documentos = []
query_string_parameters = {'idProcedimento': procedimento.get("idProcedimento")}
resposta = self.aria.request('get', 1, 'sei', 'admin/documento', query_string_params=query_string_parameters)
for doc in resposta.json().get('registros'):
documento = self.get_documento(codigo=doc.get("codigoDocumentoSei"))
lista_documentos.append(documento)
return lista_documentos
[documentos]
def gerar_procedimento(self, id_tipo_procedimento : int) -> dict:
"""Gera um procedimento/processo vazio no SEI. Retorna informações sobre o procedimento.
Example:
.. highlight:: python
.. code-block:: python
novo_procedimento = sei.gerar_procedimento("100000206") # Licença por acidente em serviço
Args:
id_tipo_procedimento (int): ID do tipo de procedimento.
Returns:
dict: Informações do procedimento.
"""
return self.aria.request('post', 1, 'sei', 'sei/gerarProcedimento', json_body={"idTipoProcedimento": id_tipo_procedimento}).json()
[documentos]
def gravar_documento_html(self, codigo_procedimento_sei : str, descricao : str, id_serie_sei : int, html : str) -> str:
"""Grava um documento HTML em um procedimento/processo SEI.
Example:
.. highlight:: python
.. code-block:: python
codigo_documento_novo = sei.gravar_documento_html(
codigo_procedimento_sei="17944.100005/2022-06",
descricao="Meu novo documento",
id_serie_sei=1247,
html="<p>HTML do meu documento</p>"
)
Args:
codigo_procedimento_sei (str): Código do procedimento/processo sei.
descricao (str): Descrição do documento.
id_serie_sei (int): ID da Série.
html (str): HTML com o conteúdo do documento.
Returns:
str: código SEI do documento gerado.
"""
json_body = {
"codigoProcedimentoSei": codigo_procedimento_sei,
"descricao": descricao,
"idSerieSei": id_serie_sei,
"payloadHtml": html
}
resposta = self.aria.request('post', 1, 'sei', 'sei/incluirDocumentoHtml', json_body=json_body)
return resposta.json().get("codigoDocumentoSei")
[documentos]
def gravar_documento_arquivo(self, codigo_procedimento_sei : str, descricao : str, id_serie_sei : int, arquivo : bytes | str, nome_arquivo : str, data_arquivo : datetime | str) -> str:
"""Grava um documento qualquer (ex.: PDF) em um procedimento/processo SEI.
Example:
.. highlight:: python
.. code-block:: python
with open("MeuDocumento.pdf", "rb") as arquivo:
arquivo_teste = arquivo.read()
codigo_documento_novo_arquivo = sei.gravar_documento_arquivo(
codigo_procedimento_sei=novo_procedimento.get('codigoProcedimentoSei'),
descricao="17944.100005/2022-06",
id_serie_sei=263,
nome_arquivo="Teste1.pdf",
data_arquivo=datetime.now(),
arquivo=arquivo_teste
)
Args:
codigo_procedimento_sei (str): Código do procedimento SEI a ser incluído o documento.
descricao (str): Descrição do documento.
id_serie_sei (int): ID da Série.
arquivo (bytes | str): Arquivo em bytes, ou o arquivo codificado em base64 em string.
nome_arquivo (str): Nome do arquivo.s
data_arquivo (datetime | str): Data do arquivo em datetime, ou em string no formato "DD/MM/YYYY".
Returns:
str: código SEI do documento.
"""
arquivo_base_64 = ""
if type(arquivo) == str:
arquivo_base_64 = arquivo
elif type(arquivo) == bytes:
arquivo_base_64 = base64.b64encode(arquivo).decode("utf8")
if type(data_arquivo) == str:
data_arquivo_texto = data_arquivo
elif type(data_arquivo) == datetime or type(data_arquivo) == date:
data_arquivo_texto = data_arquivo.strftime("%d/%m/%Y")
json_body = {
"codigoProcedimentoSei": codigo_procedimento_sei,
"descricao": descricao,
"idSerieSei": id_serie_sei,
"base64Arquivo": arquivo_base_64,
"dataArquivo": data_arquivo_texto,
"nomeArquivo": nome_arquivo
}
resposta = self.aria.request('post', 1, 'sei', 'sei/incluirDocumentoBlob', json_body=json_body)
return resposta.json().get("codigoDocumentoSei")
def __get_registros_modelos_html(self, query_string_parameters = {}) -> list[dict]:
resposta = self.aria.request('get', 1, 'sei', 'admin/modelosHtml', query_string_params=query_string_parameters, auto_pagination=True)
registros = resposta.json().get('registros')
return registros
def __get_registros_procedimentos(self, query_string_parameters = {}) -> list[dict]:
resposta = self.aria.request('get', 1, 'sei', 'admin/procedimento', query_string_params=query_string_parameters, auto_pagination=True)
registros = resposta.json().get('registros')
return registros
def __get_registros_series(self, query_string_parameters = {}) -> list[dict]:
resposta = self.aria.request('get', 1, 'sei', 'app/ListarSeries', query_string_params=query_string_parameters)
print(resposta)
registros = resposta.json().get('retorno')
return registros