Introduction
Web service "Submit Activity Type Package" allows to transmit new or update existing activity type, its related data and legal entity licenses in e-Health system in one call. Activity types are created/updated one by one.
Specification
Validation
Authorization
- Verify the validity of access token
- in case of error return 401 ('Access denied')
- Check user scope activity_type:write in order to perform this action
- in case of error generate 403 response ('Invalid scopes')
Request validation
Note: All IDs, submitted as PK, should be unique for eHealth when creating new record
Validate Owner
- Check that one of token.user_id employees is an OWNER of current legal_entity
- in case validation fails - generate 409 - "Only owner of legal entity can create or update activity types and(or) licenses for legal entity"
Validate digital signature
- Validate signature
- Extract signer Certificate details
Validate encoded signed content according to JSON Schema
- Return 422 with list of validation errors in case validation fails
Validate Legal Entity
- Check that legal_entities.is_active = true and legal_entities.status = active for current legal entity
- in case of error return 409 - "legal entity is not active"
- token.Client_id must match current legal entity
- in case of error return 422
- EDRPOU for token.client_id must match EDRPOU $.legal_entity.edrpou
- in case of error return 422
Validate Tax ID
- Check that EDRPOU in Certificate details exists and not empty
- Check that EDRPOU in Certificate details is valid according to ^[0-9]{8,10}$
- Check that EDRPOU in Certificate details is equal to $.legal_entity.edrpou
- In case validation fails - generate 422 error
- If EDRPOU in Certificate details is empty check that DRFO exists and not empty
- Check that DRFO in Certificate details is valid according to ^[0-9]{9,10}$
- Check that DRFO in Certificate details is equal to $.legal_entity.edrpou
- In case validation fails - generate 422 error
- In case EDRPOU and DRFO is empty return error 422, msg "EDRPOU and DRFO is empty in digital sign"
Validate Licenses
- Apply current validations on license data
- Search for current legal entity license in prm.licenses.id = $.license.id
- If record is found then check that:
- prm.licenses.type = $.license.type
- in case validation fails - generate 409 - "License type update is not allowed"
- prm.licenses.is_active = true
- in case validation fails - generate 409 - "Inactive license update is not allowed"
- prm.licenses.expiry_date is empty or more than today
- in case validation fails - generate 409 - "Activity type can not be linked to expired license"
- prm.licenses.type = $.license.type
- If record is found then check that:
Validate Activity Type
- Validate that $.activity_type.id is unique
- Search for current legal entity activity type in prm.activity_types where id = $.activity_type.id
- if record is found then check that
- prm.activity_types.type = $.activity_type.type
- in case validation fails - generate 409 - "Update of type for activity type is not allowed"
- prm.activity_types.is_active = true
- in case validation fails - generate 409 - "Inactive activity type update is not allowed"
- prm.activity_types.type = $.activity_type.type
- if record is found then check that
- Search for current legal entity activity type in prm.activity_types where is_active=true and type = $.activity_type.type
- If record is found then check that its id is equal to $.activity_type.id
- in case validation fails - generate 409 - "Active activity type with the same type already exists"
- If record is found then check that its id is equal to $.activity_type.id
- Check $.activity_type.type license obligation and license type needed (see table below)
- If license is a must:
- check that $.activity_type.license_id is not empty
- in case validation fails - generate 422
- check that license with $.activity_type.license_id exists in payload
- in case validation fails - generate 422
- check that $.license.type is of needed type
- in case validation fails - generate 409 - "Activity type does not correspont to its license type"
- if license with $.activity_type.license_id does not exist in payload then check search for license with $.activity_type.license_id in prm.licenses for current legal entity
- if record is not found - generate 422
- if record found check that lisense is not expired (prm.licenses.expiry_date is empty or more than today)
- if validation fails - generate 409 - "Adding activity type related to expired license is not allowed"
- Check that prm.licenses.type is of needed type
- in case validation fails - generate 409 - "Activity type does not correspont to its license type"
- check that $.activity_type.license_id is not empty
- If license is a must:
Activity types license obligation and types
Activity type | License needed | License type |
---|---|---|
PRIMARY_CARE | Y | MSP |
AMBULATORY | Y | MSP |
PHARMACY | Y | PHARMACY |
MIS | N | |
NHS | N |
Processing
- Search for current legal entity license in prm.licenses where id = $.license.id
- if record is found update it
- Note: type is not update
- if record is not found create new record
- set nhs_verified = false
- if record is found update it
- Search for current legal entity activity type in prm.activity_types where id = $.activity_type.id
- If record is found update it
- Note: type is not updated
- if prm.activity_types.status <> active then set prm.activity_types.status = active, write to audit_log
- if record is not found create new record with status = active
- set nhs_verified = false
- If record is found update it
- Find contracts by contractor_legal_entity_id for current legal entity where status='VERIFIED' AND ops.contracts.type corresponding to activity_type (use ops.contracts.type to activity_type mapping described in
https://zube.io/edenlabllc/e-health/c/5969:
capitation_activity_types: PRIMARY_CARE,
reimbursement_activity_types: PHARMACY)
- set ops.contracts.is_suspended=true
- Save signed_content to Media Storage
- Save data to corresponding collections in DBs
- Save link to the signed content to the activity type