3434 @WeightAdjustedAmount DECIMAL (5 , 2 )
3535
3636
37- DECLARE @FirstDay DATE = CAST (@Year AS VARCHAR (4 )) + ' -' + CAST (@Month AS VARCHAR (2 )) + ' -01';
37+ DECLARE @FirstDay DATE = CAST (@Year AS VARCHAR (4 )) + ' -' + CAST (@Month AS VARCHAR (2 )) + ' -01'
3838 DECLARE @LastDay DATE = EOMONTH (CAST (@Year AS VARCHAR (4 )) + ' -' + CAST (@Month AS VARCHAR (2 )) + ' -01' , 0 )
39- DECLARE @DaysInMonth INT = DATEDIFF (DAY ,@FirstDay,DATEADD (MONTH ,1 ,@FirstDay));
39+ DECLARE @DaysInMonth INT = DATEDIFF (DAY ,@FirstDay,DATEADD (MONTH ,1 ,@FirstDay))
4040
4141 set @DistrictId = CASE @DistrictId WHEN 0 THEN NULL ELSE @DistrictId END
4242
@@ -45,59 +45,101 @@ BEGIN
4545 LocationName VARCHAR (50 ),
4646 LocationCode VARCHAR (8 ),
4747 ParentLocationId INT
48- );
49-
48+ )
49+ -- fetch all the region and districts
5050 INSERT INTO @Locations
5151 SELECT 0 LocationId, N ' National' LocationName, NULL ParentLocationId, 0 LocationCode
5252
5353 UNION ALL
5454
5555 SELECT LocationId,LocationName, LocationCode, ISNULL (ParentLocationId, 0 )
5656 FROM tblLocations
57- WHERE (ValidityTo IS NULL )
58- AND (LocationId = ISNULL (@DistrictId, @RegionId) OR
59- (LocationType IN (' R' , ' D' ) AND ParentLocationId = ISNULL (@DistrictId, @RegionId)))
60-
57+ WHERE ValidityTo IS NULL
58+ AND LocationType IN (' R' , ' D' )
6159
6260 DECLARE @LocationTemp table (LocationId int , RegionId int , RegionCode [nvarchar](8 ) , RegionName [nvarchar](50 ), DistrictId int , DistrictCode [nvarchar](8 ),
6361 DistrictName [nvarchar](50 ), ParentLocationId int )
6462
65-
63+ -- create table with locaiton hiearchy
6664 INSERT INTO @LocationTemp(LocationId , RegionId , RegionCode , RegionName , DistrictId , DistrictCode ,
67- DistrictName , ParentLocationId)( SELECT ISNULL (d .LocationId ,r .LocationId ) LocationId , r .LocationId as RegionId , r .LocationCode as RegionCode , r .LocationName as RegionName , d .LocationId as DistrictId , d .LocationCode as DistrictCode ,
68- d .LocationName as DistrictName , ISNULL (d .ParentLocationId ,r .ParentLocationId ) ParentLocationId FROM @Locations d INNER JOIN @Locations r on d .ParentLocationId = r .LocationId
69- UNION ALL SELECT r .LocationId , r .LocationId as RegionId , r .LocationCode as RegionCode , r .LocationName as RegionName , NULL DistrictId , NULL DistrictCode ,
70- NULL DistrictName , ParentLocationId FROM @Locations r WHERE ParentLocationId = 0 )
71- ;
72- declare @listOfHF table (id int );
73-
65+ DistrictName , ParentLocationId)
66+ ( SELECT ISNULL (d .LocationId ,r .LocationId ) LocationId ,
67+ r .LocationId as RegionId ,
68+ r .LocationCode as RegionCode ,
69+ r .LocationName as RegionName ,
70+ d .LocationId as DistrictId ,
71+ d .LocationCode as DistrictCode ,
72+ d .LocationName as DistrictName ,
73+ ISNULL (d .ParentLocationId ,r .ParentLocationId ) ParentLocationId
74+ FROM @Locations d
75+ INNER JOIN @Locations r on d .ParentLocationId = r .LocationId
76+ UNION ALL
77+ SELECT r .LocationId , r .LocationId as RegionId ,
78+ r .LocationCode as RegionCode ,
79+ r .LocationName as RegionName ,
80+ NULL DistrictId ,
81+ NULL DistrictCode ,
82+ NULL DistrictName , ParentLocationId
83+ FROM @Locations r WHERE ParentLocationId = 0 )
84+
85+ declare @listOfHF table (id int )
86+ -- get the list of Hf part of the covered regions and config
7487 IF @RegionId IS NULL or @RegionId = 0
75- INSERT INTO @listOfHF(id) SELECT tblHF .HfID FROM tblHF WHERE tblHF .ValidityTo is NULL ;
88+ INSERT INTO @listOfHF(id) SELECT HF .HfID FROM tblHF HF WHERE HF .ValidityTo is NULL
89+ AND (
90+ ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
91+ OR ((HF .HFLevel = @Level2 ) AND (HF .HFSublevel = @Sublevel2 OR @Sublevel2 IS NULL ))
92+ OR ((HF .HFLevel = @Level3) AND (HF .HFSublevel = @Sublevel3 OR @Sublevel3 IS NULL ))
93+ OR ((HF .HFLevel = @Level4) AND (HF .HFSublevel = @Sublevel4 OR @Sublevel4 IS NULL ))
94+ )
7695 ELSE IF @DistrictId is NULL or @DistrictId = 0
77- INSERT INTO @listOfHF(id) SELECT tblHF .HfID FROM tblHF JOIN tblLocations l on tblHF .LocationId = l .LocationId WHERE l .ParentLocationId = @RegionId ;
96+ INSERT INTO @listOfHF(id) SELECT HF .HfID FROM tblHF HF JOIN tblLocations l on HF .LocationId = l .LocationId WHERE l .ParentLocationId = @RegionId
97+ AND (
98+ ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
99+ OR ((HF .HFLevel = @Level2 ) AND (HF .HFSublevel = @Sublevel2 OR @Sublevel2 IS NULL ))
100+ OR ((HF .HFLevel = @Level3) AND (HF .HFSublevel = @Sublevel3 OR @Sublevel3 IS NULL ))
101+ OR ((HF .HFLevel = @Level4) AND (HF .HFSublevel = @Sublevel4 OR @Sublevel4 IS NULL ))
102+ )
78103 ELSE
79- INSERT INTO @listOfHF(id) SELECT tblHF .HfID FROM tblHF WHERE tblHF .LocationId = @DistrictId and tblHF .ValidityTo is NULL ;
80-
81-
82- SELECT @Level1 = Level1, @Sublevel1 = Sublevel1, @Level2 = Level2, @Sublevel2 = Sublevel2, @Level3 = Level3, @Sublevel3 = Sublevel3,
83- @Level4 = Level4, @Sublevel4 = Sublevel4, @ShareContribution = ISNULL (ShareContribution, 0 ), @WeightPopulation = ISNULL (WeightPopulation, 0 ),
84- @WeightNumberFamilies = ISNULL (WeightNumberFamilies, 0 ), @WeightInsuredPopulation = ISNULL (WeightInsuredPopulation, 0 ), @WeightNumberInsuredFamilies = ISNULL (WeightNumberInsuredFamilies, 0 ),
85- @WeightNumberVisits = ISNULL (WeightNumberVisits, 0 ), @WeightAdjustedAmount = ISNULL (WeightAdjustedAmount, 0 )
104+ INSERT INTO @listOfHF(id) SELECT HF .HfID FROM tblHF HF WHERE HF .LocationId = @DistrictId and HF .ValidityTo is NULL
105+ AND (
106+ ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
107+ OR ((HF .HFLevel = @Level2 ) AND (HF .HFSublevel = @Sublevel2 OR @Sublevel2 IS NULL ))
108+ OR ((HF .HFLevel = @Level3) AND (HF .HFSublevel = @Sublevel3 OR @Sublevel3 IS NULL ))
109+ OR ((HF .HFLevel = @Level4) AND (HF .HFSublevel = @Sublevel4 OR @Sublevel4 IS NULL ))
110+ )
111+
112+ -- get the product data
113+ SELECT @Level1 = Level1,
114+ @Sublevel1 = Sublevel1,
115+ @Level2 = Level2,
116+ @Sublevel2 = Sublevel2,
117+ @Level3 = Level3,
118+ @Sublevel3 = Sublevel3,
119+ @Level4 = Level4,
120+ @Sublevel4 = Sublevel4,
121+ @ShareContribution = ISNULL (ShareContribution, 0 ),
122+ @WeightPopulation = ISNULL (WeightPopulation, 0 ),
123+ @WeightNumberFamilies = ISNULL (WeightNumberFamilies, 0 ),
124+ @WeightInsuredPopulation = ISNULL (WeightInsuredPopulation, 0 ),
125+ @WeightNumberInsuredFamilies = ISNULL (WeightNumberInsuredFamilies, 0 ),
126+ @WeightNumberVisits = ISNULL (WeightNumberVisits, 0 ),
127+ @WeightAdjustedAmount = ISNULL (WeightAdjustedAmount, 0 )
86128 FROM tblProduct Prod
87- WHERE ProdId = @ProdId;
88-
129+ WHERE ProdId = @ProdId
89130
131+ -- get pop
90132 DECLARE @TotalPopFam TABLE (
91133 HFID INT ,
92134 TotalPopulation DECIMAL (18 , 6 ),
93135 TotalFamilies DECIMAL (18 , 6 )
94- );
136+ )
95137
96138 INSERT INTO @TotalPopFam
97139
98140 SELECT C .HFID HFID ,
99- CASE WHEN ISNULL (@DistrictId, @RegionId) IN ( D . RegionId , D . DistrictId ) THEN 1 ELSE 0 END * SUM ((ISNULL (L .MalePopulation , 0 ) + ISNULL (L .FemalePopulation , 0 ) + ISNULL (L .OtherPopulation , 0 )) * (0 .01 * Catchment)) TotalPopulation,
100- CASE WHEN ISNULL (@DistrictId, @RegionId) IN ( D . RegionId , D . DistrictId ) THEN 1 ELSE 0 END * SUM (ISNULL (((L .Families )* (0 .01 * Catchment)), 0 ))TotalFamilies
141+ SUM ((ISNULL (L .MalePopulation , 0 ) + ISNULL (L .FemalePopulation , 0 ) + ISNULL (L .OtherPopulation , 0 )) * (0 .01 * Catchment)) TotalPopulation,
142+ SUM (ISNULL (((L .Families )* (0 .01 * Catchment)), 0 ))TotalFamilies
101143 FROM tblHFCatchment C
102144 LEFT JOIN tblLocations L ON L .LocationId = C .LocationId OR L .LegacyId = C .LocationId
103145 INNER JOIN tblHF HF ON C .HFID = HF .HfID
@@ -109,12 +151,12 @@ BEGIN
109151 GROUP BY C .HFID , D .DistrictId , D .RegionId
110152
111153
112-
154+ -- get insuree
113155 DECLARE @InsuredInsuree TABLE (
114156 HFID INT ,
115157 ProdId INT ,
116158 TotalInsuredInsuree DECIMAL (18 , 6 )
117- );
159+ )
118160
119161 INSERT INTO @InsuredInsuree
120162
@@ -137,11 +179,11 @@ BEGIN
137179
138180
139181
140-
182+ -- get insured family
141183 DECLARE @InsuredFamilies TABLE (
142184 HFID INT ,
143185 TotalInsuredFamilies DECIMAL (18 , 6 )
144- );
186+ )
145187
146188 INSERT INTO @InsuredFamilies
147189 SELECT HC .HFID , COUNT (DISTINCT F .FamilyID )* (0 .01 * Catchment) TotalInsuredFamilies
@@ -161,15 +203,11 @@ BEGIN
161203 AND HC .HFID in (SELECT id FROM @listOfHF)
162204 GROUP BY HC .HFID , Catchment-- , L.LocationId
163205
164-
165-
166-
167-
168-
206+ -- get allocated contribution
169207 DECLARE @Allocation TABLE (
170208 ProdId INT ,
171209 Allocated DECIMAL (18 , 6 )
172- );
210+ )
173211
174212 INSERT INTO @Allocation
175213 SELECT ProdId, CAST (SUM (ISNULL (Allocated, 0 )) AS DECIMAL (18 , 6 )) Allocated
@@ -186,14 +224,14 @@ BEGIN
186224 FROM tblPremium PR
187225 INNER JOIN tblPolicy PL ON PR .PolicyID = PL .PolicyID
188226 INNER JOIN tblProduct Prod ON Prod .ProdId = PL .ProdID
189- INNER JOIN @Locations L ON ISNULL (Prod .LocationId , 0 ) = L .LocationId
227+ INNER JOIN @Locations L ON ISNULL (Prod .LocationId , 0 ) = L .LocationId and ( L . LocationId = ISNULL (@DistrictId, @RegionId) OR ( L . ParentLocationId = ISNULL (@DistrictId, @RegionId)))
190228 WHERE PR .ValidityTo IS NULL
191229 AND PL .ValidityTo IS NULL
192230 AND PL .ProdID = @ProdId
193231 AND PL .PolicyStatus <> 1
194232 AND PR .PayDate <= PL .ExpiryDate
195233 GROUP BY PL .ProdID , PL .ExpiryDate , PR .PayDate ,PL .EffectiveDate )Alc
196- GROUP BY ProdId;
234+ GROUP BY ProdId
197235
198236
199237 DECLARE @ReportData TABLE (
@@ -229,35 +267,53 @@ BEGIN
229267 UPAdjustedAmount DECIMAL (18 , 6 )
230268
231269
232- );
270+ )
233271
234272 DECLARE @ClaimValues TABLE (
235273 HFID INT ,
236274 ProdId INT ,
237275 TotalAdjusted DECIMAL (18 , 6 ),
238276 TotalClaims DECIMAL (18 , 6 )
239- );
277+ )
240278
241279 INSERT INTO @ClaimValues
242280 SELECT HFID, @ProdId ProdId, SUM (TotalAdjusted)TotalAdjusted, COUNT (DISTINCT ClaimId)TotalClaims FROM
243281 (
244- SELECT HFID, SUM (PriceValuated )TotalAdjusted, ClaimId
282+ SELECT HFID, SUM (PriceAdjusted )TotalAdjusted, ClaimId
245283 FROM
246- (SELECT HFID,c .ClaimId , PriceValuated FROM tblClaim C WITH (NOLOCK )
247- LEFT JOIN tblClaimItems ci ON c .ClaimID = ci .ClaimID and ProdId = @ProdId AND (@WeightAdjustedAmount > 0 .0 )
248- WHERE CI .ValidityTo IS NULL AND C .ValidityTo IS NULL
284+ (SELECT C .HFID ,c .ClaimId , PriceAdjusted
285+ FROM tblClaim C WITH (NOLOCK )
286+ INNER JOIN tblClaimItems ci ON c .ClaimID = ci .ClaimID
287+ INNER JOIN tblHF HF ON HF .HFID = C .HFID
288+ WHERE CI .ValidityTo IS NULL AND C .ValidityTo IS NULL
249289 AND C .ClaimStatus > 4
250290 AND YEAR (C .DateProcessed ) = @Year
251291 AND MONTH (C .DateProcessed ) = @Month
252- AND ci .ValidityTo IS NULL
292+ AND ci .ProdId = @ProdId
293+ AND (@WeightAdjustedAmount > 0 .0 or @WeightNumberVisits > 0 .0 )
294+ AND (
295+ ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
296+ OR ((HF .HFLevel = @Level2 ) AND (HF .HFSublevel = @Sublevel2 OR @Sublevel2 IS NULL ))
297+ OR ((HF .HFLevel = @Level3) AND (HF .HFSublevel = @Sublevel3 OR @Sublevel3 IS NULL ))
298+ OR ((HF .HFLevel = @Level4) AND (HF .HFSublevel = @Sublevel4 OR @Sublevel4 IS NULL ))
299+ )
253300 UNION ALL
254- SELECT HFID, c .ClaimId , PriceValuated FROM tblClaim C WITH (NOLOCK )
255- LEFT JOIN tblClaimServices cs ON c .ClaimID = cs .ClaimID and ProdId = @ProdId AND (@WeightAdjustedAmount > 0 .0 )
301+ SELECT C .HFID , c .ClaimId , PriceAdjusted
302+ FROM tblClaim C WITH (NOLOCK )
303+ INNER JOIN tblClaimServices cs ON c .ClaimID = cs .ClaimID
304+ INNER JOIN tblHF HF ON HF .HFID = C .HFID
256305 WHERE cs .ValidityTo IS NULL AND C .ValidityTo IS NULL
257306 AND C .ClaimStatus > 4
258307 AND YEAR (C .DateProcessed ) = @Year
259308 AND MONTH (C .DateProcessed ) = @Month
260- AND CS .ValidityTo IS NULL
309+ AND cs .ProdId = @ProdId
310+ AND (@WeightAdjustedAmount > 0 .0 or @WeightNumberVisits > 0 .0 )
311+ AND (
312+ ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
313+ OR ((HF .HFLevel = @Level2 ) AND (HF .HFSublevel = @Sublevel2 OR @Sublevel2 IS NULL ))
314+ OR ((HF .HFLevel = @Level3) AND (HF .HFSublevel = @Sublevel3 OR @Sublevel3 IS NULL ))
315+ OR ((HF .HFLevel = @Level4) AND (HF .HFSublevel = @Sublevel4 OR @Sublevel4 IS NULL ))
316+ )
261317 ) claimdetails GROUP BY HFID,ClaimId
262318 )claims GROUP by HFID
263319
@@ -297,20 +353,18 @@ BEGIN
297353 LEFT OUTER JOIN @TotalPopFam PF ON PF .HFID = HF .HfID
298354 LEFT OUTER JOIN @InsuredInsuree II ON II .HFID = HF .HfID
299355 LEFT OUTER JOIN @InsuredFamilies IFam ON IFam .HFID = HF .HfID
300- -- LEFT OUTER JOIN @Claims C ON C.HFID = HF.HfID
356+ -- LEFT OUTER JOIN @Claims C ON C.HFID = HF.HfID
301357 LEFT OUTER JOIN @ClaimValues CV ON CV .HFID = HF .HfID
302358 LEFT OUTER JOIN @Allocation A ON A .ProdID = @ProdId
303359
304360 WHERE HF .ValidityTo IS NULL
305361 AND (((L .RegionId = @RegionId OR @RegionId IS NULL ) AND (L .DistrictId = @DistrictId OR @DistrictId IS NULL )) OR CV .ProdID IS NOT NULL OR II .ProdId IS NOT NULL )
306- AND (HF .HFLevel IN (@Level1, @Level2, @Level3, @Level4) OR (@Level1 IS NULL AND @Level2 IS NULL AND @Level3 IS NULL AND @Level4 IS NULL ))
307362 AND (
308- (@Level1 IS NULL AND @Level2 IS NULL AND @Level3 IS NULL AND @Level4 IS NULL )
309- OR ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
363+ ((HF .HFLevel = @Level1) AND (HF .HFSublevel = @Sublevel1 OR @Sublevel1 IS NULL ))
310364 OR ((HF .HFLevel = @Level2 ) AND (HF .HFSublevel = @Sublevel2 OR @Sublevel2 IS NULL ))
311365 OR ((HF .HFLevel = @Level3) AND (HF .HFSublevel = @Sublevel3 OR @Sublevel3 IS NULL ))
312366 OR ((HF .HFLevel = @Level4) AND (HF .HFSublevel = @Sublevel4 OR @Sublevel4 IS NULL ))
313- );
367+ )
314368
315369
316370 INSERT INTO tblCapitationPayment(
@@ -345,7 +399,7 @@ BEGIN
345399 ISNULL (SUM (UPPopulation),0 )UPPopulation, ISNULL (SUM (UPNumFamilies),0 )UPNumFamilies, ISNULL (SUM (UPInsPopulation),0 )UPInsPopulation,
346400 ISNULL (SUM (UPInsFamilies),0 )UPInsFamilies, ISNULL (SUM (UPVisits),0 )UPVisits,
347401 ISNULL (SUM (UPAdjustedAmount),0 )UPAdjustedAmount, ISNULL (SUM (PaymentCathment),0 )PaymentCathment, ISNULL (SUM (TotalAdjusted),0 )TotalAdjusted
348- FROM @ReportData GROUP BY HFCode) r;
402+ FROM @ReportData GROUP BY HFCode) r
349403END
350404GO
351405
0 commit comments