Páginas filhas
  • 04 - API - Preenchimento da Ficha Médica do candidato no TOTVS Processo Seletivo.

Sumário


Objetivo


Este documento tem como objetivo exemplificar a forma de utilização da API de preenchimento da ficha médica do candidato no TOTVS Processo Seletivo.

Esta API possibilita incluir, atualizar ou acessar a ficha médica do candidato do TOTVS Processo Seletivo.

É importante ressaltar que neste modelo o aplicativo RM.Host é responsável por hospedar e expor os serviços de APIs. Veja mais sobre a configuração clicando aqui

Recurso disponível a partir da versão 12.1.2402.

Pré-requisitos


  • Permissão

Por questão de segurança e rastreabilidade, as requisições serão permitidas somente para um usuário cadastrado no RM, portanto é necessário conceder as devidas permissões apara o perfil do usuário que irá executar as requisições.

           

  • Parâmetros 

O TOTVS Processo Seletivo irá considerar as parametrizações referentes ao termo de consentimento de uso de imagem e voz que foram definidas no TOTVS Educacional, para maiores informações clique aqui.

  • No TOTVS Processo Seletivo, é necessário indicar que a utilização da ficha médica está habilitada para o processo seletivo. A configuração deve ser realizada em "Edição de Processo Seletivo" > Parâmetros > Matrícula > Confirmação Matrícula > Utiliza ficha médica flexível. Para maiores informações acesse Parâmetro - Matrícula.

Caso o parâmetro não esteja marcado, as chamadas para as APIs da ficha médica GET, POST e PUT, devem ter as seguintes informações no seu retorno:

Dicas


A construção do modelo da ficha médica que será utilizada é realizada no TOTVS Educacional, no TOTVS Educacional será permitido definir um único modelo ativo por contexto, ou seja, o modelo que estiver ativo naquele contexto será o modelo disponibilizado para preenchimento em todo o RM (Portal do aluno, Portal Gestão Educacional ou Portal do TOTVS Processo Seletivo).

Para conhecer mais sobre a criação de modelos clique aqui.

Para ter acesso a estrutura do modelo ativo e que será utilizado pela API de preenchimento da ficha médica, orientamos consumir a API abaixo:

Máscara de Url:  http://{domínio}:{porta}/api/educational/v1/medicalrecord/templates/{Id. Modelo}?Expand=wrapper,section,field

Exemplo de configuração:

Domínio: localhost

Porta: 8051

Expand=wrapper,section,field: indica que a requisição ira retornar os agrupadores, seções e campos.

Id. Modelo: Identificador do modelo da ficha médica que está ativo no contexto.

Url Utilizada: http://localhost:8051/api/educational/v1/medicalrecord/templates/9?Expand=wrapper,section,field

Resultado Positivo (JSON)
{
    "idModel": 9,
    "companyCode": 1,
    "branchCode": 1,
    "levelEducationCode": 1,
    "name": "Exemplo ficha de saúde aluno",
    "active": "S",
    "observation": "Teste",
    "wrappers": [
        {
            "id": 13,
            "idModel": 9,
            "title": "Questionário 1",
            "displayOrder": 1,
            "sections": [
                {
                    "idSection": 8,
                    "idWrapper": 13,
                    "title": "Seção 1",
                    "inactive": "N",
                    "displayOrder": 0,
                    "fields": [
                        {
                            "id": 56,
                            "title": "Faz algum tipo de controle médico?",
                            "fieldType": 8,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 2,
                            "optionsForSelection": [
                                {
                                    "idField": 56,
                                    "sequential": 1,
                                    "text": "Sim",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                },
                                {
                                    "idField": 56,
                                    "sequential": 2,
                                    "text": "Não",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                }
                            ]
                        },
                        {
                            "id": 57,
                            "title": "Já esteve internado alguma vez? ",
                            "fieldType": 10,
                            "size": 50,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": [
                                {
                                    "idField": 57,
                                    "sequential": 1,
                                    "text": "Sim",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                },
                                {
                                    "idField": 57,
                                    "sequential": 2,
                                    "text": "Não",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                }
                            ]
                        },
                        {
                            "id": 58,
                            "title": "Descreva sobre a internação",
                            "fieldType": 2,
                            "size": 500,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": -2,
                            "optionsForSelection": []
                        },
                        {
                            "id": 59,
                            "title": "Já teve ataque, desmaio, perda de sentido? ",
                            "fieldType": 7,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": [
                                {
                                    "idField": 59,
                                    "sequential": 1,
                                    "text": "Sim",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                },
                                {
                                    "idField": 59,
                                    "sequential": 2,
                                    "text": "Não",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                }
                            ]
                        }
                    ]
                }
            ],
            "fields": [
                {
                    "id": 24,
                    "title": "Usa medicamentos controlado",
                    "descriptiveText": "teste cadastro hhhh",
                    "fieldType": 8,
                    "size": 60,
                    "mask": "9999-99999",
                    "required": "N",
                    "inactive": "N",
                    "displayOrder": 1,
                    "optionsForSelection": [
                        {
                            "idField": 24,
                            "sequential": 1,
                            "text": "ooo",
                            "inactive": "N",
                            "optionUsedPeople": false
                        }
                    ]
                }
            ]
        },
        {
            "id": 14,
            "idModel": 9,
            "title": "Questionário 2",
            "displayOrder": 2,
            "sections": [
                {
                    "idSection": 9,
                    "idWrapper": 14,
                    "title": "Patologia ",
                    "inactive": "N",
                    "displayOrder": 0,
                    "fields": [
                        {
                            "id": 60,
                            "title": "Possui algum tipo de alergia? ",
                            "descriptiveText": "teste cadastro hhhhsSSS",
                            "fieldType": 1,
                            "size": 10,
                            "mask": "9999-99999",
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": []
                        },
                        {
                            "id": 61,
                            "title": "Possui algum problema respiratório, reumatismo infeccioso ou sopro no coração?",
                            "fieldType": 11,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": []
                        },
                        {
                            "id": 62,
                            "title": "Qual problema respiratório?",
                            "fieldType": 1,
                            "size": 100,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": []
                        },
                        {
                            "id": 63,
                            "title": " É diabético?",
                            "fieldType": 7,
                            "required": "N",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": [
                                {
                                    "idField": 63,
                                    "sequential": 1,
                                    "text": "Sim",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                },
                                {
                                    "idField": 63,
                                    "sequential": 2,
                                    "text": "Não",
                                    "inactive": "N",
                                    "optionUsedPeople": false
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "id": 15,
            "idModel": 9,
            "title": "COVID-19",
            "displayOrder": 3,
            "fields": [
                {
                    "id": 64,
                    "title": " Já tomou todas as vacinas, inclusive a da COVID-19?",
                    "fieldType": 8,
                    "size": 50,
                    "required": "S",
                    "inactive": "N",
                    "displayOrder": 0,
                    "optionsForSelection": [
                        {
                            "idField": 64,
                            "sequential": 1,
                            "text": "Sim",
                            "inactive": "N",
                            "optionUsedPeople": false
                        },
                        {
                            "idField": 64,
                            "sequential": 2,
                            "text": "nao",
                            "inactive": "N",
                            "optionUsedPeople": false
                        },
                        {
                            "idField": 64,
                            "sequential": 3,
                            "text": "talve",
                            "inactive": "N",
                            "optionUsedPeople": false
                        }
                    ]
                },
                {
                    "id": 65,
                    "title": "Qual vacina da COVID-19?",
                    "fieldType": 1,
                    "size": 50,
                    "required": "N",
                    "inactive": "N",
                    "displayOrder": 0,
                    "optionsForSelection": []
                },
                {
                    "id": 66,
                    "title": "Data da Dose única da COVID-19:",
                    "fieldType": 4,
                    "required": "N",
                    "inactive": "N",
                    "displayOrder": 0,
                    "optionsForSelection": []
                },
                {
                    "id": 67,
                    "title": "Data em que tomou a 1º dose da COVID-19:",
                    "fieldType": 4,
                    "required": "N",
                    "inactive": "N",
                    "displayOrder": 0,
                    "optionsForSelection": []
                },
                {
                    "id": 68,
                    "title": "Data em que tomou a 2º dose da COVID-19:",
                    "fieldType": 4,
                    "required": "N",
                    "inactive": "N",
                    "displayOrder": 0,
                    "optionsForSelection": []
                },
                {
                    "id": 69,
                    "title": "Data em que tomou a dose de reforço da COVID-19",
                    "fieldType": 4,
                    "required": "N",
                    "inactive": "N",
                    "displayOrder": 0,
                    "optionsForSelection": []
                }
            ]
        },
        {
            "id": 16,
            "idModel": 9,
            "title": "Contato Escolar",
            "displayOrder": 0,
            "sections": [
                {
                    "idSection": 10,
                    "idWrapper": 16,
                    "title": "Em caso de emergência a escola deverá comunicar:",
                    "inactive": "N",
                    "displayOrder": 0,
                    "fields": [
                        {
                            "id": 70,
                            "title": "Nome",
                            "fieldType": 1,
                            "size": 100,
                            "required": "S",
                            "inactive": "N",
                            "displayOrder": 1,
                            "optionsForSelection": []
                        },
                        {
                            "id": 71,
                            "title": "Telefone",
                            "fieldType": 3,
                            "size": 20,
                            "mask": "(99)9999-9999",
                            "required": "S",
                            "inactive": "N",
                            "displayOrder": 0,
                            "optionsForSelection": []
                        },
                        {
                            "id": 72,
                            "title": "Parentesco",
                            "fieldType": 1,
                            "size": 40,
                            "mask": "(99)9999-9999",
                            "required": "S",
                            "inactive": "N",
                            "displayOrder": -1,
                            "optionsForSelection": []
                        }
                    ]
                }
            ]
        }
    ]
}


1 - Métodos


      Serão apresentados 3 métodos, os quais foram implementados na API do Termo, são eles:

  • GET ( Retorna a ficha médica cadastrada)
  • POST (Cria nova ficha médica)
  • PUT (Atualiza informações da ficha médica)

1.1 - GET (Retorna a ficha médica cadastrada)


Máscara de Url: http://{domínio}:{porta}/api/educational/v1/ApplicantRegistries/{Cód. da Coligada}|{Id. Processo Seletivo}|{Cód. Usuário PS }/medicalRecord/{Id. Ficha Médica}?BranchCode={Cód Filial}&LevelEducationCode={Nível de ensino}&ResponsibleApplicantCode={Cód. Usuário PS responsável pela operação}

Exemplo de Configuração

Domínio: localhost

Porta: 8051

Cód. Coligada: 1,  Id. Processo Seletivo: 161, Cód. Usuário PS: 386, Id. Ficha Médica:-1, Cód. Filial: 1, Nível de Ensino:1, Cód. Usuário PS Responsável pela atualização:26

Url Utilizada: http://localhost:8051/api/educational/v1/ApplicantRegistries/1|161|386/medicalRecord/-1?BranchCode=1&LevelEducationCode=1&ResponsibleApplicantCode=26

Id. Ficha Médica

"Id. Ficha Médica" se passado -1 o sistema retornará  a ficha médica do modelo que esta ativo, caso contrário deverá ser passada o Id. Ficha médica do candidato (tabela SFICHAMEDICAPESSOA)

O cadastro do campo é global, ou seja, um mesmo campo cadastrado poderá ser utilizado em outros contexto ou em vários modelos do mesmo contexto.

Por exemplo: Campo cadastrado "Qual é o seu tipo sanguíneo?", esse mesmo campo poderá ser adicionado em outros modelos de outros contexto ou do mesmo contexto.

É importante ressaltar que o campo nasce global de forma nativa, e permite que  a informação preenchida pelo aluno também seja global, por exemplo, se o aluno preencher o campo "Qual é o seu tipo sanguíneo?" na ficha médica da filial 01, e depois se esse aluno for transferido para a filial 02, e a ficha médica da filial 02 usar o mesmo campo no seu modelo de ficha médica, essa informação já vai estar preenchida na ficha médica da filial 02.

O mesmo aproveitamento acontecerá, no seguinte cenário: o usuário realiza a cópia da ficha médica "X" para o mesmo contexto, passando a ter a ficha médica "X Cópia". Na sequência inativa a ficha médica "X",  ativa a ficha médica "X Cópia" e acrescenta alguns novos campos, com isso quando o aluno acessar a ficha médica o sistema vai mostrar a ficha médica ativa "X Cópia" e carregara os campos já preenchidos pelo aluno.

Considerando os cenários acima, podem existir casos que para o modelo ativo no TOTVS Educacional, o candidato ainda não possua nenhuma ficha médica preenchida, no entanto existem campos associados a esse modelo que já foram preenchidos pelo candidato em outro momento através de outro modelo, neste caso a ficha médica será retornada com os campos que já estão preenchidos e o idMedicalRecord será igual a  -1 indicando que será uma nova ficha médica.

Caso o usuário não possua nenhum ficha médica cadastrada (para o modelo ativo no RM) será retorno um objeto vazio conforme o exemplo abaixo:

idMedicalRecord: -1 = Indica que deverá ser incluída uma nova ficha médica.

idModel = Sempre retorna o id. modelo que esta ativo no TOTVS Educacional.

Resultado (JSON)
{
    "applicantRegistryCode": "381",
    "selectionProcessCode": "161",
    "idMedicalRecord": -1,
    "idModel": 12,
    "fields": []
}
Resultado (JSON)
{
    "applicantRegistryCode": "386",
    "selectionProcessCode": "161",
    "idMedicalRecord": 47,
    "idModel": 9,
    "observation": "Modelo principal da ficha de saúde",
    "fields": [
        {
            "idField": 70,
            "value": "Joana Silva"
        },
        {
            "idField": 71,
            "value": "(31)9 9221-4225"
        },
        {
            "idField": 72,
            "value": "Mãe"
        },
        {
            "idField": 56,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        },
        {
            "idField": 64,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        }
    ]
}

Informações complementares

É importante ressaltar que se um candidato já for aluno (possuir vinculo com a tabela de Pessoa) a ficha médica do candidato é a mesma do aluno, ou seja, qualquer alteração na ficha médica do candidato automaticamente reflete na ficha médica do aluno (estará alterando a mesma ficha).

1.2 - POST (Criar uma nova ficha médica)


Máscara de Url: http://{domínio}:{porta}/api/educational/v1/ApplicantRegistries/{Cód. da Coligada}|{Id. Processo Seletivo}|{Cód. Usuário PS }/medicalRecord/?BranchCode={Cód Filial}&LevelEducationCode={Nível de ensino}&ResponsibleApplicantCode={Cód. Usuário PS responsável pela operação}

Exemplo de Configuração

Domínio: localhost

Porta: 8051

Cód. Coligada: 1,  Id. Processo Seletivo: 161, Cód. Usuário PS: 386

Url Utilizada: http://localhost:8051/api/educational/v1/ApplicantRegistries/1|161|386/medicalRecord/


Exemplo de Entrada

Importante:

idModel: deve ser informado o id. modelo que esta ativo para o contexto.

Resultado (JSON)
{
    "idModel": 9,
    "companyCode": 1,
    "branchCode": 1,
    "levelEducationCode": 1,     "observation": "Ficha da Elisa Stefany Milena Gonçalves",
    "fields": [
        {
            "idField": 70,
            "value": "Elisa Stefany Milena Gonçalves"
        },
        {
            "idField": 71,
            "value": "(31)998235743"
        },
        {
            "idField": 72,
            "value": "Mãe"
        },
        {
            "idField": 56,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        },
        {
            "idField": 64,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        }
    ]
}

Exemplo de Resultado

Resultado (JSON)
{
    "applicantRegistryCode": "384",
    "responsibleApplicantCode": "26",
    "selectionProcessCode": "161",
    "idMedicalRecord": 48,
    "idModel": 9,
    "companyCode": 1,
    "branchCode": 1,
    "levelEducationCode": 1,
    "observation": "Ficha da Elisa Stefany Milena Gonçalves",
    "fields": [
        {
            "idField": 70,
            "value": "Elisa Stefany Milena Gonçalves",
            "optionsSelected": []
        },
        {
            "idField": 71,
            "value": "(31)998235743",
            "optionsSelected": []
        },
        {
            "idField": 72,
            "value": "Mãe",
            "optionsSelected": []
        },
        {
            "idField": 56,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        },
        {
            "idField": 64,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        }
    ]
}

1.3 - PUT (Atualiza informações da ficha médica)


Máscara de Url: http://{domínio}:{porta}/api/educational/v1/ApplicantRegistries/{Cód. da Coligada}|{Id. Processo Seletivo}|{Cód. Usuário PS }/medicalRecord/{Id. Ficha Médica}?BranchCode={Cód Filial}&LevelEducationCode={Nível de ensino}&ResponsibleApplicantCode={Cód. Usuário PS responsável pela operação}

Exemplo de Configuração

Domínio: localhost

Porta: 8051

Cód. Coligada: 1,  Id. Processo Seletivo: 161, Cód. Usuário PS: 386, Id. Ficha Médica:48, Cód. Filial: 1, Nível de Ensino:1, Cód. Usuário PS Responsável pela atualização:26

Url Utilizada: http://localhost:8051/api/educational/v1/ApplicantRegistries/1|161|386/medicalRecord/48

Exemplo de Entrada

Resultado (JSON)
{  
   "idModel": 9,
    "companyCode": 1,
    "branchCode": 1,
    "levelEducationCode": 1,
     "observation": "Modelo principal da ficha de saúde",
    "fields": [
        {
            "idField": 70,
            "value": "Joana Silva"
        },
        {
            "idField": 71,
            "value": "(31)9 9221-4225"
        },
        {
            "idField": 72,
            "value": "Mãe"
        },
        {
            "idField": 56,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        },
        {
            "idField": 64,
            "value": "",
            "optionsSelected": [
                {
                    "sequential": 1,
                    "value": "Sim"
                }
            ]
        }
    ]
}

Exemplo de Resultado

Importante:

Serão retornados somete os campos que foram atualizado, pois quando enviamos as informações para atualização podemos enviar campos que não foram modificados, por isso é retornado somente os campos que foram atualizados. 

Resultado (JSON)
{
    "idMedicalRecord": 47,
    "idModel": 9,
    "observation": "Modelo principal da ficha de saúde",
    "fields": [
        {
            "idField": 70,
            "value": "Joana Silva"
        },
        {
            "idField": 71,
            "value": "(31)9 9221-4225"
        }
    ]
}
  • Sem rótulos