integração FGTS <> SmartCityTec

Ferramenta em Bun para consultar a API. Serve como código de exemplo: 

 #!/usr/bin/env bun

import assert from "node:assert";

import { parseArgs } from "node:util";

function makeBody(contrato: string, cnpj: string): string {

 assert.match(contrato, /^\d+$/);

 assert.match(cnpj, /^\d{14}$/);

 return `

 <?xml version="1.0"?>

 <methodCall>

 <methodName>ConsultaCRF</methodName>

 <params>

 <param><value><i4>${contrato}</i4></value></param>

 <param><value><i4>1</i4></value></param>

 <param><value><array><data><value><string>1${cnpj}</string></value></data></array></value></param>

 </params>

 </methodCall>

 `.trim();

}

function parseDate(eightDigitString: string): Date {

 const match = eightDigitString.match(/^(\d{4})(\d{2})(\d{2})$/);

 assert(match);

 return new Date(...(match.slice(1).map(Number) as [number, number, number]));

}

async function parseXmlResponse(xml: string) {

 const match = xml.match(/<string>1(\d{14})(\d{8})(\d{8})(\d{24})<\/string>/);

 assert(match);

 const [, cnpj, rawEmissao, rawValidade, certificado] = match;

 return {

 cnpj,

 emissao: parseDate(rawEmissao),

 validade: parseDate(rawValidade),

 certificado,

 };

}

export async function queryCRFbyCNPJ(contrato: string, cnpj: string) {

 const url = "https://webp.caixa.gov.br/empresa/crf/consultalote/server.asp";

 const body = makeBody(contrato, cnpj);

 const response = await fetch(url, { body, method: "POST" });

 const xml = await response.text();

 return parseXmlResponse(xml);

}

if (import.meta.main) {

 try {

 const args = parseArgs({

 options: {

 contrato: { type: "string" },

 cnpj: { type: "string" },

 },

 });

 const { cnpj, contrato } = args.values;

 assert(cnpj, "missing --cnpj= argument");

 assert(contrato, "missing --contrato= argument");

 const result = await queryCRFbyCNPJ(contrato, cnpj);

 console.log(JSON.stringify(result));

 } catch (error) {

 console.error((error as Error).message);

 }

} 

 A integração com a Caixa Econômica Federal permite consultar informações de regularidade junto ao FGTS. Entretanto, a integração não disponibiliza o documento da certidão em formato PDF, impossibilitando sua emissão, geração ou armazenamento pelo integriGov. 

 Sobre isso, eu deixei o "contrato" parametrizável. Meus testes agora não falharam com o valor  66 , mas ontem sim, então convém perguntar à Caixa se precisa utilizar um número especial. 

 Publiquei no Gitlab como snippet. Só fiz uma alteração pertinente: contrato precisa ser number . 

 https://git.ciga.sc.gov.br/-/snippets/33 – se retornar not found, precisa verificar a permissão