ЕСОЗ - публічна документація

Deactivate innm dosage registry_UA

Ціль

Сервіс розроблено для завантаження деактивації innm_dosage та пов'язанного лікарського засобу та запису по program_medication. Процес використовує сервіс jabba. В ході виконання створюється job, на основі якої також створюються задачі. Кожна задача - це один запит на створення сутності з реєстру.

Специфікація

"Deactivates a single `MedicationRegistry`." deactivateMedicationRegistry( input: DeactivateMedicationRegistryInput! ): DeactivateMedicationRegistryPayload
""" Input for `deactivateMedicationRegistry` mutation. User must have a scope **medication_registry:write** """ input DeactivateMedicationRegistryInput { "Type of register originating medication registry data. The value should be present in the `REGISTER_TYPE` dictionary." registerType: String! "Deactivate medication registry reason description." reasonDescription: String! "Input file in csv format with medication register." csvData: Upload! } """ Return type for `deactivateMedicationRegistry` mutation. """ type DeactivateMedicationRegistryPayload { "Created `MedicationRegistryJob`." medicationRegistryJob: MedicationRegistryJob } """ An object for MedicationRegistryJob. """ type MedicationRegistryJob implements Node { "The ID of an object" id: ID! "Primary key identifier from the database" databaseId: UUID! "Job name." name: String "Medication registry Job status." status: JobStatus! "Job execution strategy." strategy: JobStrategy! "Date and time when the job starts." startedAt: DateTime! "Date and time when the job ends." endedAt: DateTime "Tasks within this job." tasks( "A condition to be used in determining which values should be returned by the collection." filter: TaskFilter "The method to use when ordering collection items." orderBy: TaskOrderBy "Read all values in the set after (below) this cursor." after: String "Read all values in the set before (above) this cursor." before: String "Only read the first _n_ values of the set." first: Int "Only read the last _n_ values of the set." last: Int ): MedicationRegistryTaskConnection! "Type of register originating medication registry data. The value should be present in the `REGISTER_TYPE` dictionary." registerType: String! "Medication registry job reason description." reasonDescription: String! } """ A connection to a list of `MedicationRegistryTask` values. """ type MedicationRegistryTaskConnection { "Information to aid in pagination." pageInfo: PageInfo! "A list of nodes." nodes: [MedicationRegistryTask] "A list of edges." edges: [MedicationRegistryTaskEdge] } """ Reads and enables pagination through a set of `MedicationRegistryTask`. """ type MedicationRegistryTaskEdge { "The item at the end of the edge." node: MedicationRegistryTask! "A cursor for use in pagination." cursor: String! } """ A child of a `MedicationRegistryJob`, contains the result of task execution. """ type MedicationRegistryTask implements Node { "The ID of an object" id: ID! "Primary key identifier from the database" databaseId: UUID! "Task name." name: String "Task status, is set automatically." status: TaskStatus! "Task meta data." meta: MedicationRegistryTaskMeta "Date and time when task was executed." endedAt: DateTime "Task error." error: TaskError "Technical information when task was inserted into the DB." insertedAt: DateTime! "Technical information when task was updated in the DB." updatedAt: DateTime! } """ Metadata of a `MedicationRegistryTask`. """ type MedicationRegistryTaskMeta { "Primary key identifier of an entity from the database." databaseId: UUID "Line number of csv file from input." csvDataLine: Int }

Авторизація

  • Перевірити валідність токену доступу

    • в разі помилки - повернути 401 (“Invalid access token”) в разі невалідних валідацій

  • Перевірити, що токен дійсний

    • в разі помилки - повернути 401 (“Invalid access token”)

  • Перевірити скоупи користувача (scope = 'medication_registry:write') на можливість виконання даної дії

    • в разі помилки - повернути 403 (“Your scope does not allow to access this resource. Missing allowances: medication_registry:write”)

Перевірити запит

  1. Перевірити запит використовуючи схему

    1. Повернути 422 з переліком помилок валідації в разі їх неуспішності.

  2. Перевірити, що registerType = ‘DEACTIVATE_INNM_DOSAGE_REGISTRY'

    1. Повернути 422 з переліком помилок валідації в разі їх неуспішності.

  3. Перевірити, що reasonDescription заповнено

    1. Повернути 422 з переліком помилок валідації в разі їх неуспішності.

  4. Перевірити вхідний файл у відповідності до структури файлу

    1. Повернути 422 з переліком помилок валідації в разі їх неуспішності.

  5. Перевірити, що ідентифікатори з запиту існують та активні

    1. Повернути 404 з переліком помилок валідації в разі їх неуспішності.

Приклад файлу:

Сервісна логіка

  1. Перевірити вхідні дані у відповідності до схеми

  2. Перевірити існуючі та деактивувати сутності innm_dosage з реєстру:

    1. Отримати лікарські засоби (type = INNM_DOSAGE) по innm_dosage.id з файлу та визначити останні dispense_valid_to між IL.medication_request_requests.data (status = NEW) та OPS.medication_requests (status = ACTIVE):

      1. В разі, якщо є будь-які medication_request_requests та medication_requests встановити для активних записів (is_active = true)

        1. PRM.medications (type = INNM_DOSAGE)

          1. is_active = false

          2. end_date = current_date ()

          3. updated_at = now()

          4. updated_by = user_id, from token

        2. PRM.medications (type = BRAND)

          1. is_active = false

          2. end_date = current_date ()

          3. updated_at = now()

          4. updated_by = user_id, from token

        3. PRM.program_medications

          1. medication_request_allowed = false

          2. care_plan_activity_allowed = false

          3. is_active = false

          4. end_date = current_date ()

          5. updated_at = now()

          6. updated_by = user_id, from token

      2. В разі, якщо є будь-які medication_request_requests та medication_requests встановити для активних записів (is_active = true):

        1. PRM.medications (type = INNM_DOSAGE)

          1. end_date = $.dispense_valid_to

          2. updated_at = now()

          3. updated_by = user_id, from token

        2. PRM.medications (type = BRAND)

          1. end_date = $.dispense_valid_to

          2. updated_at = now()

          3. updated_by = user_id, from token

        3. PRM.program_medications

          1. medication_request_allowed = false

          2. care_plan_activity_allowed = false

          3. end_date = $.dispense_valid_to

          4. updated_at = now()

          5. updated_by = user_id, from token

  3. Повернути ідентифікатор job з результатом.

ЕСОЗ - публічна документація