Skip to content

Commit 080e2b1

Browse files
authored
Merge pull request #98 from openimis/feature/OTC-459
OTC-459: Change the policy renewal criteria from 14 days to <= 14 days
2 parents ed8bfdd + fd1544b commit 080e2b1

2 files changed

Lines changed: 260 additions & 3 deletions

File tree

Empty databases/openIMIS_ONLINE.sql

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15207,16 +15207,21 @@ BEGIN
1520715207
SELECT PL.PolicyID, PL.FamilyID, DATEADD(DAY, 1, PL.ExpiryDate) AS RenewalDate, F.InsureeID, Prod.ProdID, Prod.ProductCode, Prod.ProductName,
1520815208
Prod.DateFrom, Prod.DateTo, D.DistrictName, V.VillageName, W.WardName, I.CHFID, I.LastName, I.OtherNames, I.DOB, Prod.ConversionProdID,
1520915209
O.OfficerID, O.Code, O.LastName OffLastName, O.OtherNames OffOtherNames, O.Phone, O.OfficerIDSubst, O.WorksTo
15210-
FROM tblPolicy PL INNER JOIN tblFamilies F ON PL.FamilyId = F.FamilyID
15210+
FROM tblPolicy PL
15211+
INNER JOIN tblFamilies F ON PL.FamilyId = F.FamilyID
1521115212
INNER JOIN tblInsuree I ON F.InsureeId = I.InsureeID
1521215213
INNER JOIN tblProduct Prod ON PL.ProdId = Prod.ProdID
1521315214
INNER JOIN tblVillages V ON V.VillageId = F.LocationId
1521415215
INNER JOIN tblWards W ON W.WardId = V.WardId
1521515216
INNER JOIN tblDistricts D ON D.DistrictId = W.DistrictId
1521615217
INNER JOIN tblOfficer O ON PL.OfficerId = O.OfficerID
15218+
LEFT OUTER JOIN tblPolicyRenewals PR ON PL.PolicyID = PR.PolicyID
15219+
AND I.InsureeID = PR.InsureeID
1521715220
WHERE PL.ValidityTo IS NULL
15221+
AND PR.ValidityTo IS NULL
15222+
AND PR.PolicyID IS NULL
1521815223
AND PL.PolicyStatus IN (2, 8)
15219-
AND (DATEDIFF(DAY, GETDATE(), PL.ExpiryDate) = @RemindingInterval OR ISNULL(@RemindingInterval, 0) = 0)
15224+
AND (DATEDIFF(DAY, GETDATE(), PL.ExpiryDate) <= @RemindingInterval OR ISNULL(@RemindingInterval, 0) = 0)
1522015225
AND (V.VillageId = @VillageId OR @VillageId IS NULL)
1522115226
AND (W.WardId = @WardId OR @WardId IS NULL)
1522215227
AND (D.DistrictId = @DistrictId OR @DistrictId IS NULL)
@@ -15303,7 +15308,8 @@ BEGIN
1530315308

1530415309
--Code added by Hiren to check if the policy has another following policy
1530515310
IF EXISTS(SELECT 1 FROM tblPolicy
15306-
WHERE FamilyId = @FamilyId
15311+
WHERE ValidityTo IS NULL
15312+
AND FamilyId = @FamilyId
1530715313
AND (ProdId = @ProductID OR ProdId = @ConvProdID)
1530815314
AND StartDate >= @RenewalDate)
1530915315

Migration script/openIMIS migration latest.sql

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8635,3 +8635,254 @@ BEGIN
86358635
WHERE [RuleName] in ('AllowInsureeWithoutPhoto', 'AllowFamilyWithoutPolicy', 'AllowPolicyWithoutPremium', 'ShowPaymentOption')
86368636
END
86378637
GO
8638+
8639+
IF NOT OBJECT_ID('uspPolicyRenewalInserts') IS NULL
8640+
DROP PROCEDURE uspPolicyRenewalInserts
8641+
GO
8642+
8643+
CREATE PROCEDURE [dbo].[uspPolicyRenewalInserts](
8644+
--@RenewalWarning --> 1 = no valid product for renewal 2= No enrollment officer found (no photo) 4= INVALID Enrollment officer
8645+
@RemindingInterval INT = NULL,
8646+
@RegionId INT = NULL,
8647+
@DistrictId INT = NULL,
8648+
@WardId INT = NULL,
8649+
@VillageId INT = NULL,
8650+
@OfficerId INT = NULL,
8651+
@DateFrom DATE = NULL,
8652+
@DateTo DATE = NULL
8653+
)
8654+
AS
8655+
BEGIN
8656+
SET NOCOUNT ON;
8657+
DECLARE @RenewalID int
8658+
--DECLARE @RemindingInterval as int --days in advance
8659+
8660+
DECLARE @PolicyID as int
8661+
DECLARE @FamilyID as int
8662+
DECLARE @RenewalDate as date
8663+
DECLARE @InsureeID as int
8664+
DECLARE @ProductID as int
8665+
DECLARE @ProductCode as nvarchar(8)
8666+
DECLARE @ProductName as nvarchar(100)
8667+
DECLARE @ProductFromDate as date
8668+
DECLARE @ProductToDate as date
8669+
DECLARE @DistrictName as nvarchar(50)
8670+
DECLARE @VillageName as nvarchar(50)
8671+
DECLARE @WardName as nvarchar(50)
8672+
DECLARE @CHFID as nvarchar(12)
8673+
DECLARE @InsLastName as nvarchar(100)
8674+
DECLARE @InsOtherNames as nvarchar(100)
8675+
DECLARE @InsDOB as date
8676+
DECLARE @ConvProdID as int
8677+
--DECLARE @OfficerID as int
8678+
DECLARE @OffCode as nvarchar(6)
8679+
DECLARE @OffLastName as nvarchar(100)
8680+
DECLARE @OffOtherNames as nvarchar(100)
8681+
DECLARE @OffPhone as nvarchar(50)
8682+
DECLARE @OffSubstID as int
8683+
DECLARE @OffWorkTo as date
8684+
8685+
DECLARE @RenewalWarning as tinyint
8686+
8687+
DECLARE @SMSStatus as tinyint
8688+
DECLARE @iCount as int
8689+
8690+
IF @RemindingInterval IS NULL
8691+
SELECT @RemindingInterval = PolicyRenewalInterval from tblIMISDefaults --later to be passed as parameter or reading from a default table
8692+
8693+
DECLARE LOOP1 CURSOR LOCAL FORWARD_ONLY FOR
8694+
--SELECT tblPolicy.PolicyID, tblFamilies.FamilyID, DATEADD(d, 1, tblPolicy.ExpiryDate) AS RenewalDate, tblFamilies.InsureeID, tblProduct.ProdID, tblProduct.ProductCode,
8695+
-- tblProduct.ProductName, tblProduct.DateFrom, tblProduct.DateTo, tblDistricts.DistrictName, tblVillages.VillageName, tblWards.WardName, tblInsuree.CHFID,
8696+
-- tblInsuree.LastName, tblInsuree.OtherNames, tblInsuree.DOB, tblProduct.ConversionProdID,tblOfficer.OfficerID, tblOfficer.Code, tblOfficer.LastName AS OffLastName,
8697+
-- tblOfficer.OtherNames AS OffOtherNames, tblOfficer.Phone, tblOfficer.OfficerIDSubst, tblOfficer.WorksTo
8698+
--FROM tblPhotos LEFT OUTER JOIN
8699+
-- tblOfficer ON tblPhotos.OfficerID = tblOfficer.OfficerID RIGHT OUTER JOIN
8700+
-- tblInsuree ON tblPhotos.PhotoID = tblInsuree.PhotoID RIGHT OUTER JOIN
8701+
-- tblDistricts RIGHT OUTER JOIN
8702+
-- tblPolicy INNER JOIN
8703+
-- tblProduct ON tblProduct.ProdID = tblPolicy.ProdID INNER JOIN
8704+
-- tblFamilies ON tblPolicy.FamilyID = tblFamilies.FamilyID ON tblDistricts.DistrictID = tblFamilies.DistrictID ON
8705+
-- tblInsuree.InsureeID = tblFamilies.InsureeID LEFT OUTER JOIN
8706+
-- tblVillages ON tblFamilies.VillageID = tblVillages.VillageID LEFT OUTER JOIN
8707+
-- tblWards ON tblFamilies.WardID = tblWards.WardID
8708+
--WHERE (tblPolicy.PolicyStatus = 2) AND (tblPolicy.ValidityTo IS NULL) AND (DATEDIFF(d, GETDATE(), tblPolicy.ExpiryDate) = @RemindingInterval)
8709+
8710+
8711+
--============================================================================================
8712+
--NEW QUERY BY HIREN
8713+
--============================================================================================
8714+
SELECT PL.PolicyID, PL.FamilyID, DATEADD(DAY, 1, PL.ExpiryDate) AS RenewalDate, F.InsureeID, Prod.ProdID, Prod.ProductCode, Prod.ProductName,
8715+
Prod.DateFrom, Prod.DateTo, D.DistrictName, V.VillageName, W.WardName, I.CHFID, I.LastName, I.OtherNames, I.DOB, Prod.ConversionProdID,
8716+
O.OfficerID, O.Code, O.LastName OffLastName, O.OtherNames OffOtherNames, O.Phone, O.OfficerIDSubst, O.WorksTo
8717+
FROM tblPolicy PL
8718+
INNER JOIN tblFamilies F ON PL.FamilyId = F.FamilyID
8719+
INNER JOIN tblInsuree I ON F.InsureeId = I.InsureeID
8720+
INNER JOIN tblProduct Prod ON PL.ProdId = Prod.ProdID
8721+
INNER JOIN tblVillages V ON V.VillageId = F.LocationId
8722+
INNER JOIN tblWards W ON W.WardId = V.WardId
8723+
INNER JOIN tblDistricts D ON D.DistrictId = W.DistrictId
8724+
INNER JOIN tblOfficer O ON PL.OfficerId = O.OfficerID
8725+
LEFT OUTER JOIN tblPolicyRenewals PR ON PL.PolicyID = PR.PolicyID
8726+
AND I.InsureeID = PR.InsureeID
8727+
WHERE PL.ValidityTo IS NULL
8728+
AND PR.ValidityTo IS NULL
8729+
AND PR.PolicyID IS NULL
8730+
AND PL.PolicyStatus IN (2, 8)
8731+
AND (DATEDIFF(DAY, GETDATE(), PL.ExpiryDate) <= @RemindingInterval OR ISNULL(@RemindingInterval, 0) = 0)
8732+
AND (V.VillageId = @VillageId OR @VillageId IS NULL)
8733+
AND (W.WardId = @WardId OR @WardId IS NULL)
8734+
AND (D.DistrictId = @DistrictId OR @DistrictId IS NULL)
8735+
AND (D.Region = @RegionId OR @RegionId IS NULL)
8736+
AND (O.OfficerId = @OfficerId OR @OfficerId IS NULL)
8737+
AND (PL.ExpiryDate BETWEEN ISNULL(@DateFrom, '00010101') AND ISNULL(@DateTo, '30001231'))
8738+
8739+
OPEN LOOP1
8740+
FETCH NEXT FROM LOOP1 INTO @PolicyID,@FamilyID,@RenewalDate,@InsureeID,@ProductID, @ProductCode,@ProductName,@ProductFromDate,@ProductToDate,@DistrictName,@VillageName,@WardName,
8741+
@CHFID,@InsLastName,@InsOtherNames,@InsDOB,@ConvProdID,@OfficerID, @OffCode,@OffLastName,@OffOtherNames,@OffPhone,@OffSubstID,@OffWorkTo
8742+
8743+
WHILE @@FETCH_STATUS = 0
8744+
BEGIN
8745+
SET @RenewalWarning = 0
8746+
--GET ProductCode or the substitution
8747+
IF ISNULL(@ConvProdID,0) = 0
8748+
BEGIN
8749+
IF NOT (@RenewalDate BETWEEN @ProductFromDate AND @ProductToDate)
8750+
SET @RenewalWarning = @RenewalWarning + 1
8751+
8752+
END
8753+
ELSE
8754+
BEGIN
8755+
SET @iCount = 0
8756+
WHILE @ConvProdID <> 0 AND @iCount < 20 --this to prevent a recursive loop by wrong datra entries
8757+
BEGIN
8758+
--get new product info
8759+
SET @ProductID = @ConvProdID
8760+
SELECT @ConvProdID = ConversionProdID FROM tblProduct WHERE ProdID = @ProductID
8761+
IF ISNULL(@ConvProdID,0) = 0
8762+
BEGIN
8763+
SELECT @ProductCode = ProductCode from tblProduct WHERE ProdID = @ProductID
8764+
SELECT @ProductName = ProductName from tblProduct WHERE ProdID = @ProductID
8765+
SELECT @ProductFromDate = DateFrom from tblProduct WHERE ProdID = @ProductID
8766+
SELECT @ProductToDate = DateTo from tblProduct WHERE ProdID = @ProductID
8767+
8768+
IF NOT (@RenewalDate BETWEEN @ProductFromDate AND @ProductToDate)
8769+
SET @RenewalWarning = @RenewalWarning + 1
8770+
8771+
END
8772+
SET @iCount = @iCount + 1
8773+
END
8774+
END
8775+
8776+
IF ISNULL(@OfficerID ,0) = 0
8777+
BEGIN
8778+
SET @RenewalWarning = @RenewalWarning + 2
8779+
8780+
END
8781+
ELSE
8782+
BEGIN
8783+
--GET OfficerCode or the substitution
8784+
IF ISNULL(@OffSubstID,0) = 0
8785+
BEGIN
8786+
IF @OffWorkTo < @RenewalDate
8787+
SET @RenewalWarning = @RenewalWarning + 4
8788+
END
8789+
ELSE
8790+
BEGIN
8791+
8792+
SET @iCount = 0
8793+
WHILE @OffSubstID <> 0 AND @iCount < 20 AND @OffWorkTo < @RenewalDate --this to prevent a recursive loop by wrong datra entries
8794+
BEGIN
8795+
--get new product info
8796+
SET @OfficerID = @OffSubstID
8797+
SELECT @OffSubstID = OfficerIDSubst FROM tblOfficer WHERE OfficerID = @OfficerID
8798+
IF ISNULL(@OffSubstID,0) = 0
8799+
BEGIN
8800+
SELECT @OffCode = Code from tblOfficer WHERE OfficerID = @OfficerID
8801+
SELECT @OffLastName = LastName from tblOfficer WHERE OfficerID = @OfficerID
8802+
SELECT @OffOtherNames = OtherNames from tblOfficer WHERE OfficerID = @OfficerID
8803+
SELECT @OffPhone = Phone from tblOfficer WHERE OfficerID = @OfficerID
8804+
SELECT @OffWorkTo = WorksTo from tblOfficer WHERE OfficerID = @OfficerID
8805+
8806+
IF @OffWorkTo < @RenewalDate
8807+
SET @RenewalWarning = @RenewalWarning + 4
8808+
8809+
END
8810+
SET @iCount = @iCount + 1
8811+
END
8812+
END
8813+
END
8814+
8815+
8816+
--Code added by Hiren to check if the policy has another following policy
8817+
IF EXISTS(SELECT 1 FROM tblPolicy
8818+
WHERE ValidityTo IS NULL
8819+
AND FamilyId = @FamilyId
8820+
AND (ProdId = @ProductID OR ProdId = @ConvProdID)
8821+
AND StartDate >= @RenewalDate)
8822+
8823+
GOTO NextPolicy;
8824+
8825+
--Check for validity phone number
8826+
SET @SMSStatus = 0 --later to be set as the status of sending !!
8827+
8828+
--Insert only if it's not in the table
8829+
IF NOT EXISTS(SELECT 1 FROM tblPolicyRenewals WHERE PolicyId = @PolicyId AND ValidityTo IS NULL)
8830+
BEGIN
8831+
INSERT INTO [dbo].[tblPolicyRenewals]
8832+
([RenewalPromptDate]
8833+
,[RenewalDate]
8834+
,[NewOfficerID]
8835+
,[PhoneNumber]
8836+
,[SMSStatus]
8837+
,[InsureeID]
8838+
,[PolicyID]
8839+
,[NewProdID]
8840+
,[RenewalWarnings]
8841+
,[ValidityFrom]
8842+
,[AuditCreateUser])
8843+
VALUES
8844+
(GETDATE()
8845+
,@RenewalDate
8846+
,@OfficerID
8847+
,@OffPhone
8848+
,@SMSStatus
8849+
,@InsureeID
8850+
,@PolicyID
8851+
,@ProductID
8852+
,@RenewalWarning
8853+
,GETDATE()
8854+
,0)
8855+
8856+
--Now get all expired photographs
8857+
SELECT @RenewalID = IDENT_CURRENT('tblPolicyRenewals')
8858+
8859+
INSERT INTO [dbo].[tblPolicyRenewalDetails]
8860+
([RenewalID]
8861+
,[InsureeID]
8862+
,[ValidityFrom]
8863+
,[AuditCreateUser])
8864+
8865+
SELECT @RenewalID,tblInsuree.InsureeID,GETDATE(),0
8866+
FROM tblFamilies INNER JOIN
8867+
tblInsuree ON tblFamilies.FamilyID = tblInsuree.FamilyID LEFT OUTER JOIN
8868+
tblPhotos ON tblInsuree.PhotoID = tblPhotos.PhotoID
8869+
WHERE tblFamilies.FamilyID = @FamilyID AND tblInsuree.ValidityTo IS NULL AND
8870+
((tblInsuree.PhotoDate IS NULL)
8871+
OR
8872+
(
8873+
((DATEDIFF (mm,tblInsuree.PhotoDate,@RenewalDate) >=60 )
8874+
OR (
8875+
DATEDIFF (mm,tblInsuree.PhotoDate,@RenewalDate) >=12 AND DATEDIFF (y,tblInsuree.DOB ,GETDATE() ) < 18
8876+
) )
8877+
))
8878+
END
8879+
NextPolicy:
8880+
FETCH NEXT FROM LOOP1 INTO @PolicyID,@FamilyID,@RenewalDate,@InsureeID,@ProductID, @ProductCode,@ProductName,@ProductFromDate,@ProductToDate,@DistrictName,@VillageName,@WardName,
8881+
@CHFID,@InsLastName,@InsOtherNames,@InsDOB,@ConvProdID,@OfficerID,@OffCode,@OffLastName,@OffOtherNames,@OffPhone,@OffSubstID,@OffWorkTo
8882+
8883+
END
8884+
CLOSE LOOP1
8885+
DEALLOCATE LOOP1
8886+
8887+
END
8888+
GO

0 commit comments

Comments
 (0)