Criar posição
Este endpoint permite criar uma nova posição na estrutura organizacional com base nos dados fornecidos.
Regras de negócio e validações
Campos obrigatórios
name: Nome da posição.externalCodeRole: Código do cargo. O cargo deve existir previamente na base.externalCodeArea: Código da área. A área deve existir previamente na base.
Campos opcionais
description: Descrição da posição.externalCode: Código da posição é opcional. É gerado automaticamente quando não informado.externalCodeParent: Código da posição pai. Se informado, posição pai deve existir previamente na base.externalCodeCostCenter: Código do centro de custo. Se informado, o centro de custo deve existir previamente na base.externalCodeOperationUnit: Código de unidade operacional. Se informado, a unidade operacional deve existir previamente na base.employeeEmail: Email do colaborador. Se informado, colaborador deve existir previamente na base.employeeTaxPayerRegistry: CPF do colaborador. Se informado, colaborador deve existir previamente na base.employeeInternalCompanyNumber: Número de matrícula do colaborador. Se informado, colaborador deve existir previamente na base.
Hierarquia e unicidade
- Código único: O
externalCodedeve ser único dentro da empresa. - Posição Raiz: Se o
externalCodeParentnão for informado, a posição será criada como raiz.- Restrição: É permitida apenas uma posição raiz por empresa.
Vínculo de colaborador
- O preenchimento do colaborador é opcional (a posição pode ser criada como posição aberta).
- Se informado, o colaborador não pode estar vinculado a outra posição ativa simultaneamente.
Exemplo de requisição (cURL)
curl --location 'api.gupy.io/os/v1/positions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer bearer_token_value_here' \
--data-raw '{
"name": "Nome da posição",
"description": "Descrição da posição",
"externalCodeCostCenter": "COST_CENTER_CODE",
"externalCodeArea": "AREA_CODE",
"externalCodeRole": "CARGO_CODE",
"externalCodeParent": "PARENT_PISITION_CODE",
"employeeEmail": "[email protected]",
"employeeTaxpayerRegistry": null,
"employeeInternalCompanyNumber": null
}'Atenção: Forneça o token de autenticação no cabeçalho Authorization.
Possiveis erros
Área não encontrada
Erro lançado quando a área não foi encontrada através do externalCodeArea informado.
{
"statusCode": 404,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "NotFoundException",
"message": "Area not found",
"errors": [
{
"code": "AREA_NOT_FOUND",
"target": "NotFoundException",
"message": "Area not found"
}
]
}Cargo não encontrado
Erro lançado quando o cargo não foi encontrado através do externalCodeRole informado.
{
"statusCode": 404,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "NotFoundException",
"message": "Role not found",
"errors": [
{
"code": "ROLE_NOT_FOUND",
"target": "NotFoundException",
"message": "Role not found"
}
]
}Centro de custo não encontrado
Erro lançado quando o centro de custo não foi encontrado através do externalCodeCostCenter informado.
{
"statusCode": 404,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "NotFoundException",
"message": "Cost center not found",
"errors": [
{
"code": "COST_CENTER_NOT_FOUND",
"target": "NotFoundException",
"message": "Cost center not found"
}
]
}Liderança não encontrada
Erro lançado quando a posição da liderança não foi encontrada através do externalCodeParent informado.
{
"statusCode": 404,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "NotFoundException",
"message": "Parent position not found",
"errors": [
{
"code": "PARENT_POSITION_NOT_FOUND",
"target": "NotFoundException",
"message": "Parent position not found"
}
]
}Colaborador não encontrado
Erro lançado quando o colaborador não foi encontrado através do employeeEmail, employeeTaxpayerRegistry e employeeInternalCompanyNumber informado.
{
"statusCode": 404,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "NotFoundException",
"message": "Employee not found",
"errors": [
{
"code": "EMPLOYEE_NOT_FOUND",
"target": "NotFoundException",
"message": "Employee not found"
}
]
}Colaborador alocado em outra posição
Erro lançado quando o colaborador informado está vinculado a outra posição.
{
"statusCode": 409,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "ConflictException",
"message": "Employee is already in another position",
"errors": [
{
"code": "EMPLOYEE_ALREADY_ASSIGNED",
"target": "ConflictException",
"message": "Employee is already in another position"
}
]
}Posição raiz (sem liderança) já existe
Erro lançado quando externalCodeParent não é informado, porém já existe uma posição raiz cadastrada na base.
{
"statusCode": 409,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "ConflictException",
"message": "Only one root position allowed per company.",
"errors": [
{
"code": "ALREADY_EXISTS_ROOT_POSITION",
"target": "ConflictException",
"message": "Only one root position allowed per company."
}
]
}Posição já existe cadastrado na base
Erro lançado quando externalCode informado já existe cadastrado na base.
{
"statusCode": 422,
"timestamp": "2025-05-29T21:00:00.000Z",
"path": "/v1/positions",
"method": "POST",
"title": "UnprocessableEntityException",
"message": "A position with this external code already exists in the company",
"errors": [
{
"code": "POSITION_ALREADY_EXISTS",
"target": "UnprocessableEntityException",
"message": "A position with this external code already exists in the company"
}
]
}Updated 5 days ago
