Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Admin still needs 6 pages to set up a new HWC (fake Van, Zone, Parking Place still required)
  • vanID is still the main identifier everywhere in HWC code
  • For every new HWC facility in hierarchy, admin must still create a corresponding Van

...

Side by Side


Option A (Remove Van)Option B (Keep Van + Hierarchy)



DB migrationYes (ALTER + backfill)No
Login flowChanged (facilityID)No change
Worklist queriesChanged (16 queries)No change
Visit saveChangedNo change
Admin setup for new HWC2 pages6 pages (same as now)
Fake Van/Zone neededNoYes (same as now)
Hierarchy availableYes (direct)Yes (through Van → FacilityID)
Inventory hierarchy walkYesYes
RiskMedium (many changes)Very low (minimal changes)



Old data handlingBackfill neededNo change needed
RollbackRedeploy old codeAlmost nothing to rollback

...

 

OLD DATA HANDLING - IN DEPTH

...

1. HOW DATA IS STORED TODAY (Before any change)

i_ben_flow_outreach table - current state:

benRegIDvisitCodevanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlagdoctorFlag
50001V_50001_153NULL5 (HWC)10
50002V_50002_153NULL5 (HWC)11
50003V_50003_194NULL3 (MMU)10
50004V_50004_194NULL3 (MMU)11

facilityID column does not exist yet. vanID is the only location identifier.

m_van table - the bridge:

VanIDVanNameParkingPlaceIDFacilityIDProviderServiceMapID
5Gunjalli HWC Van345 (HWC)
9MMU Van Raichur473 (MMU)

Every Van already has FacilityID. This is the key.

...

2. STEP 1 - ADD COLUMN (DB Script, before code deploy)

ALTER TABLE i_ben_flow_outreach ADD COLUMN facilityID INT DEFAULT NULL;

i_ben_flow_outreach after ALTER TABLE:

benRegIDvanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlag
5000153NULL5 (HWC)1
5000253NULL5 (HWC)1
5000394NULL3 (MMU)1
5000494NULL3 (MMU)1

Column added. All NULL. Old code still runs. vanID still there. Zero impact on running system.

...

3. STEP 2 - BACKFILL (same DB script, before code deploy)

UPDATE i_ben_flow_outreach bf
JOIN m_van v ON bf.vanID = v.VanID
SET bf.facilityID = v.FacilityID
WHERE bf.facilityID IS NULL;

i_ben_flow_outreach after backfill:

benRegIDvanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlag
50001534 (HWC facility)5 (HWC)1
50002534 (HWC facility)5 (HWC)1
50003947 (MMU facility)3 (MMU)1
50004947 (MMU facility)3 (MMU)1

vanID=5 → FacilityID=4 (from m_van, HWC record) vanID=9 → FacilityID=7 (from m_van, MMU record)

Both HWC and MMU records filled. vanID still untouched.

...

4. AFTER CODE DEPLOY - NEW PATIENT VISITS

New HWC patient record (vanID = NULL, facilityID direct from session):

benRegIDvanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlag
500015345 (HWC)1
500025345 (HWC)1
50099NULLNULL45 (HWC)1
500039473 (MMU)1
500049473 (MMU)1

...

5. HOW EACH SERVICE READS THIS TABLE

HWC Nurse worklist query (new):

WHERE facilityID = 4 AND providerServiceMapID = 5 AND nurseFlag = 1

Finds: benRegID 50001, 50002 (old backfilled) + 50099 (new direct). All HWC patients. Correct.

MMU Nurse worklist query (unchanged):

WHERE vanID = 9 AND providerServiceMapID = 3 AND nurseFlag = 1

Finds: benRegID 50003, 50004. Only MMU patients. Correct.

HWC records (vanID=5) never appear in MMU query. MMU records (vanID=9) never appear in HWC query. Each service sees only its own patients. No overlap, no data leak.

...

6. CROSS SERVICE - SAME PATIENT VISITS BOTH

Lakshmi (benRegID=50001) visited MMU in January, now visits HWC in March:

benRegIDvanIDfacilityIDproviderServiceMapIDservicedate
50001973MMUJan visit
50001NULL45HWCMar visit

MMU query: WHERE vanID=9 AND psmID=3 → finds Jan MMU visit only HWC query: WHERE facilityID=4 AND psmID=5 → finds Mar HWC visit only

Same patient, two rows, two services. benRegID is shared (patient identity). Visit records are completely isolated by providerServiceMapID + identifier column.

...

7. OLD USER LOGIN ON PROD (No re-mapping needed)

Dr. Ravi currently mapped to Van in production:

UserIDParkingPlaceMapIDVanID
100455

m_van:

VanIDFacilityID
54

New login API reads:

UserID=100 → m_uservanmapping → VanID=5 → m_van → FacilityID=4
Then: m_facility(4) → District=Raichur, Block=Manvi

Dr. Ravi logs in. Gets facilityID=4. No admin action needed.

New user Dr. Priya (joined after go-live):

Admin maps: UserID=200 → FacilityID=4 (m_userfacilitymapping)
Login: UserID=200 → m_userfacilitymapping → FacilityID=4

Both work. Old mapping tables stay. New mapping table added alongside.

...

8. COMPLETE SERVICE LINE IMPACT ON PROD DB

TableHWC changeMMU readsTM reads104 readsImpact
i_ben_flow_outreachADD facilityID + backfillvanID column (untouched)Not readNot readZero impact on MMU
m_vanNOT touchedStill readsStill reads-Zero impact
m_parkingplaceNOT touchedStill readsStill reads-Zero impact
m_facilityHierarchy data added (already done)Not usedNot usedfacilityID fieldZero impact
m_userfacilitymappingNEW table createdNot usedNot usedNot usedAdditive only
m_uservanmappingNOT touchedStill readsStill reads-Zero impact
t_beneficiaryNOT touchedStill readsStill readsStill readsZero impact
i_beneficiarymappingNOT touchedStill readsStill readsStill readsZero impact

...

9. SUMMARY - WHAT PROD WILL LOOK LIKE ON GO-LIVE DAY

BEFORE deployment:
  DB script runs silently in background
  Old code still running, users working normally
  facilityID fills up in i_ben_flow_outreach
  No one notices anything

AFTER code deployment:
  HWC users: Login works, worklist shows all patients
             (old backfilled + new direct)
  MMU users: Absolutely nothing changes
  TM users:  Absolutely nothing changes
  104 users: Absolutely nothing changes
  Old HWC patients: All visible in worklist
  New HWC patients: Written with facilityID directly
  Old HWC users:    Login works via Van fallback
  New HWC users:    Login works via facility direct