Table of Contents |
---|
Purpose
The method is used to register new employee or to update an existing one. There are two different flows of registration depending on whether the employee has tax_id or doesn't have one.
...
Page Properties | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Logic
...
Dictionaries
POSITION
EMPLOYEE_TYPE
GENDER
+DOCUMENT_TYPE
COUNTRY
EDUCATION_DEGREE
QUALIFICATION_TYPE
PHONE_TYPE
SPECIALITY_TYPE
SPECIALITY_LEVEL
SPEC_QUALIFICATION_TYPE
...
There is an object “<employee_type>” (“doctor”, “assistant”, “specialist”…) in the body of the “employee_request”; <employee_type> is the same as employee to be created (DOCTOR, ASSISTANT, SPECIALIST, etc). Required for the employees with mandatory medical education (“doctor”, “assistant”, “specialist”, “assistant”, “laborant”, “med_coordinator”, ”med_admin”, ”pharmasist”).
if employee_type == PHARMACY_EMPLOYEE_TYPES check division_id
if division_id is absent - return error 422 "division_id should be specified"
Validate request (Logic)
Check employee_type: Employee configurable validation rules and dictionaries
If employee_id is passed in the payload:
search employees by employee_id
if not found - return error 404else check *
check that employee_type not in (OWNER, PHARMACY_OWNER)
in case of error - return 409 “Forbidden to create <employee_type>“
check employee_type and
(*tax_id (or passport
_id_id, if no_tax_id: true)
If dosn't match, return error 409
If match,“<field> doesn't match"
check that employee is active
for(
employee_type = OWNER or PHARMACY_OWNER),status = APPROVED and is_active =
falsefor (employee_type not OWNER and not PHARMACY_OWNER), status = DISMISSED and is_active = true
if employee is active - create employee request
if employee is not active - return error 409in case of error - return 409 “employee is <status>“
true)
Check allowed employee types for legal_entity type: Legal_Entity_Type vs Employee_Type validation rules
if not found - return error 404
Validate legal entity type status for current legal entity: status should be active or suspended
Validate party
first_name, last_name, second_name have the same validation pattern - `^(?!.*[ЫЪЭЁыъэё@%&$^#])[А-ЯҐЇІЄа-яґїіє’\\'\\- ]+$`
if doesn't match, return error 422 "string does not match pattern ..."
validate birth_date
birth_date > 1900-01-01 and birth_date < current date
otherwise return error 422 "invalid birth_date value"
birth_date has validation pattern - `^(\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))?)?$`
if doesn't match, return error 422 "expected 'birth_date' to be a valid ISO 8601 date"
gender has one of the following values - "FEMALE", "MALE"
otherwise return error 422 "value is not allowed in enum"
validate tax_id
tax_id has validation pattern - `^([0-9]{9,10}|[А-ЯЁЇIЄҐ]{2}\\d{6})$`
if doesn't match, return error 422 "string does not match pattern ..."
email has validation pattern - `^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[A-Z0-9-]+\\.)+[A-Z]{2,6}$`
if doesn't match, return error 422 "expected 'email' to be an email address"
validate documents
documents.type has one of the following values:
"BIRTH_CERTIFICATE"
"BIRTH_CERTIFICATE_FOREIGN"
"COMPLEMENTARY_PROTECTION_CERTIFICATE"
"NATIONAL_ID"
"PASSPORT"
"PERMANENT_RESIDENCE_PERMIT"
"REFUGEE_CERTIFICATE"
"TEMPORARY_CERTIFICATE"
"TEMPORARY_PASSPORT"
otherwise return error 422 "value is not allowed in enum"
documents.number has validation pattern according to documents.type
BIRTH_CERTIFICATE - `^((?![ЫЪЭЁыъэё@%&$^#`~:,.*|}{?!])[A-ZА-ЯҐЇІЄ0-9№\\/()-]){2,25}$`
COMPLEMENTARY_PROTECTION_CERTIFICATE - `^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$`
NATIONAL_ID - `^[0-9]{9}$`
PASSPORT - `^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$`
PERMANENT_RESIDENCE_PERMIT - `^(((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{4,6}|[0-9]{9}|((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{5}\\/[0-9]{5})$`
REFUGEE_CERTIFICATE - `^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$`
TEMPORARY_CERTIFICATE - `^(((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{4,6}|[0-9]{9}|((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{5}\\/[0-9]{5})$`
TEMPORARY_PASSPORT - `^((?![ЫЪЭЁыъэё@%&$^#`~:,.*|}{?!])[A-ZА-ЯҐЇІЄ0-9№\\/()-]){2,25}$`
validate documents.issued_at
documents.issued_at has validation pattern - `^(\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))?)?$`
if doesn't match, return error 422 "expected 'issued_at' to be a valid ISO 8601 date"
validate phones
phones.type has one of the following values - "LAND_LINE", "MOBILE"
otherwise return error 422 "value is not allowed in enum"
phones.number has validation pattern - `^\\+38[0-9]{10}$`
if doesn't match, return error 422 "string does not match pattern ..."
...