Atualizando o Signer da versão 2.x para 3.x
Antes de atualizar sua instância on-premises da versão 2.x para a 3.x, é preciso seguir alguns passos adicionais.
Se a sua instância ainda está na versão 1.x, siga primeiro a página Atualizando para 2.x.
É fortemente recomendado fazer a atualização em um horário de pouco uso. Depois da atualização, jobs em segundo plano podem aumentar temporariamente a carga e o consumo do banco de dados, principalmente em tabelas grandes.
Sumário
- Parte 1: Como atualizar: instalar o runtime, revisar as mudanças, configurar e atualizar.
- Parte 2: Breaking changes e mudanças de banco de dados: o que pode afetar integrações e o banco de dados.
Parte 1: Como atualizar
Siga os passos abaixo na ordem.
1. Instalar o ASP.NET Core Runtime 10.0
A versão 3.0.0 migrou a plataforma do .NET 8 para o .NET 10. Instale o ASP.NET Core Runtime 10.0 na plataforma que você utiliza:
- Windows: instale o Hosting Bundle do .NET 10.0
- Linux
- Ubuntu Server: instale o pacote
aspnetcore-runtime-10.0no lugar doaspnetcore-runtime-8.0
- Ubuntu Server: instale o pacote
Não é necessário desinstalar versões prévias do ASP.NET Core Runtime, pois múltiplas versões podem coexistir no mesmo ambiente sem problemas.
No Docker, esse passo não é necessário pois as versões 3.x da imagem já vêm com o ASP.NET Core Runtime 10.0 embutido.
2. Fazer backup e revisar as mudanças
Faça um backup do banco de dados antes de atualizar e leia a Parte 2. Se você integra com o Signer por API ou Webhooks, revise suas integrações antes de atualizar. Para manter o comportamento anterior da pausa de documentos, defina General:EnableDocumentPause como false.
3. Update Signer
Após seguir os passos acima, proceda com as instruções de atualização normais.
Solucionando erros de timeout do banco de dados após o update
Se você enfrentar erros durante o primeiro início da aplicação após a atualização e o log indicar que ocorreu um timeout ao aplicar as migrações de banco de dados, você deverá executar o utilitário de linha de comando para iniciar as migrações de maneira manual usando um parâmetro de timeout com valor maior que o padrão:
-
Pare a aplicação.
-
Navegue até a pasta aonde se encontram os binários da aplicação.
-
Execute o comando:
dotnet Lacuna.Signer.Site.dll -- update-db EventUserAgent --timeout 6000 -
Reinicie a aplicação.
Azure App Services
Se sua instância está hospedada no Azure App Services:
- No portal do Azure, acesse as configurações do App Service.
- Selecione Configuration, e depois selecione a aba General settings
- Na seção Stack settings:
- A configuração de Stack deve estar definida como .NET
- A configuração .NET version, deve estar definida como .NET 10 (LTS)
A seção Stack settings mencionada acima só aparece para App Service Plan de plataforma Windows. Para planos baseados em plataforma Linux, nenhuma mudança é necessária.
Parte 2: Breaking changes e mudanças de banco de dados
As mudanças mais importantes da 3.0.0 para quem atualiza a partir da 2.x.
Mudanças de banco de dados
A versão 3.0.0 aplica as migrações AddDocumentsReportIndex, Spa8, SignerPositioningAndSignatureSheet, SignatureSheetBounds e EventUserAgent na primeira inicialização.
- O índice
Documents (SubscriptionId, CreationDateUtc), usado pelos relatórios de documentos, é criado por um job em segundo plano após a atualização, e não durante a migração. Veja Índice de Documents: o que ele melhora, como é criado e o que fazer se a criação automática falhar. - Se você está atualizando de uma versão anterior à 2.21.0, a atualização também aplica a desnormalização de
DocumentUserscom índice (SIG-780), o que pode causar um período de maior lentidão e maior consumo de banco de dados na instância. Veja Índice de DocumentUsers: o que ele melhora, como é criado e o que fazer se a criação automática falhar. Instâncias que já estão na 2.21.0 ou superior não são afetadas. - A atualização do Hangfire para a versão 1.8 não altera o esquema das tabelas do Hangfire no banco de dados: o esquema permanece na versão 7 e não há nenhuma ação necessária. Por isso, é seguro voltar para a versão 2.x caso seja preciso reverter a atualização.
Integrações por API e Webhooks: pausa de documentos
A pausa de documentos (SIG-1937) introduz mudanças que podem quebrar integrações existentes. Revise suas integrações antes de atualizar, ou defina General:EnableDocumentPause como false para manter o comportamento anterior.
API
- O status do documento (
DocumentStatus) ganhou o novo valorPaused. Um documento pausado passa a ser retornado com statusPausedem vez dePending. Integrações que tratam o status de forma exaustiva (por exemploswitchsem caso padrão) ou que desserializam o enum de forma estrita podem falhar. TratePausedcomo um documento em andamento, igual aPending. - O filtro de status
Pendingna listagem de documentos continua incluindo os documentos pausados. Use o novo valorPausedpara listar apenas os pausados. - A listagem de documentos retorna os novos campos
IsPausedeCanResume, e os endpoints públicos retornamIsDocumentPaused. Em documentos pausados a ação pendente do participante (PendingFlowAction) não é preenchida. - Novos endpoints:
POST /api/documents/{id}/pause(com o motivo opcionalReason, de até 500 caracteres) ePOST /api/documents/{id}/resume. Ambos exigem a permissãoPauseDocument. - Enquanto o documento está pausado, as operações abaixo falham com novos códigos de erro (
ErrorCodes) em vez de serem executadas: assinar, aprovar e recusar (CannotSignPausedDocument,CannotApprovePausedDocument,CannotRefusePausedDocument), editar o fluxo, editar as informações, adicionar versão, reiniciar o fluxo, remover assinatura, enviar arquivos, editar e-mails notificados, enviar lembretes e gerar link de compartilhamento. Cancelar o documento continua permitido. Integrações que assinam, aprovam ou editam documentos em lote devem tratar esses erros. - Os lembretes automáticos não são enviados para documentos pausados.
Webhooks
- Dois novos tipos de webhook,
DocumentPaused(10) eDocumentResumed(11), são enviados para todos os endpoints de webhook já cadastrados, sem necessidade de configuração. Endpoints que rejeitam ou falham ao receber um tipo desconhecido devem ser ajustados antes da atualização, para ignorar os novos tipos. - O
DatadoDocumentPausedtraz o documento e os camposPausedByeReason. O doDocumentResumedtraz o documento eResumedBy. - Enquanto o documento está pausado, os webhooks de assinatura, aprovação ou conclusão do fluxo não são disparados, pois nenhuma dessas ações pode ocorrer.
Outras mudanças na API
Comparação do Swagger da versão 2.22.2 com o da 3.0.0. Todas são aditivas (nenhum endpoint, campo ou schema foi removido), com as ressalvas indicadas.
- Posicionamento da assinatura pelo signatário (SIG-1936):
- Novo endpoint
PUT /api/documents/{id}/signer-positioning, que definesignerPositioningEnabledeautomaticSignaturePositioning(Disabled,FootnoteouSignatureSheet) para o documento.nullusa a configuração atual da organização. Só é possível alterar até a primeira assinatura (SignerPositioningLockedAfterSignature). CreateDocumentRequestaceitasignerPositioningEnabledeautomaticSignaturePositioning;DocumentModelretorna esses campos esignatureSheetFirstPage.FlowActionModelretornavisualRepresentationOnFootnoteeDocumentMarkModelretornaisAutoPositioned.POST /api/documents/{id}/flowaceita o parâmetroacceptFootnoteVisualRepresentation. Em um documento já assinado cuja folha de assinaturas não tem mais espaço, a edição é rejeitada comSignatureSheetFull, a menos que o parâmetro sejatrue.- Novos códigos de erro:
SignerPositioningNotAllowed,SignerPositioningIncompatibleWithAutomaticPositioningDisabled,SignatureSheetFulleSignerPositioningLockedAfterSignature. - Atenção: o modo padrão de posicionamento automático (
VisualRepresentation:AutomaticSignaturePositioning) éFootnote. Assinaturas sem posição definida passam a ser colocadas em um espaço livre do rodapé.
- Novo endpoint
- Listagem de documentos: novo parâmetro
ParticipantSituation(CompletedouPending) emGET /api/documents, para filtrar pela situação do participante pesquisado (SIG-1951). - Evidências:
EvidencesModelretornauserAgenteconsent(versão dos termos, data de aceite e hash SHA-256 dos termos), conforme as evidências de assinatura (SIG-1898) e o consentimento clickwrap (SIG-1899). - Identificadores:
IdentifierTypesganhouSsn,ItineEin(SIG-1949). Integrações que desserializam o enum de forma estrita devem aceitar os novos valores. - Validações mais estritas. Requisições que antes eram aceitas podem passar a ser rejeitadas. Revise integrações que enviam estes dados:
- E-mail: endereços com pontos consecutivos (por exemplo
a..b@x.com) são rejeitados, pois o .NET 10 não consegue enviá-los. A validação vale para participantes de fluxos, e-mail de suporte da organização, campos de e-mail de modelos e contatos (por isso o schema deCreateContactRequesteUpdateContactRequestdeixou de declarar o formatoemail). Endereços já armazenados não são alterados. - Telefone: a validação e a normalização de números passaram a usar a mesma leitura. Números sem o prefixo internacional (
+e código do país) são interpretados na região padrão (Brasil); envie números de outros países, como Paraguai e Equador, com o+e o código do país. Números rejeitados pelo Grant ID agora retornam erro de validação em vez de erro 500 (SIG-1923). - CNPJ: CNPJs alfanuméricos são gravados em maiúsculas (signatários, regras de assinatura, organizações, dados de cobrança e perfis de autenticação), e a edição de uma organização passou a validar o identificador como na criação.
- Identificadores do Paraguai e do Equador: espaços no início e no fim são removidos e o formato é validado na criação de usuários com múltiplos identificadores, retornando erro de validação em vez de erro 500 (SIG-1942). O tamanho dos identificadores do Equador (RUC e demais) passou a ser realmente verificado, e valores com a quantidade de dígitos errada são rejeitados.
- Identificadores dos EUA (SSN, ITIN e EIN): só aceitam os 9 dígitos ou o layout oficial com hífens; espaços e hífens fora de posição são rejeitados. Os endpoints de inclusão e alteração de identificador também validam os tipos permitidos em
AllowedIdentifierTypes. - Anexos e modelos: a geração de documentos (
GenerateDocumentsRequest) valida os anexos contra a lista de tipos MIME de anexos, e os arquivos de modelos são validados contra a lista de modelos. Espaços ao redor das entradas das listas de tipos MIME são ignorados (SIG-1948). - Conclusão pública de assinatura digital: o ticket enviado deve ser da ação de fluxo e do usuário que estão sendo concluídos; caso contrário a conclusão falha com
InvalidTicket. - Reaproveitamento de conta por e-mail (hotfix 2.22.2): não é uma quebra, mas muda o resultado de um cenário. Em instâncias com identificador único (CPF como claim) no modo
NullableUnique, adicionar um participante cujo e-mail já pertence a uma conta do Grant ID sem claim de CPF retornavaEmailAlreadyBeingUsed; agora a conta existente é reaproveitada. O reaproveitamento só ocorre quando há exatamente uma conta com o e-mail, seu nome de usuário é o próprio e-mail, ela não tem CPF no Grant e nenhum CPF diferente está associado a ela ou ao CPF informado no Signer. Fora dessas condições o erroEmailAlreadyBeingUsedcontinua sendo retornado, e o modoUniquenão foi alterado. O CPF não é gravado no Grant ID nesse reaproveitamento. Integrações que dependiam desse erro para detectar e-mails já cadastrados devem considerar o novo resultado. - Páginas das marcas: números de página negativos são resolvidos a partir da última página (
-1) e páginas além do fim do documento são ajustadas à última página. A página0continua aceita (SIG-453).
- E-mail: endereços com pontos consecutivos (por exemplo