from app.clientes.base import ClienteBase from app.services import cripto from .schemas import DadosCompras, PayloadCompras def montar_payload(dados: DadosCompras) -> PayloadCompras: """ Traduz o formato do Holmes pro formato que a API do cliente espera. Funcao pura, sem I/O: da pra testar jogando o JSON do Holmes e conferindo a saida, sem rede nem mock. """ p = dados.properties return PayloadCompras( id_processo=dados.id, protocolo=p.protocolo, cnpj=p.cnpj, pedido_linx=p.pedido_linx, fornecedor=p.fornecedor, tipo=p.tipo_compra, nf_entrada=p.nf_entrada, aprovador=dados.author.name, valor_total=p.total_parcelas, parcelas=p.parcelas, ) def montar_envelope(dados: DadosCompras, cli: ClienteBase) -> dict: """Monta o payload e cifra com a chave publica do cliente.""" payload = montar_payload(dados) chave = cripto.carregar_chave_publica(cli.config.chave_publica) return cripto.criptografar(payload.model_dump(mode="json"), chave) async def processar_compras(dados: DadosCompras, cli: ClienteBase) -> dict: envelope = montar_envelope(dados, cli) # TODO: POST do envelope pra API do cliente. Erro tem que subir (nao # engolir), pra o Holmes reentregar — ele e a nossa fila. return {"status": "pendente_envio", "id_processo": dados.id, "envelope": envelope}