Интеграция с НЦЭ
Необходимо написать интеграционный сервис который будет периодически брать данные возвращаемые по апи за текущий день по региону "regionISO": "KZ-AST" и сохранять их в реестре
Ссылка на Swager UI
https://api.nce.kz/swagger/index.html?urls.primaryName=NCE%20sync%20API%20V1
Получаем токен для авторизации через API:
POST https://api.nce.kz/api/v1/authenticate
Username vwpWePg34WOnesjKojMJ
Password Jg27kGGnBI3YccVDg8nMTTmmdjijCaXL
Ответ апи получения токена
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiODY6MTM1IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZWlkZW50aWZpZXIiOiIxMzUiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOiJTdXBlcnZpc29yIiwiZXhwIjoxNjAyNTMxMDc4LCJpc3MiOiJhcGkubmNlLmt6IiwiYXVkIjoic2l0ZSJ9.WRtpvKH1fme85Y_Vz3Mf-sltglk5V1JBtjYf5N0WSeI",
"expires": "2020-10-12T19:31:18.6708546+00:00",
"errorCode": null
}
P.S. Токен действителен 24 часа. Необходимо при каждом обращении запрашивать новый токен.
API для получения данных по ПЦР исследованиям по организациям
POST https://api.nce.kz/api/v1/monitoring/covid/all
Для авторизации используем токен полученный из предыдущего API
Ответ апи
{
"results": [
{
"units": {
"180441035837": {
"bin": "180441035837",
"day": "2020-10-29T00:00:00",
"probe": "Primary",
"result": false,
"regionISO": "KZ-ALA",
"count": 9
}
},
"day": "2020-10-29T00:00:00",
"probe": "Primary",
"result": false,
"regionISO": "KZ-ALA",
"count": 9
}
]
}
Нам необходимо брать данные из массива units, так как в родительском массиве могут передавать несколько units по разным организациям. Ниже пример того как могут быть переданы данные из разных организаций в одном массиве.
{
"units": {
"111141017761": {
"bin": "111141017761",
"day": "2020-10-21T00:00:00",
"probe": "Primary",
"result": false,
"regionISO": "KZ-AKM",
"count": 441
},
"150741016908": {
"bin": "150741016908",
"day": "2020-10-21T00:00:00",
"probe": "Primary",
"result": false,
"regionISO": "KZ-AKM",
"count": 2
}
},
"day": "2020-10-21T00:00:00",
"probe": "Primary",
"result": false,
"regionISO": "KZ-AKM",
"count": 443
}
Реестр в который необходимо записать данные полученные по API
ПЦР-исследования - ptsr-issledovaniya
Форма
ПЦР-исследования - pcr_issledovaniya
Данные должны заполняться по данной таблице:
| Поле формы реестра | Поле API | Условие |
|---|---|---|
| date_create_data | day | |
| listbox_organizations | bin | |
| numericinput_first | count | Если "probe": "Primary", то число из поля count записывать в данное поле |
| numericinput_second | count | Если "probe": "Repeatedly" , то число из поля count записывать в данное поле |
| numericinput_second | count | Если "probe": "Treatment Control" , то число из поля count записывать в данное поле |
| numericinput_positive | count | Если "result": true, то число из поля count записывать в данное поле |
| numericinput_negative | result | Если "result": false, то число из поля count записывать в данное поле |
| formula_test_done | count | В случае если по выбранной лаборатории имеется только один массив записей то вписать в данное поле значение из поля count которое было возвращено АПИ. Если по выбранной лаборатории несколько массивов с записями то вписать в данное поле сумму значений поля count которое было возвращено АПИ |
Справочник медицинских организаций
Лаборатории по ПЦР dict_pcr_laboratories
dict_pcr_laboratories.bin = listbox_pcr_laboratories.id
Необходимо взять данные только по существующим в системе Лабораториям. В случае если за текущий день имеются несколько записей по одной МО то необходимо их объединить в одну запись.
К примеру есть три массива по одной лаборатории за текущий день.
{
"units": {
"111141017761": {
"bin": "111141017761",
"day": "2020-10-21T00:00:00",
"probe": "Repeatedly",
"result": false,
"regionISO": "KZ-AKM",
"count": 15
}
},
"day": "2020-10-21T00:00:00",
"probe": "Repeatedly",
"result": false,
"regionISO": "KZ-AKM",
"count": 15
},
{
"units": {
"111141017761": {
"bin": "111141017761",
"day": "2020-10-21T00:00:00",
"probe": "Primary",
"result": true,
"regionISO": "KZ-AKM",
"count": 3
}
},
"day": "2020-10-21T00:00:00",
"probe": "Primary",
"result": true,
"regionISO": "KZ-AKM",
"count": 32
},
{
"units": {
"111141017761": {
"bin": "111141017761",
"day": "2020-10-21T00:00:00",
"probe": "Treatment Control",
"result": false,
"regionISO": "KZ-AKM",
"count": 4
}
},
"day": "2020-10-21T00:00:00",
"probe": "Treatment Control",
"result": false,
"regionISO": "KZ-AKM",
"count": 4
},
Для того чтобы заполнить поле "Мощность,количество тестов за сутки" numericinput_power_on_day нужно получить последнюю (единственную) запись в реестре "Информация по суточной мощности лаборатории" registry_information_on_the_daily_capacity_of_the_laboratory из поля numericinput_power_on_day
Для того чтобы заполнить поле "Всего проведено тестов за весь период" numericinput_all_period_test_count нужно получить значение из последней записи по выбранной лаборатории в текушем реестре из поля numericinput_all_period_test_count и прибавить к нему значение из поля formula_test_done которое было заполнено посредством интеграции.
Остальные поля заполняются вручную самими пользователями.