🆕Release Notes
Release Summary
HCM v2.1 moves the platform from a campaign execution tool to a full field-operations platform. Three big shifts define this release:
Configuration moves from build-time to the console (co-delivery, Polio, hierarchies, stock dispatch, registers)
Stock ownership moves from the device to the facility, managed server-side
Attendance moves from unverified manual records to verified records (signature or facial recognition), feeding into a structured payment chain
The release also adds worker attendance and payments, push notifications, and a re-engineered data ingestion path benchmarked at 20,000 boundaries and 20,000 users.
Highlights
With this release, a health programme can:
Run much larger campaigns, predictably. Project creation now scales sub-linearly — doubling the data costs less than double the time. A 50,000-record campaign (20,000 boundaries, 10,000 facilities, 20,000 users) completes in 24 minutes 21 seconds with zero failures.
Pay and track field workers. A new worker registry powers attendance registers, muster rolls, and expense claims, integrated with DIGIT-Works and HRMS.
Reach field users on mobile. A new Firebase Cloud Messaging push service and a health-domain notification service deliver campaign and task alerts, including scheduled notifications.
Upload large workbooks in seconds. The redesigned Excel template is 15.8–18.8× smaller than before, validating 2,300–4,100 rows/second — under 9 seconds even for 20,000 rows.
Run offline-first deployments. Parent-existence checks across entities are now off by default, so records can be created while their parent is still queued — with per-service flags to turn strict checking back on where needed.
Trust delivery guarantees. The persister now guarantees at-least-once delivery, with failure classification, a dead-letter path, and a terminal parking topic — so one bad record no longer stalls a whole batch.
Campaign configuration:
Co-delivery combinations (e.g., AZM+VAS, SMC+VAS) move from hardcoded builds to console setup
Polio is now a supported campaign type, bringing LQAS, Independent Monitoring, and Team Level Stock Details
Multi-hierarchy support lets one tenant run more than one boundary structure at a time
Field operations:
Stock Management closes gaps seen in ITN, SMC, and co-delivery rollouts, improving accuracy and visibility from warehouses to last-mile distributors
Attendance and Payments adds Console-based register setup, supervisor approval, signature-based marking, and a role-based payment workflow through to bank disbursement
Facial Recognition pilots biometric attendance as an alternative to manual marking
Custom reports let program managers pull campaign-scoped reports from the dashboard, with frequency set during campaign setup.
New Features
1. Polio as a campaign type
Polio is now a fully supported campaign type in HCM. The release includes workflows for LQAS, Independent Monitoring, and Team-Level Stock Details, plus visibility into zero-dose children—a key metric tracked in polio campaigns. You can now configure, run, and monitor polio campaigns entirely through HCM.
2. Co-delivery, configured through the Console
Co-delivery means delivering two interventions together in the same campaign — for example, AZM+VAS and SMC+VAS. This saves time and resources for anyone running a campaign. These combinations can now be configured directly through the Console instead of needing a custom build for each one.
3. Multi-hierarchy support
Different countries and campaigns organise their administrative areas differently. A single HCM tenant can now support multiple boundary structures at the same time, so different country or campaign structures no longer require a separate tenant each.
4. Stock Module revamp
Stock balances used to be tied to the device in use, so a logout, device change, or app restart could put the numbers at risk. Stock is now owned by the facility, not the device, so balances hold regardless of what happens to any one phone. This release also cuts down the manual work around stock:
Bulk stock dispatch from the Commodity Management dashboard — a single validated Excel upload instead of one transaction at a time
Real-time stock KPIs and exception flags — risks surface while there's still time to act, instead of showing up after the fact in a static report
Live stock visibility on the mobile app — field teams see what they actually have before heading out, instead of relying on memory or a manual count
A new web-based Commodity Management module — one view of transactions and stock across the whole hierarchy for warehouse and national teams, instead of mobile-only visibility
5. Attendance & Payments
Getting thousands of field workers paid on time depends on how quickly attendance can be set up, captured, and turned into a bill. This release adds:
Periodic bill generation — bills can be raised at intervals during a live campaign, so workers aren't waiting until the campaign closes to get paid
A cross-campaign worker registry — one record per worker across campaigns, instead of re-entering the same people each time
Console-driven attendance setup — create an attendance register and assign users to it, all from the Console
Offline signature capture — workers sign on the attendance marker's device, checked against a stored baseline, and it works fully offline
A full role-based payment workflow — bills move through Bill Generator, Payment Editor, Payment Reviewer, and Payment Approver, ending in a bank disbursement advisory
Face recognition — biometric attendance verification with timestamp, GPS, and confidence score, available as a pilot
6. Custom reports
Program managers can now access campaign-scoped reports directly from the dashboard and choose the reporting frequency while setting up the campaign on Console.
What does the release offer different stakeholders?
For field users and programme delivery
Worker attendance and payments — a new worker registry connects attendance registers, muster rolls, and expense claims into one system.
Push notifications — app and mobile users now get campaign and task alerts via Firebase Cloud Messaging, including notifications scheduled for later delivery.
Offline-first data capture — records can now be created even if their "parent" record hasn't synced yet, so field data collected out of order is no longer rejected.
Faster Excel templates — new templates are pre-filled with real data instead of thousands of blank rows, so they're smaller and quicker to work with.
Multi-hierarchy campaigns — users can choose which administrative hierarchy to use when creating a campaign.
Multi-hierarchy complaints — complaints can now be created and managed across different administrative levels.
For campaign administrators
Proven scale — campaign creation is now benchmarked up to 20,000 boundaries and 20,000 users, with published timings for each phase (see Performance & Benchmarking).
More reliable campaign creation — user creation in HRMS automatically retries with back-off if it fails, and a background reconciler fixes any user records left inconsistent after a retry.
Smarter credential sheets — for users re-added from a past campaign, the sheet now shows their existing username instead of leaving it blank or generating a new one.
Stricter upload checks — editing a locked or pre-filled template cell now fails the upload clearly (instead of silently reverting), and key fields like Active/Inactive status and boundary codes are validated on the server.
Safer boundary re-uploads — re-uploading a hierarchy that's already present is now simply ignored, instead of returning an error.
For integrators
Cleaner campaign resource storage — campaign resources now live in their own database table with a proper CRUD API, instead of being buried inside a JSON blob.
New campaign identifier — a
campaignNumberfield now links attendance registers and stock records, replacing the old campaign ID for those flows.End-to-end tracing —
correlationIdandtenantIdnow travel with every message across Kafka, so a single request can be traced across asynchronous steps.Bulk boundary relationships — a new bulk API (
/boundary-relationships/bulk/_create) creates up to 100 boundary relationships in a single call.
New Services
Worker Registry (worker-registry)
Worker registry underpinning attendance and payments; integrates with project-factory user flows and HRMS
Deploy the chart plus its DB migration; reads no MDMS
Push Notification Service (egov-notification-push)
Firebase Cloud Messaging push delivery to app and mobile users
Deploy with the FCM service-account secret plus device-token migrations
Health Notification Service (health-notification-service)
Health-domain and scheduled notifications
Deploy with its persister and indexer configs
Airflow Trigger Service (airflow-trigger-service)
Triggers Airflow DAGs for downstream data pipelines
Deploy chart plus config; requires Airflow connection settings
Bulk boundary-relationship path (boundary-management + boundary-service)
Batch relationship persistence over a dedicated Kafka topic
Ships with the services; tunable via BULK_RELATIONSHIP_*
Persister dead-letter pipeline (egov-persister)
Isolates poison records; parks terminal failures instead of stalling batches
Always on; the two new topics must be provisioned on the broker
Changed
Added 18 new Flyway migrations and 2 data backfills that run automatically on service boot
Made the project-factory resources backfill idempotent (guarded by a
NOT EXISTScheck)Disabled row-version validation and raised the search-limit cap for stock user-action updates, to support bulk stock-count updates
Enhanced referral management: added downsync generation auditing, per-category file-size tracking, materialised-view indexes for household addresses, and new
projectId/localitycodecolumns with indexesImproved Excel ingestion: added a search index for large sheets and a serialised async pool to cap memory use during 50,000-row generation
Added OpenTelemetry instrumentation to egov-hrms; it now listens for first-attendance-log events to capture worker signatures and photos
Updated the OpenJDK base image across builds
Introduced multi-architecture (amd64/arm64) images for several services and UIs
Added a Kubernetes health-probe endpoint to project-factory
Refactored boundary-service to use separate persister queryMaps for single vs. bulk relationship creation, so bulk publishes now emit one array message per parent code instead of N individual messages
Fixes
1
Boundary re-upload
Re-uploading an all-existing hierarchy is now an idempotent no-op instead of returning 400 Boundary already present
2
Excel templates
Editing a server-managed or pre-filled cell now fails the upload instead of silently reverting the value
3
Excel generation
Out-of-memory and generation-time failures on large (approximately 50,000-row) sheets resolved
4
Excel ingestion
A stopped or zombie generation-init Kafka listener container is now detected and restarted by a watchdog
5
Campaign user creation
HRMS per-user create fallback is bounded and retried with back-off; a poll-time reconciler converges adopted-user rows and surfaces upsert errors
6
Campaign credentials
The credential sheet shows the existing login username for adopted users rather than a blank or regenerated value
7
Persister
A single poison record no longer stalls a bulk batch — per-record isolation with dead-letter routing
8
Persister
Duplicate-key replays are now benign (ON CONFLICT (uuid) DO NOTHING) rather than failing the batch
9
Security (VAPT)
API error responses no longer echo SQL or prepared statements (HCMPRE-1870)
10
Tracing
correlationId and tenantId are no longer lost across Kafka hops; the MDC is rebuilt per record on consume
11
HRMS
Mobile-number handling fix (HCMPRE-4022)
12
PGR
User-type handling fix in health PGR flows
13
Stock
Bulk stock-count updates no longer blocked by row-version validation or the search-limit cap
14
Boundary throughput
Relationship creation no longer serialised per record — moved to a batched bulk topic
Related Documents
Last updated
Was this helpful?