96 lines
4.6 KiB
Ruby
96 lines
4.6 KiB
Ruby
class GetIdCardDataTpaQuery
|
|
def initialize(family_id)
|
|
@family_id = ActiveRecord::Base.connection.quote(family_id)
|
|
if family_id.length == 9
|
|
@entity_type = ActiveRecord::Base.connection.quote("FamilyId")
|
|
else
|
|
@entity_type = ActiveRecord::Base.connection.quote("PBEntityKey")
|
|
end
|
|
end
|
|
|
|
def call
|
|
VhcsRecord.connection.exec_query(sql).rows.first
|
|
end
|
|
|
|
def to_id_card_data
|
|
raw_data = call
|
|
|
|
id_card_data = {
|
|
id: raw_data[0],
|
|
mb_member_key: raw_data[1],
|
|
mbr_type: raw_data[2],
|
|
division: raw_data[3],
|
|
full_name: raw_data[7],
|
|
family_id: raw_data[8],
|
|
mbr_class: raw_data[9],
|
|
effect_date: raw_data[11],
|
|
state: raw_data[12],
|
|
pl_plan_key: raw_data[14],
|
|
group_number: raw_data[15],
|
|
medical_group_num: raw_data[16],
|
|
dental_group_num: raw_data[17],
|
|
pb_product_key: raw_data[18],
|
|
mb_member_key: raw_data[19]
|
|
}
|
|
|
|
[id_card_data]
|
|
end
|
|
|
|
private
|
|
|
|
def sql
|
|
<<~SQL
|
|
SELECT DISTINCT ROW_NUMBER() OVER(ORDER BY pbm.FamilyId ASC) as Id, pbc.MBMemberKey,
|
|
isnull(ou.CompanyNumber,'') as MbrType,
|
|
CASE WHEN m.PLPlanKey = '14' THEN 'DUPLIN COUNTY GOVERNMENT' ELSE substring(div.LastName,0,41) END as Div,
|
|
substring(pbe.FirstName,0,25) as MbrFirst,
|
|
substring(pbe.MiddleName,0,25) as MbrMiddle,
|
|
substring(pbe.LastName,0,50) as MbrLast,
|
|
(substring(pbe.FirstName, 0, 25) + ' ' + substring(pbe.LastName, 0, 50)) as FullName,
|
|
pbm.FamilyId,
|
|
UPPER(lct.shortdesc) as MbrClass,
|
|
2 as MedOrDent,
|
|
pp.InEffect as EffectDate,
|
|
pbea.State,ISNULL(oua.State,pbea.State) as EmpState,
|
|
M.PLPlanKey,
|
|
PC.GroupNumber,
|
|
PC.MedicalNumber,
|
|
PC.DentalNumber,
|
|
P.PBProductKey,
|
|
m.PBEntityKey as PrimaryMBMemberKey
|
|
FROM VWMBMember M
|
|
INNER JOIN PBEntityClaimsData pbc on pbc.MBMemberKey=M.MBMemberKey
|
|
Inner Join HLPlanCode PC ON PC.PlanKey = M.PLPlanKey
|
|
INNER JOIN PBMember pbm on pbm.PBEntityKey=pbc.PBEntityKey and pbm.EnrolleeTypeKey=1044
|
|
INNER JOIN PBEntity pbe on pbe.PBEntityKey=pbm.PBEntityKey
|
|
INNER JOIN PBEntityAddress pbea on pbea.PBEntityKey=pbe.PBEntityKey and pbea.AddressTypeID=1137
|
|
INNER JOIN PBCoveredEntities ce on ce.PBEntityKey=pbe.PBEntityKey
|
|
INNER JOIN PBProductParticipation pp on pp.PBProductParticipationKey=ce.PBProductParticipationKey
|
|
INNER JOIN (SELECT ce1.PBEntityKey, pp1.PBProductAvailabilityKey, MAX(pp1.WhenLastChanged) as WhenLastChanged,
|
|
pp1.CoverageTypeCode
|
|
FROM PBCoveredEntities ce1
|
|
INNER JOIN PBProductParticipation pp1 on pp1.PBProductParticipationKey = ce1.PBProductParticipationKey
|
|
GROUP BY ce1.PBEntityKey, pp1.PBProductAvailabilityKey,pp1.CoverageTypeCode)
|
|
cepp ON cepp.PBEntityKey = ce.PBEntityKey AND cepp.PBProductAvailabilityKey = pp.PBProductAvailabilityKey
|
|
and cepp.CoverageTypeCode = pp.CoverageTypeCode
|
|
INNER JOIN GEN_LookupTables lct ON lct.RecordID = pp.CoverageTypeCode
|
|
INNER JOIN PBProductAvailability pa on pa.PBProductAvailabilityKey=pp.PBProductAvailabilityKey
|
|
INNER JOIN PBProduct p on p.PBProductKey=pa.PBProductKey
|
|
INNER JOIN PBAffiliation aff ON aff.PBAffiliationKey = pp.PBAffiliationKey
|
|
INNER JOIN PBEntity div on div.PBEntityKey=aff.ParentPBEntityKey
|
|
LEFT OUTER JOIN PBOrgUnit ou on ou.PBEntityKey=div.PBEntityKey
|
|
LEFT OUTER JOIN PBEntityAddress oua on oua.PBEntityKey=ou.PBEntityKey and oua.AddressTypeID=1137
|
|
WHERE p.PBProductKey in (Select PBProductKey From PBProduct Where FullDescription NOT LIKE '%LIFE%' AND FullDescription NOT LIKE '%VISION%' AND FullDescription NOT LIKE '%DENT%')
|
|
AND pp.InEffect <= getdate() +90
|
|
AND (pp.OutOfEffect-1 > getdate() AND pp.OutOfEffect>pp.InEffect)
|
|
AND pp.OutOfEffect=(Select Max(Part.OutOfEffect) From PBProductParticipation Part
|
|
INNER JOIN PBProductAvailability Aval on Aval.PBProductAvailabilityKey=Part.PBProductAvailabilityKey
|
|
INNER JOIN PBProduct Prod on Prod.PBProductKey=Aval.PBProductKey
|
|
Where Prod.PBProductKey = p.PBProductKey
|
|
AND Part.PBProductParticipationKey = pp.PBProductParticipationKey)
|
|
AND pbm.#{@entity_type}=#{@family_id}
|
|
AND M.EnrolleeTypeKey='1044'
|
|
SQL
|
|
end
|
|
end
|