> For the complete documentation index, see [llms.txt](https://docs.digit.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.digit.org/health/release-notes.md).

# Release Notes

{% hint style="info" %}
**Release Date: 22nd Sep 2026**
{% endhint %}

## 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.&#x20;

#### 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](/health/release-notes/performance-and-benchmarking.md)).
* **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 `campaignNumber` field now links attendance registers and stock records, replacing the old campaign ID for those flows.
* **End-to-end tracing** — `correlationId` and `tenantId` now 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

<table><thead><tr><th width="226.74609375">Component (plain name)</th><th width="278.75390625">What it does</th><th>How it's switched on</th></tr></thead><tbody><tr><td><strong>Worker Registry</strong> (worker-registry)</td><td>Worker registry underpinning attendance and payments; integrates with project-factory user flows and HRMS</td><td>Deploy the chart plus its DB migration; reads no MDMS</td></tr><tr><td><strong>Push Notification Service</strong> (egov-notification-push)</td><td>Firebase Cloud Messaging push delivery to app and mobile users</td><td>Deploy with the FCM service-account secret plus device-token migrations</td></tr><tr><td><strong>Health Notification Service</strong> (health-notification-service)</td><td>Health-domain and scheduled notifications</td><td>Deploy with its persister and indexer configs</td></tr><tr><td><strong>Airflow Trigger Service</strong> (airflow-trigger-service)</td><td>Triggers Airflow DAGs for downstream data pipelines</td><td>Deploy chart plus config; requires Airflow connection settings</td></tr><tr><td><strong>Bulk boundary-relationship path</strong> (boundary-management + boundary-service)</td><td>Batch relationship persistence over a dedicated Kafka topic</td><td>Ships with the services; tunable via <code>BULK_RELATIONSHIP_*</code></td></tr><tr><td><strong>Persister dead-letter pipeline</strong> (egov-persister)</td><td>Isolates poison records; parks terminal failures instead of stalling batches</td><td>Always on; the two new topics must be provisioned on the broker</td></tr></tbody></table>

<details>

<summary><strong>How to turn on features</strong></summary>

#### 1. Campaign Resource Table — *always on*

Campaign resources now live in a dedicated `eg_cm_resource_details` table rather than inside the `campaigndetails` JSONB column, with a first-class resource CRUD API.

<table><thead><tr><th width="134.7265625"></th><th></th></tr></thead><tbody><tr><td>Enable</td><td>Nothing to flip — this is the storage model in v2.1.</td></tr><tr><td>Migrations</td><td><code>V20260317100000</code> adds <code>parentresourceid</code>, <code>filename</code>, <code>isactive</code>; <code>V20260317100001</code> performs a one-time idempotent backfill from JSONB (guarded by <code>NOT EXISTS</code>).</td></tr><tr><td>Config</td><td>Persister topics <code>create-resource-details</code> / <code>update-resource-details</code> → <code>health.eg_cm_resource_details</code>; <code>create-resource-activity</code> → <code>eg_cm_resource_activity</code>.</td></tr><tr><td>Existing deployments</td><td><strong>Action required</strong> — run the migration during the maintenance window with campaign creation paused, and reconcile backfill row counts before resuming. Backward-compatibility shims retain the old resource APIs.</td></tr></tbody></table>

#### 2. Cross-Entity Validation ("unbundled") — *off by default*

Create and update no longer synchronously reject a record whose parent is missing. Structural, uniqueness and required-link checks still run; only parent-existence rejection is relaxed. Flags are read **live at request time** — no restart needed.

<table><thead><tr><th width="148.796875"></th><th></th></tr></thead><tbody><tr><td>Enable</td><td>Set the relevant flag to <code>true</code> for any environment that requires synchronous parent-existence rejection.</td></tr><tr><td>Service settings</td><td><code>household.member.relationship.validation=false</code>, <code>project.relationship.validation=false</code>, <code>referralmanagement.relationship.validation=false</code>, <code>individual.beneficiary.id.validation.enabled=false</code> (all defaults shown).</td></tr><tr><td>Important caveat</td><td>With the defaults, <code>INDIVIDUAL_NOT_FOUND</code> and relative-existence errors on household-member create are <strong>suppressed</strong>, and a record can be created while its parent is still on the persister queue. This is intentional for offline-first field deployments but <strong>changes what the APIs enforce out of the box.</strong></td></tr><tr><td>Existing deployments</td><td><strong>Action required if you depend on synchronous rejection</strong> — these default to off, so a v2.0 deployment that relied on the old behaviour must set them explicitly.</td></tr></tbody></table>

#### 3. Excel Ingestion Gates

Server-side validation of uploaded workbooks, plus a watchdog for the generation listener.

<table><thead><tr><th width="157.30859375"></th><th></th></tr></thead><tbody><tr><td>Immutable cells</td><td><code>egov.excel.immutable-reject-on-change=true</code> — editing a server-managed or pre-filled template cell now <strong>fails the upload</strong> (previously silently reverted). New <code>IMMUTABLE_*</code> error codes.</td></tr><tr><td>Value validation</td><td><code>egov.excel.usage-value-validation-enabled=true</code>, <code>egov.excel.boundary-selection-validation-enabled=true</code> — stricter Active/Inactive and boundary-code validation.</td></tr><tr><td>Sheet protection</td><td><code>egov.excel.join-mode-sheet-protection-enabled=false</code> — User and Facility join-mode sheets ship unprotected.</td></tr><tr><td>Listener watchdog</td><td><code>excel.ingestion.listener.watchdog.interval.ms=60000</code> — scheduled restart of a stopped or zombie generation-init Kafka listener container.</td></tr><tr><td>Also included</td><td>Serialised async pool plus out-of-memory and generation-time fixes for large (approximately 50,000-row) sheets; new search index <code>V20260530120000</code> for large sheet data.</td></tr></tbody></table>

#### 4. Bulk Boundary Relationships

Relationship creation moved to a dedicated bulk Kafka topic with batch persistence, plus a bulk API.

<table><thead><tr><th width="139.73828125"></th><th></th></tr></thead><tbody><tr><td>API</td><td><code>POST /boundary-relationships/bulk/_create</code>. <strong>Hard cap of 100 records per call</strong> (<code>boundary.bulk.max.size=100</code>); a larger array is rejected with HTTP 400 <code>BULK_REQUEST_SIZE_EXCEEDED</code>. All callers, including project-factory, must chunk at 100 or fewer.</td></tr><tr><td>Tunables</td><td><code>BULK_RELATIONSHIP_CHUNK_SIZE=100</code>, <code>BULK_RELATIONSHIP_RETRY_ATTEMPTS=30</code>, <code>BULK_RELATIONSHIP_RETRY_DELAY_MS=2000</code>, <code>RELATIONSHIP_CREATE_CONCURRENCY=10</code>, <code>PERSISTENCE_DRAIN_TIMEOUT_MS=600000</code>.</td></tr><tr><td>Central instances</td><td>The bulk relationship topic must <strong>not</strong> be tenant-prefixed on a central instance.</td></tr><tr><td>Behaviour change</td><td>An all-existing re-upload is now an idempotent <strong>no-op</strong> (previously <code>400 Boundary already present</code>).</td></tr><tr><td>Resources</td><td>boundary-management Node heap raised from 1024 MB to <strong>2048 MB</strong> (<code>--max-old-space-size</code>). Single and bulk relationship creates now use separate persister queryMaps — single object versus array.</td></tr></tbody></table>

#### 5. Distributed Tracing Across Kafka — *on by default*

`correlationId` and `tenantId` now propagate across Kafka via message headers, with a payload fallback, and the MDC is rebuilt per record on consume.

<table><thead><tr><th width="121.51953125"></th><th></th></tr></thead><tbody><tr><td>Enable</td><td>On by default. Kill-switch <code>tracer.kafka.mdc.enabled=false</code>.</td></tr><tr><td>Version</td><td>tracer <code>2.9.3-SNAPSHOT</code>, inherited transitively via <code>health-services-common</code>.</td></tr><tr><td>Note</td><td>This is <strong>distinct</strong> from the VAPT database-error masking described in section 8 below.</td></tr></tbody></table>

#### 6. Persister Delivery Guarantees — *always on*

The persister moved from fire-and-forget to at-least-once delivery with poison-record isolation.

<table><thead><tr><th width="131.94140625"></th><th></th></tr></thead><tbody><tr><td>Delivery</td><td><code>enable-auto-commit=false</code> with manual RECORD/BATCH acknowledgement.</td></tr><tr><td>Failure classification</td><td>By SQLSTATE — benign (<code>23505</code>), transient (<code>08*</code>, <code>57*</code>, <code>40001</code>, <code>40P01</code>, <code>53300</code>, <code>55P03</code>), permanent → dead-letter.</td></tr><tr><td>Dead-letter path</td><td>Bounded reprocessor (<code>max-retries=5</code>), topics <code>egov-persister-deadletter</code> and <code>egov-persister-deadletter-processed</code>.</td></tr><tr><td>Database health</td><td>Pause/resume on database health (<code>persister.db-health.check-interval-ms=5000</code>).</td></tr><tr><td>Batch handling</td><td>Per-record poison isolation for bulk (bare-array) messages; batch-persist row aggregation; <code>ON CONFLICT (uuid) DO NOTHING</code> idempotency. Batch topics selected via <code>persister.batch.topics</code> or the <code>-batch</code> convention, excluded from the single consumer only when <code>persister.bulk.enabled=true</code>.</td></tr><tr><td><strong>Operations</strong></td><td><strong>Provision and monitor the two new topics. Parking-topic growth is the terminal-poison signal to alert on.</strong></td></tr></tbody></table>

#### 7. Project Factory Reliability

<table><thead><tr><th width="126.234375"></th><th></th></tr></thead><tbody><tr><td>Boundary sync</td><td><code>BOUNDARY_SYNC_RETRY_DELAY_MS=4000</code> — configurable boundary-sync retry delay.</td></tr><tr><td>User creation</td><td>HRMS per-user create fallback is <strong>bounded and retried</strong> with back-off and throttling; a poll-time reconciler converges adopted-user rows on retry and surfaces upsert errors. Kafka consumption is at-least-once.</td></tr><tr><td>Credentials</td><td>The credential sheet now shows the existing login username for adopted users.</td></tr><tr><td>Migrations</td><td><code>V20260612120000</code> adds retry columns to mapping data; <code>V20260612130000</code> backfills de-map failed status.</td></tr><tr><td>Health probe</td><td>A Kubernetes health-probe endpoint was added to project-factory.</td></tr></tbody></table>

#### 8. VAPT Security Hardening — *always on*

<table><thead><tr><th width="156.64453125"></th><th></th></tr></thead><tbody><tr><td>Database error masking</td><td>A <code>DataAccessException</code> handler returns only the root-cause message (code <code>QUERY_EXECUTION_ERROR</code>, HTTP 500) instead of echoing the full SQL or prepared statement. Delivered as a <strong>per-service <code>DataAccessExceptionHandler</code></strong> <strong><code>@ControllerAdvice</code> in each service</strong> (ticket HCMPRE-1870) — <strong>not</strong> via a tracer bump.</td></tr><tr><td>Services carrying the handler</td><td>plan-service, project, census-service, egov-survey-services, service-request, egov-hrms, pgr-services, household, and the DIGIT-Works attendance services.</td></tr><tr><td>PII encryption</td><td>Personally identifiable fields are encrypted via enc-client; APIs return encrypted values unless explicitly decrypted.</td></tr><tr><td><strong>Hard dependency</strong></td><td><strong>The MDMS <code>DataSecurity.SecurityPolicy</code> master must exist for the target tenant and cover every encrypted model before deployment — otherwise the service fails to boot with a null-pointer exception ("attributes is null"). enc-client loads SecurityPolicy once at startup; adding a missing policy requires a service restart.</strong></td></tr></tbody></table>

</details>

### 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 EXISTS` check)
* 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`/`localitycode` columns with indexes
* Improved 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

<table><thead><tr><th width="80.08984375">#</th><th width="178.953125">Area</th><th>Fix</th></tr></thead><tbody><tr><td>1</td><td>Boundary re-upload</td><td>Re-uploading an all-existing hierarchy is now an idempotent no-op instead of returning <code>400 Boundary already present</code></td></tr><tr><td>2</td><td>Excel templates</td><td>Editing a server-managed or pre-filled cell now fails the upload instead of silently reverting the value</td></tr><tr><td>3</td><td>Excel generation</td><td>Out-of-memory and generation-time failures on large (approximately 50,000-row) sheets resolved</td></tr><tr><td>4</td><td>Excel ingestion</td><td>A stopped or zombie generation-init Kafka listener container is now detected and restarted by a watchdog</td></tr><tr><td>5</td><td>Campaign user creation</td><td>HRMS per-user create fallback is bounded and retried with back-off; a poll-time reconciler converges adopted-user rows and surfaces upsert errors</td></tr><tr><td>6</td><td>Campaign credentials</td><td>The credential sheet shows the existing login username for adopted users rather than a blank or regenerated value</td></tr><tr><td>7</td><td>Persister</td><td>A single poison record no longer stalls a bulk batch — per-record isolation with dead-letter routing</td></tr><tr><td>8</td><td>Persister</td><td>Duplicate-key replays are now benign (<code>ON CONFLICT (uuid) DO NOTHING</code>) rather than failing the batch</td></tr><tr><td>9</td><td>Security (VAPT)</td><td>API error responses no longer echo SQL or prepared statements (HCMPRE-1870)</td></tr><tr><td>10</td><td>Tracing</td><td><code>correlationId</code> and <code>tenantId</code> are no longer lost across Kafka hops; the MDC is rebuilt per record on consume</td></tr><tr><td>11</td><td>HRMS</td><td>Mobile-number handling fix (HCMPRE-4022)</td></tr><tr><td>12</td><td>PGR</td><td>User-type handling fix in health PGR flows</td></tr><tr><td>13</td><td>Stock</td><td>Bulk stock-count updates no longer blocked by row-version validation or the search-limit cap</td></tr><tr><td>14</td><td>Boundary throughput</td><td>Relationship creation no longer serialised per record — moved to a batched bulk topic</td></tr></tbody></table>

## Related Documents

| Technical Documents                                                                                                                                                                                                                             | Functional Documents                                                                                                                                                                         |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <ol><li><a href="/health/release-notes/performance-and-benchmarking.md">Performance & benchmarking</a></li></ol>                                                                                                                                | <ol><li><a href="/health/release-notes/hcm-console-polio-co-delivery.md">HCM Console release notes</a></li></ol>                                                                             |
| <ol start="2"><li><a href="/health/release-notes/migration-guide.md">Migration guide</a></li></ol>                                                                                                                                              | <ol start="2"><li><a href="/health/release-notes/stock-attendance-payments-and-facial-recognition.md">Stock, attendance, payments & facial recognition release notes</a></li></ol>           |
| <ol start="3"><li><a href="/health/release-notes/service-build-updates.md">Service build updates</a></li></ol>                                                                                                                                  | <ol start="3"><li><a href="/health/access/public-health-product-suite/health-campaign-management-hcm/attendance-and-payments-user-manual.md">Attendance & payments user manual</a></li></ol> |
| <ol start="4"><li><a href="/health/design/architecture/low-level-design/services/health-services/worker-registry.md">Worker registry</a></li></ol>                                                                                              | <ol start="4"><li><a href="/health/access/public-health-product-suite/health-campaign-management-hcm/facial-recognition.md">Facial recognition user manual</a></li></ol>                     |
| <ol start="5"><li><a href="/health/design/architecture/low-level-design/services/health-services/stock.md">Stock</a></li></ol>                                                                                                                  | <ol start="5"><li><a href="/health/access/public-health-product-suite/health-campaign-management-hcm/stock-management.md">Stock management user manual</a></li></ol>                         |
| <ol start="6"><li><a href="/health/design/architecture/low-level-design/services/health-services/referral-management.md">Referral management</a></li></ol>                                                                                      | <ol start="6"><li><a href="/health/access/public-health-product-suite/health-campaign-management-hcm/hcm-console/configure-polio-campaign.md">Configure polio campaign</a></li></ol>         |
| <ol start="7"><li><a href="/health/design/architecture/low-level-design/services/health-services/console-services/project-factory-campaign-manager/manage-campaign-apis/search-project-type-campaign-endpoints.md">Health project</a></li></ol> | <ol start="7"><li><a href="/health/access/public-health-product-suite/health-campaign-management-hcm/hcm-console/configure-co-delivery.md">Configure co-delivery</a></li></ol>               |
| <ol start="8"><li><a href="/health/design/architecture/low-level-design/services/health-services/console-services/project-factory-campaign-manager/project-factory.md">Project factory</a></li></ol>                                            | <ol start="8"><li><a href="/health/access/public-health-product-suite/health-campaign-management-hcm/custom-reports.md">Custom reports user manual</a></li></ol>                             |
| <ol start="9"><li><a href="/health/design/architecture/low-level-design/registries/product.md">Product</a></li></ol>                                                                                                                            |                                                                                                                                                                                              |
| <ol start="10"><li><a href="/health/design/architecture/low-level-design/registries/individual.md">Individual</a></li></ol>                                                                                                                     |                                                                                                                                                                                              |
| <ol start="11"><li><a href="/health/design/architecture/low-level-design/registries/household.md">Household</a></li></ol>                                                                                                                       |                                                                                                                                                                                              |
| <ol start="12"><li><a href="/health/design/architecture/low-level-design/services/health-services/health-notification.md">Health notification service</a></li></ol>                                                                             |                                                                                                                                                                                              |
| <ol start="13"><li><a href="/health/design/architecture/low-level-design/registries/facility.md">Facility</a></li></ol>                                                                                                                         |                                                                                                                                                                                              |
| <ol start="14"><li><a href="/health/design/architecture/low-level-design/services/health-services/console-services/excel-ingestion.md">Excel Ingestion</a></li></ol>                                                                            |                                                                                                                                                                                              |
| <ol start="15"><li><a href="/health/design/architecture/low-level-design/services/platform-services/egov-notification-push.md">egov Notification push</a></li></ol>                                                                             |                                                                                                                                                                                              |
| <ol start="16"><li><a href="/health/design/architecture/low-level-design/services/health-services/console-services/boundary-management.md">Boundary management</a></li></ol>                                                                    |                                                                                                                                                                                              |
| <ol start="17"><li><a href="/health/design/architecture/low-level-design/services/health-services/beneficiary-idgen.md">Beneficiary IDgen</a></li></ol>                                                                                         |                                                                                                                                                                                              |
| <ol start="18"><li><a href="/health/design/architecture/low-level-design/services/health-services/complaints-service.md">Complaints service</a></li></ol>                                                                                       |                                                                                                                                                                                              |
| 19. [Facial recognition](/health/design/architecture/low-level-design/services/platform-services/facial-recognition.md)                                                                                                                         |                                                                                                                                                                                              |
| <ol start="20"><li><a href="/health/deploy/configuration/hcm-ui-configuration/dashboard-configuration/custom-report-dashboard.md">Configure custom report dashboard</a></li></ol>                                                               |                                                                                                                                                                                              |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.digit.org/health/release-notes.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
