Fluxo de Integração de Exame Médico (ASO)

O objetivo deste fluxo é enviar dados pessoais da pessoa pré-colaboradora para um sistema de agendamento de exame médico.

📘

Esse fluxo utiliza webhook

Para realizar integrações utilizando Webhooks é necessário um agente integrador (middleware) para receber e tratar os dados.

Para implementar integrações a partir de webhooks é necessário uma configuração prévia através da própria API Gupy: Veja aqui mais informações sobre o recebimento de webhooks

❗️

Notas importantes

Não é possível fechar VPN como rota para entrega do Webhook.

A URL usada para receber o Webhook (postbackUrl) DEVE ser um endereço HTTPS válido, exposto publicamente.

URLs com alta taxa de erro (100% dos erros nos últimos 7 dias) serão removidas sem aviso prévio.

O Webhook espera uma resposta em 30.000 ms. Caso a resposta não tenha ocorrido antes deste tempo, consideramos um timeout, consequentemente, um erro.

A Gupy garante pelo menos uma entrega, então podem haver várias notificações do mesmo evento, use a propriedade id para identificar duplicatas.

Não há garantia de ordem de entrega, use a propriedade date para verificar qual evento aconteceu primeiro e classifique os eventos.

NÃO USE serviços como requestcatcher, eles podem expor dados.

Quando setamos algum valor no clientHeaders, o header padrão 'Content-type: application/json;charset=utf-8' não é mais enviado, pois o valor dos headers passa a ser o que foi definido. Se for necessário que o Content-type tenha sempre o valor padrão, recomendamos passá-lo junto no clientHeaders.

Habilitando endpoints

Abaixo encontra-se uma sugestão dos endpoints que devem ser habilitados obrigatoriamente para o funcionamento perfeito deste fluxo.

Configurando o webhook

Antes de iniciar a integração, é importante alinhar com o desenvolvedor qual será a etapa gatilho. Devido à natureza do webhook, as informações serão disparadas a cada movimentação do candidato entre as etapas, e cabe à integração filtrar qual etapa lhe interessa para seguir com a inclusão dos dados em um sistema terceiro.

Passo 1: Configurar webhook pre-employee.moved

  1. Acessar endpoint POST Webhook
  2. Alterar parâmetro action para pre-employee.moved
  3. Inserir no postbackUrl o endereço para onde será direcionado o webhook
  4. Inserir Bearer Token gerado no passo de autenticação e depois clicar em Try it!

Exemplo de requisição

curl --request POST \
     --url https://api.gupy.io/api/v1/webhooks \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
     "action": "pre-employee.moved",
     "status": "active",
     "postbackUrl": "https://urldo.agenteintegrador.net",
     "techOwnerName": "Nome Sobrenome",
     "techOwnerEmail": "[email protected]"
}
'

Exemplo de Resposta

{
  "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "action": "pre-employee.moved",
  "postbackUrl": "https://urldo.agenteintegrador.net",
  "status": "active",
  "techOwnerName": "Nome Sobrenome",
  "techOwnerEmail": "[email protected]"
}

Fluxo de Integração

  1. O fluxo inicia assim que a pessoa pré-colaboradora é movida para a etapa definida para corresponder ao exame admissional, disparando o webhook configurado;
  2. Verificação da etapa para qual a pessoa pré-colaboradora foi movida. O fluxo é interrompido caso seja verificado que ela não está na etapa definida;
  3. Com a pessoa pré-colaboradora na etapa correta, recuperar os dados necessários para o agendamento como: CPF, nome completo, data de nascimento, RG, nome social, posto de trabalho e gênero.
  4. Não é possível receber o retorno do exame através da integração, ele é fornecido pela pessoa pré-colaboradora através da plataforma.

Obtenção do id da etapa gatilho

Caso sua etapa gatilho seja uma etapa customizada, é possível obter o id da etapa na plataforma indo em:

  1. Setup
  2. Admissão
  3. Definições de etapa
  4. Editar etapa de interesse
  5. Na URL terá o id da etapa customizada

Passo 3: Recebimento de informações

O sistema de agendamento de exame médico recebe as informações e realiza o agendamento da pessoa pré-colaboradora.
Após o comparecimento no agendamento, é responsabilidade da pessoa pré-colaboradora enviar o resultado do exame.

Exemplo de requisição do sistema terceiro:

curl -d '{"message":"May the force be with you."}' \
  -H "Content-Type: application/json" \
  "https://urldo.agenteintegrador.net"

Exemplo de retorno dado ao sistema terceiro

{
  "companyName":"ACME",
  "id":"24e99765-8583-4be5-87ae-489c86642964",
  "event":"pre-employee.moved",
  "date":"2019-06-19T23:48:46.952Z",
  "data":{
    "job":{
      "id":19139,
      "name":"Developer",
      "department":{
        "id":45,
        "code":"45124",
        "name":"App Development",
        "similarity":"technology"
      },
      "role":{
        "id":56,
        "code":"123456",
        "name":"Developer",
        "similarity":"developer"
      },
      "branch":{
        "id":1895,
        "code":"1234",
        "name":"GUPY > BRANCH 1"
      },
      "customFields":[
        {
          "id":"7bd3b8ba-180b-4ae2-b397-240f8fb249c6",
          "title":"Pergunta",
          "value":"Resposta"
        }
      ]
    },
    "application":{
      "id":2937132,
      "score":71.570454783086,
      "preHiringInformation":{
        "key1":"value1",
        "key2":"value2"
      },
      "tags":[
        "tag1"
      ],
      "currentStep":{
        "id":86547,
        "name":"Pré-contratação"
      }
    },
    "candidate":{
      "id":1999450,
      "name":"John",
      "lastName":"Doe",
      "email":"[email protected]",
      "identificationDocument":"25272626207",
      "countryOfOrigin":"Brasil",
      "birthdate":"1994-11-16",
      "addressZipCode":"01414-905",
      "addressStreet":"Rua Haddock Lobo",
      "addressNumber":"595 - 10º andar",
      "addressCity":"São Paulo",
      "addressState":"São Paulo",
      "addressStateShortName":"SP",
      "addressCountry":"Brasil",
      "addressCountryShortName":"BR",
      "mobileNumber":"+5511999990000",
      "phoneNumber":"+551130000000",
      "schooling":"technical_course",
      "schoolingStatus":"complete",
      "disabilities":false,
      "gender":"Male"
    },
    "admission":{
      "status":"SIGNING_CONTRACT",
      "admissionDeadline":"2019-06-26T00:00:00.000",
      "hiringDate":"2019-06-19T00:00:00.000Z",
      "documentsTemplate":{
        "id":1,
        "name":"List of Documents"
      },
      "documents":{
        "preEmployee":[
          {
            "id":1,
            "name":"CNH",
            "values":{
              "name":"Pre-Employee",
              "number":1313213
            },
            "validation":{
              "status":"APPROVED",
              "validatedAt":"2020-09-17T22: 49: 10.981Z",
              "companyUserId":1
            },
            "schema":{
              "id":1,
              "name":"CNH",
              "companyId":null,
              "additionalProperties":{
                "additionalProperty1":{
                  "attribute":true
                }
              },
              "uiSchema":{
                "name":{
                  "ui:field":"text",
                  "ui:options":{
                    "option1":true,
                    "option2":[
                      "value1",
                      "value2",
                      "value3"
                    ],
                    "option3":{
                      "attribute1":"value1",
                      "attribute2":2
                    }
                  },
                  "ui:help":"text"
                },
                "number":{
                  "ui:field":"number"
                },
                "ui:order":[
                  "name",
                  "number"
                ]
              },
              "schema":{
                "required":[
                  "name",
                  "number"
                ],
                "properties":{
                  "name":{
                    "type":"string",
                    "title":"Nome Completo"
                  },
                  "number":{
                    "type":"number",
                    "title":"Número da CNH"
                  }
                },
                "description":"",
                "dependencies":{},
                "definitions":{}
              }
            },
            "missing":false
          },
          {
            "id": 2,
            "name": "Comprovante de residência",
            "schema": {
                "id": 2,
                "name": "Comprovante de residência",
                "companyId": null,
                "additionalProperties": {
                    "isCity": {
                        "cidade": true
                    },
                    "isState": {
                        "estado": true
                    },
                    "isCountry": {
                        "pais": true
                    }
                },
                "uiSchema": {
                    "cep": {
                        "ui:field": "text",
                        "ui:options": {
                            "mask": [
                                "[0-9]",
                                "[0-9]",
                                "[0-9]",
                                "[0-9]",
                                "[0-9]",
                                "-",
                                "[0-9]",
                                "[0-9]",
                                "[0-9]"
                            ],
                            "exactLength": {
                                "title": "CEP",
                                "expectedLength": 8
                            }
                        }
                    },
                    "pais": {
                        "ui:field": "select"
                    },
                    "tipo": {
                        "ui:field": "select"
                    },
                    "bairro": {
                        "ui:field": "text"
                    },
                    "cidade": {
                        "ui:field": "select"
                    },
                    "estado": {
                        "ui:field": "select"
                    },
                    "numero": {
                        "ui:field": "houseNumber"
                    },
                    "ui:order": [
                        "tipo",
                        "logradouro",
                        "numero",
                        "complemento",
                        "bairro",
                        "pais",
                        "estado",
                        "cidade",
                        "cep"
                    ],
                    "logradouro": {
                        "ui:field": "text"
                    },
                    "complemento": {
                        "ui:field": "text"
                    }
                },
                "schema": {
                    "required": [
                        "tipo",
                        "logradouro",
                        "numero",
                        "bairro",
                        "cidade",
                        "estado",
                        "cep",
                        "pais"
                    ],
                    "properties": {
                        "cep": {
                            "type": "string",
                            "title": "CEP",
                            "description": "00000-000"
                        },
                        "pais": {
                            "type": "string",
                            "title": "País"
                        },
                        "tipo": {
                            "enum": [],
                            "type": "string",
                            "title": "Tipo"
                        },
                        "bairro": {
                            "type": "string",
                            "title": "Bairro"
                        },
                        "cidade": {
                            "type": "string",
                            "title": "Cidade"
                        },
                        "estado": {
                            "type": "string",
                            "title": "Estado"
                        },
                        "numero": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "title": "Número"
                        },
                        "logradouro": {
                            "type": "string",
                            "title": "Logradouro (ex: nome da rua)"
                        },
                        "complemento": {
                            "type": "string",
                            "title": "Complemento"
                        }
                    },
                    "definitions": {},
                    "dependencies": {}
                }
            }
          }
        ],
        "dependents":[
          {
            "name":"Dependente 1",
            "dependentTypeId":"3808db5b-b808-4cf0-97c6-9ac15cc98125",
            "documents":[
              {
                "id":null,
                "name":"Dados do dependente",
                "values":{
                  "cpf":"12345678900",
                  "name":"Dependente 1"
                },
                "validation":null,
                "missing":false,
                "schema":{
                  "id":null,
                  "name":"Dados do dependente",
                  "companyId":null,
                  "additionalProperties":{},
                  "uiSchema":{
                    "name":{
                      "ui:field":"text"
                    },
                    "cpf":{
                      "ui:field":"text"
                    },
                    "ui:order":[
                      "name",
                      "cpf"
                    ]
                  },
                  "schema":{
                    "required":[
                      "name",
                      "cpf"
                    ],
                    "properties":{
                      "name":{
                        "type":"string",
                        "title":"Nome"
                      },
                      "cpf":{
                        "type":"string",
                        "title":"CPF"
                      }
                    },
                    "description":"",
                    "dependencies":{},
                    "definitions":{}
                  }
                }
              }
            ]
          }
        ],
        "steps":[
          {
            "stepName":"Benefícios",
            "forms":[
              {
                "id":null,
                "name":"Plano de Saúde",
                "values":{
                  "cpf":"12345678900",
                  "name":"Fulano de Tal"
                },
                "validation":null,
                "missing":false,
                "schema":{
                  "id":null,
                  "name":"Plano de Saúde",
                  "companyId":null,
                  "additionalProperties":{},
                  "uiSchema":{
                    "name":{
                      "ui:field":"text"
                    },
                    "cpf":{
                      "ui:field":"text"
                    },
                    "ui:order":[
                      "name",
                      "cpf"
                    ]
                  },                  
                  "schema":{
                    "required":[
                      "name",
                      "cpf"
                    ],
                    "properties":{
                      "cpf":{
                        "type":"string",
                        "title":"CPF"
                      },
                      "name":{
                        "type":"string",
                        "title":"Nome"
                      }
                    }
                  }
                }
              }
            ]
          }
        ]
      }
    }
  }
}

Possíveis erros

Recebimento no agente integrador

O ambiente precisa estar público para poder receber os dados, caso contrário, acontecerá um erro.