Versions Compared

Key

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

...


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 -

...

COMPLETE IMPACT ANALYSIS

...

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
50004
50005V_
50004
50005_1
9
20
4
-NULL
3
5 (
MMU
HWC)
1
2
1
9

facilityID column does not exist yet. vanID is the only location identifier. Row 50005 is an existing pending TC request - vanID already updated to TM specialist Van (20) when HWC doctor referred.

m_van table - the bridge:

VanIDVanNameParkingPlaceIDFacilityIDProviderServiceMapID
5Gunjalli HWC Van345 (HWC)
9MMU Van Raichur473 (MMU)
20TM Specialist Van-NULL6 (TM)

Every HWC Van

...

must have FacilityID. This is the

...

bridge for backfill. TM Van has NULL FacilityID - this is fine, TM queries by vanID not facilityID.

...

2. PRE-DEPLOYMENT MANDATORY CHECKS (Before running DB script)

This is the only genuine risk in the entire implementation.

If any HWC Van has FacilityID = NULL in m_van, the backfill JOIN will set facilityID = NULL for those patient records. After code deploy, new worklist query WHERE facilityID = 4 will NOT find those patients. They disappear from worklist.

Check 1: Must return 0 rows. If not, fix those Vans in Admin first.

SELECT VanID, VanName FROM m_van
WHERE FacilityID IS NULL
AND Deleted = false
AND ProviderServiceMapID = 5; -- HWC service map only

If any Van returned → go to Admin → open that Van → map it to correct Facility → recheck.

Only proceed to DB script after this returns 0 rows.

...

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

ALTER TABLE i

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;

...

ADD COLUMN facilityID INT DEFAULT NULL;

i_ben_flow_outreach after

...

ALTER TABLE:

benRegIDvanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlag
5000153
4 (HWC facility)
NULL5 (HWC)1
5000253
4 (HWC facility)
NULL5 (HWC)1
5000394
7 (MMU facility)
NULL3 (MMU)1
50004
50005
9
20
47 (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

...

-NULL5 (HWC)2

Column added. All NULL. Old code still running. vanID still there. All users working normally. Zero disruption.

...

4. 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:

benRegIDvanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlagnote
50001534
5
(HWC)5 (HWC)1filled from Van 5
50002534
5
(HWC)
150099NULLNULL4
5 (HWC)1filled from Van 5
50003947 (MMU)3 (MMU)1
50004
filled from Van 9
4
50005
73 (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

...

20-NULL5 (HWC)2TM Van - NULL is fine, TM queries by vanID=20

vanID=5 → FacilityID=4 (HWC records filled) vanID=9 → FacilityID=7 (MMU records filled) vanID=20 → FacilityID=NULL (TM Van - no facility mapping needed, TM still works)

vanID untouched for all records. Old code still runs fine.

Check 2: Post-backfill verification. Must return 0 before deploying code.

SELECT COUNT(*) FROM i_ben_flow_outreach
WHERE facilityID IS NULL
AND vanID IN (
    SELECT VanID FROM m_van WHERE ProviderServiceMapID = 5
)
AND providerServiceMapID = 5;

If this returns any count → some HWC Van still has NULL FacilityID → fix in Admin → re-run backfill → recheck.

Only proceed to code deployment after this returns 0.

...

5. AFTER CODE DEPLOY - NEW PATIENT VISITS

benRegIDvanIDparkingPlaceIDfacilityIDproviderServiceMapIDnurseFlagnote
500015345 (HWC)1old - backfilled
500025345 (HWC)1old - backfilled
50099NULLNULL45 (HWC)1new - direct
500039473 (MMU)1MMU - untouched
5000520-NULL5 (HWC)2TM TC - vanID=20 intact

...

6. HOW EACH SERVICE READS THIS TABLE

HWC Nurse worklist (new query - confirmed from code):

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

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

MMU Nurse worklist (unchanged query - confirmed from code):

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

Finds: 50003. Only MMU patients. Correct.

HWC records never appear in MMU query. MMU records never appear in HWC query. Zero overlap.

...

7. TM (TELEMEDICINE) - ZERO CHANGE. ZERO IMPACT.

TM uses HWC code for TC flow. We are not touching TM-API at all.

When HWC doctor refers patient to TM specialist, HWC-API updates the record:

SET vanID = TM_Specialist_Van_20,
    specialist_flag = 1,
    tCSpecialistUserID = 300

The record's vanID is overwritten with TM specialist's vanID (20) at the time of TC request. This happens whether the original record had vanID=5 (old) or vanID=NULL (new after our change).

Old pending TC (before go-live):

benRegIDvanIDfacilityIDspecialist_flag
5000520 (TM Van)NULL1 (pending)

TM specialist worklist:

WHERE specialist_flag = 1 AND vanID = 20

Finds 50005. Old TC request visible. Zero break.

New TC request (after go-live): New HWC record has vanID=NULL, facilityID=4. Doctor refers to TM → update writes vanID=20 → TM finds it. Zero break.

...

8. FLW - ZERO CHANGE. ZERO IMPACT.

FLW ASHA workers register patients and do home visits. Their data lives in separate FLW-specific tables (AncCare, PNCCare, ChildVaccination etc.). They do NOT write to i_ben_flow_outreach.

When FLW registers patient Lakshmi → benRegID=50001 in shared beneficiary tables. When Lakshmi walks into HWC → nurse searches by name/phone → finds benRegID=50001 → visible in HWC.

Search is by name/phone/Aadhaar. vanID never part of search. Zero break.

...

9. CROSS SERVICE - SAME PATIENT VISITS MULTIPLE SERVICES

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

benRegIDvanIDfacilityIDproviderServiceMapIDservicedate
50001973MMUJan visit
50001NULL45HWCMar visit

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

Each service sees only its own records. No overlap. No data leak.

...

10. OLD USER LOGIN ON PROD (No admin action needed)

Old HWC user Dr. Ravi - mapped to Van:

UserIDVanIDm_van FacilityID
10054

New login API fallback:

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

Dr. Ravi logs in. Worklist shows all patients (old backfilled + new). No re-mapping needed.

New user Dr. Priya - mapped directly to facility:

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

Both old and new users work simultaneously. No conflict.

...

11. COMPLETE TABLE AND SERVICE LINE IMPACT

TableChangeHWCMMUTMFLW1041097ECDFHIRSchedulerImpact
i_ben_flow_outreachADD facilityID + backfillfacilityID columnvanID untouchedTC vanID=TM Van intactNot usedNot usedNot usedNot usedReads dataNot usedZero operational impact
m_vanNOT touchedOld user fallbackStill readsStill readsStill reads---Still readsStill readsZero
m_facilityHierarchy donefacilityID + locationNot usedNot usedNot usedfacilityID fieldNot usedNot usedReads dataNot usedZero
m_userfacilitymappingNEW tableNew users onlyNot usedNot usedNot usedNot usedNot usedNot usedNot usedNot usedAdditive only
m_uservanmappingNOT touchedOld user fallbackStill readsStill reads------Zero
t_beneficiaryNOT touchedSearch by name/phoneStill readsStill readsStill readsStill readsStill readsStill readsReads data-Zero
i_beneficiarymappingNOT touchedvanID nullableStill readsStill readsStill readsStill readsStill readsStill readsReads data-Zero
FLW-specific tablesNOT touchedNot usedNot usedNot usedFully intactNot usedNot usedNot usedNot usedNot usedZero

...

12. ALL REPOS CONFIRMED FROM CODE

RepoChangeStatus
HWC-APIYES Login, worklist, visit save
HWC-UIYES Login flow, session, worklist
Admin-APISMALL User-facility mapping endpoint
Inventory-APISMALLHierarchy walk for items
TM-APIZEROTC flow unaffected. Not touching TM code
FLW-APIZEROSeparate tables. benRegID search unchanged
MMU-APIZEROSeparate codebase, own vanID
Identity-APIZEROvanID nullable in beneficiary tables
BeneficiaryID-Gen-APIZEROMMU offline sync only. HWC never calls it
Common-APIZEROFacilityLoginRepo already exists
Helpline104-APIZEROIMRMMR reporting only. No worklist impact
Helpline1097-APIZEROZero vanID/facilityID usage at all
ECD-APIZEROOne nullable DTO field only
Scheduler-APIZEROVan scheduling for TM only
FHIR-APIZEROData exchange only. Models already support facilityID

...

13. PROD GO-LIVE STEP BY STEP

Step 1: Run pre-check query
        SELECT VanID FROM m_van WHERE FacilityID IS NULL
        AND Deleted = false AND ProviderServiceMapID = 5
        → Must return 0. Fix any Vans in Admin if needed.

Step 2: Run DB script
        ALTER TABLE (add facilityID column)
        Old code still running. Users unaffected.

Step 3: Run backfill
        UPDATE from m_van JOIN
        All HWC records get facilityID filled silently.

Step 4: Run post-backfill verification
        SELECT COUNT(*) WHERE facilityID IS NULL (HWC records)
        → Must return 0.

Step 5: Deploy HWC-API and HWC-UI
        New code uses facilityID.
        Old records already have it. New records write it directly.

Step 6: Verify on prod
        Old users login and check worklist.
        New patient registration and worklist check.