Версията
Днес публикувахме версия 0.0.1 на Аренал сървъра. Базовия URL на услугите е http://arenal.skyware-group.com:8080/Arenal/api. В тази версия е напълно завършена функционалността, свързана с публикуване на НМДД. Реализираните операциите са както следва:
- Регистрация на лекар-издател (с токен на софтуерен доставчик);
- Преглед на регистрация на лекар-издател (с неговия собствен токен);
- Обновяване на информацията за лекар-издател (с неговия собствен токен);
- Прекратяване на регистрацията на лекар-издател (с неговия собствен токен);
- Регистриране на направление (с токена на лекаря-издател);
- Преглед на направление (с токена на направлението);
- Обновяване на направление (с токена на направлението);
- Анулиране (изтриване) на направление (с токена на направлението);
Както е видно, горните операции са всъщност CRUD операции върху обектите Publisher и Card.
В допълнение към горните има и редица публични данни от типа на списък със специалности, пакети и изследвания и др. Тъй като тези функции работят без автентикация, можете да ги виждате свободно. Ето един пример: Списък с валидни специалности. ВАЖНО: Във финалната версия публичните функции може да отпаднат, тъй като те нямат отношение към функционирането на системата.
Промени в базата данни.
В базата данни направихме много промени свързани с денормализацията на модела, както и с прецизирането на номенклатурните данни. Изключение от това е номенклатурата МКБ, която за момента “виси” и най-вероятно няма да участва във валидацията на данните, поне докато не уеднаквим базите си.
Тестове с реални данни.
Направихме тестове с реални данни с хиляди направления (взети от реални XML отчети на различни лаборатории) и за наше щастие, нищо прието от НЗОК не беше отхвърлено, което означава че валидациите на този етап са ОК и са готови за реална работа. При тестване успяваме да постигнем над 150 транзакции в минута, което за тестови сървър (Core 2 Duo, 4GB RAM, single SATA disk, Ubuntu 14.04 LTS) е повече от добре. И то с еднонишков клиент.
Документация.
Започнатото преди wiki е остаряло както като подход на документиране, така и като съдържание. Днес го обновихме като софтуер и малко по малко ще обновим и съдържанието му. Моля желаещите да получат достъп да пишат чрез тази форма.
Клиентска библиотека.
Успоредно с писането на сървъра пишем и клиентска библиотека. Тя е реализирана на .NET 4.0 Client Profile и е написана на VB.NET. Всъщност с нея правим и тестовете. Библиотеката съдържа обектния модел, неговата XML сериализация, прихващане на грешки и съвсем опростено извикване на функциите. Ето един съвсем прост пример:
'Създава обект Publisher а данни за него Dim Doctor As New Publisher With { .UIN = "0200000008", .GivenName = "Александър", .MiddleName = "Благоев", .FamilyName = "Лазаров", .Speciality = "15", .PracticeCode = "2222134501", .PracticeName = "ДКЦ ХVI СОФИЯ ООД", .PracticeCity = "София", .PracticePostalCode = "1618", .PracticeAddress = "КВ. БОТУНЕЦ, УЛ.И. ШОНЕВ 2", .Email = "example@domain.com"} 'Създава клеинта Dim Clt As New ArenalClient(My.Settings.ServiceBaseURL, My.Settings.ProviderToken) 'Регистрира Publisher (обикновено се прави веднъж, при инсталация на ОПЛ софтуера) Clt.RegisterPublisher(Doctor, My.Settings.ProviderToken) 'Взима ID и token Dim DoctorID As Integer = Doctor.ArenalID 'Записва се някъде за бъдеща употреба Dim DoctorToken = Doctor.Token 'Записва се някъде за бъдеща употреба 'Създава НМДД с данни Dim MyCard As New Card With { .PublisherID = DoctorID, .CardNo = 15, .AmbulatoryNo = 45, .VisitType = 1, .PIDType = 1, .PID = "----------", .DOB = New Date(1973, 5, 5), .GivenName = "Иван", .MiddleName = "Петров", .FamilyName = "Маринов", .RHIF = "22", .HealthRegion = "01", .LeadingDiagnosis = "Z00.0"} MyCard.Examinations.Add(New Examination With {.Code = "01.01"}) 'Променя token на клиента, с token на издателя Clt.Token = String.Format("{0}-{1}", DoctorID, DoctorToken) 'Регистрира НМДД Clt.RegisterCard(MyCard) 'Взима ID и token Dim MyCardID As Integer = Doctor.ArenalID 'Записва се някъде за бъдеща употреба Dim MyCardToken = Doctor.Token 'Записва се някъде за бъдеща употреба
Както е видно от примера по горе, рутинната работа по регистрация на НМДД е изключително проста и се свежда до:
'Регистрира НМДД Clt.RegisterCard(MyCard)
Забележка: УИН и имената на лекаря в примера са от регистъра на БЛС и не са лични данни. Лечебното заведение е реално и е от регистъра на РЗИ – София. Пациента е измислен и ЕГН-то е заменено с тирета в примера.
Състояние на проекта.
В момента проекта е в състояние, което позволява на разработчиците на ОПЛ и СИМП софтуер да започнат вграждането на функционалност, свързана с регистрация на направления. Има още да се работи по валидация на данните, както и върху API функциите за приемане на НМДД от изпълнителите. Всичко това обаче (почти) няма да окаже влияние на процеса на публикуване. Поради тази причина призоваваме да се започне работа по публикуване на НМДД колкото се може по бързо. Смятаме за реалистично от 01 януари 2015 да пуснем продукционна версия на сървъра, която да осигурява трансфера на НМДД от ОПЛ и СИМП към лабораториите. За втори етап ще остане и втората част – трансфера на резултатите от лаборатории към поръчители.
Технология.
В технологичен план проекта е мигриран към Maven, ползва Java 8 и работи на Tomcat 8. За REST се ползва както и досега библиотеката Jersey вер. 2.6. ORM е и си остава Hibernate, но с по-новата версия 4.3.6. Разбира се, базата данни е PostgreSQL вер. 9.1. Както и досега, сървъра се разработва с Eclipse като официален инструмент за разработка.