> For the complete documentation index, see [llms.txt](https://docs.mymedtrics.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mymedtrics.com/get-started/classic-data-mapping/admin-messages-and-reports.md).

# Admin, messages and reports

Notifications & Announcements, IRIS reporting: 11 Medtrics Classic tables and their confirmed Oracle fields.

Notifications & Announcements, IRIS reporting — 11 Medtrics Classic tables with 86 confirmed fields (6% of the mapping): Unchanged 8 · Renamed 55 · ID changed 23. Each table below lists where its confirmed fields went, what to change in a query, and a starter query. Back to the [map of the data](/get-started/classic-data-mapping.md).

![Admin, messages and reports: 11 Medtrics Classic tables; the number is confirmed fields, the bar is the outcome mix](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FUjcTaFdeUzw3qofAjaDF%2Fmap-admin.png?alt=media)

### Notifications & Announcements

9 tables, 73 confirmed fields: Unchanged 2 · Renamed 50 · ID changed 21.

#### notifications\_announcement

**notifications\_announcement** → `announcement_recipients`, `announcements`, `roles` · *split* · 15 confirmed fields (Unchanged 2 · Renamed 8 · ID changed 5)

Role definitions with associated permissions. Split table: each field names its new table.

> One announcement table became five. Targeting moved out of array columns into real recipient rows, and read/acknowledge tracking is new.

![Where the 15 confirmed fields of notifications\_announcement went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FcfKv9vMSkRoclVCKsaxy%2Fflow-notifications-announcement.png?alt=media)

| Medtrics Classic field     | Oracle                                               | Outcome    | Note                                                              |
| -------------------------- | ---------------------------------------------------- | ---------- | ----------------------------------------------------------------- |
| `id` integer               | announcement\_recipients.`announcement_id` UUID      | ID changed | Integer link → UUID pointing to announcements (Split)             |
| `id` integer               | announcement\_recipients.`id` UUID                   | ID changed | Integer link → UUID (Split)                                       |
| `id` integer               | announcements.`id` UUID                              | ID changed | Integer link → UUID (Split)                                       |
| `author_id` integer        | announcements.`created_by` UUID                      | ID changed | Integer link → UUID pointing to profiles (Split)                  |
| `author_id` integer        | announcements.`published_by` UUID                    | ID changed | Integer link → UUID pointing to profiles (Split)                  |
| `text` text                | announcements.`content` TEXT                         | Renamed    |                                                                   |
| `datetime` timestamptz     | announcements.`publish_at` TIMESTAMPTZ               | Renamed    | (Split)                                                           |
| `datetime` timestamptz     | announcements.`published_at` TIMESTAMPTZ             | Renamed    | (Split)                                                           |
| `important` boolean        | announcements.`priority` enum:announcement\_priority | Renamed    | Now a fixed value list (announcement\_priority) (Value list)      |
| `include_email` boolean    | announcements.`send_email` BOOLEAN                   | Renamed    |                                                                   |
| `expiration_date` date     | announcements.`expire_at` TIMESTAMPTZ                | Renamed    | date → timestamp (Split, Type changed)                            |
| `expiration_date` date     | announcements.`status` enum:announcement\_status     | Renamed    | Now a fixed value list (announcement\_status) (Split, Value list) |
| `updated_date` timestamptz | announcements.`updated_at` TIMESTAMPTZ               | Renamed    |                                                                   |
| `title` varchar            | announcements.`title` TEXT                           | Unchanged  |                                                                   |
| `created_at` timestamptz   | announcements.`created_at` TIMESTAMPTZ               | Unchanged  |                                                                   |

* Swap the 8 renamed fields and point `FROM` at `announcement_recipients` (and the other new tables).
* Re-key 5 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `announcement_recipients`, `announcements`, `roles` keep deleted rows.

#### notifications\_announcement\_groups

**notifications\_announcement\_groups** → `announcement_recipients` · 2 confirmed fields (ID changed 2)

![Where the 2 confirmed fields of notifications\_announcement\_groups went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FPAZU6w08GP7kAOnOLvxs%2Fflow-notifications-announcement-groups.png?alt=media)

| Medtrics Classic field    | Oracle                 | Outcome    | Note                                          |
| ------------------------- | ---------------------- | ---------- | --------------------------------------------- |
| `id` integer              | `id` UUID              | ID changed | Integer link → UUID                           |
| `announcement_id` integer | `announcement_id` UUID | ID changed | Integer link → UUID pointing to announcements |

* Re-key 2 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `announcement_recipients` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_announcement_groups.
SELECT
  t.id,              -- was id
  t.announcement_id  -- was announcement_id
FROM announcement_recipients t
WHERE t.deleted_at IS NULL;
```

#### notifications\_announcement\_programs

**notifications\_announcement\_programs** → `announcement_recipients` · 2 confirmed fields (ID changed 2)

![Where the 2 confirmed fields of notifications\_announcement\_programs went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2F6naJiQK5UZj6FwPWBzP2%2Fflow-notifications-announcement-programs.png?alt=media)

| Medtrics Classic field    | Oracle                 | Outcome    | Note                                          |
| ------------------------- | ---------------------- | ---------- | --------------------------------------------- |
| `id` integer              | `id` UUID              | ID changed | Integer link → UUID                           |
| `announcement_id` integer | `announcement_id` UUID | ID changed | Integer link → UUID pointing to announcements |

* Re-key 2 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `announcement_recipients` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_announcement_programs.
SELECT
  t.id,              -- was id
  t.announcement_id  -- was announcement_id
FROM announcement_recipients t
WHERE t.deleted_at IS NULL;
```

#### notifications\_announcementdocument

**notifications\_announcementdocument** → `announcement_attachments` · *split* · 6 confirmed fields (Renamed 4 · ID changed 2)

Stores each instance of a file uploaded as part of an Announcement.

> One announcement table became five. Targeting moved out of array columns into real recipient rows, and read/acknowledge tracking is new.

![Where the 6 confirmed fields of notifications\_announcementdocument went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2Fkmo8lHwkgNkKy2ZjvtF6%2Fflow-notifications-announcementdocument.png?alt=media)

| Medtrics Classic field     | Oracle                   | Outcome    | Note                                          |
| -------------------------- | ------------------------ | ---------- | --------------------------------------------- |
| `id` integer               | `id` UUID                | ID changed | Integer link → UUID                           |
| `announcement_id` integer  | `announcement_id` UUID   | ID changed | Integer link → UUID pointing to announcements |
| `document` varchar         | `file_name` TEXT         | Renamed    | (Split)                                       |
| `document` varchar         | `file_path` TEXT         | Renamed    | (Split)                                       |
| `created_date` timestamptz | `created_at` TIMESTAMPTZ | Renamed    |                                               |
| `updated_date` timestamptz | `updated_at` TIMESTAMPTZ | Renamed    |                                               |

* Swap the 4 renamed fields and point `FROM` at `announcement_attachments`.
* Re-key 2 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `announcement_attachments` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_announcementdocument.
SELECT
  t.id,              -- was id
  t.file_name,       -- was document
  t.file_path,       -- was document
  t.created_at,      -- was created_date
  t.updated_at,      -- was updated_date
  t.announcement_id  -- was announcement_id
FROM announcement_attachments t
WHERE t.deleted_at IS NULL;
```

#### notifications\_notification

**notifications\_notification** → `notifications` · *split* · 12 confirmed fields (Renamed 10 · ID changed 2)

> The single alert row became an alert row plus optional buttons on it. The vague request\_type/request\_id pair became source\_type/source\_id, which is still not a real link.

![Where the 12 confirmed fields of notifications\_notification went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2F9bsgPDiZxzgq8fCdAR4t%2Fflow-notifications-notification.png?alt=media)

| Medtrics Classic field | Oracle                                 | Outcome    | Note                                                         |
| ---------------------- | -------------------------------------- | ---------- | ------------------------------------------------------------ |
| `id` integer           | `id` UUID                              | ID changed | Integer link → UUID (Split)                                  |
| `user_id` integer      | `user_id` UUID                         | ID changed | Integer link → UUID pointing to profiles                     |
| `id` integer           | `metadata` JSONB                       | Renamed    | int → json (Split, Type changed)                             |
| `text` varchar         | `title` TEXT                           | Renamed    |                                                              |
| `content` text         | `body` TEXT                            | Renamed    |                                                              |
| `datetime` timestamptz | `created_at` TIMESTAMPTZ               | Renamed    | (Split)                                                      |
| `datetime` timestamptz | `updated_at` TIMESTAMPTZ               | Renamed    | (Split)                                                      |
| `viewed` boolean       | `data` JSONB                           | Renamed    | bool → json (Merged, Type changed)                           |
| `removed` boolean      | `data` JSONB                           | Renamed    | bool → json (Merged, Type changed)                           |
| `important` boolean    | `priority` enum:notification\_priority | Renamed    | Now a fixed value list (notification\_priority) (Value list) |
| `start_at` timestamptz | `data` JSONB                           | Renamed    | timestamp → json (Merged, Type changed)                      |
| `url` varchar          | `action_url` TEXT                      | Renamed    |                                                              |

* Swap the 10 renamed fields and point `FROM` at `notifications`.
* Re-key 2 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `notifications` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_notification.
SELECT
  t.id,         -- was id
  t.metadata,   -- was id
  t.title,      -- was text
  t.body,       -- was content
  t.created_at, -- was datetime
  t.updated_at, -- was datetime
  t.data,       -- was viewed
  t.priority,   -- was important
  t.user_id,    -- was user_id
  t.action_url  -- was url
FROM notifications t
WHERE t.deleted_at IS NULL;
```

#### notifications\_outbound

**notifications\_outbound** → `notifications` · *replaced* · 20 confirmed fields (Renamed 16 · ID changed 4)

Represents a custom notification based on system data.

> The rules engine was rebuilt. The two lookup tables for type and status became plain enum/text columns, which is simpler and fine.

![Where the 20 confirmed fields of notifications\_outbound went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2F3BA6DfBPphDNkMZ2BNVM%2Fflow-notifications-outbound.png?alt=media)

| Medtrics Classic field              | Oracle                   | Outcome    | Note                                             |
| ----------------------------------- | ------------------------ | ---------- | ------------------------------------------------ |
| `id` integer                        | `id` UUID                | ID changed | Integer link → UUID (Split)                      |
| `created_by_id` integer             | `created_by` UUID        | ID changed | Integer link → UUID pointing to profiles (Split) |
| `created_by_id` integer             | `user_id` UUID           | ID changed | Integer link → UUID pointing to profiles (Split) |
| `lottery_id` integer                | `metadata` JSONB         | ID changed | Integer link → UUID (Merged)                     |
| `id` integer                        | `metadata` JSONB         | Renamed    | int → json (Split, Merged, Type changed)         |
| `message` text                      | `body` TEXT              | Renamed    |                                                  |
| `run_at` timestamptz                | `data` JSONB             | Renamed    | timestamp → json (Merged, Type changed)          |
| `portal_created_in` text            | `metadata` JSONB         | Renamed    | text → json (Merged, Type changed)               |
| `created_date` timestamptz          | `created_at` TIMESTAMPTZ | Renamed    |                                                  |
| `interval` integer                  | `metadata` JSONB         | Renamed    | int → json (Merged, Type changed)                |
| `start_sending` timestamptz         | `data` JSONB             | Renamed    | timestamp → json (Merged, Type changed)          |
| `stop_sending` timestamptz          | `data` JSONB             | Renamed    | timestamp → json (Split, Merged, Type changed)   |
| `stop_sending` timestamptz          | `expires_at` TIMESTAMPTZ | Renamed    | (Split)                                          |
| `subject` text                      | `title` TEXT             | Renamed    |                                                  |
| `roles` ARRAY                       | `data` JSONB             | Renamed    | array → json (Merged, Type changed)              |
| `updated_date` timestamptz          | `updated_at` TIMESTAMPTZ | Renamed    |                                                  |
| `cc_email` varchar                  | `metadata` JSONB         | Renamed    | text → json (Merged, Type changed)               |
| `reply_to` varchar                  | `metadata` JSONB         | Renamed    | text → json (Merged, Type changed)               |
| `sender_name` varchar               | `metadata` JSONB         | Renamed    | text → json (Merged, Type changed)               |
| `exclude_users_with_action` boolean | `metadata` JSONB         | Renamed    | bool → json (Merged, Type changed)               |

* Swap the 16 renamed fields and point `FROM` at `notifications`.
* Re-key 4 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `notifications` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_outbound.
SELECT
  t.id,         -- was id
  t.metadata,   -- was id
  t.body,       -- was message
  t.data,       -- was run_at
  t.created_at, -- was created_date
  t.expires_at, -- was stop_sending
  t.created_by, -- was created_by_id
  t.user_id,    -- was created_by_id
  t.title,      -- was subject
  t.updated_at  -- was updated_date
FROM notifications t
WHERE t.deleted_at IS NULL;
```

#### notifications\_outboundemail

**notifications\_outboundemail** → `notifications` · *split* · 11 confirmed fields (Renamed 9 · ID changed 2)

A criteria for Outbound email message.

> One 'was it sent' row became a full outbound queue plus a delivery ledger plus provider webhooks plus click tracking.

![Where the 11 confirmed fields of notifications\_outboundemail went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FpUwXRujksfKBFuCxVrrJ%2Fflow-notifications-outboundemail.png?alt=media)

| Medtrics Classic field       | Oracle                   | Outcome    | Note                                           |
| ---------------------------- | ------------------------ | ---------- | ---------------------------------------------- |
| `id` integer                 | `id` UUID                | ID changed | Integer link → UUID (Split)                    |
| `user_id` integer            | `user_id` UUID           | ID changed | Integer link → UUID pointing to profiles       |
| `id` integer                 | `metadata` JSONB         | Renamed    | int → json (Split, Merged, Type changed)       |
| `outbound_subject` varchar   | `title` TEXT             | Renamed    |                                                |
| `outbound_objects` ARRAY     | `data` JSONB             | Renamed    | array → json (Type changed)                    |
| `date_to_send` timestamptz   | `created_at` TIMESTAMPTZ | Renamed    | (Split)                                        |
| `date_to_send` timestamptz   | `metadata` JSONB         | Renamed    | timestamp → json (Split, Merged, Type changed) |
| `date_to_send` timestamptz   | `updated_at` TIMESTAMPTZ | Renamed    | (Split)                                        |
| `outbound_contents` ARRAY    | `body` TEXT              | Renamed    | array → text (Type changed)                    |
| `outbound_attachments` ARRAY | `metadata` JSONB         | Renamed    | array → json (Merged, Type changed)            |
| `email_sent` boolean         | `metadata` JSONB         | Renamed    | bool → json (Merged, Type changed)             |

* Swap the 9 renamed fields and point `FROM` at `notifications`.
* Re-key 2 ID fields. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `notifications` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_outboundemail.
SELECT
  t.id,         -- was id
  t.metadata,   -- was id
  t.title,      -- was outbound_subject
  t.data,       -- was outbound_objects
  t.created_at, -- was date_to_send
  t.updated_at, -- was date_to_send
  t.body,       -- was outbound_contents
  t.user_id     -- was user_id
FROM notifications t
WHERE t.deleted_at IS NULL;
```

#### notifications\_outboundstatus

**notifications\_outboundstatus** → `notifications` · *replaced* · 2 confirmed fields (Renamed 1 · ID changed 1)

Type that will be used to notificate the users.

> The rules engine was rebuilt. The two lookup tables for type and status became plain enum/text columns, which is simpler and fine.

![Where the 2 confirmed fields of notifications\_outboundstatus went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FyInNd5Fi9Fy0mzkGKzsX%2Fflow-notifications-outboundstatus.png?alt=media)

| Medtrics Classic field | Oracle           | Outcome    | Note                                                                                                                |
| ---------------------- | ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------- |
| `id` integer           | `id` UUID        | ID changed | Integer ID replaced by a new UUID. Medtrics Classic → new ID crosswalk is kept by the migration (see Keys & joins). |
| `name` varchar         | `metadata` JSONB | Renamed    | text → json (Type changed)                                                                                          |

* Swap the 1 renamed field and point `FROM` at `notifications`.
* Re-key 1 ID field. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `notifications` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_outboundstatus.
SELECT
  t.id,       -- was id
  t.metadata  -- was name
FROM notifications t
WHERE t.deleted_at IS NULL;
```

#### notifications\_outboundtypes

**notifications\_outboundtypes** → `notifications` · *replaced* · 3 confirmed fields (Renamed 2 · ID changed 1)

Type that will be used to notificate the users.

> The rules engine was rebuilt. The two lookup tables for type and status became plain enum/text columns, which is simpler and fine.

![Where the 3 confirmed fields of notifications\_outboundtypes went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FQwCkqIfimsXBmVxUb9U2%2Fflow-notifications-outboundtypes.png?alt=media)

| Medtrics Classic field | Oracle                                 | Outcome    | Note                                                                                                                |
| ---------------------- | -------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------- |
| `id` integer           | `id` UUID                              | ID changed | Integer ID replaced by a new UUID. Medtrics Classic → new ID crosswalk is kept by the migration (see Keys & joins). |
| `name` varchar         | `category` enum:notification\_category | Renamed    | Now a fixed value list (notification\_category) (Split, Value list)                                                 |
| `name` varchar         | `metadata` JSONB                       | Renamed    | text → json (Split, Type changed)                                                                                   |

* Swap the 2 renamed fields and point `FROM` at `notifications`.
* Re-key 1 ID field. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `notifications` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was notifications_outboundtypes.
SELECT
  t.id,       -- was id
  t.category, -- was name
  t.metadata  -- was name
FROM notifications t
WHERE t.deleted_at IS NULL;
```

### IRIS reporting

2 tables, 13 confirmed fields: Unchanged 6 · Renamed 5 · ID changed 2.

#### iris\_irislog

**iris\_irislog** → `iris_logs` · *split* · 7 confirmed fields (Unchanged 3 · Renamed 3 · ID changed 1)

Audit trail for IRIS report generation and data operations.

> The simple 'is it running / did it fail' log survives as iris\_logs; the real orchestration record with source hash, counts and result summary is reporting\_sync\_jobs.

![Where the 7 confirmed fields of iris\_irislog went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2FtmVWYmi8XUOFEW2RhXOj%2Fflow-iris-irislog.png?alt=media)

| Medtrics Classic field     | Oracle                     | Outcome    | Note                |
| -------------------------- | -------------------------- | ---------- | ------------------- |
| `id` integer               | `id` UUID                  | ID changed | Integer link → UUID |
| `updated_at` timestamptz   | `completed_at` TIMESTAMPTZ | Renamed    | (Split)             |
| `created_date` timestamptz | `created_at` TIMESTAMPTZ   | Renamed    | (Split)             |
| `created_date` timestamptz | `started_at` TIMESTAMPTZ   | Renamed    | (Split)             |
| `updated_at` timestamptz   | `updated_at` TIMESTAMPTZ   | Unchanged  | (Split)             |
| `fail_message` text        | `fail_message` TEXT        | Unchanged  |                     |
| `is_running` boolean       | `is_running` BOOLEAN       | Unchanged  |                     |

* Swap the 3 renamed fields and point `FROM` at `iris_logs`.
* Re-key 1 ID field. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `iris_logs` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was iris_irislog.
SELECT
  t.id,           -- was id
  t.completed_at, -- was updated_at
  t.updated_at,   -- was updated_at
  t.fail_message, -- was fail_message
  t.is_running,   -- was is_running
  t.created_at,   -- was created_date
  t.started_at    -- was created_date
FROM iris_logs t
WHERE t.deleted_at IS NULL;
```

#### iris\_iristesttype

**iris\_iristesttype** → `iris_validation_types` · *split* · 6 confirmed fields (Unchanged 3 · Renamed 2 · ID changed 1)

IRIS validation rule definitions from Django constants.

> Medtrics Classic had a per-program error count. Oracle keeps the rollup (iris\_data\_tests, now correctly keyed by fiscal year) and adds a per-record result row so a user can see which resident failed which rule.

![Where the 6 confirmed fields of iris\_iristesttype went](https://2912658775-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxpbJErq8GWWHPPkzmpv3%2Fuploads%2F15Q270yTHWIR8eKexUxb%2Fflow-iris-iristesttype.png?alt=media)

| Medtrics Classic field      | Oracle                      | Outcome    | Note                |
| --------------------------- | --------------------------- | ---------- | ------------------- |
| `id` integer                | `id` UUID                   | ID changed | Integer link → UUID |
| `name` varchar              | `code` TEXT                 | Renamed    | (Split)             |
| `name` varchar              | `validation_scope` TEXT     | Renamed    | (Split)             |
| `name` varchar              | `name` TEXT                 | Unchanged  | (Split)             |
| `description` text          | `description` TEXT          | Unchanged  |                     |
| `is_financial_test` boolean | `is_financial_test` BOOLEAN | Unchanged  |                     |

* Swap the 2 renamed fields and point `FROM` at `iris_validation_types`.
* Re-key 1 ID field. Join people on `email`, not on old IDs.
* Add `WHERE deleted_at IS NULL`: `iris_validation_types` keeps deleted rows.

```sql
-- Starter query: confirmed fields only. Was iris_iristesttype.
SELECT
  t.id,                -- was id
  t.code,              -- was name
  t.name,              -- was name
  t.validation_scope,  -- was name
  t.description,       -- was description
  t.is_financial_test  -- was is_financial_test
FROM iris_validation_types t
WHERE t.deleted_at IS NULL;
```


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.mymedtrics.com/get-started/classic-data-mapping/admin-messages-and-reports.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
