Skip to content

Commit 4f9c5ee

Browse files
committed
Added support for FHIR EligibilityRequest
1 parent cd266ce commit 4f9c5ee

5 files changed

Lines changed: 265 additions & 0 deletions

File tree

154 Bytes
Binary file not shown.
130 Bytes
Binary file not shown.
130 Bytes
Binary file not shown.
126 Bytes
Binary file not shown.

Migration script/openIMIS migration v1.3.0 - v1.4.0.sql

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3313,3 +3313,268 @@ BEGIN
33133313
ALTER TABLE tblPayment ADD PaymentUUID uniqueidentifier NOT NULL DEFAULT NEWID()
33143314
END
33153315

3316+
-- FHIR EligibilityRequest adaptation
3317+
3318+
/****** Object: StoredProcedure [dbo].[uspServiceItemEnquiry] Script Date: 08/11/2019 21:35:29 ******/
3319+
SET ANSI_NULLS ON
3320+
GO
3321+
SET QUOTED_IDENTIFIER ON
3322+
GO
3323+
3324+
ALTER PROCEDURE [dbo].[uspServiceItemEnquiry]
3325+
(
3326+
@CHFID NVARCHAR(36),
3327+
@ServiceCode NVARCHAR(6) = N'',
3328+
@ItemCode NVARCHAR(6) = N'',
3329+
@MinDateService DATE OUTPUT,
3330+
@MinDateItem DATE OUTPUT,
3331+
@ServiceLeft INT OUTPUT,
3332+
@ItemLeft INT OUTPUT,
3333+
@isItemOK BIT OUTPUT,
3334+
@isServiceOK BIT OUTPUT
3335+
)
3336+
AS
3337+
BEGIN
3338+
3339+
DECLARE @InsureeId INT = (SELECT InsureeId FROM tblInsuree WHERE (CHFID = @CHFID OR InsureeUUID = TRY_CONVERT(UNIQUEIDENTIFIER, @CHFID)) AND ValidityTo IS NULL)
3340+
DECLARE @Age INT = (SELECT DATEDIFF(YEAR,DOB,GETDATE()) FROM tblInsuree WHERE InsureeID = @InsureeId)
3341+
3342+
3343+
3344+
SET NOCOUNT ON
3345+
3346+
--Service Information
3347+
3348+
IF LEN(@ServiceCode) > 0
3349+
BEGIN
3350+
DECLARE @ServiceId INT = (SELECT ServiceId FROM tblServices WHERE ServCode = @ServiceCode AND ValidityTo IS NULL)
3351+
DECLARE @ServiceCategory CHAR(1) = (SELECT ServCategory FROM tblServices WHERE ServiceID = @ServiceId)
3352+
3353+
DECLARE @tblService TABLE(EffectiveDate DATE,ProdId INT,MinDate DATE,ServiceLeft INT)
3354+
3355+
INSERT INTO @tblService
3356+
SELECT IP.EffectiveDate, PL.ProdID,
3357+
DATEADD(MONTH,CASE WHEN @Age >= 18 THEN PS.WaitingPeriodAdult ELSE PS.WaitingPeriodChild END,IP.EffectiveDate) MinDate,
3358+
(CASE WHEN @Age >= 18 THEN NULLIF(PS.LimitNoAdult,0) ELSE NULLIF(PS.LimitNoChild,0) END) - COUNT(CS.ServiceID) ServicesLeft
3359+
FROM tblInsureePolicy IP INNER JOIN tblPolicy PL ON IP.PolicyId = PL.PolicyID
3360+
INNER JOIN tblProductServices PS ON PL.ProdID = PS.ProdID
3361+
LEFT OUTER JOIN tblClaim C ON IP.InsureeId = C.InsureeID
3362+
LEFT JOIN tblClaimServices CS ON C.ClaimID = CS.ClaimID
3363+
WHERE IP.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND PS.ValidityTo IS NULL AND C.ValidityTo IS NULL AND CS.ValidityTo IS NULL
3364+
AND IP.InsureeId = @InsureeId
3365+
AND PS.ServiceID = @ServiceId
3366+
AND (C.ClaimStatus > 2 OR C.ClaimStatus IS NULL)
3367+
AND (CS.ClaimServiceStatus = 1 OR CS.ClaimServiceStatus IS NULL)
3368+
AND PL.PolicyStatus = 2
3369+
GROUP BY IP.EffectiveDate, PL.ProdID,PS.WaitingPeriodAdult,PS.WaitingPeriodChild,PS.LimitNoAdult,PS.LimitNoChild
3370+
3371+
3372+
IF EXISTS(SELECT 1 FROM @tblService WHERE MinDate <= GETDATE())
3373+
SET @MinDateService = (SELECT MIN(MinDate) FROM @tblService WHERE MinDate <= GETDATE())
3374+
ELSE
3375+
SET @MinDateService = (SELECT MIN(MinDate) FROM @tblService)
3376+
3377+
IF EXISTS(SELECT 1 FROM @tblService WHERE MinDate <= GETDATE() AND ServiceLeft IS NULL)
3378+
SET @ServiceLeft = NULL
3379+
ELSE
3380+
SET @ServiceLeft = (SELECT MAX(ServiceLeft) FROM @tblService WHERE ISNULL(MinDate, GETDATE()) <= GETDATE())
3381+
END
3382+
--
3383+
3384+
--Item Information
3385+
3386+
3387+
IF LEN(@ItemCode) > 0
3388+
BEGIN
3389+
DECLARE @ItemId INT = (SELECT ItemId FROM tblItems WHERE ItemCode = @ItemCode AND ValidityTo IS NULL)
3390+
3391+
DECLARE @tblItem TABLE(EffectiveDate DATE,ProdId INT,MinDate DATE,ItemsLeft INT)
3392+
3393+
INSERT INTO @tblItem
3394+
SELECT IP.EffectiveDate, PL.ProdID,
3395+
DATEADD(MONTH,CASE WHEN @Age >= 18 THEN PItem.WaitingPeriodAdult ELSE PItem.WaitingPeriodChild END,IP.EffectiveDate) MinDate,
3396+
(CASE WHEN @Age >= 18 THEN NULLIF(PItem.LimitNoAdult,0) ELSE NULLIF(PItem.LimitNoChild,0) END) - COUNT(CI.ItemID) ItemsLeft
3397+
FROM tblInsureePolicy IP INNER JOIN tblPolicy PL ON IP.PolicyId = PL.PolicyID
3398+
INNER JOIN tblProductItems PItem ON PL.ProdID = PItem.ProdID
3399+
LEFT OUTER JOIN tblClaim C ON IP.InsureeId = C.InsureeID
3400+
LEFT OUTER JOIN tblClaimItems CI ON C.ClaimID = CI.ClaimID
3401+
WHERE IP.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND PItem.ValidityTo IS NULL AND C.ValidityTo IS NULL AND CI.ValidityTo IS NULL
3402+
AND IP.InsureeId = @InsureeId
3403+
AND PItem.ItemID = @ItemId
3404+
AND (C.ClaimStatus > 2 OR C.ClaimStatus IS NULL)
3405+
AND (CI.ClaimItemStatus = 1 OR CI.ClaimItemStatus IS NULL)
3406+
AND PL.PolicyStatus = 2
3407+
GROUP BY IP.EffectiveDate, PL.ProdID,PItem.WaitingPeriodAdult,PItem.WaitingPeriodChild,PItem.LimitNoAdult,PItem.LimitNoChild
3408+
3409+
3410+
IF EXISTS(SELECT 1 FROM @tblItem WHERE MinDate <= GETDATE())
3411+
SET @MinDateItem = (SELECT MIN(MinDate) FROM @tblItem WHERE MinDate <= GETDATE())
3412+
ELSE
3413+
SET @MinDateItem = (SELECT MIN(MinDate) FROM @tblItem)
3414+
3415+
IF EXISTS(SELECT 1 FROM @tblItem WHERE MinDate <= GETDATE() AND ItemsLeft IS NULL)
3416+
SET @ItemLeft = NULL
3417+
ELSE
3418+
SET @ItemLeft = (SELECT MAX(ItemsLeft) FROM @tblItem WHERE ISNULL(MinDate, GETDATE()) <= GETDATE())
3419+
END
3420+
3421+
--
3422+
3423+
DECLARE @Result TABLE(ProdId INT, TotalAdmissionsLeft INT, TotalVisitsLeft INT, TotalConsultationsLeft INT, TotalSurgeriesLeft INT, TotalDelivieriesLeft INT, TotalAntenatalLeft INT,
3424+
ConsultationAmountLeft DECIMAL(18,2),SurgeryAmountLeft DECIMAL(18,2),DeliveryAmountLeft DECIMAL(18,2),HospitalizationAmountLeft DECIMAL(18,2), AntenatalAmountLeft DECIMAL(18,2))
3425+
3426+
INSERT INTO @Result
3427+
SELECT TOP 1 Prod.ProdId,
3428+
Prod.MaxNoHospitalizaion - ISNULL(TotalAdmissions,0)TotalAdmissionsLeft,
3429+
Prod.MaxNoVisits - ISNULL(TotalVisits,0)TotalVisitsLeft,
3430+
Prod.MaxNoConsultation - ISNULL(TotalConsultations,0)TotalConsultationsLeft,
3431+
Prod.MaxNoSurgery - ISNULL(TotalSurgeries,0)TotalSurgeriesLeft,
3432+
Prod.MaxNoDelivery - ISNULL(TotalDelivieries,0)TotalDelivieriesLeft,
3433+
Prod.MaxNoAntenatal - ISNULL(TotalAntenatal, 0)TotalAntenatalLeft,
3434+
--Changes by Rogers Start
3435+
Prod.MaxAmountConsultation ConsultationAmountLeft, --- SUM(ISNULL(Rem.RemConsult,0)) ConsultationAmountLeft,
3436+
Prod.MaxAmountSurgery SurgeryAmountLeft ,--- SUM(ISNULL(Rem.RemSurgery,0)) SurgeryAmountLeft ,
3437+
Prod.MaxAmountDelivery DeliveryAmountLeft,--- SUM(ISNULL(Rem.RemDelivery,0)) DeliveryAmountLeft,By Rogers (Amount must Remain Constant)
3438+
Prod.MaxAmountHospitalization HospitalizationAmountLeft, -- SUM(ISNULL(Rem.RemHospitalization,0)) HospitalizationAmountLeft, By Rogers (Amount must Remain Constant)
3439+
Prod.MaxAmountAntenatal AntenatalAmountLeft -- - SUM(ISNULL(Rem.RemAntenatal, 0)) AntenatalAmountLeft By Rogers (Amount must Remain Constant)
3440+
--Changes by Rogers End
3441+
FROM tblInsureePolicy IP INNER JOIN tblPolicy PL ON IP.PolicyId = PL.PolicyID
3442+
INNER JOIN tblProduct Prod ON PL.ProdID = Prod.ProdID
3443+
LEFT OUTER JOIN tblClaimDedRem Rem ON PL.PolicyID = Rem.PolicyID AND Rem.InsureeID = IP.InsureeId
3444+
3445+
LEFT OUTER JOIN
3446+
(SELECT COUNT(C.ClaimID)TotalAdmissions,CS.ProdID
3447+
FROM tblClaim C INNER JOIN tblClaimServices CS ON C.ClaimID = CS.ClaimID
3448+
INNER JOIN tblInsureePolicy IP ON C.InsureeID = IP.InsureeID
3449+
WHERE C.ValidityTo IS NULL AND CS.ValidityTo IS NULL AND IP.ValidityTo IS NULL
3450+
AND C.ClaimStatus > 2
3451+
AND CS.RejectionReason = 0
3452+
AND C.InsureeID = @InsureeId
3453+
AND C.ClaimCategory = 'H'
3454+
AND (ISNULL(C.DateTo,C.DateFrom) BETWEEN IP.EffectiveDate AND IP.ExpiryDate)
3455+
GROUP BY CS.ProdID)TotalAdmissions ON TotalAdmissions.ProdID = Prod.ProdId
3456+
3457+
LEFT OUTER JOIN
3458+
(SELECT COUNT(C.ClaimID)TotalVisits,CS.ProdID
3459+
FROM tblClaim C INNER JOIN tblClaimServices CS ON C.ClaimID = CS.ClaimID
3460+
WHERE C.ValidityTo IS NULL AND CS.ValidityTo IS NULL
3461+
AND C.ClaimStatus > 2
3462+
AND CS.RejectionReason = 0
3463+
AND C.InsureeID = @InsureeId
3464+
AND C.ClaimCategory = 'V'
3465+
GROUP BY CS.ProdID)TotalVisits ON Prod.ProdID = TotalVisits.ProdID
3466+
LEFT OUTER JOIN
3467+
3468+
(SELECT COUNT(C.ClaimID) TotalConsultations,CS.ProdID
3469+
FROM tblClaim C
3470+
INNER JOIN (SELECT ClaimId, ProdId FROM tblClaimServices WHERE ValidityTo IS NULL AND RejectionReason = 0 GROUP BY ClaimId, ProdID) CS ON C.ClaimID = CS.ClaimID
3471+
WHERE C.ValidityTo IS NULL
3472+
AND C.ClaimStatus > 2
3473+
AND C.InsureeID = @InsureeId
3474+
AND C.ClaimCategory = 'C'
3475+
GROUP BY CS.ProdID) TotalConsultations ON Prod.ProdID = TotalConsultations.ProdID
3476+
LEFT OUTER JOIN
3477+
3478+
(SELECT COUNT(C.ClaimID) TotalSurgeries,CS.ProdID
3479+
FROM tblClaim C
3480+
INNER JOIN (SELECT ClaimId, ProdId FROM tblClaimServices WHERE ValidityTo IS NULL AND RejectionReason = 0 GROUP BY ClaimId, ProdID) CS ON C.ClaimID = CS.ClaimID
3481+
WHERE C.ValidityTo IS NULL
3482+
AND C.ClaimStatus > 2
3483+
AND C.InsureeID = @InsureeId
3484+
AND C.ClaimCategory = 'S'
3485+
GROUP BY CS.ProdID)TotalSurgeries ON Prod.ProdID = TotalSurgeries.ProdID
3486+
LEFT OUTER JOIN
3487+
3488+
(SELECT COUNT(C.ClaimID) TotalDelivieries,CS.ProdID
3489+
FROM tblClaim C
3490+
INNER JOIN (SELECT ClaimId, ProdId FROM tblClaimServices WHERE ValidityTo IS NULL AND RejectionReason = 0 GROUP BY ClaimId, ProdID) CS ON C.ClaimID = CS.ClaimID
3491+
WHERE C.ValidityTo IS NULL
3492+
AND C.ClaimStatus > 2
3493+
AND C.InsureeID = @InsureeId
3494+
AND C.ClaimCategory = 'D'
3495+
GROUP BY CS.ProdID)TotalDelivieries ON Prod.ProdID = TotalDelivieries.ProdID
3496+
LEFT OUTER JOIN
3497+
3498+
(SELECT COUNT(C.ClaimID) TotalAntenatal,CS.ProdID
3499+
FROM tblClaim C
3500+
INNER JOIN (SELECT ClaimId, ProdId FROM tblClaimServices WHERE ValidityTo IS NULL AND RejectionReason = 0 GROUP BY ClaimId, ProdID) CS ON C.ClaimID = CS.ClaimID
3501+
WHERE C.ValidityTo IS NULL
3502+
AND C.ClaimStatus > 2
3503+
AND C.InsureeID = @InsureeId
3504+
AND C.ClaimCategory = 'A'
3505+
GROUP BY CS.ProdID)TotalAntenatal ON Prod.ProdID = TotalAntenatal.ProdID
3506+
3507+
WHERE IP.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND Prod.ValidityTo IS NULL AND Rem.ValidityTo IS NULL
3508+
AND IP.InsureeId = @InsureeId
3509+
3510+
GROUP BY Prod.ProdID,Prod.MaxNoHospitalizaion,TotalAdmissions, Prod.MaxNoVisits, TotalVisits, Prod.MaxNoConsultation,
3511+
TotalConsultations, Prod.MaxNoSurgery, TotalSurgeries, Prod.MaxNoDelivery, Prod.MaxNoAntenatal, TotalDelivieries, TotalAntenatal,Prod.MaxAmountConsultation,
3512+
Prod.MaxAmountSurgery, Prod.MaxAmountDelivery, Prod.MaxAmountHospitalization, Prod.MaxAmountAntenatal
3513+
3514+
Update @Result set TotalAdmissionsLeft=0 where TotalAdmissionsLeft<0;
3515+
Update @Result set TotalVisitsLeft=0 where TotalVisitsLeft<0;
3516+
Update @Result set TotalConsultationsLeft=0 where TotalConsultationsLeft<0;
3517+
Update @Result set TotalSurgeriesLeft=0 where TotalSurgeriesLeft<0;
3518+
Update @Result set TotalDelivieriesLeft=0 where TotalDelivieriesLeft<0;
3519+
Update @Result set TotalAntenatalLeft=0 where TotalAntenatalLeft<0;
3520+
3521+
DECLARE @MaxNoSurgery INT,
3522+
@MaxNoConsultation INT,
3523+
@MaxNoDeliveries INT,
3524+
@TotalAmountSurgery DECIMAL(18,2),
3525+
@TotalAmountConsultant DECIMAL(18,2),
3526+
@TotalAmountDelivery DECIMAL(18,2)
3527+
3528+
SELECT TOP 1 @MaxNoSurgery = TotalSurgeriesLeft, @MaxNoConsultation = TotalConsultationsLeft, @MaxNoDeliveries = TotalDelivieriesLeft,
3529+
@TotalAmountSurgery = SurgeryAmountLeft, @TotalAmountConsultant = ConsultationAmountLeft, @TotalAmountDelivery = DeliveryAmountLeft
3530+
FROM @Result
3531+
3532+
3533+
3534+
3535+
IF @ServiceCategory = N'S'
3536+
BEGIN
3537+
IF @MaxNoSurgery = 0 OR @ServiceLeft = 0 OR @MinDateService > GETDATE() OR @TotalAmountSurgery <= 0
3538+
SET @isServiceOK = 0
3539+
ELSE
3540+
SET @isServiceOK = 1
3541+
END
3542+
ELSE IF @ServiceCategory = N'C'
3543+
BEGIN
3544+
IF @MaxNoConsultation = 0 OR @ServiceLeft = 0 OR @MinDateService > GETDATE() OR @TotalAmountConsultant <= 0
3545+
SET @isServiceOK = 0
3546+
ELSE
3547+
SET @isServiceOK = 1
3548+
END
3549+
ELSE IF @ServiceCategory = N'D'
3550+
BEGIN
3551+
IF @MaxNoDeliveries = 0 OR @ServiceLeft = 0 OR @MinDateService > GETDATE() OR @TotalAmountDelivery <= 0
3552+
SET @isServiceOK = 0
3553+
ELSE
3554+
SET @isServiceOK = 1
3555+
END
3556+
ELSE IF @ServiceCategory = N'O'
3557+
BEGIN
3558+
IF @ServiceLeft = 0 OR @MinDateService > GETDATE()
3559+
SET @isServiceOK = 0
3560+
ELSE
3561+
SET @isServiceOK = 1
3562+
END
3563+
ELSE
3564+
BEGIN
3565+
IF @ServiceLeft = 0 OR @MinDateService > GETDATE()
3566+
SET @isServiceOK = 0
3567+
ELSE
3568+
SET @isServiceOK = 1
3569+
END
3570+
3571+
3572+
3573+
IF @ItemLeft = 0 OR @MinDateItem > GETDATE()
3574+
SET @isItemOK = 0
3575+
ELSE
3576+
SET @isItemOK = 1
3577+
3578+
SELECT * FROM @Result
3579+
3580+
END

0 commit comments

Comments
 (0)