Skip to content

Commit 2f59166

Browse files
authored
OP-1066: modular IMIS: time correlations don't work (#158)
* SubmitSingleClaim SP is now includes historical timestamp for ProductItems/ProductServices * SubmitSingleClaim SP is now taking historical data for items/services * Historical Price lists are taken care while processing claims
1 parent ed11a55 commit 2f59166

2 files changed

Lines changed: 79 additions & 45 deletions

File tree

89.7 KB
Binary file not shown.

sql/stored_procedures/uspSubmitSingleClaim.sql

Lines changed: 79 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -268,21 +268,22 @@ BEGIN
268268
UPDATE tblClaimItems SET tblClaimItems.RejectionReason = 2
269269
FROM dbo.tblClaimItems
270270
LEFT OUTER JOIN
271-
(SELECT tblPLItemsDetail.ItemID
272-
FROM tblHF INNER JOIN
273-
tblPLItems ON tblHF.PLItemID = tblPLItems.PLItemID INNER JOIN
274-
tblPLItemsDetail ON tblPLItems.PLItemID = tblPLItemsDetail.PLItemID
275-
WHERE (tblHF.HfID = @HFID) AND (tblPLItems.ValidityTo IS NULL) AND (tblPLItemsDetail.ValidityTo IS NULL)) PLItems
271+
(SELECT tblPLItemsDetail.ItemID
272+
FROM tblHF
273+
INNER JOIN tblPLItemsDetail ON tblHF.PLItemID = tblPLItemsDetail.PLItemID
274+
AND @TargetDate BETWEEN tblPLItemsDetail.ValidityFrom AND ISNULL(tblPLItemsDetail.ValidityTo, GETDATE())
275+
WHERE tblHF.HFID = @HFID) PLItems
276276
ON tblClaimItems.ItemID = PLItems.ItemID
277277
WHERE tblClaimItems.ClaimID = @ClaimID AND tblClaimItems.ValidityTo IS NULL AND PLItems.ItemID IS NULL
278278

279279
UPDATE tblClaimServices SET tblClaimServices.RejectionReason = 2
280280
FROM dbo.tblClaimServices
281281
LEFT OUTER JOIN
282-
(SELECT tblPLServicesDetail.ServiceID
283-
FROM tblHF INNER JOIN
284-
tblPLServicesDetail ON tblHF.PLServiceID = tblPLServicesDetail.PLServiceID
285-
WHERE (tblHF.HfID = @HFID) AND (tblPLServicesDetail.ValidityTo IS NULL) AND (tblPLServicesDetail.ValidityTo IS NULL)) PLServices
282+
(SELECT tblPLServicesDetail.ServiceID
283+
FROM tblHF
284+
INNER JOIN tblPLServicesDetail ON tblHF.PLServiceID = tblPLServicesDetail.PLServiceID
285+
AND @TargetDate BETWEEN tblPLServicesDetail.ValidityFrom AND ISNULL(tblPLServicesDetail.ValidityTo, GETDATE())
286+
WHERE tblHF.HfID = @HFID) PLServices
286287
ON tblClaimServices.ServiceID = PLServices.ServiceID
287288
WHERE tblClaimServices.ClaimID = @ClaimID AND tblClaimServices.ValidityTo IS NULL AND PLServices.ServiceID IS NULL
288289

@@ -333,28 +334,44 @@ BEGIN
333334
IF @Adult = 1
334335
DECLARE PRODSERVICELOOP CURSOR LOCAL FORWARD_ONLY FOR
335336
SELECT TblProduct.ProdID , tblProductServices.ProdServiceID , tblInsureePolicy.EffectiveDate, tblPolicy.EffectiveDate, tblInsureePolicy.ExpiryDate , tblPolicy.PolicyStage
336-
FROM tblFamilies INNER JOIN
337-
tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID INNER JOIN
338-
tblProduct ON tblPolicy.ProdID = tblProduct.ProdID INNER JOIN
339-
tblProductServices ON tblProduct.ProdID = tblProductServices.ProdID INNER JOIN
340-
tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
341-
WHERE (tblPolicy.EffectiveDate <= @TargetDate) AND (tblPolicy.ExpiryDate >= @TargetDate) AND (tblPolicy.ValidityTo IS NULL) AND (tblProductServices.ValidityTo IS NULL) AND
342-
(tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8) AND (tblProductServices.ServiceID = @ServiceID) AND (tblFamilies.FamilyID = @FamilyID) AND (tblProduct.ValidityTo IS NULL) AND
343-
(tblInsureePolicy.EffectiveDate <= @TargetDate) AND (tblInsureePolicy.ExpiryDate >= @TargetDate) AND (tblInsureePolicy.InsureeId = @InsureeID) AND
344-
(tblInsureePolicy.ValidityTo IS NULL)
337+
FROM tblFamilies
338+
INNER JOIN tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID
339+
INNER JOIN tblProduct ON tblPolicy.ProdID = tblProduct.ProdID
340+
INNER JOIN tblProductServices ON tblProduct.ProdID = tblProductServices.ProdID
341+
AND @TargetDate BETWEEN tblProductServices.ValidityFrom AND ISNULL(tblProductServices.ValidityTo, GETDATE())
342+
INNER JOIN tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
343+
WHERE tblPolicy.EffectiveDate <= @TargetDate
344+
AND tblPolicy.ExpiryDate >= @TargetDate
345+
AND tblPolicy.ValidityTo IS NULL
346+
AND (tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8)
347+
AND tblProductServices.ServiceID = @ServiceID
348+
AND tblFamilies.FamilyID = @FamilyID
349+
AND tblProduct.ValidityTo IS NULL
350+
AND tblInsureePolicy.EffectiveDate <= @TargetDate
351+
AND tblInsureePolicy.ExpiryDate >= @TargetDate
352+
AND tblInsureePolicy.InsureeId = @InsureeID
353+
AND tblInsureePolicy.ValidityTo IS NULL
345354
ORDER BY DATEADD(m,ISNULL(tblProductServices.WaitingPeriodAdult, 0), tblInsureePolicy.EffectiveDate)
346355
ELSE
347356
DECLARE PRODSERVICELOOP CURSOR LOCAL FORWARD_ONLY FOR
348357
SELECT TblProduct.ProdID , tblProductServices.ProdServiceID , tblInsureePolicy.EffectiveDate, tblPolicy.EffectiveDate, tblInsureePolicy.ExpiryDate , tblPolicy.PolicyStage
349-
FROM tblFamilies INNER JOIN
350-
tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID INNER JOIN
351-
tblProduct ON tblPolicy.ProdID = tblProduct.ProdID INNER JOIN
352-
tblProductServices ON tblProduct.ProdID = tblProductServices.ProdID INNER JOIN
353-
tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
354-
WHERE (tblPolicy.EffectiveDate <= @TargetDate) AND (tblPolicy.ExpiryDate >= @TargetDate) AND (tblPolicy.ValidityTo IS NULL) AND (tblProductServices.ValidityTo IS NULL) AND
355-
(tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8) AND (tblProductServices.ServiceID = @ServiceID) AND (tblFamilies.FamilyID = @FamilyID) AND (tblProduct.ValidityTo IS NULL) AND
356-
(tblInsureePolicy.EffectiveDate <= @TargetDate) AND (tblInsureePolicy.ExpiryDate >= @TargetDate) AND (tblInsureePolicy.InsureeId = @InsureeID) AND
357-
(tblInsureePolicy.ValidityTo IS NULL)
358+
FROM tblFamilies
359+
INNER JOIN tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID
360+
INNER JOIN tblProduct ON tblPolicy.ProdID = tblProduct.ProdID
361+
INNER JOIN tblProductServices ON tblProduct.ProdID = tblProductServices.ProdID
362+
AND @TargetDate BETWEEN tblProductServices.ValidityFrom AND ISNULL(tblProductServices.ValidityTo, GETDATE())
363+
INNER JOIN tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
364+
WHERE tblPolicy.EffectiveDate <= @TargetDate
365+
AND tblPolicy.ExpiryDate >= @TargetDate
366+
AND tblPolicy.ValidityTo IS NULL
367+
AND (tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8)
368+
AND tblProductServices.ServiceID = @ServiceID
369+
AND tblFamilies.FamilyID = @FamilyID
370+
AND tblProduct.ValidityTo IS NULL
371+
AND tblInsureePolicy.EffectiveDate <= @TargetDate
372+
AND tblInsureePolicy.ExpiryDate >= @TargetDate
373+
AND tblInsureePolicy.InsureeId = @InsureeID
374+
AND tblInsureePolicy.ValidityTo IS NULL
358375
ORDER BY DATEADD(m,ISNULL(tblProductServices.WaitingPeriodChild, 0), tblInsureePolicy.EffectiveDate)
359376

360377

@@ -703,28 +720,45 @@ BEGIN
703720
IF @Adult = 1
704721
DECLARE PRODITEMLOOP CURSOR LOCAL FORWARD_ONLY FOR
705722
SELECT TblProduct.ProdID , tblProductItems.ProdItemID , tblInsureePolicy.EffectiveDate, tblPolicy.EffectiveDate, tblInsureePolicy.ExpiryDate , tblPolicy.PolicyStage
706-
FROM tblFamilies INNER JOIN
707-
tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID INNER JOIN
708-
tblProduct ON tblPolicy.ProdID = tblProduct.ProdID INNER JOIN
709-
tblProductItems ON tblProduct.ProdID = tblProductItems.ProdID INNER JOIN
710-
tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
711-
WHERE (tblPolicy.EffectiveDate <= @TargetDate) AND (tblPolicy.ExpiryDate >= @TargetDate) AND (tblPolicy.ValidityTo IS NULL) AND (tblProductItems.ValidityTo IS NULL) AND
712-
(tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8) AND (tblProductItems.ItemID = @ItemID) AND (tblFamilies.FamilyID = @FamilyID) AND (tblProduct.ValidityTo IS NULL) AND
713-
(tblInsureePolicy.EffectiveDate <= @TargetDate) AND (tblInsureePolicy.ExpiryDate >= @TargetDate) AND (tblInsureePolicy.InsureeId = @InsureeID) AND
714-
(tblInsureePolicy.ValidityTo IS NULL)
723+
FROM tblFamilies
724+
INNER JOIN tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID
725+
INNER JOIN tblProduct ON tblPolicy.ProdID = tblProduct.ProdID
726+
INNER JOIN tblProductItems ON tblProduct.ProdID = tblProductItems.ProdID
727+
AND @TargetDate BETWEEN tblProductItems.ValidityFrom AND ISNULL(tblProductItems.ValidityTo, GETDATE())
728+
INNER JOIN tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
729+
WHERE tblPolicy.EffectiveDate <= @TargetDate
730+
AND tblPolicy.ExpiryDate >= @TargetDate
731+
AND tblPolicy.ValidityTo IS NULL
732+
--AND tblProductItems.ValidityTo IS NULL
733+
AND (tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8)
734+
AND tblProductItems.ItemID = @ItemID
735+
AND tblFamilies.FamilyID = @FamilyID
736+
AND tblProduct.ValidityTo IS NULL
737+
AND tblInsureePolicy.EffectiveDate <= @TargetDate
738+
AND tblInsureePolicy.ExpiryDate >= @TargetDate
739+
AND tblInsureePolicy.InsureeId = @InsureeID
740+
AND tblInsureePolicy.ValidityTo IS NULL
715741
ORDER BY DATEADD(m,ISNULL(tblProductItems.WaitingPeriodAdult, 0), tblInsureePolicy.EffectiveDate)
716742
ELSE
717743
DECLARE PRODITEMLOOP CURSOR LOCAL FORWARD_ONLY FOR
718744
SELECT TblProduct.ProdID , tblProductItems.ProdItemID , tblInsureePolicy.EffectiveDate, tblPolicy.EffectiveDate, tblInsureePolicy.ExpiryDate , tblPolicy.PolicyStage
719-
FROM tblFamilies INNER JOIN
720-
tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID INNER JOIN
721-
tblProduct ON tblPolicy.ProdID = tblProduct.ProdID INNER JOIN
722-
tblProductItems ON tblProduct.ProdID = tblProductItems.ProdID INNER JOIN
723-
tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
724-
WHERE (tblPolicy.EffectiveDate <= @TargetDate) AND (tblPolicy.ExpiryDate >= @TargetDate) AND (tblPolicy.ValidityTo IS NULL) AND (tblProductItems.ValidityTo IS NULL) AND
725-
(tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8) AND (tblProductItems.ItemID = @ItemID) AND (tblFamilies.FamilyID = @FamilyID) AND (tblProduct.ValidityTo IS NULL) AND
726-
(tblInsureePolicy.EffectiveDate <= @TargetDate) AND (tblInsureePolicy.ExpiryDate >= @TargetDate) AND (tblInsureePolicy.InsureeId = @InsureeID) AND
727-
(tblInsureePolicy.ValidityTo IS NULL)
745+
FROM tblFamilies
746+
INNER JOIN tblPolicy ON tblFamilies.FamilyID = tblPolicy.FamilyID
747+
INNER JOIN tblProduct ON tblPolicy.ProdID = tblProduct.ProdID
748+
INNER JOIN tblProductItems ON tblProduct.ProdID = tblProductItems.ProdID
749+
AND @TargetDate BETWEEN tblProductItems.ValidityFrom AND ISNULL(tblProductItems.ValidityTo, GETDATE())
750+
INNER JOIN tblInsureePolicy ON tblPolicy.PolicyID = tblInsureePolicy.PolicyId
751+
WHERE tblPolicy.EffectiveDate <= @TargetDate
752+
AND tblPolicy.ExpiryDate >= @TargetDate
753+
AND tblPolicy.ValidityTo IS NULL
754+
AND (tblPolicy.PolicyStatus = 2 OR tblPolicy.PolicyStatus = 8)
755+
AND tblProductItems.ItemID = @ItemID
756+
AND tblFamilies.FamilyID = @FamilyID
757+
AND (tblProduct.ValidityTo IS NULL)
758+
AND tblInsureePolicy.EffectiveDate <= @TargetDate
759+
AND tblInsureePolicy.ExpiryDate >= @TargetDate
760+
AND tblInsureePolicy.InsureeId = @InsureeID
761+
AND tblInsureePolicy.ValidityTo IS NULL
728762
ORDER BY DATEADD(m,ISNULL(tblProductItems.WaitingPeriodChild, 0), tblInsureePolicy.EffectiveDate)
729763

730764

0 commit comments

Comments
 (0)