@@ -3313,3 +3313,268 @@ BEGIN
33133313 ALTER TABLE tblPayment ADD PaymentUUID uniqueidentifier NOT NULL DEFAULT NEWID ()
33143314END
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