Abílio Azevedo.

Automatizando a Assinatura Digital de uma Planilha Excel

Cover Image for Automatizando a Assinatura Digital de uma Planilha Excel
Abílio Azevedo
Abílio Azevedo

Em desenvolvimento de produtos precisamos ter de forma clara a dor a ser resolvida.

TLDR: too long; didn’t read

Fiz uma integração entre uma planilha no Google Spreadsheet com a plataforma de assinatura digital Autentique usando Api Graphql e AppScript.

Na minha igreja é preciso contar os dízimos e ofertas e três pessoas precisam assinar: 2 diâconos e o tesoureiro, para possíveis auditorias. O processo era feito da seguinte forma:

1 - Um diácono abria os envelopes e contava os valores

2 - Outro diácono colocar em uma planilha excel o valor e a classificação.

3 - A planilha era impressa e assinada pelos dois diâconos.

4 - O tesoureiro vinha e conferia o valor total e assinava.

Dores:

  • O processo gerava problema na hora da impressão, impressora falhava;
  • O arquivo ficava salvo offline no computador da igreja o que dificultava o acesso remoto durante a semana;
  • Tinha que rasurar em caso de erros... E não era assinado novamente por falta de tempo;

Solução: A proposta foi a utilização de uma planilha online (Google Spreadsheet) integrada a uma plataforma de assinatura digital (Autentique).

Para isto foi preciso verificar se a Autentique tinha API para criação de documentos para assinatura:

mutation CreateDocumentMutation(
  $document: DocumentInput!, # Definição das variáveis $document,
  $signers: [SignerInput!]!, # $signers e $file, com seus respectivos
  $file: Upload!             # tipos. (Os "!" indicam que são
) {                          # parâmetros obrigatórios)
  createDocument(
document: $document, # Passa para os parâmetros da mutation o 
signers: $signers,   # valor das variáveis.
file: $file          #
  ) {
id
name
refusable
sortable
created_at
signatures {
  public_id
  name
  email
  created_at
  action { name }
  link { short_link }
  user { id name email }
}
  }
}

Fonte

BINGO!

Agora o desafio era converter o spreadsheet para um documento PDF e enviar para a Autentique via esta API.

Convertendo um spreadsheet para PDF Existe uma API para isso

O próprio google fornece uma api de exportação de spreadsheet parametrizada 🤩.

Confira o código: Embedded content: https://gist.github.com/kibolho/3be15d77d2a74bc3033743c36f6cb3c0?file=generatePDF.js

Upload do PDF para API Graphql

"O upload de arquivos no GraphQL não é tão comum. Talvez isso ocorra porque não há suporte oficial e a documentação do GraphQL é estranhamente silenciosa sobre uploads de arquivos." Fonte

Portanto, eu utilizei da engenharia reversa para encaixar o PDF no formato desejado pela API. E descobri que era empacotando a requisição em form-data com chaves:

map: 0: ["variables.file"].

------WebKitFormBoundary8vWNyCgaKSptloVN\r\nContent-Disposition: form-data; name="operations"\r\n\r\n{"query":"mutation CreateDocumentMutation(\n $document: DocumentInput\u0021,\n $signers: [SignerInput\u0021]\u0021,\n $file: Upload\u0021\n) {\n createDocument(\n \n document: $document,\n signers: $signers,\n file: $file\n ) {\n id\n name\n refusable\n sortable\n created_at\n signatures {\n public_id\n name\n email\n created_at\n action { name }\n link { short_link }\n user { id name email }\n }\n }\n}","variables":{"document":{"name":"Contrato de teste"},"signers":[{"email":"abilio_azevedo@hotmail.com","action":"SIGN"},{"email":"abilio10@gmail.com","action":"SIGN"}],"file":null},"operationName":null}\r\n

------WebKitFormBoundary8vWNyCgaKSptloVN\r\nContent-Disposition: form-data; name="map"\r\n\r\n{"0":["variables.file"]}\r\n

------WebKitFormBoundary8vWNyCgaKSptloVN\r\nContent-Disposition: form-data; name="0"; filename="boleto.pdf"\r\nContent-Type: application/pdf\r\n\r\n\r\n------WebKitFormBoundary8vWNyCgaKSptloVN--\r\n'
--compressed

Confira o código como ficou: Embedded content: https://gist.github.com/kibolho/3be15d77d2a74bc3033743c36f6cb3c0.js

Em seguida foi necessário criar um desenho e vincular com o script de enviar para assinatura. Desenho vinculado com Script

Para finalizar, pegamos informações como nome e email das pessoas que assinam o documento por meio de seleção de células específicas.

Conclusão

Por meio de APIs pré existêntes é possível automatizar e entregar valor para um público que teria dificuldade de fazer o processo manualmente.

Por hoje é só pessoal


Mais posts

Cover Image for A psicologia do Dinheiro

A psicologia do Dinheiro

Morgan Housel oferece insights valiosos sobre a gestão financeira e tomada de decisões. O autor enfatiza que o sucesso financeiro depende mais do comportamento do que da inteligência ou conhecimento técnico. Housel destaca a importância da visão de longo prazo e da resiliência diante da volatilidade do mercado, encorajando a forcamos na sustentabilidade em vez de ganhos de curto prazo.

Cover Image for Bellsant

Bellsant

Estou na vanguarda do desenvolvimento de um aplicativo de saúde e bem-estar de ponta. Nossa pilha de tecnologia combina React Native para desenvolvimento móvel multiplataforma com um backend NodeJS sem servidor, aproveitando o AWS Lambda para escalabilidade e eficiência de custos.

Abílio Azevedo
Abílio Azevedo

NewsLetter

Eu enviarei o conteúdo postado aqui no blog. Sem Spam =)

Engenheiro de software experiente, formado em Engenharia Elétrica, com mais de 10 anos de experiência prática na construção de aplicativos móveis, web e back-end robustos e escaláveis em vários projetos, principalmente no setor de fintech. Mobile (React Native), Web (React e Next.JS) e Backend (Node.JS, PHP e DJANGO). Meu objetivo é criar produtos que agreguem valor às pessoas. - © 2024, Abílio Azevedo