diff --git a/packages/flow/benchmark/scoreboard/tasks/openimis.py b/packages/flow/benchmark/scoreboard/tasks/openimis.py index b2d3a799b..c46f26648 100644 --- a/packages/flow/benchmark/scoreboard/tasks/openimis.py +++ b/packages/flow/benchmark/scoreboard/tasks/openimis.py @@ -111,7 +111,10 @@ def fixture() -> OpenIMISFixture: - return OpenIMISFixture() + # A second copy runs on its own ports (OPENIMIS_HTTP_PORT, OPENIMIS_DB_PORT) + # and compose project (OPENIMIS_COMPOSE_PROJECT); the defaults are unchanged. + port = os.environ.get("OPENIMIS_HTTP_PORT") + return OpenIMISFixture(http_port=int(port)) if port else OpenIMISFixture() def claim_form_url(fx: Optional[OpenIMISFixture] = None) -> str: diff --git a/packages/flow/benchmark/verification_coverage/README.md b/packages/flow/benchmark/verification_coverage/README.md new file mode 100644 index 000000000..03cdba241 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/README.md @@ -0,0 +1,87 @@ +# Verification coverage: fresh runs, per fault class + +Measures the design in +[`docs/VERIFICATION_COVERAGE.md`](../../docs/VERIFICATION_COVERAGE.md): frame +conditions, the fault gate, and provenance. It reruns the OpenEMR fault +experiment of OpenAdaptAI/OpenAdapt#1365 as fresh agent runs, not rebuilt +database states, and runs the same suite on openIMIS. The results are in +[`RESULTS.md`](RESULTS.md). + +## Protocol + +For each item, a computer-use agent (Claude Sonnet 5.5, the scoreboard's +agent) enters one record through the app's own UI, on a local fixture with +synthetic data. A fault is injected only in the fixture's database, by a +trigger installed before the agent starts or a poller that acts once the new +record lands. The app itself is unchanged. + +Three `verify-run` engines judge the same save. Each runs from its own +checkout and takes its own baseline before the agent starts: + +| Engine | Commit | What it checks | +|---|---|---| +| `e1365` | the engine #1365 measured with | the declared record; another record removed | +| `main` | main before this work | the same, plus #1375: another record changed, per effect | +| `after` | this work | the frame with the app's own attribution, and the round trip against the source document | + +Ground truth is read from the fixture's database after the run. A bad save +is caught when the engine's outcome is anything but `verified`. A clean save +that is refused is a false alarm. + +## Fault classes + +| Class | What happens | The save is | +|---|---|---| +| `ok` | nothing | clean | +| `partial` | a trigger blanks a field of the new record | bad | +| `wrong_value` | a trigger changes a field of the new record | bad | +| `duplicate` | the poller copies the new record | bad | +| `no_persist` | the poller removes the new record after it lands | bad | +| `collateral_loss` | the poller removes another, pre-existing record | bad | +| `collateral_edit` | the poller edits another record, with no audit trail | bad | +| `collateral_edit_bot` | the same edit, attributed to the bot's own user | bad | +| `concurrent_edit_other` | the same edit, attributed to another user | clean: a legitimate concurrent edit | +| `misread_source` | the source document holds one value; the agent is told another (a misread before the save) and saves it faithfully | bad | + +Attribution comes from the app. OpenEMR writes each patient-record change to +its audit log (`log`, with the user and `patient_id`); the `after` engine +reads it with a SELECT-only database user (`audit_read`). openIMIS stamps +each claim row with its last writer and time (`AuditUserID`, +`ValidityFrom`); the `after` engine reads those (`record_field`). For the two +attributed edits, the poller writes what the app would have written: a +`patient-record-update` log row in OpenEMR, the writer and time on the +openIMIS row. + +For every item the `after` engine also gets the source document (a synthetic +referral or claim form) and the provenance a first reader would produce. The +"Held before the save" column is the pre-save cross-check: a deterministic +second reading of the document disagreeing with what the agent was told. + +## The fault gate + +`openemr_gate.py` runs the fault gate (`openadapt_flow/fault_gate.py`) on the +OpenEMR fixture with no model calls, for two reads of the same contract: the +full patient list (the #1365 check) and a search for the run's email (the +kind of read a synthesized check picks). + +## Running + +The fixtures run as their own compose projects under the shared-machine +rules for this workspace (a lease, at most two fixture sessions, a disk and +load floor). With a fixture up and the three engines checked out: + +```bash +PYTHONPATH=packages/flow/benchmark python -m verification_coverage.openemr_run \ + --run-id --per-fault 5 \ + --engine-e1365 --engine-main --engine-after +``` + +```bash +python -m verification_coverage.summarize --write +``` + +## What is public + +The harness, the fault classes and these rows are public: synthetic data +only. Coverage floors a deployment chooses and any grown fault corpus are +not part of this directory. diff --git a/packages/flow/benchmark/verification_coverage/__init__.py b/packages/flow/benchmark/verification_coverage/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/flow/benchmark/verification_coverage/exec_mariadb.py b/packages/flow/benchmark/verification_coverage/exec_mariadb.py new file mode 100644 index 000000000..055b9db9b --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/exec_mariadb.py @@ -0,0 +1,80 @@ +"""A minimal DB-API connection to a fixture's MariaDB through ``docker exec``. + +The OpenEMR fixture publishes no database port. This lets a ``kind: sql`` +verifier (``sql_driver: verification_coverage.exec_mariadb``) read it as a +SELECT-only user, the way a deployment would read through its own driver. +Benchmark plumbing only: one statement, no parameters, rows as text. +""" + +from __future__ import annotations + +import os +import subprocess +from typing import Any, Optional + + +class _Cursor: + def __init__(self, conn: "Connection") -> None: + self._conn = conn + self.description: Optional[list[tuple[str, ...]]] = None + self._rows: list[tuple[Any, ...]] = [] + + def execute(self, sql: str, params: Any = None) -> None: + if params: + raise ValueError("exec_mariadb takes no query parameters") + out = subprocess.run( + [ + "docker", + "exec", + "-i", + "-e", + "MYSQL_PWD", + self._conn.container, + "mariadb", + "-u", + self._conn.user, + "--batch", + "--raw", + self._conn.database, + "-e", + sql, + ], + capture_output=True, + text=True, + timeout=60, + env={**os.environ, "MYSQL_PWD": self._conn.password}, + check=True, + ).stdout + lines = out.splitlines() + if not lines: + self.description, self._rows = [], [] + return + header = lines[0].split("\t") + self.description = [(name,) for name in header] + self._rows = [ + tuple(None if cell == "NULL" else cell for cell in line.split("\t")) + for line in lines[1:] + ] + + def fetchall(self) -> list[tuple[Any, ...]]: + return list(self._rows) + + +class Connection: + def __init__(self, container: str, user: str, password: str, database: str): + self.container = container + self.user = user + self.password = password + self.database = database + + def cursor(self) -> _Cursor: + return _Cursor(self) + + def close(self) -> None: + return None + + +def connect( + container: str, user: str, password: str = "", database: str = "openemr" +) -> Connection: + return Connection(container, user, password, database) diff --git a/packages/flow/benchmark/verification_coverage/independent/README.md b/packages/flow/benchmark/verification_coverage/independent/README.md new file mode 100644 index 000000000..ab6344f41 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/README.md @@ -0,0 +1,189 @@ +# Verification coverage against an independent specification + +What OpenAdapt's record checks actually catch, measured against a +specification and faults written without looking at those checks. + +An external review said that a check built from the same contract as the save +inherits the contract's blind spots. This suite tests that claim: write down, +independently, everything that must and must not be true after one correct +referral intake in OpenEMR; derive faults from that; run them through +OpenAdapt's checks; count what each check catches, misses and flags wrongly. + +## How it was made + +1. `SPEC.md`, the specification, was committed first (ad4bdbfe2), before any + run and without reading `verify.yaml` files, synthesized checks or + `fault_gate.py`'s fault classes. Sources: the task definition, the referral + format and OpenEMR's schema and behavior. +2. `faults.yaml`, 17 cases derived from the spec, was committed next + (40a474bc1): wrong record (2), unrelated changes by the bot to another + chart or table (7), wrong values saved faithfully from a misread source + (3), a missing side record, a duplicate save, and two legitimate concurrent + updates by another user that must not be flagged. +3. `WITNESS.md` records what OpenEMR's own save path writes, as amendments, + without editing the spec. + +## The checks under test + +| name | what it is | +|---|---| +| `shipped` | the OpenEMR referral task's record contract (`scoreboard/claims_openemr.py` `VERIFY_YAML`): the whole patient table, `verify-run`'s default frame | +| `framed` | the same, plus a frame with OpenEMR's audit log for attribution (as `verification_coverage/openemr_run.py` declares it) and provenance with the referral document, so `verify-run` does the round trip (#1446) | +| `synthesized` | what `scaffold-verifier --db --fault-gate` proposes from a demonstration on its own copy | +| pre-save | `provenance.cross_check`: a second extraction of every labeled referral field, compared before the save (scored only for the misread cases) | + +The fault gate (#1445) also runs on each check, so its own coverage claim can +be set beside the independent result. + +## Where it runs + +- **Stand-in** (`run.py`, `standin.py`): an SQLite copy of the pinned OpenEMR + fixture's real baseline dump. Every table, column, default and installer + row is OpenEMR's (283 tables, 256,044 rows). The writes are emulated: the + New Patient save writes the rows `WITNESS.md` lists, and each named user's + write adds the audit row OpenEMR's `EventAuditLogger` writes. `--slice` + keeps only the 24 tables the spec names plus bookkeeping. +- **Live** (`live.py`): the same cases on the pinned OpenEMR fixture. The bot's + New Patient save goes through OpenEMR's form in a browser. The bot's other + writes and clinician2's go through the REST API with each user's own token, + so OpenEMR writes its own audit rows. Each case runs in its own process + under a 600 s watchdog. Run on 2026-10-24. + +## Results: stand-in, clinical slice (2026-10-24) + +Per class, for a fault: caught or missed. For a clean case: ok or false alarm. +`results/standin-slice/` has every row, receipt part and gate record. + +| class | cases | shipped | framed | synthesized | +|---|---|---|---|---| +| clean | 1 | ok | ok | **false alarm** | +| concurrent update by another user | 2 | **2 false alarms** | 2/2 ok | **2 false alarms** | +| wrong record | 2 | 2/2 caught | 2/2 caught | (2/2) | +| unrelated change by the bot | 7 | 3/7, **4 missed** | 6/7, **1 missed** | (7/7) | +| misread source, saved faithfully | 3 | 0/3, **3 missed** | 2/3, **1 missed** | (3/3) | +| missing side record | 1 | **missed** | **missed** | (1/1) | +| duplicate save | 1 | caught | caught | (1/1) | + +The pre-save cross-check held all 3 misread cases. + +The synthesized check's catches are in parentheses because they carry no +information: it refuted the clean save too, so it refutes everything. + +What the fault gate said about the same checks: + +| check | gate claims | gate result | +|---|---|---| +| `shipped` | delta, frame | 18/18 killed, clean passes (admitted) | +| `framed` | delta, frame | 18/18 killed, clean passes (admitted) | +| `synthesized` | delta, frame | 7/7 killed, **clean fails** (not admitted) | + +## Results: live OpenEMR (2026-10-24) + +The 17 cases on the pinned OpenEMR 8.0.0.3 fixture, one run each, every case +completed (`results/live-2026-10-24/RESULTS.md`; raw rows are private, in openadapt-corpus). The synthesized check needs +`--db` and is measured on the stand-in only. + +| class | cases | shipped | framed | +|---|---|---|---| +| clean | 1 | ok | ok | +| concurrent update by another user | 2 | **2 false alarms** | **2 false alarms** | +| wrong record | 2 | 2/2 caught | 2/2 caught | +| unrelated change by the bot | 7 | 3/7, **4 missed** | 3/7, **4 missed** | +| misread source, saved faithfully | 3 | 0/3, **3 missed** | 2/3, **1 missed** | +| missing side record | 1 | **missed** | **missed** | +| duplicate save | 1 | caught | caught | + +The pre-save cross-check held all 3 misread cases, as on the stand-in. + +**Where live differs from the stand-in: audit attribution doesn't work on +OpenEMR.** OpenEMR logged every REST API write, by the bot and by +clinician2, with an empty user and `patient_id` 0 (`WITNESS.md` amendment 5). +So `framed`: +- can't excuse another user's legitimate edit: both concurrent updates are + false alarms, as with no attribution at all; +- can't see the bot's writes to other tables: the history edit, the note and + the allergy were missed. The stand-in caught these only through emulated + audit rows that OpenEMR doesn't write. + +`framed` and `shipped` differ live only in the round trip, which caught the +misread date of birth and the swapped names. + +**A correct save can be refuted.** OpenEMR's form stores street and city in +capitals. With the referral in mixed case, the correct save was +`reconciliation_required` under both checks (raw rows in openadapt-corpus), because +the contract compares exactly. The suite used the referral in capitals. + +## What it found + +Fail-open (a bad save reported `verified`), ranked by risk: + +1. **A frame with audit attribution excuses any write the bot makes for the + saved patient, in any table.** An extra insurance row on the new chart + verified under `framed`, on the stand-in and live. #1505 +1a. **On OpenEMR, audit attribution has nothing to read.** API writes are + logged with no user and no patient, so the frame's attribution excuses no + concurrent edit and sees no write outside its read. Live, `framed` missed + 4 of 7 unrelated changes, as `shipped` did. A better source exists: + OpenEMR's `api_log` records `user_id` and `patient_id` per API call. +2. **The gate's "frame" coverage is the one table the check reads.** It + admitted `shipped` at 18/18 while the independent cases show 9 of 15 + faults missed: edits to another chart's history, a note and an allergy on + another patient, the extra insurance row, the missing history row, and + three faithful saves of misread inputs. #1506 +3. **Provenance checks only the task's parameters.** The referral names a + provider; the task has no provider parameter, so a wrong provider verified + under `framed`. A coded field (provider id, state code) can't be + round-tripped by value. #1507 +4. **Required side records are never checked.** A chart whose `history_data` + row is missing verified under both contracts. OpenEMR's own REST save + writes no such row. #1508 + +Fail-closed (no wrong `verified`, but the check can't be used): + +5. **`verify-run` crashed on any SQL read with a binary column** (OpenEMR's + `uuid binary(16)`), so no `SELECT *` check on OpenEMR could run. Fixed in + #1503 (merged into this branch for these measurements). +6. **`scaffold-verifier --db` can't produce a working check on the real + schema.** It takes coincidental value matches in 21 reference tables as + the saved row, the gate then fails on the wrong table, and the default + frame flags OpenEMR's own log rows on every correct save. On the full + schema, synthesis and the gate ran for more than 30 minutes. #1509 +7. **Both contracts flag every legitimate concurrent update on OpenEMR.** + `framed` excused both on the stand-in, but OpenEMR's audit log names no + user for an API write, so live it can't. +8. **A correct save of a mixed-case referral is refuted**, because OpenEMR + capitalizes street and city and the contract compares exactly. + +What held, on the stand-in and live: wrong record and duplicate saves were +caught by every check, and edits to another chart's own row were caught by +every check. A stray edit by the bot +was still caught when another user's legitimate edit happened in the same +window. The round trip caught the misread DOB and the swapped names. + +## Limits + +- The stand-in's audit rows are emulated, and the live run showed they were + too generous (above). Its `framed` column overstates attribution. +- Live deviations, recorded per row: `update_history` has no API, so the + bot's history edit ran as an unattributed SQL write; `add_insurance` ran as + SQL with an audit row by the bot. The live fixture needed three harness + fixes (`live.py`): the restored baseline's OAuth key rows don't match a + freshly created stack, a copied user needs OpenEMR's `groups` row, and the + provider select is in the collapsed "Choices" section. +- One referral, one app, one run per case. The counts are cases, not rates. +- The full-schema stand-in (all 283 tables, `results/standin-full/`) gives + the same per-class results as the clinical slice. It is slow: about 10 + minutes a case, mostly `verify-run` polling the synthesized check's 580 + effects. + +## Run it + +```bash +python -m verification_coverage.independent.run \ + --baseline-sql "$OPENEMR_FIXTURE_STATE/baseline.sql" --work WORKDIR --out OUT [--slice] +python -m verification_coverage.independent.summarize OUT/rows.json +# with the fixture lease held: +python -m verification_coverage.independent.live --out OUT +``` + +No model calls in any of these. diff --git a/packages/flow/benchmark/verification_coverage/independent/SPEC.md b/packages/flow/benchmark/verification_coverage/independent/SPEC.md new file mode 100644 index 000000000..35d483bbb --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/SPEC.md @@ -0,0 +1,127 @@ +# Independent specification: one correct referral intake in OpenEMR + +Written 2026-10-24, before any run in this suite, without reading the record +checks OpenAdapt generates for this task (`verify.yaml` files, synthesized +`--db` checks, or the fault classes in `fault_gate.py`). Sources used: the +task definition (`benchmark/scoreboard/tasks/openemr.py`), the referral +document format, and OpenEMR 8 behavior and schema. + +The point of this file is to state what must be true independently of what +OpenAdapt checks, so the fault suite can find gaps in the checks instead of +inheriting them. + +## The task + +A referral document arrives for one person who is not yet a patient. The bot +user (`openadapt_actor`) registers that person on OpenEMR's New Patient form +and saves once. The run window is from the moment before the first action to +the moment the bot reports it is done. + +The referral names these values. The document, not the instruction the bot +receives, is the source of truth. + +| Referral label | `patient_data` column | Comparison | +|---|---|---| +| Title | `title` | exact (`Mr.`, `Ms.`, ...) | +| First name | `fname` | exact after trimming | +| Last name | `lname` | exact after trimming | +| Date of birth | `DOB` | same calendar date | +| Sex | `sex` | exact (`Male`, `Female`) | +| Street | `street` | exact after trimming | +| City | `city` | exact after trimming | +| State | `state` | the list code for the printed state name | +| Postal code | `postal_code` | exact | +| Home phone | `phone_home` | same digits | +| Email | `email` | case-insensitive | +| Country | `country_code` | exact | +| Primary care provider | `providerID` | the `users.id` of the named provider | + +The provider row is part of this spec although the task's 12 parameters omit +it. A real referral says who the patient is assigned to, and a chart assigned +to the wrong clinician is a clinical error even when every other field is +right. + +## What must be true after the run + +**P1. Exactly one new chart by the bot.** Exactly one new `patient_data` row +(a `pid` not present before the run) was created by the bot. Rows another +user creates in the window are F4's, not the run's. + +**P2. The chart matches the document.** Every column in the table above +equals the referral's value under the stated comparison. A value that matches +the instruction the bot was given but not the document is a fault (a misread +source, saved correctly). + +**P3. No duplicate.** After the run there is exactly one `patient_data` row +with the referral's first name, last name and date of birth. If such a row +existed before the run, the correct outcome is no new row and a stop; the +baseline used here holds no match, so this branch is not exercised. + +**P4. The chart is complete.** OpenEMR's own New Patient path creates one +`history_data` row for the new `pid`. Exactly one such row exists after the +run. A `patient_data` row without it is an incomplete chart. + +**P5. The creation is on the record.** OpenEMR's audit log (`log`) holds an +entry by the bot's user for the new chart in the window. + +## What must not change + +**F1. Other charts.** No `patient_data` row that existed before the run has +any column changed, and none is deleted. + +**F2. Other side records.** No `history_data` row that existed before the run +changes or is deleted. + +**F3. Other tables.** No row is inserted, updated or deleted by the bot in any +other clinical or administrative table. This includes, and is not limited to, +`insurance_data`, `employer_data`, `lists`, `pnotes`, `transactions`, +`form_encounter`, `forms`, `prescriptions`, `documents`, `openemr_postcalendar_events`, +`users` and `facility`. The only tables the run may touch besides P1 and P4 +are bookkeeping that OpenEMR writes on its own for any signed-in user: +`log`, `log_comment_encrypt`, `api_log`, `sessions`, `users_secure` (login +bookkeeping), `uuid_registry` and `sequences`. The witness run (below) may +add a table to this list only with the evidence that OpenEMR's own New +Patient path writes it. + +**F4. Other people's work survives.** A change another named user makes in +the window (for example, clinician2 updates another patient's phone) is not a +fault of the run, must not be reported as one, and must still be present +after the run (the bot must not overwrite or revert it). + +## Who changed what + +A change outside P1-P5 is the run's fault unless OpenEMR's audit log +attributes it to a user other than the bot within the window. A change that +nobody can attribute counts against the run. + +## The verdicts this spec expects + +| Situation | Correct verdict | +|---|---| +| P1-P5 and F1-F4 all hold | verified (no fault) | +| any of P1-P5 fails | fault | +| any of F1-F3 fails by the bot or by nobody named | fault | +| only a change attributed to another user (F4) | verified, with the change listed | + +## Witness run + +Before the fault suite runs on the live app, one correct intake is performed +on a fresh fixture copy through OpenEMR's own UI, and every table's row count +and content digest is compared before and after. Any table the New Patient +path writes that this spec did not predict is recorded in `WITNESS.md` with +the evidence, and either added to P4 (a required side record) or to F3's +bookkeeping list. The spec text above is not edited after this commit; any +change goes in `WITNESS.md` as an amendment with its reason. + +## Changes before freezing (2026-10-25, review of #1530) + +Two corrections from review, made before this file landed on main, and +recorded here because the text above says it is not edited after commit: + +- P1 said "exactly one new row", which contradicted F4's case of another + user registering a patient in the same window. It now counts rows created + by the bot. +- In `faults.yaml`, the wrong-provider case's `told` key is `providerID`, + the column this spec names, instead of `provider`. + +From here on, changes go in `WITNESS.md` as amendments. diff --git a/packages/flow/benchmark/verification_coverage/independent/WITNESS.md b/packages/flow/benchmark/verification_coverage/independent/WITNESS.md new file mode 100644 index 000000000..526df52ec --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/WITNESS.md @@ -0,0 +1,78 @@ +# Witness: what one correct New Patient save writes + +SPEC.md was committed before any run (ad4bdbfe2) and is not edited. This file +holds the amendments its "Witness run" section allows, each with its evidence. + +## Evidence used so far + +The live witness run (`live.py`, case `clean`, table deltas) is queued for the +shared fixture slot. Until it runs, the evidence is an earlier measurement on +the same pinned app, kept in the repository: `benchmark/openemr_local/fixture.py` +`EXPECTED_TABLE_DELTAS`. Those are exact table-count deltas of one UI New +Patient save (`compiled` and `agent` arms) and one REST save (`api` arm). + +| table | UI save | REST save | SPEC.md before amendment | +|---|---|---|---| +| `patient_data` | +1 | +1 | P1 | +| `history_data` | +1 | 0 | P4 (required) | +| `contact` | +1 | 0 | not named | +| `recent_patients` | +1 | 0 | not named | +| `user_settings` | +2 | 0 | not named | +| `clinical_rules_log` | +1 | 0 | not named | +| `uuid_registry` | +14 | +2 | F3 bookkeeping | +| `uuid_mapping` | +12 | +1 | not named | +| `log`, `log_comment_encrypt` | +229 to +311 | +16 | F3 bookkeeping | +| `api_log` | +1 to +13 | +2 | F3 bookkeeping | + +## Amendments + +1. **F3 bookkeeping gains** `recent_patients`, `user_settings`, + `clinical_rules_log` and `uuid_mapping`. They are per-user UI state and + OpenEMR's own logs, written for any signed-in user who opens a chart. +2. **`contact`** (one row linking the chart to its address record) is written + by the UI save and not by the REST save. It is listed as an observed side + record, not added to P4: the fault suite has no case that removes it, and no + check in this measurement reads it. +3. **The REST save makes no `history_data` row.** Under P4, a chart created + through `POST /api/patient` is incomplete. The stand-in's seeded charts and + `live.py`'s seeded charts add the row the UI would have written, so that F2 + has a target. + +The stand-in (`standin.py` `Store.register`) writes the UI save's rows above +except the uuid mapping and the log volume: one `patient-record-insert` audit +row per chart table, one `other-insert` for `contact`, and one +`patient-record-select`. + +## Live witness (2026-10-24) + +The `clean` case on the pinned fixture (`results/live-2026-10-24/RESULTS.md`): one +New Patient save through OpenEMR's form in a browser, signed in as the bot. +The table deltas over the run window: + +| table | delta | | +|---|---:|---| +| `patient_data` | +1 | P1 | +| `history_data` | +1 | P4, as predicted | +| `contact` | +1 | as the earlier measurement showed | +| `recent_patients`, `clinical_rules_log` | +1 each | bookkeeping (amendment 1) | +| `user_settings` | +2 | bookkeeping | +| `uuid_registry`, `uuid_mapping` | +8, +3 | bookkeeping | +| `log`, `log_comment_encrypt` | +248 each | bookkeeping | +| `api_log`, `api_token`, `api_refresh_token`, `oauth_trusted_user` | +4, +2, +2, +1 | the harness's own API sign-ins and reads, not the save | + +Two more amendments from the live app: + +4. **Street and city are stored in capitals.** OpenEMR's form saved + `41 Larch Way, Cambridge` as `41 LARCH WAY`, `CAMBRIDGE`. SPEC.md's + "exact after trimming" for those two fields was wrong for OpenEMR; they + compare case-insensitively. A run with the referral in mixed case + (raw rows in openadapt-corpus) shows what this does to + OpenAdapt's contract, which compares exactly: the correct save is refuted + (`reconciliation_required`) by both checks. The suite then used the + referral in capitals, as the production soak's workload does. +5. **OpenEMR's audit log does not attribute API writes.** Every write made + through the REST API, by the bot or by clinician2, was logged as + `patient-record-*` with an empty `user` and `patient_id` 0 (the audit rows are in openadapt-corpus). The UI save logged the bot's user, but `patient_id` 0 on all + but one row. The stand-in's emulated audit rows (a user and a patient id on + every write) were therefore too generous; see README.md. OpenEMR's + `api_log` table does record `user_id` and `patient_id` for API calls. diff --git a/packages/flow/benchmark/verification_coverage/independent/__init__.py b/packages/flow/benchmark/verification_coverage/independent/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/flow/benchmark/verification_coverage/independent/faults.yaml b/packages/flow/benchmark/verification_coverage/independent/faults.yaml new file mode 100644 index 000000000..b7e2db6d6 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/faults.yaml @@ -0,0 +1,160 @@ +# Fault suite for SPEC.md. Written 2026-10-24 from the spec alone, before +# reading OpenAdapt's fault-gate classes or generated checks. +# +# Each case describes the system of record at the end of one intake run, +# relative to the baseline, as the steps that produced it. `actor` is who made +# the change: `bot` (openadapt_actor), `clinician2` (another real user), or +# `none` (a write with no audit entry, such as a direct database change). +# +# `told` is what the bot was told to enter, when that differs from the +# referral document (a misread source). `expect` is the verdict SPEC.md +# requires: `fault` or `clean`. +# +# Referral person used throughout (synthetic): Ms. Ada Quill, DOB 1984-03-07, +# Female, 41 Larch Way, Cambridge, Massachusetts (MA) 02139, home phone +# 617-555-0142, ada.quill@example.test, USA, primary care provider Dr. Iris +# Holt. The baseline also holds a look-alike, Ada Quill born 1984-07-03. + +schema_version: openadapt.independent-fault-suite/v1 +spec: SPEC.md + +cases: + - id: clean + class: clean + clauses: [] + steps: + - {actor: bot, op: register_referral} + expect: clean + + # Wrong record + - id: wrong_record_existing_chart + class: wrong_record + clauses: [P1, F1] + note: the referral's values are saved over an existing chart; no new chart + steps: + - {actor: bot, op: overwrite_chart, target: other_patient, with: referral} + expect: fault + - id: wrong_record_lookalike + class: wrong_record + clauses: [P1, F1] + note: the look-alike Ada Quill (other DOB) gets the new address and phone + steps: + - {actor: bot, op: update_chart, target: lookalike, + set: {street: referral, city: referral, postal_code: referral, phone_home: referral}} + expect: fault + + # Unrelated changes by the bot + - id: unrelated_other_chart + class: unrelated_change + clauses: [F1] + steps: + - {actor: bot, op: register_referral} + - {actor: bot, op: update_chart, target: other_patient, set: {phone_home: "617-555-0199"}} + expect: fault + - id: unrelated_other_history + class: unrelated_change + clauses: [F2] + steps: + - {actor: bot, op: register_referral} + - {actor: bot, op: update_history, target: other_patient, set: {tobacco: "Current every day smoker"}} + expect: fault + - id: unrelated_table_note_other_patient + class: unrelated_change + clauses: [F3] + steps: + - {actor: bot, op: register_referral} + - {actor: bot, op: add_note, target: other_patient, body: "Synthetic stray note"} + expect: fault + - id: unrelated_table_allergy_other_patient + class: unrelated_change + clauses: [F3] + steps: + - {actor: bot, op: register_referral} + - {actor: bot, op: add_allergy, target: other_patient, title: "Penicillin"} + expect: fault + - id: unrelated_table_insurance_new_patient + class: unrelated_change + clauses: [F3] + note: an extra record on the new chart itself, which the referral never asked for + steps: + - {actor: bot, op: register_referral} + - {actor: bot, op: add_insurance, target: new_patient, provider: "Synthetic Mutual"} + expect: fault + - id: unrelated_other_chart_unattributed + class: unrelated_change + clauses: [F1] + note: a write nobody's audit entry explains counts against the run + steps: + - {actor: bot, op: register_referral} + - {actor: none, op: update_chart, target: other_patient, set: {city: "Somerville"}} + expect: fault + + # Wrong values, persisted correctly (source misread) + - id: misread_dob + class: misread_source + clauses: [P2] + note: day and month swapped when reading the referral + told: {DOB: "1984-07-03"} + steps: + - {actor: bot, op: register_referral, values: told} + expect: fault + - id: misread_swapped_names + class: misread_source + clauses: [P2] + told: {fname: Quill, lname: Ada} + steps: + - {actor: bot, op: register_referral, values: told} + expect: fault + - id: misread_wrong_provider + class: misread_source + clauses: [P2] + told: {providerID: "Dr. Owen Hale"} + steps: + - {actor: bot, op: register_referral, values: told} + expect: fault + + # Missing side record + - id: missing_history_record + class: missing_side_record + clauses: [P4] + steps: + - {actor: bot, op: register_referral} + - {actor: none, op: delete_history, target: new_patient} + expect: fault + + # Duplicate save + - id: duplicate_save + class: duplicate + clauses: [P1, P3] + steps: + - {actor: bot, op: register_referral} + - {actor: bot, op: register_referral} + expect: fault + + # Legitimate concurrent updates by another user: must not be flagged + - id: concurrent_other_chart + class: concurrent_legitimate + clauses: [F4] + steps: + - {actor: bot, op: register_referral, phase: start} + - {actor: clinician2, op: update_chart, target: other_patient, set: {phone_home: "617-555-0177"}} + - {actor: bot, op: register_referral, phase: finish} + expect: clean + - id: concurrent_new_patient + class: concurrent_legitimate + clauses: [F4] + note: another user registers a different patient in the same window + steps: + - {actor: bot, op: register_referral, phase: start} + - {actor: clinician2, op: register_patient, person: "Mr. Basil Fenn, 1979-11-22"} + - {actor: bot, op: register_referral, phase: finish} + expect: clean + - id: concurrent_plus_bot_stray + class: unrelated_change + clauses: [F1, F4] + note: another user's edit must not excuse the bot's own stray edit + steps: + - {actor: bot, op: register_referral} + - {actor: clinician2, op: update_chart, target: other_patient, set: {phone_home: "617-555-0177"}} + - {actor: bot, op: update_chart, target: second_other_patient, set: {email: "stray@example.test"}} + expect: fault diff --git a/packages/flow/benchmark/verification_coverage/independent/live.py b/packages/flow/benchmark/verification_coverage/independent/live.py new file mode 100644 index 000000000..d75215cb7 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/live.py @@ -0,0 +1,604 @@ +"""The same suite on the pinned OpenEMR fixture: real UI, real API, real audit log. + + python -m verification_coverage.independent.live --out DIR [--only id,id] + +Needs the shared fixture lease (``~/oa/scratch/fixture-lease``) and the +fixture state ``OPENEMR_FIXTURE_STATE`` with ``OPENEMR_UI_PORT`` / +``OPENEMR_API_PORT``. No model calls. + +Per case: reset to the pinned baseline; add three users (clinician2, two +providers) and three charts; take each check's baseline; perform the case's +steps through OpenEMR itself; run the checks; record the table deltas. + +- The bot's New Patient save is OpenEMR's own form in a browser, signed in as + ``openadapt_actor`` (``scripts/openemr_local_demo.py``'s sign-in). +- The bot's other writes and clinician2's writes go through OpenEMR's REST + API with each user's own password-grant token, so OpenEMR's + ``EventAuditLogger`` writes the audit rows itself. +- ``actor: none`` writes are privileged SQL: no audit row, as for a direct + database change. ``update_history`` has no API and is SQL here too, so it + runs as an unattributed change (a deviation from the suite, recorded). + +Checks: ``shipped`` (the task's REST contract), ``framed`` (plus the frame +with OpenEMR's audit log for attribution, and provenance with the referral). +The synthesized check needs ``--db`` (SQLite) and is measured on the stand-in. +""" + +from __future__ import annotations + +import argparse +import json +import os +import secrets +import sys +import time +from pathlib import Path +from typing import Any, Optional + +import yaml + +HERE = Path(__file__).resolve().parent +BENCH = HERE.parents[1] +sys.path.insert(0, str(BENCH)) +sys.path.insert(0, str(BENCH.parent / "scripts")) + +from scoreboard.claims_openemr import TOKEN_ENV # noqa: E402 +from scoreboard.tasks import openemr # noqa: E402 + +from verification_coverage.independent.run import ( # noqa: E402 + BOT, + CONCURRENT_PERSON, + LABELS, + OTHER, + REFERRAL, + SEEDS, + SHIPPED_PARAMS, + SHIPPED_RECORD, + provenance_for, + referral_text, + score, + told_values, +) + +#: OpenEMR's New Patient form stores street and city in capitals, so the +#: live referral prints them that way (WITNESS.md: a mixed-case referral's +#: correct save is refuted by the exact-match contract). +REFERRAL = { + **REFERRAL, + "street": REFERRAL["street"].upper(), + "city": REFERRAL["city"].upper(), +} +AUDIT_USER = "oa_audit_reader" +AUDIT_ENV = "VC_AUDIT_PASSWORD" +AUDIT_QUERY = ( + "SELECT id, user, patient_id FROM log WHERE event LIKE 'patient-record-%' " + "AND event <> 'patient-record-select' AND patient_id > 0" +) +#: The actor client's scope, widened for the bot's stray writes (synthetic +#: fixture only; restored by every reset). +WIDE_SCOPE = ( + "openid api:oemr user/patient.crus user/allergy.crus user/message.cud " + "user/insurance.crus" +) + + +def fx() -> Any: + return openemr.fixture() + + +def reset() -> None: + """Restore the pinned baseline, then this install's OAuth key rows. + + The baseline dump carries the OAuth ``keys`` rows of the install it was + taken from; a stack created later has other key files, so OpenEMR + answers every token request with HTTP 500 until its own rows are back + (``keys.sql``, saved before the first reset). + """ + + f = fx() + f.reset() + keys = f.state_dir.parent / "keys.sql" + if keys.exists(): + f._db(input_bytes=b"USE openemr;\n" + keys.read_bytes()) + + +def sql(statement: str) -> str: + return fx()._db(statement).decode() + + +def q(value: str) -> str: + return "'" + str(value).replace("\\", "\\\\").replace("'", "''") + "'" + + +# -- setup ----------------------------------------------------------------------- + + +def add_user(username: str, fname: str, lname: str) -> int: + """A copy of the actor's user (same password and ACL group), renamed.""" + + sql( + "CREATE TEMPORARY TABLE openemr.iv_u AS SELECT * FROM openemr.users " + f"WHERE username = {q(BOT)};" + "UPDATE openemr.iv_u SET id = (SELECT MAX(id) + 1 FROM openemr.users), " + f"uuid = UNHEX(REPLACE(UUID(), '-', '')), username = {q(username)}, " + f"fname = {q(fname)}, lname = {q(lname)}, authorized = 1;" + "INSERT INTO openemr.users SELECT * FROM openemr.iv_u;" + "CREATE TEMPORARY TABLE openemr.iv_s AS SELECT * FROM openemr.users_secure " + f"WHERE username = {q(BOT)};" + f"UPDATE openemr.iv_s SET id = (SELECT id FROM openemr.users WHERE username = {q(username)}), " + f"username = {q(username)};" + "INSERT INTO openemr.users_secure SELECT * FROM openemr.iv_s;" + "SET @aro = (SELECT MAX(id) + 1 FROM openemr.gacl_aro);" + "INSERT INTO openemr.gacl_aro (id, section_value, value, order_value, name, hidden) " + f"VALUES (@aro, 'users', {q(username)}, 10, {q(fname + ' ' + lname)}, 0);" + "UPDATE openemr.gacl_aro_seq SET id = @aro;" + "INSERT INTO openemr.gacl_groups_aro_map (group_id, aro_id) SELECT m.group_id, @aro " + "FROM openemr.gacl_groups_aro_map m JOIN openemr.gacl_aro a ON a.id = m.aro_id " + f"WHERE a.value = {q(BOT)};" + # OpenEMR's own group membership (``groups``), which the API login + # checks ("user not found in a group" otherwise). + "INSERT INTO openemr.`groups` (name, user) SELECT name, " + f"{q(username)} FROM openemr.`groups` WHERE user = {q(BOT)};" + ) + return int( + sql(f"SELECT id FROM openemr.users WHERE username = {q(username)}").split()[0] + ) + + +def token(username: str) -> Any: + """A password-grant API session for ``username`` (the actor's client).""" + + import httpx + + f = fx() + clients = json.loads(f.clients_path.read_text()) + values = f._runtime_values() + session = httpx.Client(verify=False, timeout=30) + resp = session.post( + f"{f.api_base_url}/oauth2/default/token", + data={ + "grant_type": "password", + "client_id": clients["actor_client_id"], + "scope": WIDE_SCOPE, + "user_role": "users", + "username": username, + "password": values["OPENEMR_ACTOR_PASSWORD"], + }, + ) + if resp.status_code != 200: + raise SystemExit(f"token for {username}: HTTP {resp.status_code}") + session.headers["Authorization"] = "Bearer " + resp.json()["access_token"] + return session + + +def api(session: Any, method: str, path: str, body: Optional[dict] = None) -> Any: + resp = session.request( + method, f"{fx().api_base_url}/apis/default/api{path}", json=body + ) + if resp.status_code not in (200, 201): + raise RuntimeError( + f"{method} {path}: HTTP {resp.status_code} {resp.text[:300]}" + ) + return resp.json() + + +def patient(pid: int) -> dict[str, str]: + cols = ("pid", "uuid", "fname", "lname", "email") + out = sql( + "SELECT pid, LOWER(INSERT(INSERT(INSERT(INSERT(HEX(uuid),9,0,'-'),14,0,'-')," + "19,0,'-'),24,0,'-')), fname, lname, email FROM openemr.patient_data " + f"WHERE pid = {int(pid)}" + ).split("\t") + return dict(zip(cols, (v.strip() for v in out))) + + +def seed() -> dict[str, Any]: + f = fx() + clients = json.loads(f.clients_path.read_text()) + sql( + f"UPDATE openemr.oauth_clients SET scope = {q(WIDE_SCOPE)} " + f"WHERE client_id = {q(clients['actor_client_id'])};" + ) + ids: dict[str, Any] = { + OTHER: add_user(OTHER, "Casey", "Clinician"), + "iholt": add_user("iholt", "Iris", "Holt"), + "ohale": add_user("ohale", "Owen", "Hale"), + } + bot = token(BOT) + try: + for key, values in SEEDS.items(): + api(bot, "POST", "/patient", values) + pid = sql( + f"SELECT pid FROM openemr.patient_data WHERE email = {q(values['email'])}" + ).split()[0] + ids[key] = int(pid) + # The API path writes no history_data; the UI does. Give each + # seeded chart the row the UI would have, so F2 has a target. + sql( + f"INSERT INTO openemr.history_data (pid, date) VALUES ({int(pid)}, NOW())" + ) + finally: + bot.close() + return ids + + +# -- the bot's New Patient save, through OpenEMR's own form ------------------------ + + +class Browser: + def __init__(self) -> None: + from openemr_local_demo import ( + OpenEMRPlaywrightBackend, + _preauthenticate_browser, + ) + + self.backend, self._close = OpenEMRPlaywrightBackend.launch( + fx().ui_base_url, headless=True + ) + _preauthenticate_browser(self.backend, fx()) + self.used = False + + def close(self) -> None: + self._close() + + def register(self, v: dict[str, str]) -> None: + from openemr_local_demo import ( + FORM_FRAME_NAME, + FORM_PATH, + _confirm_create_locator, + _form_frame, + ) + + page = self.backend.page + if self.used: + # A second save (the duplicate case): open a fresh form. + page.evaluate( + "({path, name}) => { window.navigateTab(path, name); " + "window.activateTabByName(name, true); }", + {"path": FORM_PATH, "name": FORM_FRAME_NAME}, + ) + page.wait_for_timeout(1500) + self.used = True + form = _form_frame(page) + form.wait_for_load_state("load") + form.locator("#form_fname").wait_for(state="visible", timeout=60_000) + page.wait_for_timeout(1500) # the form's own scripts finish + provider = v["provider"].removeprefix("Dr. ") + selects = {"title": v["title"], "sex": v["sex"], "providerID": provider} + texts = {"fname": v["fname"], "lname": v["lname"], "DOB": v["DOB"]} + for name in ("title", "sex"): + form.locator(f"#form_{name}").select_option(label=selects[name]) + for name, value in texts.items(): + form.locator(f"#form_{name}").fill(value) + # The primary provider is in the collapsed "Choices" section. + form.get_by_text("Choices", exact=True).click() + form.locator("#form_providerID").select_option(label=provider) + form.get_by_text("Contact", exact=True).click() + contact = { + "street": v["street"], + "city": v["city"], + "postal_code": v["postal_code"], + "phone_home": v["phone_home"], + "email": v["email"], + } + for name, value in contact.items(): + form.locator(f"#form_{name}").fill(value) + form.locator("#form_state").select_option(label=v["state_label"]) + form.locator("#form_country_code").select_option(label=v["country_code"]) + # Read every field back: a fill lost to a reload must not save. + shown = form.evaluate( + "names => Object.fromEntries(names.map(n => {" + " const e = document.getElementById('form_' + n);" + " return [n, e ? (e.tagName === 'SELECT' ? e.options[e.selectedIndex].text" + " : e.value) : null]; }))", + [*selects, *texts, *contact], + ) + expected = {**selects, **texts, **contact} + wrong = [ + n + for n, val in expected.items() + if (shown.get(n) or "").casefold() != val.casefold() + ] + if wrong: + raise RuntimeError(f"the form did not take these fields: {wrong}") + form.locator("#create").click() + _confirm_create_locator(page).click() + deadline = time.monotonic() + 60 + while time.monotonic() < deadline: + n = sql( + "SELECT COUNT(*) FROM openemr.patient_data " + f"WHERE email = {q(v['email'])} AND lname = {q(v['lname'])}" + ).split()[0] + if int(n) >= 1: + time.sleep(3) # let the post-save page's writes settle + return + time.sleep(0.5) + raise RuntimeError("the New Patient save did not land") + + +# -- one case -------------------------------------------------------------------- + + +def api_body(values: dict[str, Any]) -> dict[str, Any]: + keys = ( + "title", + "fname", + "lname", + "DOB", + "sex", + "street", + "city", + "postal_code", + "phone_home", + "email", + "country_code", + ) + body = {k: values[k] for k in keys if k in values} + body["state"] = "MA" + return body + + +def apply_steps( + case: dict[str, Any], + ids: dict[str, Any], + told: dict[str, str], + browser: Browser, + deviations: list[str], +) -> None: + sessions = {"bot": token(BOT), "clinician2": token(OTHER)} + new_pid: Optional[int] = None + try: + for step in case["steps"]: + who, op = step["actor"], step["op"] + if op == "register_referral": + if step.get("phase") == "finish": + continue + browser.register(told) + new_pid = int( + sql( + "SELECT MAX(pid) FROM openemr.patient_data " + f"WHERE email = {q(told['email'])}" + ).split()[0] + ) + continue + if op == "register_patient": + api(sessions[who], "POST", "/patient", CONCURRENT_PERSON) + continue + pid = ( + new_pid if step.get("target") == "new_patient" else ids[step["target"]] + ) + p = patient(pid) + referral = api_body({**REFERRAL}) + if op in ("overwrite_chart", "update_chart"): + if op == "overwrite_chart": + changes = referral + else: + changes = { + k: (referral[k] if v == "referral" else v) + for k, v in step["set"].items() + } + if who == "none": + sets = ", ".join(f"{k} = {q(v)}" for k, v in changes.items()) + sql( + f"UPDATE openemr.patient_data SET {sets} WHERE pid = {int(pid)}" + ) + else: + current = api(sessions[who], "GET", f"/patient/{p['uuid']}")["data"] + body = {k: current.get(k) for k in api_body(current)} + body.update(changes) + api(sessions[who], "PUT", f"/patient/{p['uuid']}", body) + elif op == "update_history": + deviations.append("update_history ran as SQL (no API): unattributed") + sets = ", ".join(f"{k} = {q(v)}" for k, v in step["set"].items()) + sql(f"UPDATE openemr.history_data SET {sets} WHERE pid = {int(pid)}") + elif op == "delete_history": + sql(f"DELETE FROM openemr.history_data WHERE pid = {int(pid)}") + elif op == "add_note": + api( + sessions[who], + "POST", + f"/patient/{pid}/message", + { + "body": step["body"], + "groupname": "Default", + "from": BOT, + "to": BOT, + "title": "Other", + "message_status": "New", + }, + ) + elif op == "add_allergy": + api( + sessions[who], + "POST", + f"/patient/{p['uuid']}/allergy", + { + "title": step["title"], + "begdate": "2026-10-24", + }, + ) + elif op == "add_insurance": + deviations.append( + "add_insurance ran as SQL with an audit row by the bot" + ) + sql( + "INSERT INTO openemr.insurance_data (type, provider, pid, date) VALUES " + f"('primary', '0', {int(pid)}, CURDATE());" + "INSERT INTO openemr.log (date, event, category, user, groupname, " + "comments, patient_id, success, log_from) VALUES (NOW(), " + f"'patient-record-insert', 'Insurance', {q(BOT)}, 'Default', '', " + f"{int(pid)}, 1, 'open-emr')" + ) + else: + raise ValueError(op) + finally: + for s in sessions.values(): + s.close() + + +def run_case(case: dict[str, Any], out: Path, container: str) -> dict[str, Any]: + from openadapt_flow.provenance import ( + cross_check, + default_extractor, + document_sha256, + read_sources, + ) + from openadapt_flow.verify_run import ( + capture_baseline, + parse_verify_config, + verify_run, + ) + + f = fx() + cdir = out / case["id"] + cdir.mkdir(parents=True, exist_ok=True) + reset() + ids = seed() + told = {**REFERRAL, **told_values(case)} + doc = cdir / "referral.txt" + doc.write_text(referral_text(REFERRAL)) + documents = read_sources([doc]) + doc_sha = document_sha256(doc) + params = {k: told[k] for k in SHIPPED_PARAMS} + oracle = f.token_session("oracle") + os.environ[TOKEN_ENV] = oracle.headers["Authorization"].removeprefix("Bearer ") + oracle.close() + base = { + "schema_version": "openadapt.verify/v1", + "verifier": { + "kind": "rest", + "base_url": f.ui_base_url, + "records_path": "/apis/default/api/patient?_limit=1000", + "records_key": "data", + "auth": {"bearer_env": TOKEN_ENV}, + }, + "record": SHIPPED_RECORD, + } + framed = { + **base, + "frame": { + "identity_field": "pid", + "attribution": { + "kind": "audit_read", + "actor_field": "user", + "record_field": "patient_id", + "self": [BOT], + "read": { + "kind": "sql", + "sql_driver": "verification_coverage.exec_mariadb", + "sql_connect_args": { + "container": container, + "user": AUDIT_USER, + "database": "openemr", + }, + "sql_password_env": AUDIT_ENV, + "sql_query": AUDIT_QUERY, + }, + }, + }, + } + checks = { + "shipped": (parse_verify_config(base), None), + "framed": ( + parse_verify_config(framed), + provenance_for(doc_sha, told, list(SHIPPED_PARAMS)), + ), + } + # Signed in before the run starts, as the task's unmeasured setup is. + browser = Browser() + counts_before = f.table_counts() + for name, (cfg, _p) in checks.items(): + capture_baseline(cfg, params, cdir / f"baseline-{name}.json") + prov = provenance_for(doc_sha, told, [n for n, _ in LABELS]) + pre = cross_check(prov, documents, default_extractor(prov)) + deviations: list[str] = [] + error = None + try: + apply_steps(case, ids, told, browser, deviations) + except Exception as exc: # noqa: BLE001 - recorded, the case is void + error = f"{type(exc).__name__}: {exc}"[:500] + finally: + browser.close() + time.sleep(2) + counts_after = f.table_counts() + row: dict[str, Any] = { + "id": case["id"], + "class": case["class"], + "expect": case["expect"], + "presave": pre.status, + "presave_held_fields": pre.disagreements, + "deviations": deviations, + "error": error, + "table_deltas": { + t: counts_after[t] - counts_before.get(t, 0) + for t in counts_after + if counts_after[t] != counts_before.get(t, 0) + }, + } + for name, (cfg, provenance) in checks.items(): + result = verify_run( + cfg, + params=params, + run_record={"executor_kind": "agent", "executor_id": BOT}, + authorization_ref="independent-suite-live", + baseline_path=cdir / f"baseline-{name}.json", + provenance=provenance, + documents=documents if provenance is not None else None, + ) + receipt = result["receipt"] + row[name] = { + "outcome": receipt.get("outcome"), + "checked": receipt.get("checked"), + "verified": receipt.get("outcome") == "verified", + } + row[name]["score"] = score(case["expect"], row[name]["verified"]) + (cdir / f"evidence-{name}.json").write_text( + json.dumps(result.get("evidence"), indent=2, sort_keys=True, default=str) + ) + row["presave_score"] = score(case["expect"], pre.status == "agree") + audit = sql( + "SELECT user, event, patient_id FROM openemr.log WHERE event LIKE 'patient-record-%' " + "AND event <> 'patient-record-select' ORDER BY id" + ) + (cdir / "audit.tsv").write_text(audit) + return row + + +def main() -> int: + from verification_coverage.openemr_run import ensure_audit_reader + + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--only", default="") + args = parser.parse_args() + suite = yaml.safe_load((HERE / "faults.yaml").read_text()) + args.out.mkdir(parents=True, exist_ok=True) + password = secrets.token_urlsafe(24) + os.environ[AUDIT_ENV] = password + # A MariaDB account, not an OpenEMR row: it survives every reset. + container = ensure_audit_reader(password) + rows_path = args.out / "rows.jsonl" + for case in suite["cases"]: + if args.only and case["id"] not in args.only.split(","): + continue + try: + row = run_case(case, args.out, container) + except Exception as exc: # noqa: BLE001 - recorded, the case is void + row = {"id": case["id"], "error": f"{type(exc).__name__}: {exc}"[:500]} + with rows_path.open("a") as fh: + fh.write(json.dumps(row, sort_keys=True, default=str) + "\n") + print( + case["id"], + { + k: row[k].get("score") + for k in ("shipped", "framed") + if isinstance(row.get(k), dict) + }, + row.get("error"), + flush=True, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/verification_coverage/independent/results/live-2026-10-24/RESULTS.md b/packages/flow/benchmark/verification_coverage/independent/results/live-2026-10-24/RESULTS.md new file mode 100644 index 000000000..c59190645 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/live-2026-10-24/RESULTS.md @@ -0,0 +1,35 @@ +### Live OpenEMR 8.0.0.3, 2026-10-24 + +Raw per-case rows, evidence and audit rows: private, in openadapt-corpus +`reliability_recipes/verification_coverage/live-2026-10-24/`. + +| class | cases | shipped | framed | presave | +|---|---|---|---|---| +| clean | 1 | 1/1 ok | 1/1 ok | 1/1 ok | +| concurrent_legitimate | 2 | 0/2 ok, **2 false alarm** | 0/2 ok, **2 false alarm** | 2/2 ok | +| wrong_record | 2 | 2/2 caught | 2/2 caught | 0/2 caught, **2 missed** | +| unrelated_change | 7 | 3/7 caught, **4 missed** | 3/7 caught, **4 missed** | 0/7 caught, **7 missed** | +| misread_source | 3 | 0/3 caught, **3 missed** | 2/3 caught, **1 missed** | 3/3 caught | +| missing_side_record | 1 | 0/1 caught, **1 missed** | 0/1 caught, **1 missed** | 0/1 caught, **1 missed** | +| duplicate | 1 | 1/1 caught | 1/1 caught | 0/1 caught, **1 missed** | + +| case | expect | shipped | framed | pre-save | +|---|---|---|---|---| +| clean | clean | verified (ok) | verified (ok) | agree | +| wrong_record_existing_chart | fault | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| wrong_record_lookalike | fault | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_other_chart | fault | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_other_history | fault | verified (missed) | verified (missed) | agree | +| unrelated_table_note_other_patient | fault | verified (missed) | verified (missed) | agree | +| unrelated_table_allergy_other_patient | fault | verified (missed) | verified (missed) | agree | +| unrelated_table_insurance_new_patient | fault | verified (missed) | verified (missed) | agree | +| unrelated_other_chart_unattributed | fault | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| misread_dob | fault | verified (missed) | reconciliation_required (caught) | hold | +| misread_swapped_names | fault | verified (missed) | reconciliation_required (caught) | hold | +| misread_wrong_provider | fault | verified (missed) | verified (missed) | hold | +| missing_history_record | fault | verified (missed) | verified (missed) | agree | +| duplicate_save | fault | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| concurrent_other_chart | clean | reconciliation_required (false_alarm) | reconciliation_required (false_alarm) | agree | +| concurrent_new_patient | clean | reconciliation_required (false_alarm) | reconciliation_required (false_alarm) | agree | +| concurrent_plus_bot_stray | fault | reconciliation_required (caught) | reconciliation_required (caught) | agree | + diff --git a/packages/flow/benchmark/verification_coverage/independent/results/standin-full/RESULTS.md b/packages/flow/benchmark/verification_coverage/independent/results/standin-full/RESULTS.md new file mode 100644 index 000000000..c407673ae --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/standin-full/RESULTS.md @@ -0,0 +1,32 @@ +### verification_coverage/independent/results/standin-full/rows.json + +| class | cases | shipped | framed | synthesized | presave | +|---|---|---|---|---|---| +| clean | 1 | 1/1 ok | 1/1 ok | 0/1 ok, **1 false alarm** | 1/1 ok | +| concurrent_legitimate | 2 | 0/2 ok, **2 false alarm** | 2/2 ok | 0/2 ok, **2 false alarm** | 2/2 ok | +| wrong_record | 2 | 2/2 caught | 2/2 caught | 2/2 caught | 0/2 caught, **2 missed** | +| unrelated_change | 7 | 3/7 caught, **4 missed** | 6/7 caught, **1 missed** | 7/7 caught | 0/7 caught, **7 missed** | +| misread_source | 3 | 0/3 caught, **3 missed** | 2/3 caught, **1 missed** | 3/3 caught | 3/3 caught | +| missing_side_record | 1 | 0/1 caught, **1 missed** | 0/1 caught, **1 missed** | 1/1 caught | 0/1 caught, **1 missed** | +| duplicate | 1 | 1/1 caught | 1/1 caught | 1/1 caught | 0/1 caught, **1 missed** | + +| case | expect | shipped | framed | synthesized | pre-save | +|---|---|---|---|---|---| +| clean | clean | verified (ok) | verified (ok) | reconciliation_required (false_alarm) | agree | +| wrong_record_existing_chart | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| wrong_record_lookalike | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_other_chart | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_other_history | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_table_note_other_patient | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_table_allergy_other_patient | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_table_insurance_new_patient | fault | verified (missed) | verified (missed) | reconciliation_required (caught) | agree | +| unrelated_other_chart_unattributed | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| misread_dob | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | hold | +| misread_swapped_names | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | hold | +| misread_wrong_provider | fault | verified (missed) | verified (missed) | reconciliation_required (caught) | hold | +| missing_history_record | fault | verified (missed) | verified (missed) | reconciliation_required (caught) | agree | +| duplicate_save | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| concurrent_other_chart | clean | reconciliation_required (false_alarm) | verified (ok) | reconciliation_required (false_alarm) | agree | +| concurrent_new_patient | clean | reconciliation_required (false_alarm) | verified (ok) | reconciliation_required (false_alarm) | agree | +| concurrent_plus_bot_stray | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | + diff --git a/packages/flow/benchmark/verification_coverage/independent/results/standin-full/checks.json b/packages/flow/benchmark/verification_coverage/independent/results/standin-full/checks.json new file mode 100644 index 000000000..c00a32722 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/standin-full/checks.json @@ -0,0 +1,27699 @@ +{ + "gates": { + "framed": { + "applicable": 18, + "cases": [ + { + "applicable": false, + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "detail": "the save as the app makes it", + "fault": "clean", + "outcome": "verified", + "result": "not applicable" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "email changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "lname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "title changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "fname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "DOB changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "sex changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "city changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "state changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "postal_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "phone_home changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "country_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "the values saved on a look-alike record", + "fault": "wrong_record", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "detail": "another record in the slice edited", + "fault": "unrelated_edit", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street, city, state, postal_code, phone_home, country_code left blank", + "fault": "partial", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "not_checked", + "source": "instruction" + }, + "detail": "the target saved twice", + "fault": "duplicate", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "nothing saved", + "fault": "missing", + "outcome": "halted_before_effect", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target lands after the check's timeout", + "fault": "delayed", + "outcome": "reconciliation_required", + "result": "killed" + } + ], + "check_sha256": "sha256:a70a0dd03897adcece65179fe2ca367d0bfce2fc739d84c1e7435654af237a7b", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 1 + }, + "duplicate": { + "applicable": 1, + "killed": 1 + }, + "missing": { + "applicable": 1, + "killed": 1 + }, + "partial": { + "applicable": 1, + "killed": 1 + }, + "unrelated_edit": { + "applicable": 1, + "killed": 1 + }, + "wrong_record": { + "applicable": 1, + "killed": 1 + }, + "wrong_value": { + "applicable": 12, + "killed": 12 + } + }, + "clean_pass": true, + "killed": 18, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "sqlite" + }, + "shipped": { + "applicable": 18, + "cases": [ + { + "applicable": false, + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "detail": "the save as the app makes it", + "fault": "clean", + "outcome": "verified", + "result": "not applicable" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "email changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "lname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "title changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "fname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "DOB changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "sex changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "city changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "state changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "postal_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "phone_home changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "country_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "the values saved on a look-alike record", + "fault": "wrong_record", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "detail": "another record in the slice edited", + "fault": "unrelated_edit", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street, city, state, postal_code, phone_home, country_code left blank", + "fault": "partial", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target saved twice", + "fault": "duplicate", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "nothing saved", + "fault": "missing", + "outcome": "halted_before_effect", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target lands after the check's timeout", + "fault": "delayed", + "outcome": "reconciliation_required", + "result": "killed" + } + ], + "check_sha256": "sha256:e788e0dad8351168546da5e87e646859f9e0f47eb8e98508e272f1a8a5462526", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 1 + }, + "duplicate": { + "applicable": 1, + "killed": 1 + }, + "missing": { + "applicable": 1, + "killed": 1 + }, + "partial": { + "applicable": 1, + "killed": 1 + }, + "unrelated_edit": { + "applicable": 1, + "killed": 1 + }, + "wrong_record": { + "applicable": 1, + "killed": 1 + }, + "wrong_value": { + "applicable": 12, + "killed": 12 + } + }, + "clean_pass": true, + "killed": 18, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "sqlite" + }, + "synthesized": { + "applicable": 1145, + "cases": [ + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to addresses", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "addresses: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "addresses: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to amc_misc_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amc_misc_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amc_misc_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to amendments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to amendments_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to api_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to api_refresh_token", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_refresh_token: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_refresh_token: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to api_token", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_token: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_token: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ar_activity", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_activity: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_activity: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ar_session", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_session: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_session: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to audit_details", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_details: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_details: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to audit_master", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_master: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_master: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to automatic_notification", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "automatic_notification: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "automatic_notification: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to background_services", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "background_services: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "background_services: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to batchcom", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "batchcom: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "batchcom: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to benefit_eligibility", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "benefit_eligibility: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "benefit_eligibility: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to billing", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "billing: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "billing: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to calendar_external", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "calendar_external: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "calendar_external: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to care_team_member", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_team_member: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_team_member: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to care_teams", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_teams: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_teams: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in categories", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in categories", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in categories_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in categories_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to categories_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to categories_to_documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_to_documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_to_documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ccda", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_components", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components.ccda_components_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_components", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: saved on another ccda_components_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_components_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all.ccda_components_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_components_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: saved on another ccda_components_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ccda_field_mapping", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_field_mapping: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_field_mapping: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_sections", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections.ccda_sections_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_sections", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: saved on another ccda_sections_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_sections_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all.ccda_sections_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_sections_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: saved on another ccda_sections_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ccda_table_mapping", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_table_mapping: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_table_mapping: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to chart_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "chart_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "chart_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to claims", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "claims: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "claims: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_notes_documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_notes_procedure_results", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_procedure_results: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_procedure_results: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_plans", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_plans_rules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans_rules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans_rules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_rules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_rules_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in code_types", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types.ct_external dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in code_types", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: saved on another ct_external", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in code_types_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all.ct_external dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in code_types_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: saved on another ct_external", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in codes", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes.code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in codes", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: saved on another code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in codes_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all.code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in codes_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: saved on another code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to codes_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact_address", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_address: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_address: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact_relation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_relation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_relation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact_telecom", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_telecom: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_telecom: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to customlists", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "customlists: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "customlists: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to dated_reminders", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to dated_reminders_link", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders_link: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders_link: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to direct_message_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "direct_message_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "direct_message_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to document_template_profiles", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_template_profiles: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_template_profiles: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to document_templates", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_templates: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_templates: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in documents_legal_categories", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories.dlc_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in documents_legal_categories", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: saved on another dlc_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in documents_legal_categories_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all.dlc_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in documents_legal_categories_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: saved on another dlc_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to documents_legal_detail", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_detail: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_detail: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to documents_legal_master", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_master: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_master: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drug_inventory", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_inventory: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_inventory: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drug_sales", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_sales: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_sales: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drug_templates", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_templates: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_templates: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drugs", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drugs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drugs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to dsi_source_attributes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dsi_source_attributes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dsi_source_attributes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to edi_sequences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "edi_sequences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "edi_sequences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to eligibility_verification", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "eligibility_verification: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "eligibility_verification: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to email_queue", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "email_queue: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "email_queue: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to employer_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "employer_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "employer_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to enc_category_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "enc_category_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "enc_category_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to erx_narcotics", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_narcotics: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_narcotics: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to erx_rx_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_rx_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_rx_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to erx_ttl_touch", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_ttl_touch: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_ttl_touch: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to esign_signatures", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "esign_signatures: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "esign_signatures: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to export_job", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "export_job: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "export_job: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to extended_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "extended_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "extended_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to external_encounters", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_encounters: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_encounters: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to external_procedures", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_procedures: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_procedures: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to facility", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to facility_user_ids", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility_user_ids: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility_user_ids: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to fee_schedule", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_schedule: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_schedule: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to fee_sheet_options", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_sheet_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_sheet_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_care_plan", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_care_plan: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_care_plan: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_clinical_instructions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_instructions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_instructions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_clinical_notes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_notes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_notes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_dictation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_dictation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_dictation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_encounter", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_encounter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_encounter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_acuity", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_acuity: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_acuity: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_antseg", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_antseg: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_antseg: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_base", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_base: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_base: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_biometrics", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_biometrics: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_biometrics: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_external", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_external: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_external: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_hpi", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_hpi: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_hpi: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_locking", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_locking: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_locking: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_dispense", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_dispense: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_dispense: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_impplan", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_impplan: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_impplan: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_orders", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_orders: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_orders: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in form_eye_mag_prefs", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs.ordering dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in form_eye_mag_prefs", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: saved on another ordering", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in form_eye_mag_prefs_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all.ordering dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in form_eye_mag_prefs_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: saved on another ordering", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_wearing", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_wearing: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_wearing: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_neuro", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_neuro: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_neuro: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_postseg", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_postseg: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_postseg: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_refraction", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_refraction: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_refraction: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_ros", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_ros: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_ros: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_vitals", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_vitals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_vitals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_functional_cognitive_status", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_functional_cognitive_status: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_functional_cognitive_status: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_group_attendance", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_group_attendance: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_group_attendance: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_groups_encounter", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_groups_encounter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_groups_encounter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_history_sdoh", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_history_sdoh_health_concerns", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh_health_concerns: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh_health_concerns: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_misc_billing_options", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_misc_billing_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_misc_billing_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_observation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_observation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_observation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_questionnaire_assessments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_questionnaire_assessments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_questionnaire_assessments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_reviewofs", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_reviewofs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_reviewofs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_ros", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_ros: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_ros: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_soap", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_soap: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_soap: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_taskman", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_taskman: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_taskman: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vital_details", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vital_details: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vital_details: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals_calculation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals_calculation_components", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_components: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_components: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals_calculation_form_vitals", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_form_vitals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_form_vitals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to forms", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "forms: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "forms: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_acl", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_acl_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_acl_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_sections_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in gacl_aro_groups", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in gacl_aro_groups", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in gacl_aro_groups_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in gacl_aro_groups_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_groups_id_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_id_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_id_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_groups_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_sections_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_groups", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_groups_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_groups_aro_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_aro_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_aro_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_groups_axo_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_axo_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_axo_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_phpgacl", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_phpgacl: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_phpgacl: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in globals", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals.gl_value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in globals", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: saved on another gl_value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in globals_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all.gl_value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in globals_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: saved on another gl_value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gprelations", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gprelations: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gprelations: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to groups", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to history_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "history_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "history_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_dx_order_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_dx_order_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_dx_order_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_dx_10_9", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_10_9: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_10_9: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_dx_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_pcs_10_9", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_10_9: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_10_9: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_pcs_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_pcs_order_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_pcs_order_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_pcs_order_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_reimbr_dx_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_dx_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_dx_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_reimbr_pcs_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_pcs_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_pcs_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_dx_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_dx_long_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_long_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_long_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_sg_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_sg_long_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_long_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_long_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to immunization_observation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunization_observation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunization_observation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to immunizations", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunizations: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunizations: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_companies", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_companies: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_companies: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_numbers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_numbers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_numbers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_type_codes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_type_codes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_type_codes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ip_tracking", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ip_tracking: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ip_tracking: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to issue_encounter", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_encounter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_encounter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to issue_types", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_types: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_types: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to jwt_grant_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "jwt_grant_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "jwt_grant_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to keys", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "keys: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "keys: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_constants", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants.cons_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_constants", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: saved on another cons_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_constants_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all.cons_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_constants_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: saved on another cons_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lang_custom", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_custom: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_custom: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_languages", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages.lang_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_languages", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: saved on another lang_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_languages_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all.lang_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_languages_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: saved on another lang_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_group_properties", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties.grp_group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_group_properties", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: saved on another grp_group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_group_properties_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all.grp_group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_group_properties_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: saved on another grp_group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_options", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options.group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options.seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_options", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: saved on another group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: saved on another seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_options_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all.group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all.seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_options_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: saved on another group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: saved on another seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lbf_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbf_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbf_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lbt_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbt_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbt_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in list_options", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options.option_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in list_options", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: saved on another option_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in list_options_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all.option_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in list_options_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: saved on another option_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lists", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lists_medication", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_medication: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_medication: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lists_touch", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_touch: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_touch: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in log_comment_encrypt", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt.log_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in log_comment_encrypt", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: saved on another log_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in log_comment_encrypt_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all.log_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in log_comment_encrypt_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: saved on another log_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to login_mfa_registrations", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "login_mfa_registrations: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "login_mfa_registrations: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in medex_icons", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons.i_UID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in medex_icons", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: saved on another i_UID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in medex_icons_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all.i_UID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in medex_icons_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: saved on another i_UID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to medex_outgoing", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_outgoing: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_outgoing: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to medex_prefs", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_prefs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_prefs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to medex_recalls", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_recalls: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_recalls: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to misc_address_book", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "misc_address_book: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "misc_address_book: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_acl_group_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_group_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_group_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_acl_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_acl_user_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_user_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_user_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_configuration", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_configuration: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_configuration: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to modules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to modules_hooks_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_hooks_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_hooks_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to modules_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to multiple_db", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "multiple_db: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "multiple_db: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to notes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to notification_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to notification_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to oauth_clients", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_clients: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_clients: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to oauth_trusted_user", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_trusted_user: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_trusted_user: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onetime_auth", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onetime_auth: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onetime_auth: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onotes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onotes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onotes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_mail", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_mail: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_mail: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_messages", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_messages: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_messages: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_online", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_online: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_online: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_portal_activity", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_portal_activity: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_portal_activity: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_signatures", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_signatures: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_signatures: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to openemr_module_vars", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_module_vars: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_module_vars: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to openemr_modules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_modules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_modules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in openemr_postcalendar_categories", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories.pc_catid dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories.pc_seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in openemr_postcalendar_categories", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: saved on another pc_catid", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: saved on another pc_seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in openemr_postcalendar_categories_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all.pc_catid dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all.pc_seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in openemr_postcalendar_categories_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: saved on another pc_catid", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: saved on another pc_seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to openemr_postcalendar_events", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_events: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_events: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_access_onsite", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_access_onsite: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_access_onsite: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_birthday_alert", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_birthday_alert: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_birthday_alert: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_care_experience_preferences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_care_experience_preferences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_care_experience_preferences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_data", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.DOB dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.city dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.country_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.email dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.fname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.lname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.phone_home dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.postal_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.providerID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.sex dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.street dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_data", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another DOB", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another city", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another country_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another email", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another fname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another lname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another phone_home", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another postal_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another providerID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another sex", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_data_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.DOB dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.city dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.country_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.email dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.fname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.lname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.phone_home dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.postal_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.providerID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.sex dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.street dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_data_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another DOB", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another city", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another country_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another email", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another fname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another lname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another phone_home", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another postal_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another providerID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another sex", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_portal_menu", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu.menu_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_portal_menu", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: saved on another menu_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_portal_menu_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all.menu_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_portal_menu_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: saved on another menu_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_reminders", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_reminders: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_reminders: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_tracker_element", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker_element: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker_element: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_treatment_intervention_preferences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_treatment_intervention_preferences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_treatment_intervention_preferences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to payment_gateway_details", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_gateway_details: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_gateway_details: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to payment_processing_audit", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_processing_audit: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_processing_audit: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to payments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to person", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to person_patient_link", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person_patient_link: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person_patient_link: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to pharmacies", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pharmacies: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pharmacies: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to phone_numbers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "phone_numbers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "phone_numbers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to pnotes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pnotes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pnotes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in preference_value_sets", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets.sort_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in preference_value_sets", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: saved on another sort_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in preference_value_sets_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all.sort_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in preference_value_sets_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: saved on another sort_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to prescriptions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prescriptions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prescriptions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to prices", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prices: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prices: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to pro_assessments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pro_assessments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pro_assessments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_answers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_answers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_answers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_order", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_order_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_order_relationships", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_relationships: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_relationships: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_providers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_providers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_providers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_questions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_questions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_questions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_report", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_report: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_report: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_result", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_result: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_result: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_specimen", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_specimen: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_specimen: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_type", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_type: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_type: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to product_registration", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_registration: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_registration: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to product_warehouse", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_warehouse: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_warehouse: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to questionnaire_repository", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_repository: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_repository: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to questionnaire_response", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_response: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_response: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to recent_patients", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "recent_patients: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "recent_patients: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to registry", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "registry: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "registry: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to report_itemized", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_itemized: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_itemized: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to report_results", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_results: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_results: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_action", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_action_item", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action_item: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action_item: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in rule_filter", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter.value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in rule_filter", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: saved on another value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in rule_filter_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all.value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in rule_filter_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: saved on another value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_patient_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_patient_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_patient_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_reminder", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_reminder: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_reminder: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_target", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_target: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_target: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to sequences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "sequences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "sequences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to session_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "session_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "session_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to shared_attributes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "shared_attributes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "shared_attributes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to standardized_tables_track", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "standardized_tables_track: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "standardized_tables_track: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in supported_external_dataloads", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads.load_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in supported_external_dataloads", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: saved on another load_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in supported_external_dataloads_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all.load_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in supported_external_dataloads_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: saved on another load_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to syndromic_surveillance", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "syndromic_surveillance: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "syndromic_surveillance: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to template_users", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "template_users: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "template_users: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups_counselors", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_counselors: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_counselors: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups_participant_attendance", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participant_attendance: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participant_attendance: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups_participants", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participants: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participants: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to track_events", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "track_events: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "track_events: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to transactions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "transactions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "transactions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to user_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "user_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "user_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to users", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to users_facility", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_facility: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_facility: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to users_secure", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_secure: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_secure: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to uuid_mapping", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_mapping: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_mapping: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to uuid_registry", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_registry: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_registry: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to valueset", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to valueset_oid", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset_oid: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset_oid: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to verify_email", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "verify_email: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "verify_email: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to version", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "version: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "version: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to voids", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "voids: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "voids: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to x12_partners", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_partners: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_partners: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to x12_remote_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_remote_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_remote_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to a table this check does not read", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + } + ], + "check_sha256": "sha256:45775a33d180ae75c0e0092724e459b64c5e0b1989f08828e1e71d8b5fa0103d", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 0 + }, + "duplicate": { + "applicable": 44, + "killed": 44 + }, + "missing": { + "applicable": 44, + "killed": 44 + }, + "partial": { + "applicable": 72, + "killed": 72 + }, + "unrelated_edit": { + "applicable": 913, + "killed": 870 + }, + "wrong_record": { + "applicable": 70, + "killed": 70 + }, + "wrong_value": { + "applicable": 1, + "killed": 0 + } + }, + "clean_pass": false, + "killed": 1100, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "recorded_states" + } + }, + "synthesized": { + "closed_world": null, + "coverage": { + "applicable": 1145, + "cases": [ + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to addresses", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "addresses: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "addresses: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to amc_misc_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amc_misc_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amc_misc_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to amendments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to amendments_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "amendments_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to api_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to api_refresh_token", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_refresh_token: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_refresh_token: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to api_token", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_token: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "api_token: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ar_activity", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_activity: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_activity: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ar_session", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_session: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ar_session: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to audit_details", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_details: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_details: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to audit_master", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_master: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "audit_master: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to automatic_notification", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "automatic_notification: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "automatic_notification: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to background_services", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "background_services: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "background_services: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to batchcom", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "batchcom: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "batchcom: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to benefit_eligibility", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "benefit_eligibility: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "benefit_eligibility: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to billing", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "billing: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "billing: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to calendar_external", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "calendar_external: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "calendar_external: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to care_team_member", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_team_member: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_team_member: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to care_teams", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_teams: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "care_teams: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in categories", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in categories", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in categories_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in categories_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to categories_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to categories_to_documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_to_documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "categories_to_documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ccda", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_components", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components.ccda_components_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_components", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: saved on another ccda_components_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_components_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all.ccda_components_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_components_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: saved on another ccda_components_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_components_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ccda_field_mapping", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_field_mapping: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_field_mapping: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_sections", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections.ccda_sections_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_sections", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: saved on another ccda_sections_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in ccda_sections_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all.ccda_sections_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in ccda_sections_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: saved on another ccda_sections_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_sections_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ccda_table_mapping", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_table_mapping: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ccda_table_mapping: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to chart_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "chart_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "chart_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to claims", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "claims: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "claims: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_notes_documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_notes_procedure_results", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_procedure_results: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_notes_procedure_results: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_plans", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_plans_rules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans_rules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_plans_rules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_rules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to clinical_rules_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "clinical_rules_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in code_types", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types.ct_external dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in code_types", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: saved on another ct_external", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in code_types_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all.ct_external dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in code_types_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: saved on another ct_external", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "code_types_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in codes", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes.code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in codes", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: saved on another code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in codes_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all.code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in codes_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: saved on another code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to codes_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "codes_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact_address", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_address: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_address: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact_relation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_relation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_relation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to contact_telecom", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_telecom: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "contact_telecom: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to customlists", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "customlists: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "customlists: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to dated_reminders", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to dated_reminders_link", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders_link: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dated_reminders_link: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to direct_message_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "direct_message_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "direct_message_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to document_template_profiles", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_template_profiles: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_template_profiles: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to document_templates", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_templates: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "document_templates: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in documents_legal_categories", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories.dlc_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in documents_legal_categories", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: saved on another dlc_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in documents_legal_categories_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all.dlc_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in documents_legal_categories_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: saved on another dlc_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_categories_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to documents_legal_detail", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_detail: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_detail: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to documents_legal_master", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_master: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "documents_legal_master: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drug_inventory", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_inventory: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_inventory: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drug_sales", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_sales: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_sales: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drug_templates", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_templates: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drug_templates: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to drugs", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drugs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "drugs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to dsi_source_attributes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dsi_source_attributes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "dsi_source_attributes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to edi_sequences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "edi_sequences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "edi_sequences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to eligibility_verification", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "eligibility_verification: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "eligibility_verification: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to email_queue", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "email_queue: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "email_queue: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to employer_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "employer_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "employer_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to enc_category_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "enc_category_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "enc_category_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to erx_narcotics", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_narcotics: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_narcotics: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to erx_rx_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_rx_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_rx_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to erx_ttl_touch", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_ttl_touch: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "erx_ttl_touch: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to esign_signatures", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "esign_signatures: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "esign_signatures: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to export_job", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "export_job: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "export_job: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to extended_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "extended_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "extended_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to external_encounters", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_encounters: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_encounters: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to external_procedures", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_procedures: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "external_procedures: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to facility", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to facility_user_ids", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility_user_ids: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "facility_user_ids: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to fee_schedule", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_schedule: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_schedule: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to fee_sheet_options", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_sheet_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "fee_sheet_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_care_plan", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_care_plan: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_care_plan: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_clinical_instructions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_instructions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_instructions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_clinical_notes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_notes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_clinical_notes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_dictation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_dictation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_dictation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_encounter", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_encounter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_encounter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_acuity", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_acuity: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_acuity: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_antseg", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_antseg: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_antseg: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_base", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_base: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_base: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_biometrics", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_biometrics: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_biometrics: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_external", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_external: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_external: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_hpi", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_hpi: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_hpi: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_locking", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_locking: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_locking: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_dispense", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_dispense: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_dispense: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_impplan", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_impplan: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_impplan: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_orders", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_orders: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_orders: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in form_eye_mag_prefs", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs.ordering dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in form_eye_mag_prefs", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: saved on another ordering", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in form_eye_mag_prefs_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all.ordering dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in form_eye_mag_prefs_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: saved on another ordering", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_prefs_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_mag_wearing", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_wearing: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_mag_wearing: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_neuro", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_neuro: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_neuro: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_postseg", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_postseg: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_postseg: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_refraction", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_refraction: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_refraction: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_ros", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_ros: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_ros: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_eye_vitals", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_vitals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_eye_vitals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_functional_cognitive_status", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_functional_cognitive_status: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_functional_cognitive_status: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_group_attendance", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_group_attendance: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_group_attendance: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_groups_encounter", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_groups_encounter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_groups_encounter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_history_sdoh", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_history_sdoh_health_concerns", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh_health_concerns: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_history_sdoh_health_concerns: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_misc_billing_options", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_misc_billing_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_misc_billing_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_observation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_observation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_observation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_questionnaire_assessments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_questionnaire_assessments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_questionnaire_assessments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_reviewofs", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_reviewofs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_reviewofs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_ros", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_ros: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_ros: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_soap", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_soap: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_soap: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_taskman", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_taskman: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_taskman: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vital_details", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vital_details: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vital_details: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals_calculation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals_calculation_components", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_components: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_components: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to form_vitals_calculation_form_vitals", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_form_vitals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "form_vitals_calculation_form_vitals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to forms", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "forms: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "forms: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_acl", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_acl_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_acl_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_acl_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_sections_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_sections_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aco_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aco_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in gacl_aro_groups", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in gacl_aro_groups", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in gacl_aro_groups_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all.lft dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in gacl_aro_groups_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: saved on another lft", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_groups_id_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_id_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_id_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_groups_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_groups_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_sections_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_sections_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_aro_seq", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_seq: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_aro_seq: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_groups", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_groups_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_groups_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_axo_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_axo_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_groups_aro_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_aro_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_aro_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_groups_axo_map", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_axo_map: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_groups_axo_map: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gacl_phpgacl", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_phpgacl: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gacl_phpgacl: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in globals", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals.gl_value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in globals", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: saved on another gl_value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in globals_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all.gl_value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in globals_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: saved on another gl_value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "globals_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to gprelations", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gprelations: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "gprelations: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to groups", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to history_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "history_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "history_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_dx_order_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_dx_order_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_dx_order_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_dx_10_9", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_10_9: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_10_9: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_dx_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_dx_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_pcs_10_9", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_10_9: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_10_9: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_gem_pcs_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_gem_pcs_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_pcs_order_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_pcs_order_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_pcs_order_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_reimbr_dx_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_dx_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_dx_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd10_reimbr_pcs_9_10", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_pcs_9_10: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd10_reimbr_pcs_9_10: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_dx_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_dx_long_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_long_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_dx_long_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_sg_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to icd9_sg_long_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_long_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "icd9_sg_long_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to immunization_observation", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunization_observation: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunization_observation: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to immunizations", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunizations: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "immunizations: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_companies", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_companies: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_companies: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_numbers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_numbers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_numbers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to insurance_type_codes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_type_codes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "insurance_type_codes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to ip_tracking", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ip_tracking: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "ip_tracking: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to issue_encounter", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_encounter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_encounter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to issue_types", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_types: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "issue_types: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to jwt_grant_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "jwt_grant_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "jwt_grant_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to keys", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "keys: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "keys: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_constants", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants.cons_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_constants", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: saved on another cons_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_constants_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all.cons_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_constants_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: saved on another cons_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_constants_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lang_custom", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_custom: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_custom: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_languages", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages.lang_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_languages", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: saved on another lang_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in lang_languages_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all.lang_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in lang_languages_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: saved on another lang_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lang_languages_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_group_properties", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties.grp_group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_group_properties", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: saved on another grp_group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_group_properties_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all.grp_group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_group_properties_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: saved on another grp_group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_group_properties_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_options", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options.group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options.seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_options", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: saved on another group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: saved on another seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in layout_options_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all.group_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all.seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in layout_options_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: saved on another group_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: saved on another seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "layout_options_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lbf_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbf_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbf_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lbt_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbt_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lbt_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in list_options", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options.option_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in list_options", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: saved on another option_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in list_options_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all.option_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in list_options_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: saved on another option_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "list_options_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lists", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lists_medication", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_medication: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_medication: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to lists_touch", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_touch: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "lists_touch: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in log_comment_encrypt", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt.log_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in log_comment_encrypt", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: saved on another log_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in log_comment_encrypt_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all.log_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in log_comment_encrypt_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: saved on another log_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "log_comment_encrypt_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to login_mfa_registrations", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "login_mfa_registrations: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "login_mfa_registrations: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in medex_icons", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons.i_UID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in medex_icons", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: saved on another i_UID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in medex_icons_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all.i_UID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in medex_icons_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: saved on another i_UID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_icons_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to medex_outgoing", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_outgoing: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_outgoing: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to medex_prefs", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_prefs: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_prefs: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to medex_recalls", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_recalls: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "medex_recalls: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to misc_address_book", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "misc_address_book: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "misc_address_book: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_acl_group_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_group_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_group_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_acl_sections", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_sections: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_sections: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_acl_user_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_user_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_acl_user_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to module_configuration", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_configuration: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "module_configuration: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to modules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to modules_hooks_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_hooks_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_hooks_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to modules_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "modules_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to multiple_db", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "multiple_db: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "multiple_db: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to notes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to notification_log", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_log: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_log: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to notification_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "notification_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to oauth_clients", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_clients: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_clients: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to oauth_trusted_user", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_trusted_user: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "oauth_trusted_user: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onetime_auth", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onetime_auth: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onetime_auth: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onotes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onotes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onotes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_documents", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_documents: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_documents: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_mail", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_mail: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_mail: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_messages", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_messages: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_messages: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_online", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_online: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_online: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_portal_activity", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_portal_activity: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_portal_activity: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to onsite_signatures", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_signatures: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "onsite_signatures: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to openemr_module_vars", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_module_vars: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_module_vars: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to openemr_modules", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_modules: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_modules: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in openemr_postcalendar_categories", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories.pc_catid dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories.pc_seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in openemr_postcalendar_categories", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: saved on another pc_catid", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: saved on another pc_seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in openemr_postcalendar_categories_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all.pc_catid dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all.pc_seq dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in openemr_postcalendar_categories_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: saved on another pc_catid", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: saved on another pc_seq", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_categories_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to openemr_postcalendar_events", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_events: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "openemr_postcalendar_events: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_access_onsite", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_access_onsite: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_access_onsite: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_birthday_alert", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_birthday_alert: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_birthday_alert: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_care_experience_preferences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_care_experience_preferences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_care_experience_preferences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_data", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.DOB dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.city dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.country_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.email dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.fname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.lname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.phone_home dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.postal_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.providerID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.sex dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.street dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_data", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another DOB", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another city", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another country_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another email", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another fname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another lname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another phone_home", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another postal_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another providerID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another sex", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_data_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.DOB dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.city dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.country_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.email dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.fname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.lname dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.phone_home dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.postal_code dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.providerID dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.sex dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.street dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all.title dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_data_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another DOB", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another city", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another country_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another email", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another fname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another lname", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another phone_home", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another postal_code", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another providerID", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another sex", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: saved on another title", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_data_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_history", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_history: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_history: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_portal_menu", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu.menu_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_portal_menu", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: saved on another menu_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in patient_portal_menu_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all.menu_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in patient_portal_menu_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: saved on another menu_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_portal_menu_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_reminders", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_reminders: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_reminders: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_tracker_element", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker_element: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_tracker_element: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to patient_treatment_intervention_preferences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_treatment_intervention_preferences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "patient_treatment_intervention_preferences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to payment_gateway_details", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_gateway_details: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_gateway_details: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to payment_processing_audit", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_processing_audit: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payment_processing_audit: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to payments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "payments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to person", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to person_patient_link", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person_patient_link: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "person_patient_link: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to pharmacies", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pharmacies: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pharmacies: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to phone_numbers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "phone_numbers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "phone_numbers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to pnotes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pnotes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pnotes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in preference_value_sets", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets.sort_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in preference_value_sets", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: saved on another sort_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in preference_value_sets_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all.sort_order dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in preference_value_sets_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: saved on another sort_order", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "preference_value_sets_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to prescriptions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prescriptions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prescriptions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to prices", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prices: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "prices: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to pro_assessments", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pro_assessments: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "pro_assessments: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_answers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_answers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_answers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_order", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_order_code", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_code: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_code: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_order_relationships", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_relationships: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_order_relationships: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_providers", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_providers: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_providers: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_questions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_questions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_questions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_report", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_report: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_report: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_result", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_result: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_result: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_specimen", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_specimen: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_specimen: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to procedure_type", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_type: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "procedure_type: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to product_registration", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_registration: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_registration: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to product_warehouse", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_warehouse: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "product_warehouse: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to questionnaire_repository", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_repository: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_repository: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to questionnaire_response", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_response: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "questionnaire_response: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to recent_patients", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "recent_patients: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "recent_patients: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to registry", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "registry: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "registry: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to report_itemized", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_itemized: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_itemized: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to report_results", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_results: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "report_results: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_action", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_action_item", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action_item: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_action_item: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in rule_filter", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter.value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in rule_filter", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: saved on another value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in rule_filter_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all.value dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in rule_filter_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: saved on another value", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_filter_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_patient_data", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_patient_data: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_patient_data: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_reminder", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_reminder: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_reminder: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to rule_target", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_target: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "rule_target: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to sequences", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "sequences: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "sequences: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to session_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "session_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "session_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to shared_attributes", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "shared_attributes: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "shared_attributes: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to standardized_tables_track", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "standardized_tables_track: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "standardized_tables_track: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in supported_external_dataloads", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads.load_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in supported_external_dataloads", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: saved on another load_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "nothing saved in supported_external_dataloads_all", + "fault": "missing", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all.load_id dropped", + "fault": "partial", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "saved twice in supported_external_dataloads_all", + "fault": "duplicate", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: saved on another load_id", + "fault": "wrong_record", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: the save destroyed another record of the same subject", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "supported_external_dataloads_all: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to syndromic_surveillance", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "syndromic_surveillance: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "syndromic_surveillance: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to template_users", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "template_users: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "template_users: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups_counselors", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_counselors: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_counselors: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups_participant_attendance", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participant_attendance: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participant_attendance: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to therapy_groups_participants", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participants: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "therapy_groups_participants: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to track_events", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "track_events: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "track_events: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to transactions", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "transactions: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "transactions: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to user_settings", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "user_settings: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "user_settings: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to users", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to users_facility", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_facility: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_facility: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to users_secure", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_secure: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "users_secure: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to uuid_mapping", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_mapping: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_mapping: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to uuid_registry", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_registry: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "uuid_registry: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to valueset", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to valueset_oid", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset_oid: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "valueset_oid: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to verify_email", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "verify_email: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "verify_email: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to version", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "version: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "version: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to voids", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "voids: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "voids: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to x12_partners", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_partners: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_partners: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to x12_remote_tracker", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_remote_tracker: another record changed by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "x12_remote_tracker: another record deleted by the save", + "fault": "unrelated_edit", + "outcome": "", + "result": "killed" + }, + { + "applicable": true, + "checked": {}, + "detail": "a stray row written to a table this check does not read", + "fault": "unrelated_edit", + "outcome": "", + "result": "MISSED" + } + ], + "check_sha256": "sha256:45775a33d180ae75c0e0092724e459b64c5e0b1989f08828e1e71d8b5fa0103d", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 0 + }, + "duplicate": { + "applicable": 44, + "killed": 44 + }, + "missing": { + "applicable": 44, + "killed": 44 + }, + "partial": { + "applicable": 72, + "killed": 72 + }, + "unrelated_edit": { + "applicable": 913, + "killed": 870 + }, + "wrong_record": { + "applicable": 70, + "killed": 70 + }, + "wrong_value": { + "applicable": 1, + "killed": 0 + } + }, + "clean_pass": false, + "killed": 1100, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "recorded_states" + }, + "doc": { + "effects": [ + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=addresses|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=addresses|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=amc_misc_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=amc_misc_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=amendments|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=amendments|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=amendments_history|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=amendments_history|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=api_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=api_log|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=api_refresh_token|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=api_refresh_token|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=api_token|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=api_token|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=ar_activity|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=ar_activity|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=ar_session|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=ar_session|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=audit_details|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=audit_details|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=audit_master|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=audit_master|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=automatic_notification|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=automatic_notification|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=background_services|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=background_services|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=batchcom|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=batchcom|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=benefit_eligibility|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=benefit_eligibility|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=billing|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=billing|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=calendar_external|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=calendar_external|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=care_team_member|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=care_team_member|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=care_teams|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=care_teams|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "lft": { + "param": "providerID" + } + }, + "probe": "surface=categories|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=categories.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "lft": { + "param": "providerID" + } + }, + "probe": "surface=categories_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=categories_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=categories_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=categories_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=categories_to_documents|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=categories_to_documents|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=ccda|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=ccda|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ccda_components_id": { + "param": "providerID" + } + }, + "probe": "surface=ccda_components|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ccda_components_id": { + "param": "providerID" + } + }, + "probe": "surface=ccda_components_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=ccda_field_mapping|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=ccda_field_mapping|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ccda_sections_id": { + "param": "providerID" + } + }, + "probe": "surface=ccda_sections|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ccda_sections_id": { + "param": "providerID" + } + }, + "probe": "surface=ccda_sections_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=ccda_table_mapping|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=ccda_table_mapping|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=chart_tracker|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=chart_tracker|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=claims|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=claims|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_notes_documents|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_notes_documents|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_notes_procedure_results|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_notes_procedure_results|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_plans|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_plans.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_plans_rules|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_plans_rules|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_rules|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_rules.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_rules_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_rules_log.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ct_external": { + "param": "providerID" + } + }, + "probe": "surface=code_types|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ct_external": { + "param": "providerID" + } + }, + "probe": "surface=code_types_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "code": { + "param": "providerID" + } + }, + "probe": "surface=codes|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=codes.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "code": { + "param": "providerID" + } + }, + "probe": "surface=codes_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=codes_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=codes_history|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=codes_history|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=contact|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=contact.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=contact_address|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=contact_address|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=contact_relation|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=contact_relation|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=contact_telecom|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=contact_telecom|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=customlists|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=customlists|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=dated_reminders|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=dated_reminders|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=dated_reminders_link|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=dated_reminders_link|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=direct_message_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=direct_message_log|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=document_template_profiles|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=document_template_profiles|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=document_templates|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=document_templates.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=documents|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=documents|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "dlc_id": { + "param": "providerID" + } + }, + "probe": "surface=documents_legal_categories|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "dlc_id": { + "param": "providerID" + } + }, + "probe": "surface=documents_legal_categories_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=documents_legal_detail|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=documents_legal_detail|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=documents_legal_master|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=documents_legal_master|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=drug_inventory|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=drug_inventory|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=drug_sales|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=drug_sales|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=drug_templates|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=drug_templates|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=drugs|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=drugs|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=dsi_source_attributes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=dsi_source_attributes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=edi_sequences|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=edi_sequences.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=eligibility_verification|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=eligibility_verification|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=email_queue|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=email_queue|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=employer_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=employer_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=enc_category_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=enc_category_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=erx_narcotics|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=erx_narcotics|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=erx_rx_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=erx_rx_log|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=erx_ttl_touch|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=erx_ttl_touch|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=esign_signatures|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=esign_signatures|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=export_job|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=export_job|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=extended_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=extended_log|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=external_encounters|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=external_encounters|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=external_procedures|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=external_procedures|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=facility|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=facility.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=facility_user_ids|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=facility_user_ids|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=fee_schedule|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=fee_schedule|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=fee_sheet_options|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=fee_sheet_options|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_care_plan|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_care_plan|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_clinical_instructions|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_clinical_instructions|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_clinical_notes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_clinical_notes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_dictation|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_dictation|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_encounter|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_encounter|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_acuity|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_acuity|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_antseg|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_antseg|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_base|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_base|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_biometrics|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_biometrics|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_external|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_external|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_hpi|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_hpi|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_locking|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_locking|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_mag_dispense|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_mag_dispense|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_mag_impplan|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_mag_impplan|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_mag_orders|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_mag_orders|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ordering": { + "param": "providerID" + } + }, + "probe": "surface=form_eye_mag_prefs|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_mag_prefs.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "ordering": { + "param": "providerID" + } + }, + "probe": "surface=form_eye_mag_prefs_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_mag_prefs_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_mag_wearing|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_mag_wearing|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_neuro|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_neuro|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_postseg|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_postseg|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_refraction|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_refraction|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_ros|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_ros|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_eye_vitals|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_eye_vitals|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_functional_cognitive_status|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_functional_cognitive_status|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_group_attendance|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_group_attendance|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_groups_encounter|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_groups_encounter|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_history_sdoh|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_history_sdoh|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_history_sdoh_health_concerns|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_history_sdoh_health_concerns|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_misc_billing_options|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_misc_billing_options|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_observation|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_observation|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_questionnaire_assessments|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_questionnaire_assessments|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_reviewofs|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_reviewofs|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_ros|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_ros|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_soap|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_soap|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_taskman|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_taskman|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_vital_details|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_vital_details|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_vitals|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_vitals|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_vitals_calculation|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_vitals_calculation|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_vitals_calculation_components|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_vitals_calculation_components|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_vitals_calculation_form_vitals|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_vitals_calculation_form_vitals|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=forms|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=forms|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_acl|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_acl.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_acl_sections|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_acl_sections.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_acl_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_acl_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aco|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aco.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aco_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aco_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aco_sections|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aco_sections.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aco_sections_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aco_sections_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aco_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aco_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "lft": { + "param": "providerID" + } + }, + "probe": "surface=gacl_aro_groups|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_groups.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "lft": { + "param": "providerID" + } + }, + "probe": "surface=gacl_aro_groups_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_groups_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro_groups_id_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_groups_id_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro_groups_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_groups_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro_sections|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_sections.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro_sections_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_sections_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_aro_seq|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_aro_seq.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_axo|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_axo|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_axo_groups|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_axo_groups|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_axo_groups_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_axo_groups_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_axo_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_axo_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_axo_sections|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_axo_sections|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_groups_aro_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_groups_aro_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_groups_axo_map|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_groups_axo_map|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gacl_phpgacl|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gacl_phpgacl|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "gl_value": { + "param": "providerID" + } + }, + "probe": "surface=globals|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "gl_value": { + "param": "providerID" + } + }, + "probe": "surface=globals_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=gprelations|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=gprelations|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=groups|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=groups.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=history_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=history_data.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_dx_order_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_dx_order_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_gem_dx_10_9|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_gem_dx_10_9|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_gem_dx_9_10|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_gem_dx_9_10|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_gem_pcs_10_9|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_gem_pcs_10_9|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_gem_pcs_9_10|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_gem_pcs_9_10|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_pcs_order_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_pcs_order_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_reimbr_dx_9_10|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_reimbr_dx_9_10|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd10_reimbr_pcs_9_10|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd10_reimbr_pcs_9_10|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd9_dx_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd9_dx_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd9_dx_long_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd9_dx_long_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd9_sg_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd9_sg_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=icd9_sg_long_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=icd9_sg_long_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=immunization_observation|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=immunization_observation|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=immunizations|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=immunizations|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=insurance_companies|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=insurance_companies|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=insurance_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=insurance_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=insurance_numbers|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=insurance_numbers|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=insurance_type_codes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=insurance_type_codes.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=ip_tracking|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=ip_tracking|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=issue_encounter|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=issue_encounter|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=issue_types|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=issue_types|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=jwt_grant_history|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=jwt_grant_history|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=keys|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=keys.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "cons_id": { + "param": "providerID" + } + }, + "probe": "surface=lang_constants|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "cons_id": { + "param": "providerID" + } + }, + "probe": "surface=lang_constants_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lang_custom|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lang_custom|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "lang_id": { + "param": "providerID" + } + }, + "probe": "surface=lang_languages|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "lang_id": { + "param": "providerID" + } + }, + "probe": "surface=lang_languages_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "grp_group_id": { + "param": "providerID" + } + }, + "probe": "surface=layout_group_properties|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "grp_group_id": { + "param": "providerID" + } + }, + "probe": "surface=layout_group_properties_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "group_id": { + "param": "providerID" + }, + "seq": { + "param": "providerID" + } + }, + "probe": "surface=layout_options|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "group_id": { + "param": "providerID" + }, + "seq": { + "param": "providerID" + } + }, + "probe": "surface=layout_options_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lbf_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lbf_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lbt_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lbt_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "option_id": { + "param": "sex" + }, + "title": { + "param": "sex" + } + }, + "probe": "surface=list_options|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "option_id": { + "param": "sex" + }, + "title": { + "param": "sex" + } + }, + "probe": "surface=list_options_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lists|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lists|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lists_medication|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lists_medication|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lists_touch|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lists_touch|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=log.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "log_id": { + "param": "providerID" + } + }, + "probe": "surface=log_comment_encrypt|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=log_comment_encrypt.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "log_id": { + "param": "providerID" + } + }, + "probe": "surface=log_comment_encrypt_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=log_comment_encrypt_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=login_mfa_registrations|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=login_mfa_registrations|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "i_UID": { + "param": "providerID" + } + }, + "probe": "surface=medex_icons|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "i_UID": { + "param": "providerID" + } + }, + "probe": "surface=medex_icons_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=medex_outgoing|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=medex_outgoing|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=medex_prefs|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=medex_prefs|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=medex_recalls|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=medex_recalls|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=misc_address_book|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=misc_address_book|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=module_acl_group_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=module_acl_group_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=module_acl_sections|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=module_acl_sections|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=module_acl_user_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=module_acl_user_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=module_configuration|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=module_configuration|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=modules|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=modules|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=modules_hooks_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=modules_hooks_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=modules_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=modules_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=multiple_db|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=multiple_db|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=notes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=notes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=notification_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=notification_log|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=notification_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=notification_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=oauth_clients|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=oauth_clients|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=oauth_trusted_user|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=oauth_trusted_user|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onetime_auth|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onetime_auth|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onotes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onotes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onsite_documents|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onsite_documents|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onsite_mail|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onsite_mail|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onsite_messages|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onsite_messages|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onsite_online|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onsite_online|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onsite_portal_activity|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onsite_portal_activity|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=onsite_signatures|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=onsite_signatures|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=openemr_module_vars|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=openemr_module_vars|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=openemr_modules|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=openemr_modules|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "pc_catid": { + "param": "providerID" + }, + "pc_seq": { + "param": "providerID" + } + }, + "probe": "surface=openemr_postcalendar_categories|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "pc_catid": { + "param": "providerID" + }, + "pc_seq": { + "param": "providerID" + } + }, + "probe": "surface=openemr_postcalendar_categories_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=openemr_postcalendar_events|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=openemr_postcalendar_events|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_access_onsite|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_access_onsite|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_birthday_alert|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_birthday_alert|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_care_experience_preferences|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_care_experience_preferences|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "DOB": { + "param": "DOB" + }, + "city": { + "param": "city" + }, + "country_code": { + "param": "country_code" + }, + "email": { + "param": "email" + }, + "fname": { + "param": "fname" + }, + "lname": { + "param": "lname" + }, + "phone_home": { + "param": "phone_home" + }, + "postal_code": { + "param": "postal_code" + }, + "providerID": { + "param": "providerID" + }, + "sex": { + "param": "sex" + }, + "street": { + "param": "street" + }, + "title": { + "param": "title" + } + }, + "probe": "surface=patient_data|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_data.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "DOB": { + "param": "DOB" + }, + "city": { + "param": "city" + }, + "country_code": { + "param": "country_code" + }, + "email": { + "param": "email" + }, + "fname": { + "param": "fname" + }, + "lname": { + "param": "lname" + }, + "phone_home": { + "param": "phone_home" + }, + "postal_code": { + "param": "postal_code" + }, + "providerID": { + "param": "providerID" + }, + "sex": { + "param": "sex" + }, + "street": { + "param": "street" + }, + "title": { + "param": "title" + } + }, + "probe": "surface=patient_data_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_data_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_history|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_history|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "menu_order": { + "param": "providerID" + } + }, + "probe": "surface=patient_portal_menu|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "menu_order": { + "param": "providerID" + } + }, + "probe": "surface=patient_portal_menu_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_reminders|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_reminders|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_tracker|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_tracker|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_tracker_element|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_tracker_element|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=patient_treatment_intervention_preferences|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_treatment_intervention_preferences|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=payment_gateway_details|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=payment_gateway_details|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=payment_processing_audit|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=payment_processing_audit|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=payments|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=payments|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=person|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=person|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=person_patient_link|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=person_patient_link|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=pharmacies|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=pharmacies|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=phone_numbers|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=phone_numbers|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=pnotes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=pnotes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "sort_order": { + "param": "providerID" + } + }, + "probe": "surface=preference_value_sets|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=preference_value_sets.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "sort_order": { + "param": "providerID" + } + }, + "probe": "surface=preference_value_sets_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=preference_value_sets_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=prescriptions|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=prescriptions|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=prices|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=prices|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=pro_assessments|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=pro_assessments|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_answers|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_answers|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_order|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_order|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_order_code|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_order_code|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_order_relationships|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_order_relationships|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_providers|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_providers|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_questions|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_questions|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_report|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_report|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_result|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_result|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_specimen|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_specimen|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=procedure_type|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=procedure_type|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=product_registration|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=product_registration|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=product_warehouse|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=product_warehouse|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=questionnaire_repository|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=questionnaire_repository|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=questionnaire_response|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=questionnaire_response|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=recent_patients|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=recent_patients|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=registry|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=registry.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=report_itemized|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=report_itemized|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=report_results|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=report_results|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=rule_action|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_action.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=rule_action_item|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_action_item|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "value": { + "param": "sex" + } + }, + "probe": "surface=rule_filter|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_filter.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "value": { + "param": "sex" + } + }, + "probe": "surface=rule_filter_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_filter_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=rule_patient_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_patient_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=rule_reminder|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_reminder.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=rule_target|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=rule_target.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=sequences|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=sequences.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=session_tracker|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=session_tracker|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=shared_attributes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=shared_attributes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=standardized_tables_track|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=standardized_tables_track|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "load_id": { + "param": "providerID" + } + }, + "probe": "surface=supported_external_dataloads|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "load_id": { + "param": "providerID" + } + }, + "probe": "surface=supported_external_dataloads_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=syndromic_surveillance|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=syndromic_surveillance|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=template_users|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=template_users|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=therapy_groups|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=therapy_groups|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=therapy_groups_counselors|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=therapy_groups_counselors|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=therapy_groups_participant_attendance|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=therapy_groups_participant_attendance|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=therapy_groups_participants|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=therapy_groups_participants|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=track_events|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=track_events|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=transactions|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=transactions|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=user_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=user_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=users|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=users.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=users_facility|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=users_facility|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=users_secure|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=users_secure.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=uuid_mapping|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=uuid_mapping|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=uuid_registry|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=uuid_registry|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=valueset|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=valueset|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=valueset_oid|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=valueset_oid|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=verify_email|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=verify_email|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=version|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=version|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=voids|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=voids|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=x12_partners|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=x12_partners|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=x12_remote_tracker|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=x12_remote_tracker|no row here changes or disappears", + "risk": "irreversible" + } + ], + "schema_version": "openadapt.verify/v1", + "verifier": { + "kind": "surfaces", + "surfaces": { + "addresses": { + "kind": "sql", + "sql_query": "SELECT * FROM \"addresses\"", + "sqlite_database": "" + }, + "amc_misc_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"amc_misc_data\"", + "sqlite_database": "" + }, + "amendments": { + "kind": "sql", + "sql_query": "SELECT * FROM \"amendments\"", + "sqlite_database": "" + }, + "amendments_history": { + "kind": "sql", + "sql_query": "SELECT * FROM \"amendments_history\"", + "sqlite_database": "" + }, + "api_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"api_log\"", + "sqlite_database": "" + }, + "api_refresh_token": { + "kind": "sql", + "sql_query": "SELECT * FROM \"api_refresh_token\"", + "sqlite_database": "" + }, + "api_token": { + "kind": "sql", + "sql_query": "SELECT * FROM \"api_token\"", + "sqlite_database": "" + }, + "ar_activity": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ar_activity\"", + "sqlite_database": "" + }, + "ar_session": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ar_session\"", + "sqlite_database": "" + }, + "audit_details": { + "kind": "sql", + "sql_query": "SELECT * FROM \"audit_details\"", + "sqlite_database": "" + }, + "audit_master": { + "kind": "sql", + "sql_query": "SELECT * FROM \"audit_master\"", + "sqlite_database": "" + }, + "automatic_notification": { + "kind": "sql", + "sql_query": "SELECT * FROM \"automatic_notification\"", + "sqlite_database": "" + }, + "background_services": { + "kind": "sql", + "sql_query": "SELECT * FROM \"background_services\"", + "sqlite_database": "" + }, + "batchcom": { + "kind": "sql", + "sql_query": "SELECT * FROM \"batchcom\"", + "sqlite_database": "" + }, + "benefit_eligibility": { + "kind": "sql", + "sql_query": "SELECT * FROM \"benefit_eligibility\"", + "sqlite_database": "" + }, + "billing": { + "kind": "sql", + "sql_query": "SELECT * FROM \"billing\"", + "sqlite_database": "" + }, + "calendar_external": { + "kind": "sql", + "sql_query": "SELECT * FROM \"calendar_external\"", + "sqlite_database": "" + }, + "care_team_member": { + "kind": "sql", + "sql_query": "SELECT * FROM \"care_team_member\"", + "sqlite_database": "" + }, + "care_teams": { + "kind": "sql", + "sql_query": "SELECT * FROM \"care_teams\"", + "sqlite_database": "" + }, + "categories": { + "kind": "sql", + "sql_query": "SELECT * FROM \"categories\" WHERE \"lft\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "categories.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"categories\" WHERE \"lft\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "categories_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"categories\"", + "sqlite_database": "" + }, + "categories_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"categories\"", + "sqlite_database": "" + }, + "categories_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"categories_seq\"", + "sqlite_database": "" + }, + "categories_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"categories_seq\"", + "sqlite_database": "" + }, + "categories_to_documents": { + "kind": "sql", + "sql_query": "SELECT * FROM \"categories_to_documents\"", + "sqlite_database": "" + }, + "ccda": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda\"", + "sqlite_database": "" + }, + "ccda_components": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda_components\" WHERE \"ccda_components_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "ccda_components_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda_components\"", + "sqlite_database": "" + }, + "ccda_field_mapping": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda_field_mapping\"", + "sqlite_database": "" + }, + "ccda_sections": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda_sections\" WHERE \"ccda_sections_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "ccda_sections_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda_sections\"", + "sqlite_database": "" + }, + "ccda_table_mapping": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ccda_table_mapping\"", + "sqlite_database": "" + }, + "chart_tracker": { + "kind": "sql", + "sql_query": "SELECT * FROM \"chart_tracker\"", + "sqlite_database": "" + }, + "claims": { + "kind": "sql", + "sql_query": "SELECT * FROM \"claims\"", + "sqlite_database": "" + }, + "clinical_notes_documents": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_notes_documents\"", + "sqlite_database": "" + }, + "clinical_notes_procedure_results": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_notes_procedure_results\"", + "sqlite_database": "" + }, + "clinical_plans": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_plans\"", + "sqlite_database": "" + }, + "clinical_plans.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"clinical_plans\"", + "sqlite_database": "" + }, + "clinical_plans_rules": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_plans_rules\"", + "sqlite_database": "" + }, + "clinical_rules": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_rules\"", + "sqlite_database": "" + }, + "clinical_rules.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"clinical_rules\"", + "sqlite_database": "" + }, + "clinical_rules_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_rules_log\"", + "sqlite_database": "" + }, + "clinical_rules_log.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"clinical_rules_log\"", + "sqlite_database": "" + }, + "code_types": { + "kind": "sql", + "sql_query": "SELECT * FROM \"code_types\" WHERE \"ct_external\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "code_types_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"code_types\"", + "sqlite_database": "" + }, + "codes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"codes\" WHERE \"code\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "codes.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"codes\" WHERE \"code\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "codes_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"codes\"", + "sqlite_database": "" + }, + "codes_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"codes\"", + "sqlite_database": "" + }, + "codes_history": { + "kind": "sql", + "sql_query": "SELECT * FROM \"codes_history\"", + "sqlite_database": "" + }, + "contact": { + "kind": "sql", + "sql_query": "SELECT * FROM \"contact\"", + "sqlite_database": "" + }, + "contact.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"contact\"", + "sqlite_database": "" + }, + "contact_address": { + "kind": "sql", + "sql_query": "SELECT * FROM \"contact_address\"", + "sqlite_database": "" + }, + "contact_relation": { + "kind": "sql", + "sql_query": "SELECT * FROM \"contact_relation\"", + "sqlite_database": "" + }, + "contact_telecom": { + "kind": "sql", + "sql_query": "SELECT * FROM \"contact_telecom\"", + "sqlite_database": "" + }, + "customlists": { + "kind": "sql", + "sql_query": "SELECT * FROM \"customlists\"", + "sqlite_database": "" + }, + "dated_reminders": { + "kind": "sql", + "sql_query": "SELECT * FROM \"dated_reminders\"", + "sqlite_database": "" + }, + "dated_reminders_link": { + "kind": "sql", + "sql_query": "SELECT * FROM \"dated_reminders_link\"", + "sqlite_database": "" + }, + "direct_message_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"direct_message_log\"", + "sqlite_database": "" + }, + "document_template_profiles": { + "kind": "sql", + "sql_query": "SELECT * FROM \"document_template_profiles\"", + "sqlite_database": "" + }, + "document_templates": { + "kind": "sql", + "sql_query": "SELECT * FROM \"document_templates\"", + "sqlite_database": "" + }, + "document_templates.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"document_templates\"", + "sqlite_database": "" + }, + "documents": { + "kind": "sql", + "sql_query": "SELECT * FROM \"documents\"", + "sqlite_database": "" + }, + "documents_legal_categories": { + "kind": "sql", + "sql_query": "SELECT * FROM \"documents_legal_categories\" WHERE \"dlc_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "documents_legal_categories_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"documents_legal_categories\"", + "sqlite_database": "" + }, + "documents_legal_detail": { + "kind": "sql", + "sql_query": "SELECT * FROM \"documents_legal_detail\"", + "sqlite_database": "" + }, + "documents_legal_master": { + "kind": "sql", + "sql_query": "SELECT * FROM \"documents_legal_master\"", + "sqlite_database": "" + }, + "drug_inventory": { + "kind": "sql", + "sql_query": "SELECT * FROM \"drug_inventory\"", + "sqlite_database": "" + }, + "drug_sales": { + "kind": "sql", + "sql_query": "SELECT * FROM \"drug_sales\"", + "sqlite_database": "" + }, + "drug_templates": { + "kind": "sql", + "sql_query": "SELECT * FROM \"drug_templates\"", + "sqlite_database": "" + }, + "drugs": { + "kind": "sql", + "sql_query": "SELECT * FROM \"drugs\"", + "sqlite_database": "" + }, + "dsi_source_attributes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"dsi_source_attributes\"", + "sqlite_database": "" + }, + "edi_sequences": { + "kind": "sql", + "sql_query": "SELECT * FROM \"edi_sequences\"", + "sqlite_database": "" + }, + "edi_sequences.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"edi_sequences\"", + "sqlite_database": "" + }, + "eligibility_verification": { + "kind": "sql", + "sql_query": "SELECT * FROM \"eligibility_verification\"", + "sqlite_database": "" + }, + "email_queue": { + "kind": "sql", + "sql_query": "SELECT * FROM \"email_queue\"", + "sqlite_database": "" + }, + "employer_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"employer_data\"", + "sqlite_database": "" + }, + "enc_category_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"enc_category_map\"", + "sqlite_database": "" + }, + "erx_narcotics": { + "kind": "sql", + "sql_query": "SELECT * FROM \"erx_narcotics\"", + "sqlite_database": "" + }, + "erx_rx_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"erx_rx_log\"", + "sqlite_database": "" + }, + "erx_ttl_touch": { + "kind": "sql", + "sql_query": "SELECT * FROM \"erx_ttl_touch\"", + "sqlite_database": "" + }, + "esign_signatures": { + "kind": "sql", + "sql_query": "SELECT * FROM \"esign_signatures\"", + "sqlite_database": "" + }, + "export_job": { + "kind": "sql", + "sql_query": "SELECT * FROM \"export_job\"", + "sqlite_database": "" + }, + "extended_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"extended_log\"", + "sqlite_database": "" + }, + "external_encounters": { + "kind": "sql", + "sql_query": "SELECT * FROM \"external_encounters\"", + "sqlite_database": "" + }, + "external_procedures": { + "kind": "sql", + "sql_query": "SELECT * FROM \"external_procedures\"", + "sqlite_database": "" + }, + "facility": { + "kind": "sql", + "sql_query": "SELECT * FROM \"facility\"", + "sqlite_database": "" + }, + "facility.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"facility\"", + "sqlite_database": "" + }, + "facility_user_ids": { + "kind": "sql", + "sql_query": "SELECT * FROM \"facility_user_ids\"", + "sqlite_database": "" + }, + "fee_schedule": { + "kind": "sql", + "sql_query": "SELECT * FROM \"fee_schedule\"", + "sqlite_database": "" + }, + "fee_sheet_options": { + "kind": "sql", + "sql_query": "SELECT * FROM \"fee_sheet_options\"", + "sqlite_database": "" + }, + "form_care_plan": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_care_plan\"", + "sqlite_database": "" + }, + "form_clinical_instructions": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_clinical_instructions\"", + "sqlite_database": "" + }, + "form_clinical_notes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_clinical_notes\"", + "sqlite_database": "" + }, + "form_dictation": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_dictation\"", + "sqlite_database": "" + }, + "form_encounter": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_encounter\"", + "sqlite_database": "" + }, + "form_eye_acuity": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_acuity\"", + "sqlite_database": "" + }, + "form_eye_antseg": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_antseg\"", + "sqlite_database": "" + }, + "form_eye_base": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_base\"", + "sqlite_database": "" + }, + "form_eye_biometrics": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_biometrics\"", + "sqlite_database": "" + }, + "form_eye_external": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_external\"", + "sqlite_database": "" + }, + "form_eye_hpi": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_hpi\"", + "sqlite_database": "" + }, + "form_eye_locking": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_locking\"", + "sqlite_database": "" + }, + "form_eye_mag_dispense": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_mag_dispense\"", + "sqlite_database": "" + }, + "form_eye_mag_impplan": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_mag_impplan\"", + "sqlite_database": "" + }, + "form_eye_mag_orders": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_mag_orders\"", + "sqlite_database": "" + }, + "form_eye_mag_prefs": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_mag_prefs\" WHERE \"ordering\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "form_eye_mag_prefs.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"form_eye_mag_prefs\" WHERE \"ordering\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "form_eye_mag_prefs_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_mag_prefs\"", + "sqlite_database": "" + }, + "form_eye_mag_prefs_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"form_eye_mag_prefs\"", + "sqlite_database": "" + }, + "form_eye_mag_wearing": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_mag_wearing\"", + "sqlite_database": "" + }, + "form_eye_neuro": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_neuro\"", + "sqlite_database": "" + }, + "form_eye_postseg": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_postseg\"", + "sqlite_database": "" + }, + "form_eye_refraction": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_refraction\"", + "sqlite_database": "" + }, + "form_eye_ros": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_ros\"", + "sqlite_database": "" + }, + "form_eye_vitals": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_eye_vitals\"", + "sqlite_database": "" + }, + "form_functional_cognitive_status": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_functional_cognitive_status\"", + "sqlite_database": "" + }, + "form_group_attendance": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_group_attendance\"", + "sqlite_database": "" + }, + "form_groups_encounter": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_groups_encounter\"", + "sqlite_database": "" + }, + "form_history_sdoh": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_history_sdoh\"", + "sqlite_database": "" + }, + "form_history_sdoh_health_concerns": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_history_sdoh_health_concerns\"", + "sqlite_database": "" + }, + "form_misc_billing_options": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_misc_billing_options\"", + "sqlite_database": "" + }, + "form_observation": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_observation\"", + "sqlite_database": "" + }, + "form_questionnaire_assessments": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_questionnaire_assessments\"", + "sqlite_database": "" + }, + "form_reviewofs": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_reviewofs\"", + "sqlite_database": "" + }, + "form_ros": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_ros\"", + "sqlite_database": "" + }, + "form_soap": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_soap\"", + "sqlite_database": "" + }, + "form_taskman": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_taskman\"", + "sqlite_database": "" + }, + "form_vital_details": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_vital_details\"", + "sqlite_database": "" + }, + "form_vitals": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_vitals\"", + "sqlite_database": "" + }, + "form_vitals_calculation": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_vitals_calculation\"", + "sqlite_database": "" + }, + "form_vitals_calculation_components": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_vitals_calculation_components\"", + "sqlite_database": "" + }, + "form_vitals_calculation_form_vitals": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_vitals_calculation_form_vitals\"", + "sqlite_database": "" + }, + "forms": { + "kind": "sql", + "sql_query": "SELECT * FROM \"forms\"", + "sqlite_database": "" + }, + "gacl_acl": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_acl\"", + "sqlite_database": "" + }, + "gacl_acl.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_acl\"", + "sqlite_database": "" + }, + "gacl_acl_sections": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_acl_sections\"", + "sqlite_database": "" + }, + "gacl_acl_sections.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_acl_sections\"", + "sqlite_database": "" + }, + "gacl_acl_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_acl_seq\"", + "sqlite_database": "" + }, + "gacl_acl_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_acl_seq\"", + "sqlite_database": "" + }, + "gacl_aco": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aco\"", + "sqlite_database": "" + }, + "gacl_aco.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aco\"", + "sqlite_database": "" + }, + "gacl_aco_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aco_map\"", + "sqlite_database": "" + }, + "gacl_aco_sections": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aco_sections\"", + "sqlite_database": "" + }, + "gacl_aco_sections.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aco_sections\"", + "sqlite_database": "" + }, + "gacl_aco_sections_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aco_sections_seq\"", + "sqlite_database": "" + }, + "gacl_aco_sections_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aco_sections_seq\"", + "sqlite_database": "" + }, + "gacl_aco_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aco_seq\"", + "sqlite_database": "" + }, + "gacl_aco_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aco_seq\"", + "sqlite_database": "" + }, + "gacl_aro": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro\"", + "sqlite_database": "" + }, + "gacl_aro.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro\"", + "sqlite_database": "" + }, + "gacl_aro_groups": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_groups\" WHERE \"lft\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "gacl_aro_groups.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro_groups\" WHERE \"lft\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "gacl_aro_groups_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_groups\"", + "sqlite_database": "" + }, + "gacl_aro_groups_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro_groups\"", + "sqlite_database": "" + }, + "gacl_aro_groups_id_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_groups_id_seq\"", + "sqlite_database": "" + }, + "gacl_aro_groups_id_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro_groups_id_seq\"", + "sqlite_database": "" + }, + "gacl_aro_groups_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_groups_map\"", + "sqlite_database": "" + }, + "gacl_aro_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_map\"", + "sqlite_database": "" + }, + "gacl_aro_sections": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_sections\"", + "sqlite_database": "" + }, + "gacl_aro_sections.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro_sections\"", + "sqlite_database": "" + }, + "gacl_aro_sections_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_sections_seq\"", + "sqlite_database": "" + }, + "gacl_aro_sections_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro_sections_seq\"", + "sqlite_database": "" + }, + "gacl_aro_seq": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_aro_seq\"", + "sqlite_database": "" + }, + "gacl_aro_seq.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"gacl_aro_seq\"", + "sqlite_database": "" + }, + "gacl_axo": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_axo\"", + "sqlite_database": "" + }, + "gacl_axo_groups": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_axo_groups\"", + "sqlite_database": "" + }, + "gacl_axo_groups_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_axo_groups_map\"", + "sqlite_database": "" + }, + "gacl_axo_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_axo_map\"", + "sqlite_database": "" + }, + "gacl_axo_sections": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_axo_sections\"", + "sqlite_database": "" + }, + "gacl_groups_aro_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_groups_aro_map\"", + "sqlite_database": "" + }, + "gacl_groups_axo_map": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_groups_axo_map\"", + "sqlite_database": "" + }, + "gacl_phpgacl": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gacl_phpgacl\"", + "sqlite_database": "" + }, + "globals": { + "kind": "sql", + "sql_query": "SELECT * FROM \"globals\" WHERE \"gl_value\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "globals_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"globals\"", + "sqlite_database": "" + }, + "gprelations": { + "kind": "sql", + "sql_query": "SELECT * FROM \"gprelations\"", + "sqlite_database": "" + }, + "groups": { + "kind": "sql", + "sql_query": "SELECT * FROM \"groups\"", + "sqlite_database": "" + }, + "groups.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"groups\"", + "sqlite_database": "" + }, + "history_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"history_data\"", + "sqlite_database": "" + }, + "history_data.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"history_data\"", + "sqlite_database": "" + }, + "icd10_dx_order_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_dx_order_code\"", + "sqlite_database": "" + }, + "icd10_gem_dx_10_9": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_gem_dx_10_9\"", + "sqlite_database": "" + }, + "icd10_gem_dx_9_10": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_gem_dx_9_10\"", + "sqlite_database": "" + }, + "icd10_gem_pcs_10_9": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_gem_pcs_10_9\"", + "sqlite_database": "" + }, + "icd10_gem_pcs_9_10": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_gem_pcs_9_10\"", + "sqlite_database": "" + }, + "icd10_pcs_order_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_pcs_order_code\"", + "sqlite_database": "" + }, + "icd10_reimbr_dx_9_10": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_reimbr_dx_9_10\"", + "sqlite_database": "" + }, + "icd10_reimbr_pcs_9_10": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd10_reimbr_pcs_9_10\"", + "sqlite_database": "" + }, + "icd9_dx_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd9_dx_code\"", + "sqlite_database": "" + }, + "icd9_dx_long_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd9_dx_long_code\"", + "sqlite_database": "" + }, + "icd9_sg_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd9_sg_code\"", + "sqlite_database": "" + }, + "icd9_sg_long_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"icd9_sg_long_code\"", + "sqlite_database": "" + }, + "immunization_observation": { + "kind": "sql", + "sql_query": "SELECT * FROM \"immunization_observation\"", + "sqlite_database": "" + }, + "immunizations": { + "kind": "sql", + "sql_query": "SELECT * FROM \"immunizations\"", + "sqlite_database": "" + }, + "insurance_companies": { + "kind": "sql", + "sql_query": "SELECT * FROM \"insurance_companies\"", + "sqlite_database": "" + }, + "insurance_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"insurance_data\"", + "sqlite_database": "" + }, + "insurance_numbers": { + "kind": "sql", + "sql_query": "SELECT * FROM \"insurance_numbers\"", + "sqlite_database": "" + }, + "insurance_type_codes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"insurance_type_codes\"", + "sqlite_database": "" + }, + "insurance_type_codes.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"insurance_type_codes\"", + "sqlite_database": "" + }, + "ip_tracking": { + "kind": "sql", + "sql_query": "SELECT * FROM \"ip_tracking\"", + "sqlite_database": "" + }, + "issue_encounter": { + "kind": "sql", + "sql_query": "SELECT * FROM \"issue_encounter\"", + "sqlite_database": "" + }, + "issue_types": { + "kind": "sql", + "sql_query": "SELECT * FROM \"issue_types\"", + "sqlite_database": "" + }, + "jwt_grant_history": { + "kind": "sql", + "sql_query": "SELECT * FROM \"jwt_grant_history\"", + "sqlite_database": "" + }, + "keys": { + "kind": "sql", + "sql_query": "SELECT * FROM \"keys\"", + "sqlite_database": "" + }, + "keys.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"keys\"", + "sqlite_database": "" + }, + "lang_constants": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lang_constants\" WHERE \"cons_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "lang_constants_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lang_constants\"", + "sqlite_database": "" + }, + "lang_custom": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lang_custom\"", + "sqlite_database": "" + }, + "lang_languages": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lang_languages\" WHERE \"lang_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "lang_languages_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lang_languages\"", + "sqlite_database": "" + }, + "layout_group_properties": { + "kind": "sql", + "sql_query": "SELECT * FROM \"layout_group_properties\" WHERE \"grp_group_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "layout_group_properties_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"layout_group_properties\"", + "sqlite_database": "" + }, + "layout_options": { + "kind": "sql", + "sql_query": "SELECT * FROM \"layout_options\" WHERE \"group_id\" = :p0 AND \"seq\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "layout_options_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"layout_options\"", + "sqlite_database": "" + }, + "lbf_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lbf_data\"", + "sqlite_database": "" + }, + "lbt_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lbt_data\"", + "sqlite_database": "" + }, + "list_options": { + "kind": "sql", + "sql_query": "SELECT * FROM \"list_options\" WHERE \"option_id\" = :p0 AND \"title\" = :p0", + "sql_query_params": { + "p0": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "list_options_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"list_options\"", + "sqlite_database": "" + }, + "lists": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lists\"", + "sqlite_database": "" + }, + "lists_medication": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lists_medication\"", + "sqlite_database": "" + }, + "lists_touch": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lists_touch\"", + "sqlite_database": "" + }, + "log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"log\"", + "sqlite_database": "" + }, + "log.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"log\"", + "sqlite_database": "" + }, + "log_comment_encrypt": { + "kind": "sql", + "sql_query": "SELECT * FROM \"log_comment_encrypt\" WHERE \"log_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "log_comment_encrypt.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"log_comment_encrypt\" WHERE \"log_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "log_comment_encrypt_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"log_comment_encrypt\"", + "sqlite_database": "" + }, + "log_comment_encrypt_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"log_comment_encrypt\"", + "sqlite_database": "" + }, + "login_mfa_registrations": { + "kind": "sql", + "sql_query": "SELECT * FROM \"login_mfa_registrations\"", + "sqlite_database": "" + }, + "medex_icons": { + "kind": "sql", + "sql_query": "SELECT * FROM \"medex_icons\" WHERE \"i_UID\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "medex_icons_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"medex_icons\"", + "sqlite_database": "" + }, + "medex_outgoing": { + "kind": "sql", + "sql_query": "SELECT * FROM \"medex_outgoing\"", + "sqlite_database": "" + }, + "medex_prefs": { + "kind": "sql", + "sql_query": "SELECT * FROM \"medex_prefs\"", + "sqlite_database": "" + }, + "medex_recalls": { + "kind": "sql", + "sql_query": "SELECT * FROM \"medex_recalls\"", + "sqlite_database": "" + }, + "misc_address_book": { + "kind": "sql", + "sql_query": "SELECT * FROM \"misc_address_book\"", + "sqlite_database": "" + }, + "module_acl_group_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"module_acl_group_settings\"", + "sqlite_database": "" + }, + "module_acl_sections": { + "kind": "sql", + "sql_query": "SELECT * FROM \"module_acl_sections\"", + "sqlite_database": "" + }, + "module_acl_user_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"module_acl_user_settings\"", + "sqlite_database": "" + }, + "module_configuration": { + "kind": "sql", + "sql_query": "SELECT * FROM \"module_configuration\"", + "sqlite_database": "" + }, + "modules": { + "kind": "sql", + "sql_query": "SELECT * FROM \"modules\"", + "sqlite_database": "" + }, + "modules_hooks_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"modules_hooks_settings\"", + "sqlite_database": "" + }, + "modules_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"modules_settings\"", + "sqlite_database": "" + }, + "multiple_db": { + "kind": "sql", + "sql_query": "SELECT * FROM \"multiple_db\"", + "sqlite_database": "" + }, + "notes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"notes\"", + "sqlite_database": "" + }, + "notification_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"notification_log\"", + "sqlite_database": "" + }, + "notification_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"notification_settings\"", + "sqlite_database": "" + }, + "oauth_clients": { + "kind": "sql", + "sql_query": "SELECT * FROM \"oauth_clients\"", + "sqlite_database": "" + }, + "oauth_trusted_user": { + "kind": "sql", + "sql_query": "SELECT * FROM \"oauth_trusted_user\"", + "sqlite_database": "" + }, + "onetime_auth": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onetime_auth\"", + "sqlite_database": "" + }, + "onotes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onotes\"", + "sqlite_database": "" + }, + "onsite_documents": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onsite_documents\"", + "sqlite_database": "" + }, + "onsite_mail": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onsite_mail\"", + "sqlite_database": "" + }, + "onsite_messages": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onsite_messages\"", + "sqlite_database": "" + }, + "onsite_online": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onsite_online\"", + "sqlite_database": "" + }, + "onsite_portal_activity": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onsite_portal_activity\"", + "sqlite_database": "" + }, + "onsite_signatures": { + "kind": "sql", + "sql_query": "SELECT * FROM \"onsite_signatures\"", + "sqlite_database": "" + }, + "openemr_module_vars": { + "kind": "sql", + "sql_query": "SELECT * FROM \"openemr_module_vars\"", + "sqlite_database": "" + }, + "openemr_modules": { + "kind": "sql", + "sql_query": "SELECT * FROM \"openemr_modules\"", + "sqlite_database": "" + }, + "openemr_postcalendar_categories": { + "kind": "sql", + "sql_query": "SELECT * FROM \"openemr_postcalendar_categories\" WHERE \"pc_catid\" = :p0 AND \"pc_seq\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "openemr_postcalendar_categories_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"openemr_postcalendar_categories\"", + "sqlite_database": "" + }, + "openemr_postcalendar_events": { + "kind": "sql", + "sql_query": "SELECT * FROM \"openemr_postcalendar_events\"", + "sqlite_database": "" + }, + "patient_access_onsite": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_access_onsite\"", + "sqlite_database": "" + }, + "patient_birthday_alert": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_birthday_alert\"", + "sqlite_database": "" + }, + "patient_care_experience_preferences": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_care_experience_preferences\"", + "sqlite_database": "" + }, + "patient_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_data\" WHERE \"DOB\" = :p0 AND \"city\" = :p1 AND \"country_code\" = :p2 AND \"email\" = :p3 AND \"fname\" = :p4 AND \"lname\" = :p5 AND \"phone_home\" = :p6 AND \"postal_code\" = :p7 AND \"providerID\" = :p8 AND \"sex\" = :p9 AND \"title\" = :p10", + "sql_query_params": { + "p0": { + "param": "DOB" + }, + "p1": { + "param": "city" + }, + "p10": { + "param": "title" + }, + "p2": { + "param": "country_code" + }, + "p3": { + "param": "email" + }, + "p4": { + "param": "fname" + }, + "p5": { + "param": "lname" + }, + "p6": { + "param": "phone_home" + }, + "p7": { + "param": "postal_code" + }, + "p8": { + "param": "providerID" + }, + "p9": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "patient_data.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"patient_data\" WHERE \"DOB\" = :p0 AND \"city\" = :p1 AND \"country_code\" = :p2 AND \"email\" = :p3 AND \"fname\" = :p4 AND \"lname\" = :p5 AND \"phone_home\" = :p6 AND \"postal_code\" = :p7 AND \"providerID\" = :p8 AND \"sex\" = :p9 AND \"title\" = :p10", + "sql_query_params": { + "p0": { + "param": "DOB" + }, + "p1": { + "param": "city" + }, + "p10": { + "param": "title" + }, + "p2": { + "param": "country_code" + }, + "p3": { + "param": "email" + }, + "p4": { + "param": "fname" + }, + "p5": { + "param": "lname" + }, + "p6": { + "param": "phone_home" + }, + "p7": { + "param": "postal_code" + }, + "p8": { + "param": "providerID" + }, + "p9": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "patient_data_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_data\"", + "sqlite_database": "" + }, + "patient_data_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"patient_data\"", + "sqlite_database": "" + }, + "patient_history": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_history\"", + "sqlite_database": "" + }, + "patient_portal_menu": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_portal_menu\" WHERE \"menu_order\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "patient_portal_menu_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_portal_menu\"", + "sqlite_database": "" + }, + "patient_reminders": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_reminders\"", + "sqlite_database": "" + }, + "patient_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_settings\"", + "sqlite_database": "" + }, + "patient_tracker": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_tracker\"", + "sqlite_database": "" + }, + "patient_tracker_element": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_tracker_element\"", + "sqlite_database": "" + }, + "patient_treatment_intervention_preferences": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_treatment_intervention_preferences\"", + "sqlite_database": "" + }, + "payment_gateway_details": { + "kind": "sql", + "sql_query": "SELECT * FROM \"payment_gateway_details\"", + "sqlite_database": "" + }, + "payment_processing_audit": { + "kind": "sql", + "sql_query": "SELECT * FROM \"payment_processing_audit\"", + "sqlite_database": "" + }, + "payments": { + "kind": "sql", + "sql_query": "SELECT * FROM \"payments\"", + "sqlite_database": "" + }, + "person": { + "kind": "sql", + "sql_query": "SELECT * FROM \"person\"", + "sqlite_database": "" + }, + "person_patient_link": { + "kind": "sql", + "sql_query": "SELECT * FROM \"person_patient_link\"", + "sqlite_database": "" + }, + "pharmacies": { + "kind": "sql", + "sql_query": "SELECT * FROM \"pharmacies\"", + "sqlite_database": "" + }, + "phone_numbers": { + "kind": "sql", + "sql_query": "SELECT * FROM \"phone_numbers\"", + "sqlite_database": "" + }, + "pnotes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"pnotes\"", + "sqlite_database": "" + }, + "preference_value_sets": { + "kind": "sql", + "sql_query": "SELECT * FROM \"preference_value_sets\" WHERE \"sort_order\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "preference_value_sets.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"preference_value_sets\" WHERE \"sort_order\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "preference_value_sets_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"preference_value_sets\"", + "sqlite_database": "" + }, + "preference_value_sets_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"preference_value_sets\"", + "sqlite_database": "" + }, + "prescriptions": { + "kind": "sql", + "sql_query": "SELECT * FROM \"prescriptions\"", + "sqlite_database": "" + }, + "prices": { + "kind": "sql", + "sql_query": "SELECT * FROM \"prices\"", + "sqlite_database": "" + }, + "pro_assessments": { + "kind": "sql", + "sql_query": "SELECT * FROM \"pro_assessments\"", + "sqlite_database": "" + }, + "procedure_answers": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_answers\"", + "sqlite_database": "" + }, + "procedure_order": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_order\"", + "sqlite_database": "" + }, + "procedure_order_code": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_order_code\"", + "sqlite_database": "" + }, + "procedure_order_relationships": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_order_relationships\"", + "sqlite_database": "" + }, + "procedure_providers": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_providers\"", + "sqlite_database": "" + }, + "procedure_questions": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_questions\"", + "sqlite_database": "" + }, + "procedure_report": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_report\"", + "sqlite_database": "" + }, + "procedure_result": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_result\"", + "sqlite_database": "" + }, + "procedure_specimen": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_specimen\"", + "sqlite_database": "" + }, + "procedure_type": { + "kind": "sql", + "sql_query": "SELECT * FROM \"procedure_type\"", + "sqlite_database": "" + }, + "product_registration": { + "kind": "sql", + "sql_query": "SELECT * FROM \"product_registration\"", + "sqlite_database": "" + }, + "product_warehouse": { + "kind": "sql", + "sql_query": "SELECT * FROM \"product_warehouse\"", + "sqlite_database": "" + }, + "questionnaire_repository": { + "kind": "sql", + "sql_query": "SELECT * FROM \"questionnaire_repository\"", + "sqlite_database": "" + }, + "questionnaire_response": { + "kind": "sql", + "sql_query": "SELECT * FROM \"questionnaire_response\"", + "sqlite_database": "" + }, + "recent_patients": { + "kind": "sql", + "sql_query": "SELECT * FROM \"recent_patients\"", + "sqlite_database": "" + }, + "registry": { + "kind": "sql", + "sql_query": "SELECT * FROM \"registry\"", + "sqlite_database": "" + }, + "registry.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"registry\"", + "sqlite_database": "" + }, + "report_itemized": { + "kind": "sql", + "sql_query": "SELECT * FROM \"report_itemized\"", + "sqlite_database": "" + }, + "report_results": { + "kind": "sql", + "sql_query": "SELECT * FROM \"report_results\"", + "sqlite_database": "" + }, + "rule_action": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_action\"", + "sqlite_database": "" + }, + "rule_action.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"rule_action\"", + "sqlite_database": "" + }, + "rule_action_item": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_action_item\"", + "sqlite_database": "" + }, + "rule_filter": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_filter\" WHERE \"value\" = :p0", + "sql_query_params": { + "p0": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "rule_filter.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"rule_filter\" WHERE \"value\" = :p0", + "sql_query_params": { + "p0": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "rule_filter_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_filter\"", + "sqlite_database": "" + }, + "rule_filter_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"rule_filter\"", + "sqlite_database": "" + }, + "rule_patient_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_patient_data\"", + "sqlite_database": "" + }, + "rule_reminder": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_reminder\"", + "sqlite_database": "" + }, + "rule_reminder.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"rule_reminder\"", + "sqlite_database": "" + }, + "rule_target": { + "kind": "sql", + "sql_query": "SELECT * FROM \"rule_target\"", + "sqlite_database": "" + }, + "rule_target.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"rule_target\"", + "sqlite_database": "" + }, + "sequences": { + "kind": "sql", + "sql_query": "SELECT * FROM \"sequences\"", + "sqlite_database": "" + }, + "sequences.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"sequences\"", + "sqlite_database": "" + }, + "session_tracker": { + "kind": "sql", + "sql_query": "SELECT * FROM \"session_tracker\"", + "sqlite_database": "" + }, + "shared_attributes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"shared_attributes\"", + "sqlite_database": "" + }, + "standardized_tables_track": { + "kind": "sql", + "sql_query": "SELECT * FROM \"standardized_tables_track\"", + "sqlite_database": "" + }, + "supported_external_dataloads": { + "kind": "sql", + "sql_query": "SELECT * FROM \"supported_external_dataloads\" WHERE \"load_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "supported_external_dataloads_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"supported_external_dataloads\"", + "sqlite_database": "" + }, + "syndromic_surveillance": { + "kind": "sql", + "sql_query": "SELECT * FROM \"syndromic_surveillance\"", + "sqlite_database": "" + }, + "template_users": { + "kind": "sql", + "sql_query": "SELECT * FROM \"template_users\"", + "sqlite_database": "" + }, + "therapy_groups": { + "kind": "sql", + "sql_query": "SELECT * FROM \"therapy_groups\"", + "sqlite_database": "" + }, + "therapy_groups_counselors": { + "kind": "sql", + "sql_query": "SELECT * FROM \"therapy_groups_counselors\"", + "sqlite_database": "" + }, + "therapy_groups_participant_attendance": { + "kind": "sql", + "sql_query": "SELECT * FROM \"therapy_groups_participant_attendance\"", + "sqlite_database": "" + }, + "therapy_groups_participants": { + "kind": "sql", + "sql_query": "SELECT * FROM \"therapy_groups_participants\"", + "sqlite_database": "" + }, + "track_events": { + "kind": "sql", + "sql_query": "SELECT * FROM \"track_events\"", + "sqlite_database": "" + }, + "transactions": { + "kind": "sql", + "sql_query": "SELECT * FROM \"transactions\"", + "sqlite_database": "" + }, + "user_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"user_settings\"", + "sqlite_database": "" + }, + "users": { + "kind": "sql", + "sql_query": "SELECT * FROM \"users\"", + "sqlite_database": "" + }, + "users.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"users\"", + "sqlite_database": "" + }, + "users_facility": { + "kind": "sql", + "sql_query": "SELECT * FROM \"users_facility\"", + "sqlite_database": "" + }, + "users_secure": { + "kind": "sql", + "sql_query": "SELECT * FROM \"users_secure\"", + "sqlite_database": "" + }, + "users_secure.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"users_secure\"", + "sqlite_database": "" + }, + "uuid_mapping": { + "kind": "sql", + "sql_query": "SELECT * FROM \"uuid_mapping\"", + "sqlite_database": "" + }, + "uuid_registry": { + "kind": "sql", + "sql_query": "SELECT * FROM \"uuid_registry\"", + "sqlite_database": "" + }, + "valueset": { + "kind": "sql", + "sql_query": "SELECT * FROM \"valueset\"", + "sqlite_database": "" + }, + "valueset_oid": { + "kind": "sql", + "sql_query": "SELECT * FROM \"valueset_oid\"", + "sqlite_database": "" + }, + "verify_email": { + "kind": "sql", + "sql_query": "SELECT * FROM \"verify_email\"", + "sqlite_database": "" + }, + "version": { + "kind": "sql", + "sql_query": "SELECT * FROM \"version\"", + "sqlite_database": "" + }, + "voids": { + "kind": "sql", + "sql_query": "SELECT * FROM \"voids\"", + "sqlite_database": "" + }, + "x12_partners": { + "kind": "sql", + "sql_query": "SELECT * FROM \"x12_partners\"", + "sqlite_database": "" + }, + "x12_remote_tracker": { + "kind": "sql", + "sql_query": "SELECT * FROM \"x12_remote_tracker\"", + "sqlite_database": "" + } + } + } + }, + "gate_error": "the clean save left no record the copy can find", + "misses": [ + "ok: the clean save as recorded (form_eye_mag_prefs_all: 0 records match the target selector, expected 1 (missing / phantom / rejected write -- the screen may show success but nothing landed); rule_filter_all: 0 records match the target selector, expected 1 (missing / phantom / rejected write -- the screen may show success but nothing landed))", + "stale: categories: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: categories_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: ccda_components: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: ccda_components_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: ccda_sections: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: ccda_sections_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: code_types: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: code_types_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: codes: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: codes_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: documents_legal_categories: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: documents_legal_categories_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: form_eye_mag_prefs: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: form_eye_mag_prefs_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: gacl_aro_groups: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: gacl_aro_groups_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: globals: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: globals_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: lang_constants: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: lang_constants_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: lang_languages: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: lang_languages_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: layout_group_properties: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: layout_group_properties_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: layout_options: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: layout_options_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: list_options: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: list_options_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: log_comment_encrypt: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: log_comment_encrypt_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: medex_icons: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: medex_icons_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: openemr_postcalendar_categories: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: openemr_postcalendar_categories_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: patient_portal_menu: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: patient_portal_menu_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: preference_value_sets: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: preference_value_sets_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: rule_filter: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: rule_filter_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: supported_external_dataloads: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: supported_external_dataloads_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "collateral_unaudited: a stray row written to a table this check does not read (the check reads only addresses, amc_misc_data, amendments, amendments_history, api_log, api_refresh_token, api_token, ar_activity, ar_session, audit_details, audit_master, automatic_notification, background_services, batchcom, benefit_eligibility, billing, calendar_external, care_team_member, care_teams, categories, categories_all, categories_seq, categories_to_documents, ccda, ccda_components, ccda_components_all, ccda_field_mapping, ccda_sections, ccda_sections_all, ccda_table_mapping, chart_tracker, claims, clinical_notes_documents, clinical_notes_procedure_results, clinical_plans, clinical_plans_rules, clinical_rules, clinical_rules_log, code_types, code_types_all, codes, codes_all, codes_history, contact, contact_address, contact_relation, contact_telecom, customlists, dated_reminders, dated_reminders_link, direct_message_log, document_template_profiles, document_templates, documents, documents_legal_categories, documents_legal_categories_all, documents_legal_detail, documents_legal_master, drug_inventory, drug_sales, drug_templates, drugs, dsi_source_attributes, edi_sequences, eligibility_verification, email_queue, employer_data, enc_category_map, erx_narcotics, erx_rx_log, erx_ttl_touch, esign_signatures, export_job, extended_log, external_encounters, external_procedures, facility, facility_user_ids, fee_schedule, fee_sheet_options, form_care_plan, form_clinical_instructions, form_clinical_notes, form_dictation, form_encounter, form_eye_acuity, form_eye_antseg, form_eye_base, form_eye_biometrics, form_eye_external, form_eye_hpi, form_eye_locking, form_eye_mag_dispense, form_eye_mag_impplan, form_eye_mag_orders, form_eye_mag_prefs, form_eye_mag_prefs_all, form_eye_mag_wearing, form_eye_neuro, form_eye_postseg, form_eye_refraction, form_eye_ros, form_eye_vitals, form_functional_cognitive_status, form_group_attendance, form_groups_encounter, form_history_sdoh, form_history_sdoh_health_concerns, form_misc_billing_options, form_observation, form_questionnaire_assessments, form_reviewofs, form_ros, form_soap, form_taskman, form_vital_details, form_vitals, form_vitals_calculation, form_vitals_calculation_components, form_vitals_calculation_form_vitals, forms, gacl_acl, gacl_acl_sections, gacl_acl_seq, gacl_aco, gacl_aco_map, gacl_aco_sections, gacl_aco_sections_seq, gacl_aco_seq, gacl_aro, gacl_aro_groups, gacl_aro_groups_all, gacl_aro_groups_id_seq, gacl_aro_groups_map, gacl_aro_map, gacl_aro_sections, gacl_aro_sections_seq, gacl_aro_seq, gacl_axo, gacl_axo_groups, gacl_axo_groups_map, gacl_axo_map, gacl_axo_sections, gacl_groups_aro_map, gacl_groups_axo_map, gacl_phpgacl, globals, globals_all, gprelations, groups, history_data, icd10_dx_order_code, icd10_gem_dx_10_9, icd10_gem_dx_9_10, icd10_gem_pcs_10_9, icd10_gem_pcs_9_10, icd10_pcs_order_code, icd10_reimbr_dx_9_10, icd10_reimbr_pcs_9_10, icd9_dx_code, icd9_dx_long_code, icd9_sg_code, icd9_sg_long_code, immunization_observation, immunizations, insurance_companies, insurance_data, insurance_numbers, insurance_type_codes, ip_tracking, issue_encounter, issue_types, jwt_grant_history, keys, lang_constants, lang_constants_all, lang_custom, lang_languages, lang_languages_all, layout_group_properties, layout_group_properties_all, layout_options, layout_options_all, lbf_data, lbt_data, list_options, list_options_all, lists, lists_medication, lists_touch, log, log_comment_encrypt, log_comment_encrypt_all, login_mfa_registrations, medex_icons, medex_icons_all, medex_outgoing, medex_prefs, medex_recalls, misc_address_book, module_acl_group_settings, module_acl_sections, module_acl_user_settings, module_configuration, modules, modules_hooks_settings, modules_settings, multiple_db, notes, notification_log, notification_settings, oauth_clients, oauth_trusted_user, onetime_auth, onotes, onsite_documents, onsite_mail, onsite_messages, onsite_online, onsite_portal_activity, onsite_signatures, openemr_module_vars, openemr_modules, openemr_postcalendar_categories, openemr_postcalendar_categories_all, openemr_postcalendar_events, patient_access_onsite, patient_birthday_alert, patient_care_experience_preferences, patient_data, patient_data_all, patient_history, patient_portal_menu, patient_portal_menu_all, patient_reminders, patient_settings, patient_tracker, patient_tracker_element, patient_treatment_intervention_preferences, payment_gateway_details, payment_processing_audit, payments, person, person_patient_link, pharmacies, phone_numbers, pnotes, preference_value_sets, preference_value_sets_all, prescriptions, prices, pro_assessments, procedure_answers, procedure_order, procedure_order_code, procedure_order_relationships, procedure_providers, procedure_questions, procedure_report, procedure_result, procedure_specimen, procedure_type, product_registration, product_warehouse, questionnaire_repository, questionnaire_response, recent_patients, registry, report_itemized, report_results, rule_action, rule_action_item, rule_filter, rule_filter_all, rule_patient_data, rule_reminder, rule_target, sequences, session_tracker, shared_attributes, standardized_tables_track, supported_external_dataloads, supported_external_dataloads_all, syndromic_surveillance, template_users, therapy_groups, therapy_groups_counselors, therapy_groups_participant_attendance, therapy_groups_participants, track_events, transactions, user_settings, users, users_facility, users_secure, uuid_mapping, uuid_registry, valueset, valueset_oid, verify_email, version, voids, x12_partners, x12_remote_tracker; a write anywhere else passes it (give a database read path with --db, or more reads))", + "not covered: table lang_definitions: 234778 rows, too many to scan for the saved row", + "read: facility: the generated query returns 1 row(s), the scan saw 1", + "read: facility.content: the generated query returns 1 row(s), the scan saw 1", + "read: history_data: the generated query returns 4 row(s), the scan saw 4", + "read: history_data.content: the generated query returns 4 row(s), the scan saw 4", + "read: patient_data: the generated query returns 1 row(s), the scan saw 1", + "read: patient_data.content: the generated query returns 1 row(s), the scan saw 1", + "read: patient_data_all: the generated query returns 4 row(s), the scan saw 4", + "read: patient_data_all.content: the generated query returns 4 row(s), the scan saw 4", + "read: uuid_registry: the generated query returns 9 row(s), the scan saw 9" + ], + "params": [ + "DOB", + "city", + "country_code", + "email", + "fname", + "lname", + "phone_home", + "postal_code", + "providerID", + "sex", + "street", + "title" + ], + "surfaces": [ + "addresses", + "amc_misc_data", + "amendments", + "amendments_history", + "api_log", + "api_refresh_token", + "api_token", + "ar_activity", + "ar_session", + "audit_details", + "audit_master", + "automatic_notification", + "background_services", + "batchcom", + "benefit_eligibility", + "billing", + "calendar_external", + "care_team_member", + "care_teams", + "categories", + "categories_all", + "categories_seq", + "categories_to_documents", + "ccda", + "ccda_components", + "ccda_components_all", + "ccda_field_mapping", + "ccda_sections", + "ccda_sections_all", + "ccda_table_mapping", + "chart_tracker", + "claims", + "clinical_notes_documents", + "clinical_notes_procedure_results", + "clinical_plans", + "clinical_plans_rules", + "clinical_rules", + "clinical_rules_log", + "code_types", + "code_types_all", + "codes", + "codes_all", + "codes_history", + "contact", + "contact_address", + "contact_relation", + "contact_telecom", + "customlists", + "dated_reminders", + "dated_reminders_link", + "direct_message_log", + "document_template_profiles", + "document_templates", + "documents", + "documents_legal_categories", + "documents_legal_categories_all", + "documents_legal_detail", + "documents_legal_master", + "drug_inventory", + "drug_sales", + "drug_templates", + "drugs", + "dsi_source_attributes", + "edi_sequences", + "eligibility_verification", + "email_queue", + "employer_data", + "enc_category_map", + "erx_narcotics", + "erx_rx_log", + "erx_ttl_touch", + "esign_signatures", + "export_job", + "extended_log", + "external_encounters", + "external_procedures", + "facility", + "facility_user_ids", + "fee_schedule", + "fee_sheet_options", + "form_care_plan", + "form_clinical_instructions", + "form_clinical_notes", + "form_dictation", + "form_encounter", + "form_eye_acuity", + "form_eye_antseg", + "form_eye_base", + "form_eye_biometrics", + "form_eye_external", + "form_eye_hpi", + "form_eye_locking", + "form_eye_mag_dispense", + "form_eye_mag_impplan", + "form_eye_mag_orders", + "form_eye_mag_prefs", + "form_eye_mag_prefs_all", + "form_eye_mag_wearing", + "form_eye_neuro", + "form_eye_postseg", + "form_eye_refraction", + "form_eye_ros", + "form_eye_vitals", + "form_functional_cognitive_status", + "form_group_attendance", + "form_groups_encounter", + "form_history_sdoh", + "form_history_sdoh_health_concerns", + "form_misc_billing_options", + "form_observation", + "form_questionnaire_assessments", + "form_reviewofs", + "form_ros", + "form_soap", + "form_taskman", + "form_vital_details", + "form_vitals", + "form_vitals_calculation", + "form_vitals_calculation_components", + "form_vitals_calculation_form_vitals", + "forms", + "gacl_acl", + "gacl_acl_sections", + "gacl_acl_seq", + "gacl_aco", + "gacl_aco_map", + "gacl_aco_sections", + "gacl_aco_sections_seq", + "gacl_aco_seq", + "gacl_aro", + "gacl_aro_groups", + "gacl_aro_groups_all", + "gacl_aro_groups_id_seq", + "gacl_aro_groups_map", + "gacl_aro_map", + "gacl_aro_sections", + "gacl_aro_sections_seq", + "gacl_aro_seq", + "gacl_axo", + "gacl_axo_groups", + "gacl_axo_groups_map", + "gacl_axo_map", + "gacl_axo_sections", + "gacl_groups_aro_map", + "gacl_groups_axo_map", + "gacl_phpgacl", + "globals", + "globals_all", + "gprelations", + "groups", + "history_data", + "icd10_dx_order_code", + "icd10_gem_dx_10_9", + "icd10_gem_dx_9_10", + "icd10_gem_pcs_10_9", + "icd10_gem_pcs_9_10", + "icd10_pcs_order_code", + "icd10_reimbr_dx_9_10", + "icd10_reimbr_pcs_9_10", + "icd9_dx_code", + "icd9_dx_long_code", + "icd9_sg_code", + "icd9_sg_long_code", + "immunization_observation", + "immunizations", + "insurance_companies", + "insurance_data", + "insurance_numbers", + "insurance_type_codes", + "ip_tracking", + "issue_encounter", + "issue_types", + "jwt_grant_history", + "keys", + "lang_constants", + "lang_constants_all", + "lang_custom", + "lang_languages", + "lang_languages_all", + "layout_group_properties", + "layout_group_properties_all", + "layout_options", + "layout_options_all", + "lbf_data", + "lbt_data", + "list_options", + "list_options_all", + "lists", + "lists_medication", + "lists_touch", + "log", + "log_comment_encrypt", + "log_comment_encrypt_all", + "login_mfa_registrations", + "medex_icons", + "medex_icons_all", + "medex_outgoing", + "medex_prefs", + "medex_recalls", + "misc_address_book", + "module_acl_group_settings", + "module_acl_sections", + "module_acl_user_settings", + "module_configuration", + "modules", + "modules_hooks_settings", + "modules_settings", + "multiple_db", + "notes", + "notification_log", + "notification_settings", + "oauth_clients", + "oauth_trusted_user", + "onetime_auth", + "onotes", + "onsite_documents", + "onsite_mail", + "onsite_messages", + "onsite_online", + "onsite_portal_activity", + "onsite_signatures", + "openemr_module_vars", + "openemr_modules", + "openemr_postcalendar_categories", + "openemr_postcalendar_categories_all", + "openemr_postcalendar_events", + "patient_access_onsite", + "patient_birthday_alert", + "patient_care_experience_preferences", + "patient_data", + "patient_data_all", + "patient_history", + "patient_portal_menu", + "patient_portal_menu_all", + "patient_reminders", + "patient_settings", + "patient_tracker", + "patient_tracker_element", + "patient_treatment_intervention_preferences", + "payment_gateway_details", + "payment_processing_audit", + "payments", + "person", + "person_patient_link", + "pharmacies", + "phone_numbers", + "pnotes", + "preference_value_sets", + "preference_value_sets_all", + "prescriptions", + "prices", + "pro_assessments", + "procedure_answers", + "procedure_order", + "procedure_order_code", + "procedure_order_relationships", + "procedure_providers", + "procedure_questions", + "procedure_report", + "procedure_result", + "procedure_specimen", + "procedure_type", + "product_registration", + "product_warehouse", + "questionnaire_repository", + "questionnaire_response", + "recent_patients", + "registry", + "report_itemized", + "report_results", + "rule_action", + "rule_action_item", + "rule_filter", + "rule_filter_all", + "rule_patient_data", + "rule_reminder", + "rule_target", + "sequences", + "session_tracker", + "shared_attributes", + "standardized_tables_track", + "supported_external_dataloads", + "supported_external_dataloads_all", + "syndromic_surveillance", + "template_users", + "therapy_groups", + "therapy_groups_counselors", + "therapy_groups_participant_attendance", + "therapy_groups_participants", + "track_events", + "transactions", + "user_settings", + "users", + "users_facility", + "users_secure", + "uuid_mapping", + "uuid_registry", + "valueset", + "valueset_oid", + "verify_email", + "version", + "voids", + "x12_partners", + "x12_remote_tracker" + ], + "targets": [ + { + "bound": { + "lft": "providerID" + }, + "surface": "categories" + }, + { + "bound": { + "lft": "providerID" + }, + "surface": "categories_all" + }, + { + "bound": { + "ccda_components_id": "providerID" + }, + "surface": "ccda_components" + }, + { + "bound": { + "ccda_components_id": "providerID" + }, + "surface": "ccda_components_all" + }, + { + "bound": { + "ccda_sections_id": "providerID" + }, + "surface": "ccda_sections" + }, + { + "bound": { + "ccda_sections_id": "providerID" + }, + "surface": "ccda_sections_all" + }, + { + "bound": { + "ct_external": "providerID" + }, + "surface": "code_types" + }, + { + "bound": { + "ct_external": "providerID" + }, + "surface": "code_types_all" + }, + { + "bound": { + "code": "providerID" + }, + "surface": "codes" + }, + { + "bound": { + "code": "providerID" + }, + "surface": "codes_all" + }, + { + "bound": { + "dlc_id": "providerID" + }, + "surface": "documents_legal_categories" + }, + { + "bound": { + "dlc_id": "providerID" + }, + "surface": "documents_legal_categories_all" + }, + { + "bound": { + "ordering": "providerID" + }, + "surface": "form_eye_mag_prefs" + }, + { + "bound": { + "ordering": "providerID" + }, + "surface": "form_eye_mag_prefs_all" + }, + { + "bound": { + "lft": "providerID" + }, + "surface": "gacl_aro_groups" + }, + { + "bound": { + "lft": "providerID" + }, + "surface": "gacl_aro_groups_all" + }, + { + "bound": { + "gl_value": "providerID" + }, + "surface": "globals" + }, + { + "bound": { + "gl_value": "providerID" + }, + "surface": "globals_all" + }, + { + "bound": { + "cons_id": "providerID" + }, + "surface": "lang_constants" + }, + { + "bound": { + "cons_id": "providerID" + }, + "surface": "lang_constants_all" + }, + { + "bound": { + "lang_id": "providerID" + }, + "surface": "lang_languages" + }, + { + "bound": { + "lang_id": "providerID" + }, + "surface": "lang_languages_all" + }, + { + "bound": { + "grp_group_id": "providerID" + }, + "surface": "layout_group_properties" + }, + { + "bound": { + "grp_group_id": "providerID" + }, + "surface": "layout_group_properties_all" + }, + { + "bound": { + "group_id": "providerID", + "seq": "providerID" + }, + "surface": "layout_options" + }, + { + "bound": { + "group_id": "providerID", + "seq": "providerID" + }, + "surface": "layout_options_all" + }, + { + "bound": { + "option_id": "sex", + "title": "sex" + }, + "surface": "list_options" + }, + { + "bound": { + "option_id": "sex", + "title": "sex" + }, + "surface": "list_options_all" + }, + { + "bound": { + "log_id": "providerID" + }, + "surface": "log_comment_encrypt" + }, + { + "bound": { + "log_id": "providerID" + }, + "surface": "log_comment_encrypt_all" + }, + { + "bound": { + "i_UID": "providerID" + }, + "surface": "medex_icons" + }, + { + "bound": { + "i_UID": "providerID" + }, + "surface": "medex_icons_all" + }, + { + "bound": { + "pc_catid": "providerID", + "pc_seq": "providerID" + }, + "surface": "openemr_postcalendar_categories" + }, + { + "bound": { + "pc_catid": "providerID", + "pc_seq": "providerID" + }, + "surface": "openemr_postcalendar_categories_all" + }, + { + "bound": { + "DOB": "DOB", + "city": "city", + "country_code": "country_code", + "email": "email", + "fname": "fname", + "lname": "lname", + "phone_home": "phone_home", + "postal_code": "postal_code", + "providerID": "providerID", + "sex": "sex", + "street": "street", + "title": "title" + }, + "surface": "patient_data" + }, + { + "bound": { + "DOB": "DOB", + "city": "city", + "country_code": "country_code", + "email": "email", + "fname": "fname", + "lname": "lname", + "phone_home": "phone_home", + "postal_code": "postal_code", + "providerID": "providerID", + "sex": "sex", + "street": "street", + "title": "title" + }, + "surface": "patient_data_all" + }, + { + "bound": { + "menu_order": "providerID" + }, + "surface": "patient_portal_menu" + }, + { + "bound": { + "menu_order": "providerID" + }, + "surface": "patient_portal_menu_all" + }, + { + "bound": { + "sort_order": "providerID" + }, + "surface": "preference_value_sets" + }, + { + "bound": { + "sort_order": "providerID" + }, + "surface": "preference_value_sets_all" + }, + { + "bound": { + "value": "sex" + }, + "surface": "rule_filter" + }, + { + "bound": { + "value": "sex" + }, + "surface": "rule_filter_all" + }, + { + "bound": { + "load_id": "providerID" + }, + "surface": "supported_external_dataloads" + }, + { + "bound": { + "load_id": "providerID" + }, + "surface": "supported_external_dataloads_all" + } + ], + "working": false + } +} diff --git a/packages/flow/benchmark/verification_coverage/independent/results/standin-full/rows.json b/packages/flow/benchmark/verification_coverage/independent/results/standin-full/rows.json new file mode 100644 index 000000000..392d6921b --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/standin-full/rows.json @@ -0,0 +1,655 @@ +[ + { + "class": "clean", + "expect": "clean", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "id": "clean", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "ok", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + } + }, + { + "class": "wrong_record", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "wrong_record_existing_chart", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "wrong_record", + "expect": "fault", + "framed": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "wrong_record_lookalike", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_other_chart", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_other_history", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_table_note_other_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_table_allergy_other_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "id": "unrelated_table_insurance_new_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_other_chart_unattributed", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "misread_source", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "refuted" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "misread_dob", + "presave": "hold", + "presave_held_fields": [ + "DOB" + ], + "presave_score": "caught", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "misread_source", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "refuted" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "misread_swapped_names", + "presave": "hold", + "presave_held_fields": [ + "fname", + "lname" + ], + "presave_score": "caught", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "misread_source", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "id": "misread_wrong_provider", + "presave": "hold", + "presave_held_fields": [ + "provider" + ], + "presave_score": "caught", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "missing_side_record", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "id": "missing_history_record", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "duplicate", + "expect": "fault", + "framed": { + "checked": { + "delta": "refuted", + "frame": "held", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "duplicate_save", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "concurrent_legitimate", + "expect": "clean", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "id": "concurrent_other_chart", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "ok", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + } + }, + { + "class": "concurrent_legitimate", + "expect": "clean", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "id": "concurrent_new_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "ok", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "concurrent_plus_bot_stray", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + } +] diff --git a/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/RESULTS.md b/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/RESULTS.md new file mode 100644 index 000000000..0a6d217cf --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/RESULTS.md @@ -0,0 +1,32 @@ +### verification_coverage/independent/results/standin-slice/rows.json + +| class | cases | shipped | framed | synthesized | presave | +|---|---|---|---|---|---| +| clean | 1 | 1/1 ok | 1/1 ok | 0/1 ok, **1 false alarm** | 1/1 ok | +| concurrent_legitimate | 2 | 0/2 ok, **2 false alarm** | 2/2 ok | 0/2 ok, **2 false alarm** | 2/2 ok | +| wrong_record | 2 | 2/2 caught | 2/2 caught | 2/2 caught | 0/2 caught, **2 missed** | +| unrelated_change | 7 | 3/7 caught, **4 missed** | 6/7 caught, **1 missed** | 7/7 caught | 0/7 caught, **7 missed** | +| misread_source | 3 | 0/3 caught, **3 missed** | 2/3 caught, **1 missed** | 3/3 caught | 3/3 caught | +| missing_side_record | 1 | 0/1 caught, **1 missed** | 0/1 caught, **1 missed** | 1/1 caught | 0/1 caught, **1 missed** | +| duplicate | 1 | 1/1 caught | 1/1 caught | 1/1 caught | 0/1 caught, **1 missed** | + +| case | expect | shipped | framed | synthesized | pre-save | +|---|---|---|---|---|---| +| clean | clean | verified (ok) | verified (ok) | reconciliation_required (false_alarm) | agree | +| wrong_record_existing_chart | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| wrong_record_lookalike | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_other_chart | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_other_history | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_table_note_other_patient | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_table_allergy_other_patient | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| unrelated_table_insurance_new_patient | fault | verified (missed) | verified (missed) | reconciliation_required (caught) | agree | +| unrelated_other_chart_unattributed | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| misread_dob | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | hold | +| misread_swapped_names | fault | verified (missed) | reconciliation_required (caught) | reconciliation_required (caught) | hold | +| misread_wrong_provider | fault | verified (missed) | verified (missed) | reconciliation_required (caught) | hold | +| missing_history_record | fault | verified (missed) | verified (missed) | reconciliation_required (caught) | agree | +| duplicate_save | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | +| concurrent_other_chart | clean | reconciliation_required (false_alarm) | verified (ok) | reconciliation_required (false_alarm) | agree | +| concurrent_new_patient | clean | reconciliation_required (false_alarm) | verified (ok) | reconciliation_required (false_alarm) | agree | +| concurrent_plus_bot_stray | fault | reconciliation_required (caught) | reconciliation_required (caught) | reconciliation_required (caught) | agree | + diff --git a/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/checks.json b/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/checks.json new file mode 100644 index 000000000..4b79e709e --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/checks.json @@ -0,0 +1,1859 @@ +{ + "gates": { + "framed": { + "applicable": 18, + "cases": [ + { + "applicable": false, + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "detail": "the save as the app makes it", + "fault": "clean", + "outcome": "verified", + "result": "not applicable" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "email changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "lname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "title changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "fname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "DOB changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "sex changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "city changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "state changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "postal_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "phone_home changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "country_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "the values saved on a look-alike record", + "fault": "wrong_record", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "detail": "another record in the slice edited", + "fault": "unrelated_edit", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street, city, state, postal_code, phone_home, country_code left blank", + "fault": "partial", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "not_checked", + "source": "instruction" + }, + "detail": "the target saved twice", + "fault": "duplicate", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "nothing saved", + "fault": "missing", + "outcome": "halted_before_effect", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target lands after the check's timeout", + "fault": "delayed", + "outcome": "reconciliation_required", + "result": "killed" + } + ], + "check_sha256": "sha256:bd1032e11616b1a355a0dfcae6d8138f93da72730c37f01f1e3d6f72c8d89692", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 1 + }, + "duplicate": { + "applicable": 1, + "killed": 1 + }, + "missing": { + "applicable": 1, + "killed": 1 + }, + "partial": { + "applicable": 1, + "killed": 1 + }, + "unrelated_edit": { + "applicable": 1, + "killed": 1 + }, + "wrong_record": { + "applicable": 1, + "killed": 1 + }, + "wrong_value": { + "applicable": 12, + "killed": 12 + } + }, + "clean_pass": true, + "killed": 18, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "sqlite" + }, + "shipped": { + "applicable": 18, + "cases": [ + { + "applicable": false, + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "detail": "the save as the app makes it", + "fault": "clean", + "outcome": "verified", + "result": "not applicable" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "email changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "lname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "title changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "fname changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "DOB changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "sex changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "city changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "state changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "postal_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "phone_home changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "country_code changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "the values saved on a look-alike record", + "fault": "wrong_record", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "detail": "another record in the slice edited", + "fault": "unrelated_edit", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "street, city, state, postal_code, phone_home, country_code left blank", + "fault": "partial", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target saved twice", + "fault": "duplicate", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "nothing saved", + "fault": "missing", + "outcome": "halted_before_effect", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target lands after the check's timeout", + "fault": "delayed", + "outcome": "reconciliation_required", + "result": "killed" + } + ], + "check_sha256": "sha256:e788e0dad8351168546da5e87e646859f9e0f47eb8e98508e272f1a8a5462526", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 1 + }, + "duplicate": { + "applicable": 1, + "killed": 1 + }, + "missing": { + "applicable": 1, + "killed": 1 + }, + "partial": { + "applicable": 1, + "killed": 1 + }, + "unrelated_edit": { + "applicable": 1, + "killed": 1 + }, + "wrong_record": { + "applicable": 1, + "killed": 1 + }, + "wrong_value": { + "applicable": 12, + "killed": 12 + } + }, + "clean_pass": true, + "killed": 18, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "sqlite" + }, + "synthesized": { + "applicable": 7, + "cases": [ + { + "applicable": false, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the save as the app makes it", + "fault": "clean", + "outcome": "reconciliation_required", + "result": "not applicable" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "log_id changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "the values saved on a look-alike record", + "fault": "wrong_record", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "another record in the slice edited", + "fault": "unrelated_edit", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "log_id left blank", + "fault": "partial", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target saved twice", + "fault": "duplicate", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "nothing saved", + "fault": "missing", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target lands after the check's timeout", + "fault": "delayed", + "outcome": "reconciliation_required", + "result": "killed" + } + ], + "check_sha256": "sha256:00b5b6f39e4dbbbfa3feb55fdb4f14cd794851c1b36bff52ca97f482b21b6519", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 1 + }, + "duplicate": { + "applicable": 1, + "killed": 1 + }, + "missing": { + "applicable": 1, + "killed": 1 + }, + "partial": { + "applicable": 1, + "killed": 1 + }, + "unrelated_edit": { + "applicable": 1, + "killed": 1 + }, + "wrong_record": { + "applicable": 1, + "killed": 1 + }, + "wrong_value": { + "applicable": 1, + "killed": 1 + } + }, + "clean_pass": false, + "killed": 7, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "sqlite" + } + }, + "synthesized": { + "closed_world": "database", + "coverage": { + "applicable": 7, + "cases": [ + { + "applicable": false, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the save as the app makes it", + "fault": "clean", + "outcome": "reconciliation_required", + "result": "not applicable" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "log_id changed", + "fault": "wrong_value", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "the values saved on a look-alike record", + "fault": "wrong_record", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "another record in the slice edited", + "fault": "unrelated_edit", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "detail": "log_id left blank", + "fault": "partial", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target saved twice", + "fault": "duplicate", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "nothing saved", + "fault": "missing", + "outcome": "reconciliation_required", + "result": "killed" + }, + { + "applicable": true, + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "detail": "the target lands after the check's timeout", + "fault": "delayed", + "outcome": "reconciliation_required", + "result": "killed" + } + ], + "check_sha256": "sha256:00b5b6f39e4dbbbfa3feb55fdb4f14cd794851c1b36bff52ca97f482b21b6519", + "claims": [ + "delta", + "frame" + ], + "classes": { + "delayed": { + "applicable": 1, + "killed": 1 + }, + "duplicate": { + "applicable": 1, + "killed": 1 + }, + "missing": { + "applicable": 1, + "killed": 1 + }, + "partial": { + "applicable": 1, + "killed": 1 + }, + "unrelated_edit": { + "applicable": 1, + "killed": 1 + }, + "wrong_record": { + "applicable": 1, + "killed": 1 + }, + "wrong_value": { + "applicable": 1, + "killed": 1 + } + }, + "clean_pass": false, + "killed": 7, + "schema_version": "openadapt.check-coverage/v1", + "suite": { + "id": "openadapt.fault-suite/public", + "version": "1.0.0" + }, + "test_copy": "sqlite" + }, + "doc": { + "effects": [ + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=api_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=api_log|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=clinical_rules_log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=clinical_rules_log.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=contact|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=contact.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=documents|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=documents|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=employer_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=employer_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=facility|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=facility.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=form_encounter|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=form_encounter|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=forms|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=forms|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=history_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=history_data.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=insurance_data|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=insurance_data|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=lists|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=lists|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=log|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=log.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "log_id": { + "param": "providerID" + } + }, + "probe": "surface=log_comment_encrypt|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=log_comment_encrypt.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "log_id": { + "param": "providerID" + } + }, + "probe": "surface=log_comment_encrypt_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=log_comment_encrypt_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=openemr_postcalendar_events|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=openemr_postcalendar_events|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "DOB": { + "param": "DOB" + }, + "city": { + "param": "city" + }, + "country_code": { + "param": "country_code" + }, + "email": { + "param": "email" + }, + "fname": { + "param": "fname" + }, + "lname": { + "param": "lname" + }, + "phone_home": { + "param": "phone_home" + }, + "postal_code": { + "param": "postal_code" + }, + "providerID": { + "param": "providerID" + }, + "sex": { + "param": "sex" + }, + "street": { + "param": "street" + }, + "title": { + "param": "title" + } + }, + "probe": "surface=patient_data|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_data.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "kind": "record_written", + "match": { + "DOB": { + "param": "DOB" + }, + "city": { + "param": "city" + }, + "country_code": { + "param": "country_code" + }, + "email": { + "param": "email" + }, + "fname": { + "param": "fname" + }, + "lname": { + "param": "lname" + }, + "phone_home": { + "param": "phone_home" + }, + "postal_code": { + "param": "postal_code" + }, + "providerID": { + "param": "providerID" + }, + "sex": { + "param": "sex" + }, + "street": { + "param": "street" + }, + "title": { + "param": "title" + } + }, + "probe": "surface=patient_data_all|exactly one new record with the run's values; no record that was there before may disappear", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=patient_data_all.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=pnotes|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=pnotes|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=prescriptions|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=prescriptions|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=recent_patients|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=recent_patients|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=sequences|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=sequences.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=transactions|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=transactions|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=user_settings|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=user_settings|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=users|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=users.content|no record that was there before changes or disappears (records compared by content, not id)", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=uuid_mapping|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=uuid_mapping|no row here changes or disappears", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "forbid_collateral_loss": false, + "kind": "record_written", + "probe": "surface=uuid_registry|the save adds no row here", + "risk": "irreversible" + }, + { + "count_new_only": true, + "expected_count": 0, + "kind": "record_written", + "match": { + "_openadapt_no_such_field": { + "literal": "-" + } + }, + "probe": "surface=uuid_registry|no row here changes or disappears", + "risk": "irreversible" + } + ], + "schema_version": "openadapt.verify/v1", + "verifier": { + "kind": "surfaces", + "surfaces": { + "api_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"api_log\"", + "sqlite_database": "" + }, + "clinical_rules_log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"clinical_rules_log\"", + "sqlite_database": "" + }, + "clinical_rules_log.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"clinical_rules_log\"", + "sqlite_database": "" + }, + "contact": { + "kind": "sql", + "sql_query": "SELECT * FROM \"contact\"", + "sqlite_database": "" + }, + "contact.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"contact\"", + "sqlite_database": "" + }, + "documents": { + "kind": "sql", + "sql_query": "SELECT * FROM \"documents\"", + "sqlite_database": "" + }, + "employer_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"employer_data\"", + "sqlite_database": "" + }, + "facility": { + "kind": "sql", + "sql_query": "SELECT * FROM \"facility\"", + "sqlite_database": "" + }, + "facility.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"facility\"", + "sqlite_database": "" + }, + "form_encounter": { + "kind": "sql", + "sql_query": "SELECT * FROM \"form_encounter\"", + "sqlite_database": "" + }, + "forms": { + "kind": "sql", + "sql_query": "SELECT * FROM \"forms\"", + "sqlite_database": "" + }, + "history_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"history_data\"", + "sqlite_database": "" + }, + "history_data.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"history_data\"", + "sqlite_database": "" + }, + "insurance_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"insurance_data\"", + "sqlite_database": "" + }, + "lists": { + "kind": "sql", + "sql_query": "SELECT * FROM \"lists\"", + "sqlite_database": "" + }, + "log": { + "kind": "sql", + "sql_query": "SELECT * FROM \"log\"", + "sqlite_database": "" + }, + "log.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"log\"", + "sqlite_database": "" + }, + "log_comment_encrypt": { + "kind": "sql", + "sql_query": "SELECT * FROM \"log_comment_encrypt\" WHERE \"log_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "log_comment_encrypt.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"log_comment_encrypt\" WHERE \"log_id\" = :p0", + "sql_query_params": { + "p0": { + "param": "providerID" + } + }, + "sqlite_database": "" + }, + "log_comment_encrypt_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"log_comment_encrypt\"", + "sqlite_database": "" + }, + "log_comment_encrypt_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"log_comment_encrypt\"", + "sqlite_database": "" + }, + "openemr_postcalendar_events": { + "kind": "sql", + "sql_query": "SELECT * FROM \"openemr_postcalendar_events\"", + "sqlite_database": "" + }, + "patient_data": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_data\" WHERE \"DOB\" = :p0 AND \"city\" = :p1 AND \"country_code\" = :p2 AND \"email\" = :p3 AND \"fname\" = :p4 AND \"lname\" = :p5 AND \"phone_home\" = :p6 AND \"postal_code\" = :p7 AND \"providerID\" = :p8 AND \"sex\" = :p9 AND \"title\" = :p10", + "sql_query_params": { + "p0": { + "param": "DOB" + }, + "p1": { + "param": "city" + }, + "p10": { + "param": "title" + }, + "p2": { + "param": "country_code" + }, + "p3": { + "param": "email" + }, + "p4": { + "param": "fname" + }, + "p5": { + "param": "lname" + }, + "p6": { + "param": "phone_home" + }, + "p7": { + "param": "postal_code" + }, + "p8": { + "param": "providerID" + }, + "p9": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "patient_data.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"patient_data\" WHERE \"DOB\" = :p0 AND \"city\" = :p1 AND \"country_code\" = :p2 AND \"email\" = :p3 AND \"fname\" = :p4 AND \"lname\" = :p5 AND \"phone_home\" = :p6 AND \"postal_code\" = :p7 AND \"providerID\" = :p8 AND \"sex\" = :p9 AND \"title\" = :p10", + "sql_query_params": { + "p0": { + "param": "DOB" + }, + "p1": { + "param": "city" + }, + "p10": { + "param": "title" + }, + "p2": { + "param": "country_code" + }, + "p3": { + "param": "email" + }, + "p4": { + "param": "fname" + }, + "p5": { + "param": "lname" + }, + "p6": { + "param": "phone_home" + }, + "p7": { + "param": "postal_code" + }, + "p8": { + "param": "providerID" + }, + "p9": { + "param": "sex" + } + }, + "sqlite_database": "" + }, + "patient_data_all": { + "kind": "sql", + "sql_query": "SELECT * FROM \"patient_data\"", + "sqlite_database": "" + }, + "patient_data_all.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"patient_data\"", + "sqlite_database": "" + }, + "pnotes": { + "kind": "sql", + "sql_query": "SELECT * FROM \"pnotes\"", + "sqlite_database": "" + }, + "prescriptions": { + "kind": "sql", + "sql_query": "SELECT * FROM \"prescriptions\"", + "sqlite_database": "" + }, + "recent_patients": { + "kind": "sql", + "sql_query": "SELECT * FROM \"recent_patients\"", + "sqlite_database": "" + }, + "sequences": { + "kind": "sql", + "sql_query": "SELECT * FROM \"sequences\"", + "sqlite_database": "" + }, + "sequences.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"sequences\"", + "sqlite_database": "" + }, + "transactions": { + "kind": "sql", + "sql_query": "SELECT * FROM \"transactions\"", + "sqlite_database": "" + }, + "user_settings": { + "kind": "sql", + "sql_query": "SELECT * FROM \"user_settings\"", + "sqlite_database": "" + }, + "users": { + "kind": "sql", + "sql_query": "SELECT * FROM \"users\"", + "sqlite_database": "" + }, + "users.content": { + "kind": "sql", + "records_drop_fields": [ + "id" + ], + "sql_query": "SELECT * FROM \"users\"", + "sqlite_database": "" + }, + "uuid_mapping": { + "kind": "sql", + "sql_query": "SELECT * FROM \"uuid_mapping\"", + "sqlite_database": "" + }, + "uuid_registry": { + "kind": "sql", + "sql_query": "SELECT * FROM \"uuid_registry\"", + "sqlite_database": "" + } + } + } + }, + "gate_error": null, + "misses": [ + "stale: log_comment_encrypt: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "stale: log_comment_encrypt_all: the save destroyed another record of the same subject (every checked field identifies the subject, so another record of the same subject looks like the saved one)", + "read: facility: the generated query returns 1 row(s), the scan saw 1", + "read: facility.content: the generated query returns 1 row(s), the scan saw 1", + "read: history_data: the generated query returns 4 row(s), the scan saw 4", + "read: history_data.content: the generated query returns 4 row(s), the scan saw 4", + "read: patient_data: the generated query returns 1 row(s), the scan saw 1", + "read: patient_data.content: the generated query returns 1 row(s), the scan saw 1", + "read: patient_data_all: the generated query returns 4 row(s), the scan saw 4", + "read: patient_data_all.content: the generated query returns 4 row(s), the scan saw 4", + "read: uuid_registry: the generated query returns 9 row(s), the scan saw 9", + "fault gate: the clean save did not verify on the copy" + ], + "params": [ + "DOB", + "city", + "country_code", + "email", + "fname", + "lname", + "phone_home", + "postal_code", + "providerID", + "sex", + "street", + "title" + ], + "surfaces": [ + "api_log", + "clinical_rules_log", + "contact", + "documents", + "employer_data", + "facility", + "form_encounter", + "forms", + "history_data", + "insurance_data", + "lists", + "log", + "log_comment_encrypt", + "log_comment_encrypt_all", + "openemr_postcalendar_events", + "patient_data", + "patient_data_all", + "pnotes", + "prescriptions", + "recent_patients", + "sequences", + "transactions", + "user_settings", + "users", + "uuid_mapping", + "uuid_registry" + ], + "targets": [ + { + "bound": { + "log_id": "providerID" + }, + "surface": "log_comment_encrypt" + }, + { + "bound": { + "log_id": "providerID" + }, + "surface": "log_comment_encrypt_all" + }, + { + "bound": { + "DOB": "DOB", + "city": "city", + "country_code": "country_code", + "email": "email", + "fname": "fname", + "lname": "lname", + "phone_home": "phone_home", + "postal_code": "postal_code", + "providerID": "providerID", + "sex": "sex", + "street": "street", + "title": "title" + }, + "surface": "patient_data" + }, + { + "bound": { + "DOB": "DOB", + "city": "city", + "country_code": "country_code", + "email": "email", + "fname": "fname", + "lname": "lname", + "phone_home": "phone_home", + "postal_code": "postal_code", + "providerID": "providerID", + "sex": "sex", + "street": "street", + "title": "title" + }, + "surface": "patient_data_all" + } + ], + "working": false + } +} diff --git a/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/rows.json b/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/rows.json new file mode 100644 index 000000000..392d6921b --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/results/standin-slice/rows.json @@ -0,0 +1,655 @@ +[ + { + "class": "clean", + "expect": "clean", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "id": "clean", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "ok", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + } + }, + { + "class": "wrong_record", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "wrong_record_existing_chart", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "wrong_record", + "expect": "fault", + "framed": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "wrong_record_lookalike", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_other_chart", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_other_history", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_table_note_other_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_table_allergy_other_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "id": "unrelated_table_insurance_new_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "unrelated_other_chart_unattributed", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "misread_source", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "refuted" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "misread_dob", + "presave": "hold", + "presave_held_fields": [ + "DOB" + ], + "presave_score": "caught", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "misread_source", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "refuted" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "misread_swapped_names", + "presave": "hold", + "presave_held_fields": [ + "fname", + "lname" + ], + "presave_score": "caught", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "misread_source", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "id": "misread_wrong_provider", + "presave": "hold", + "presave_held_fields": [ + "provider" + ], + "presave_score": "caught", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "missing_side_record", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "id": "missing_history_record", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "held", + "source": "instruction" + }, + "outcome": "verified", + "score": "missed", + "verified": true + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "duplicate", + "expect": "fault", + "framed": { + "checked": { + "delta": "refuted", + "frame": "held", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "duplicate_save", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "refuted", + "frame": "held", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + }, + { + "class": "concurrent_legitimate", + "expect": "clean", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "id": "concurrent_other_chart", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "ok", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + } + }, + { + "class": "concurrent_legitimate", + "expect": "clean", + "framed": { + "checked": { + "delta": "held", + "frame": "held", + "source": "held" + }, + "outcome": "verified", + "score": "ok", + "verified": true + }, + "id": "concurrent_new_patient", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "ok", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "false_alarm", + "verified": false + } + }, + { + "class": "unrelated_change", + "expect": "fault", + "framed": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "held" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "id": "concurrent_plus_bot_stray", + "presave": "agree", + "presave_held_fields": [], + "presave_score": "missed", + "shipped": { + "checked": { + "delta": "held", + "frame": "refuted", + "source": "instruction" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + }, + "synthesized": { + "checked": { + "delta": "refuted", + "frame": "refuted", + "source": "not_checked" + }, + "outcome": "reconciliation_required", + "score": "caught", + "verified": false + } + } +] diff --git a/packages/flow/benchmark/verification_coverage/independent/run.py b/packages/flow/benchmark/verification_coverage/independent/run.py new file mode 100644 index 000000000..ecef19e74 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/run.py @@ -0,0 +1,599 @@ +"""Run ``faults.yaml`` through OpenAdapt's checks and score them against SPEC.md. + + python -m verification_coverage.independent.run --baseline-sql PATH --out DIR + +Each case starts from a fresh SQLite copy of the pinned OpenEMR fixture's +baseline (``standin.py``), seeded with three charts and four users. The checks +under test are built before the case runs, the way OpenAdapt builds them: + +- ``shipped``: the contract the OpenEMR referral task ships with + (``scoreboard/claims_openemr.py`` ``VERIFY_YAML``), reading the whole + patient table, with verify-run's default frame; +- ``framed``: the same, plus the frame with OpenEMR's audit log for + attribution (as ``verification_coverage/openemr_run.py`` declares it) and + provenance with the referral document (the round trip, #1446); +- ``synthesized``: what ``scaffold-verifier --db --fault-gate`` proposes from a + demonstration on its own copy (``record_check_synthesis.synthesize``). + +For every check the fault gate (#1445) also runs on the authoring copy, so its +own coverage claim can be set beside the independent result. + +Verdicts: a check *catches* a ``fault`` case when verify-run does not issue +``verified``; it *misses* when it does. On a ``clean`` case, anything but +``verified`` is a *false alarm*. The pre-save provenance cross-check is scored +separately (it would stop the save before it happens). +""" + +from __future__ import annotations + +import argparse +import copy +import json +import sys +import tempfile +from pathlib import Path +from typing import Any, Optional + +import yaml + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE.parents[1])) + +from verification_coverage.independent import standin # noqa: E402 + +BOT = "openadapt_actor" +OTHER = "clinician2" + +REFERRAL = { + "title": "Ms.", + "fname": "Ada", + "lname": "Quill", + "DOB": "1984-03-07", + "sex": "Female", + "street": "41 Larch Way", + "city": "Cambridge", + "state_label": "Massachusetts", + "postal_code": "02139", + "phone_home": "617-555-0142", + "email": "ada.quill@example.test", + "country_code": "USA", + "provider": "Dr. Iris Holt", +} +#: The demonstration the synthesized check is built from (another person). +DEMO = { + "title": "Mr.", + "fname": "Tobias", + "lname": "Wren", + "DOB": "1971-09-30", + "sex": "Male", + "street": "12 Quarry Lane", + "city": "Medford", + "state_label": "Massachusetts", + "postal_code": "02155", + "phone_home": "781-555-0110", + "email": "t.wren@example.test", + "country_code": "USA", + "provider": "Dr. Iris Holt", +} +SEEDS = { + "other_patient": { + "title": "Mr.", + "fname": "Wendell", + "lname": "Priorchart", + "DOB": "1962-06-14", + "sex": "Male", + "street": "9 Existing Road", + "city": "Exampleton", + "state": "MA", + "postal_code": "02139", + "phone_home": "617-555-0188", + "email": "w.priorchart@example.test", + "country_code": "USA", + }, + "lookalike": { + "title": "Ms.", + "fname": "Ada", + "lname": "Quill", + "DOB": "1984-07-03", + "sex": "Female", + "street": "7 Elm Street", + "city": "Lowell", + "state": "MA", + "postal_code": "01852", + "phone_home": "978-555-0123", + "email": "aquill84@example.test", + "country_code": "USA", + }, + "second_other_patient": { + "title": "Mrs.", + "fname": "Mabel", + "lname": "Ortiz", + "DOB": "1990-01-21", + "sex": "Female", + "street": "300 Main Street", + "city": "Waltham", + "state": "MA", + "postal_code": "02451", + "phone_home": "781-555-0164", + "email": "m.ortiz@example.test", + "country_code": "USA", + }, +} +CONCURRENT_PERSON = { + "title": "Mr.", + "fname": "Basil", + "lname": "Fenn", + "DOB": "1979-11-22", + "sex": "Male", + "street": "5 Pond Road", + "city": "Arlington", + "state": "MA", + "postal_code": "02474", + "phone_home": "781-555-0131", + "email": "b.fenn@example.test", + "country_code": "USA", +} +#: Referral label per parameter, in document order (provider is last). +LABELS = ( + ("title", "Title"), + ("fname", "First name"), + ("lname", "Last name"), + ("DOB", "Date of birth"), + ("sex", "Sex"), + ("street", "Street"), + ("city", "City"), + ("state_label", "State"), + ("postal_code", "Postal code"), + ("phone_home", "Home phone"), + ("email", "Email"), + ("country_code", "Country"), + ("provider", "Primary care provider"), +) +#: Parameters the shipped contract binds (state is a literal MA there). +SHIPPED_PARAMS = ( + "title", + "fname", + "lname", + "DOB", + "sex", + "street", + "city", + "postal_code", + "phone_home", + "email", + "country_code", +) +SHIPPED_RECORD = yaml.safe_load( + """ +name: patient +match: [email, lname] +duplicate_key: email +fields: + email: email + lname: lname + title: title + fname: fname + DOB: DOB + sex: sex + street: street + city: city + state: {literal: MA} + postal_code: postal_code + phone_home: phone_home + country_code: country_code +""" +) +#: ``--slice``: the tables SPEC.md names, the New Patient path's side tables, +#: and the bookkeeping OpenEMR writes for any signed-in user. +SLICE = ( + "patient_data", + "history_data", + "insurance_data", + "employer_data", + "lists", + "pnotes", + "transactions", + "form_encounter", + "forms", + "prescriptions", + "documents", + "openemr_postcalendar_events", + "users", + "facility", + "contact", + "recent_patients", + "user_settings", + "clinical_rules_log", + "log", + "log_comment_encrypt", + "api_log", + "uuid_registry", + "uuid_mapping", + "sequences", +) +AUDIT_QUERY = ( + "SELECT id, user, patient_id FROM log WHERE event LIKE 'patient-record-%' " + "AND event <> 'patient-record-select' AND patient_id > 0" +) + + +def told_values(case: dict[str, Any]) -> dict[str, str]: + """A case's misread inputs, keyed by referral field (``providerID`` in the + suite names the referral's provider).""" + + told = dict(case.get("told", {})) + if "providerID" in told: + told["provider"] = told.pop("providerID") + return told + + +def referral_text(values: dict[str, str]) -> str: + lines = ["Referral (synthetic test document)", "Referred to: Example Family Clinic"] + lines += [f"{label}: {values[name]}" for name, label in LABELS] + return "\n".join(lines) + "\n" + + +def seed(store: standin.Store) -> dict[str, int]: + ids = { + OTHER: store.add_user(OTHER, "Casey", "Clinician", 1), + "iholt": store.add_user("iholt", "Iris", "Holt", 1), + "ohale": store.add_user("ohale", "Owen", "Hale", 1), + } + for key, values in SEEDS.items(): + ids[key] = store.register(BOT, {**values, "providerID": ids["ohale"]}) + return ids + + +def stored(values: dict[str, str], ids: dict[str, int]) -> dict[str, Any]: + """What a correct New Patient save stores for these referral values.""" + + out = {k: v for k, v in values.items() if k not in ("state_label", "provider")} + out["state"] = ( + "MA" if values["state_label"] == "Massachusetts" else values["state_label"] + ) + out["providerID"] = ids[ + "iholt" if values["provider"] == "Dr. Iris Holt" else "ohale" + ] + return out + + +# -- checks ---------------------------------------------------------------------- + + +def shipped_doc(db: Path) -> dict[str, Any]: + return { + "schema_version": "openadapt.verify/v1", + "verifier": { + "kind": "sql", + "sqlite_database": str(db), + "sql_query": "SELECT * FROM patient_data", + }, + "record": copy.deepcopy(SHIPPED_RECORD), + } + + +def framed_doc(db: Path) -> dict[str, Any]: + doc = shipped_doc(db) + doc["frame"] = { + "identity_field": "pid", + "attribution": { + "kind": "audit_read", + "actor_field": "user", + "record_field": "patient_id", + "self": [BOT], + "read": { + "kind": "sql", + "sqlite_database": str(db), + "sql_query": AUDIT_QUERY, + }, + }, + } + return doc + + +def _repoint(node: Any, old: str, new: str) -> Any: + if isinstance(node, dict): + return {k: _repoint(v, old, new) for k, v in node.items()} + if isinstance(node, list): + return [_repoint(v, old, new) for v in node] + return new if node == old else node + + +def synthesize_check(work: Path) -> dict[str, Any]: + """scaffold-verifier --db --fault-gate on a demonstration copy.""" + + from openadapt_flow.record_check_synthesis import synthesize + + demo_db = standin.copy(work / "baseline.sqlite", work / "demo.sqlite") + store = standin.Store(demo_db) + ids = seed(store) + values = stored(DEMO, ids) + store.register(BOT, values) + store.close() + params = {k: str(v) for k, v in values.items() if k != "state"} + from openadapt_flow.fault_gate import GateError + + gate_error = None + try: + proposal = synthesize(None, params=params, db_path=demo_db, fault_gate=True) + except GateError as exc: + # The gate refused to run (fail-closed); measure the check + # scaffold-verifier proposes without it. + gate_error = str(exc) + proposal = synthesize(None, params=params, db_path=demo_db, fault_gate=False) + effects = [ + e.model_copy(update={"needs_operator_confirmation": False}).model_dump( + mode="json", exclude_defaults=True + ) + for e in proposal.effects + ] + cov = proposal.coverage + return { + "doc": { + "schema_version": "openadapt.verify/v1", + "verifier": proposal.verifier, + "effects": effects, + }, + "demo_db": str(demo_db), + "params": sorted(params), + "working": proposal.working, + "misses": proposal.misses, + "surfaces": [s.name for s in proposal.search.surfaces], + "closed_world": proposal.search.closed_world_basis, + "coverage": None if cov is None else cov.model_dump(mode="json"), + "gate_error": gate_error, + "targets": [ + {"surface": x.name, "bound": dict(x.bound)} + for x in proposal.search.surfaces + if x.is_target + ], + } + + +def gate_shipped(work: Path, framed: bool) -> dict[str, Any]: + """The fault gate (#1445) on the shipped contract, on an authoring copy.""" + + from openadapt_flow.fault_gate import SqliteCopy, run_gate + from openadapt_flow.verify_run import parse_verify_config + + src = standin.copy(work / "baseline.sqlite", work / f"gate-{framed}.sqlite") + store = standin.Store(src) + ids = seed(store) + store.close() + target = stored(DEMO, ids) + copy_ = SqliteCopy(src, "patient_data", target, workdir=work / f"gatecopy-{framed}") + doc = (framed_doc if framed else shipped_doc)(copy_.path) + params = {k: str(target[k]) for k in SHIPPED_PARAMS} + record = run_gate(parse_verify_config(doc), params, copy_) + return record.model_dump(mode="json") + + +# -- one case -------------------------------------------------------------------- + + +def apply_steps( + store: standin.Store, + case: dict[str, Any], + ids: dict[str, int], + told: dict[str, str], +) -> Optional[int]: + new_pid: Optional[int] = None + actor = {"bot": BOT, "clinician2": OTHER, "none": None} + for step in case["steps"]: + who = actor[step["actor"]] + op = step["op"] + if op == "register_referral": + if step.get("phase") == "finish": + continue + new_pid = store.register(who, stored(told, ids)) + elif op == "register_patient": + store.register(who, {**CONCURRENT_PERSON, "providerID": ids["iholt"]}) + elif op == "overwrite_chart": + values = stored(REFERRAL, ids) + store.update_chart(who, ids[step["target"]], values) + else: + pid = new_pid if step["target"] == "new_patient" else ids[step["target"]] + if op == "update_chart": + values = stored(REFERRAL, ids) + changes = { + k: (values[k] if v == "referral" else v) + for k, v in step["set"].items() + } + store.update_chart(who, pid, changes) + elif op == "update_history": + store.update_history(who, pid, step["set"]) + elif op == "delete_history": + store.delete_history(who, pid) + elif op == "add_note": + store.add_note(who, pid, step["body"]) + elif op == "add_allergy": + store.add_allergy(who, pid, step["title"]) + elif op == "add_insurance": + store.add_insurance(who, pid, step["provider"]) + else: + raise ValueError(f"unknown op {op}") + return new_pid + + +def provenance_for(doc_sha: str, told: dict[str, str], names: list[str]) -> Any: + from openadapt_flow.provenance import ProvenanceFile + + line_of = {name: 3 + i for i, (name, _l) in enumerate(LABELS)} + label_of = dict(LABELS) + params = {} + for name in names: + if name not in line_of: + continue + entry = { + "value": told[name], + "source": { + "kind": "document", + "sha256": doc_sha, + "line": line_of[name], + "label": label_of[name], + }, + "extractor": "model:simulated-first-reader", + } + if name == "DOB": + entry["value_kind"] = "date" + params[name] = entry + return ProvenanceFile.model_validate( + {"schema_version": "openadapt.param-provenance/v1", "params": params} + ) + + +def run_case(case: dict[str, Any], work: Path, synth: dict[str, Any]) -> dict[str, Any]: + from openadapt_flow.intake.document import IntakeDocument # noqa: F401 + from openadapt_flow.provenance import ( + cross_check, + default_extractor, + document_sha256, + read_sources, + ) + from openadapt_flow.verify_run import ( + capture_baseline, + parse_verify_config, + verify_run, + ) + + cdir = work / case["id"] + cdir.mkdir(parents=True, exist_ok=True) + db = standin.copy(work / "baseline.sqlite", cdir / "case.sqlite") + store = standin.Store(db) + ids = seed(store) + told = {**REFERRAL, **told_values(case)} + doc_path = cdir / "referral.txt" + doc_path.write_text(referral_text(REFERRAL)) + documents = read_sources([doc_path]) + doc_sha = document_sha256(doc_path) + told_stored = stored(told, ids) + shipped_params = {k: str(told_stored[k]) for k in SHIPPED_PARAMS} + synth_params = {k: str(told_stored[k]) for k in synth["params"]} + + checks = { + "shipped": (shipped_doc(db), shipped_params, None), + "framed": ( + framed_doc(db), + shipped_params, + provenance_for(doc_sha, told, list(SHIPPED_PARAMS)), + ), + "synthesized": ( + _repoint(synth["doc"], synth["demo_db"], str(db)), + synth_params, + provenance_for(doc_sha, told, list(SHIPPED_PARAMS)), + ), + } + cfgs = {name: parse_verify_config(doc) for name, (doc, _p, _v) in checks.items()} + for name, cfg in cfgs.items(): + capture_baseline(cfg, checks[name][1], cdir / f"baseline-{name}.json") + + prov = provenance_for(doc_sha, told, [n for n, _ in LABELS]) + pre = cross_check(prov, documents, default_extractor(prov)) + + apply_steps(store, case, ids, told) + store.close() + + row: dict[str, Any] = { + "id": case["id"], + "class": case["class"], + "expect": case["expect"], + "presave": pre.status, + "presave_held_fields": pre.disagreements, + } + for name, cfg in cfgs.items(): + _doc, params, provenance = checks[name] + result = verify_run( + cfg, + params=params, + run_record={"executor_kind": "agent", "executor_id": BOT}, + authorization_ref="independent-suite", + baseline_path=cdir / f"baseline-{name}.json", + provenance=provenance, + documents=documents if provenance is not None else None, + ) + receipt = result["receipt"] + outcome = receipt.get("terminal_outcome") or receipt.get("outcome") + row[name] = { + "outcome": outcome, + "verified": outcome == "verified", + "checked": receipt.get("checked"), + } + (cdir / f"evidence-{name}.json").write_text( + json.dumps(result.get("evidence"), indent=2, sort_keys=True, default=str) + ) + return row + + +def score(expect: str, verified: bool) -> str: + if expect == "fault": + return "missed" if verified else "caught" + return "ok" if verified else "false_alarm" + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--baseline-sql", type=Path, required=True) + parser.add_argument("--out", type=Path, default=HERE / "results" / "standin") + parser.add_argument("--only", default="") + parser.add_argument("--work", type=Path, default=None) + parser.add_argument( + "--slice", + action="store_true", + help="keep only the tables SPEC.md names and OpenEMR's bookkeeping", + ) + args = parser.parse_args() + suite = yaml.safe_load((HERE / "faults.yaml").read_text()) + work = args.work or Path(tempfile.mkdtemp(prefix="indep-verif-")) + work.mkdir(parents=True, exist_ok=True) + if not (work / "baseline.sqlite").exists(): + standin.build(args.baseline_sql, work / "baseline.sqlite") + if args.slice: + standin.keep_tables(work / "baseline.sqlite", SLICE) + cache = work / "synth.json" + if cache.exists(): + synth = json.loads(cache.read_text()) + else: + synth = synthesize_check(work) + cache.write_text(json.dumps(synth, default=str)) + gates = { + "shipped": gate_shipped(work, False), + "framed": gate_shipped(work, True), + "synthesized": synth["coverage"], + } + rows = [] + for case in suite["cases"]: + if args.only and case["id"] not in args.only.split(","): + continue + row = run_case(case, work, synth) + for name in ("shipped", "framed", "synthesized"): + row[name]["score"] = score(case["expect"], row[name]["verified"]) + row["presave_score"] = score(case["expect"], row["presave"] == "agree") + rows.append(row) + print( + case["id"], + { + n: (row[n]["outcome"], row[n]["score"]) + for n in ("shipped", "framed", "synthesized") + }, + "presave", + row["presave"], + flush=True, + ) + args.out.mkdir(parents=True, exist_ok=True) + (args.out / "rows.json").write_text( + json.dumps(rows, indent=2, sort_keys=True) + "\n" + ) + meta = {k: v for k, v in synth.items() if k not in ("doc", "demo_db")} + meta["doc"] = _repoint(synth["doc"], synth["demo_db"], "") + (args.out / "checks.json").write_text( + json.dumps( + {"synthesized": meta, "gates": gates}, indent=2, sort_keys=True, default=str + ) + + "\n" + ) + print("work dir:", work) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/verification_coverage/independent/standin.py b/packages/flow/benchmark/verification_coverage/independent/standin.py new file mode 100644 index 000000000..c284347c3 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/standin.py @@ -0,0 +1,395 @@ +"""An SQLite copy of the pinned OpenEMR fixture's baseline, and the ops the +fault suite runs on it. + +The stand-in is built from the fixture's own MariaDB dump (``baseline.sql``), +so every table, column and default is OpenEMR's, and every row OpenEMR's +installer writes is there. What it can't reproduce is OpenEMR's PHP: the ops +below write the rows the New Patient path and the edit screens write, and +the audit-log rows OpenEMR's ``EventAuditLogger`` writes for them. The live +run (``live.py``) checks those emulations against the real app. +""" + +from __future__ import annotations + +import base64 +import hashlib +import os +import re +import shutil +import sqlite3 +from pathlib import Path +from typing import Any, Iterator, Mapping, Optional + +_CREATE = re.compile(r"^CREATE TABLE `([A-Za-z0-9_]+)` \($") +_COLUMN = re.compile(r"^ `([A-Za-z0-9_]+)` (.*?),?$") +_DEFAULT = re.compile( + r"DEFAULT ('(?:[^'\\]|\\.)*'|NULL|-?[0-9.]+|current_timestamp\(\))", re.I +) +_INSERT = re.compile(r"^INSERT INTO `([A-Za-z0-9_]+)` VALUES ?(.*)$", re.S) + + +def _values(text: str) -> Iterator[list[Any]]: + """The rows of a mysqldump ``VALUES (..),(..)`` list.""" + + i, n = 0, len(text) + while i < n: + if text[i] != "(": + i += 1 + continue + i += 1 + row: list[Any] = [] + while True: + if text[i] == "'": + i += 1 + buf = [] + while text[i] != "'": + if text[i] == "\\": + nxt = text[i + 1] + buf.append( + {"n": "\n", "r": "\r", "t": "\t", "0": "\0"}.get(nxt, nxt) + ) + i += 2 + else: + buf.append(text[i]) + i += 1 + i += 1 + row.append("".join(buf)) + else: + j = i + while text[j] not in ",)": + j += 1 + tok = text[i:j] + i = j + if tok == "NULL": + row.append(None) + elif tok.startswith("_binary "): + row.append(tok) + else: + try: + row.append(int(tok)) + except ValueError: + try: + row.append(float(tok)) + except ValueError: + row.append(tok) + if text[i] == ",": + i += 1 + continue + if text[i] == ")": + i += 1 + break + yield row + + +def _blob(value: Any) -> Any: + """Binary columns (uuid) come out of the dump as undecodable text.""" + + if isinstance(value, str): + try: + value.encode("utf-8") + except UnicodeEncodeError: + return value.encode("utf-8", "surrogateescape") + return value + + +def _affinity(definition: str) -> str: + """The SQLite type affinity for a MariaDB column type. + + With it, ``'5' = 5`` holds in a query as it does in MariaDB; without it a + parameter bound as text never matches an integer column. + """ + + kind = definition.split("(", 1)[0].split(" ", 1)[0].lower() + if kind in ("int", "bigint", "tinyint", "smallint", "mediumint"): + return "INTEGER" + if kind in ("decimal", "float", "double", "real"): + return "REAL" + if kind in ("binary", "varbinary", "blob", "longblob", "mediumblob", "tinyblob"): + return "BLOB" + return "TEXT" + + +def _default_sql(definition: str) -> str: + m = _DEFAULT.search(definition) + if not m: + return "" + raw = m.group(1) + if raw.lower() == "current_timestamp()": + return " DEFAULT CURRENT_TIMESTAMP" + if raw.startswith("'"): + return " DEFAULT '" + raw[1:-1].replace("\\'", "''") + "'" + return f" DEFAULT {raw}" + + +def build(baseline_sql: Path, out: Path) -> dict[str, int]: + """Convert the dump into ``out`` (every table, every row). Row counts.""" + + out.unlink(missing_ok=True) + con = sqlite3.connect(out) + table: Optional[str] = None + columns: list[str] = [] + counts: dict[str, int] = {} + pending: Optional[tuple[str, list[str]]] = None + + def flush(name: str, body: str) -> None: + rows = [[_blob(v) for v in row] for row in _values(body)] + if rows: + marks = ",".join("?" * len(rows[0])) + con.executemany(f'INSERT INTO "{name}" VALUES ({marks})', rows) + counts[name] = counts.get(name, 0) + len(rows) + + with baseline_sql.open(encoding="utf-8", errors="surrogateescape") as fh: + for line in fh: + line = line.rstrip("\n") + if pending is not None: + pending[1].append(line) + if line.endswith(";"): + flush(pending[0], "\n".join(pending[1])[:-1]) + pending = None + continue + if table is None: + m = _CREATE.match(line) + if m: + table, columns = m.group(1), [] + continue + m = _INSERT.match(line) + if m: + if line.endswith(";"): + flush(m.group(1), m.group(2)[:-1]) + else: + pending = (m.group(1), [m.group(2)]) + continue + if line.startswith(")"): + con.execute(f'CREATE TABLE "{table}" ({", ".join(columns)})') + counts.setdefault(table, 0) + table = None + continue + m = _COLUMN.match(line) + if m: + name, definition = m.groups() + pk = ( + " PRIMARY KEY AUTOINCREMENT" + if "AUTO_INCREMENT" in definition + else "" + ) + columns.append( + f'"{name}" {_affinity(definition)}' + pk + _default_sql(definition) + ) + con.commit() + con.close() + return counts + + +def keep_tables(path: Path, keep: tuple[str, ...]) -> None: + """Drop every table not in ``keep`` (the clinical-slice stand-in).""" + + con = sqlite3.connect(path) + names = [ + r[0] + for r in con.execute( + "SELECT name FROM sqlite_master WHERE type = 'table' " + "AND name NOT LIKE 'sqlite_%'" + ) + ] + for name in names: + if name not in keep: + con.execute(f'DROP TABLE "{name}"') + con.commit() + con.execute("VACUUM") + con.close() + + +def copy(src: Path, dst: Path) -> Path: + shutil.copyfile(src, dst) + return dst + + +class Store: + """The ops of ``faults.yaml`` on one stand-in database.""" + + def __init__(self, path: Path) -> None: + self.path = path + self.con = sqlite3.connect(path, isolation_level=None) + self.con.row_factory = sqlite3.Row + self.clock = 0 + + def close(self) -> None: + self.con.close() + + def _now(self) -> str: + self.clock += 1 + return f"2026-10-24 12:{self.clock // 60:02d}:{self.clock % 60:02d}" + + def one(self, sql: str, args: tuple = ()) -> Any: + row = self.con.execute(sql, args).fetchone() + return None if row is None else row[0] + + def log(self, user: Optional[str], event: str, pid: int, statement: str) -> None: + """An audit row as OpenEMR's EventAuditLogger writes it, or none. + + OpenEMR logs each statement base64-encoded in ``comments`` and pairs + every row with a ``log_comment_encrypt`` row holding its checksum. + """ + + if user is None: + return + comment = base64.b64encode(statement.encode()).decode() + cur = self.con.execute( + "INSERT INTO log (date, event, category, user, groupname, comments, " + "patient_id, success, log_from) VALUES (?,?,?,?,?,?,?,1,'open-emr')", + (self._now(), event, "Patient Demographics", user, "Default", comment, pid), + ) + self.con.execute( + "INSERT INTO log_comment_encrypt (log_id, encrypt, checksum, checksum_api, " + "version) VALUES (?, 'No', ?, '', 4)", + (cur.lastrowid, hashlib.sha512(comment.encode()).hexdigest()), + ) + + def _uuid(self, table: str, table_id: int) -> bytes: + uuid = os.urandom(16) + self.con.execute( + "INSERT INTO uuid_registry (uuid, table_name, table_id, table_vertical, " + "couchdb, document_drive, mapped, created) VALUES (?,?,?,'','',0,0,?)", + (uuid, table, str(table_id), self._now()), + ) + return uuid + + def user_id(self, username: str) -> int: + return int(self.one("SELECT id FROM users WHERE username = ?", (username,))) + + def add_user(self, username: str, fname: str, lname: str, authorized: int) -> int: + self.con.execute( + "INSERT INTO users (username, fname, lname, authorized, active, facility_id, " + "see_auth, cal_ui) VALUES (?,?,?,?,1,3,1,1)", + (username, fname, lname, authorized), + ) + return self.user_id(username) + + def register(self, user: Optional[str], v: Mapping[str, Any]) -> int: + """The New Patient path: patient_data plus its history_data row.""" + + pid = int(self.one("SELECT COALESCE(MAX(pid), 0) + 1 FROM patient_data")) + now = self._now() + cols = { + "pid": pid, + "pubpid": str(pid), + "date": now, + "regdate": now[:10], + "title": v["title"], + "fname": v["fname"], + "lname": v["lname"], + "DOB": v["DOB"], + "sex": v["sex"], + "street": v["street"], + "city": v["city"], + "state": v["state"], + "postal_code": v["postal_code"], + "phone_home": v["phone_home"], + "email": v["email"], + "country_code": v["country_code"], + "providerID": v.get("providerID"), + } + names = ",".join(f'"{k}"' for k in cols) + cur = self.con.execute( + f"INSERT INTO patient_data ({names}) VALUES ({','.join('?' * len(cols))})", + tuple(cols.values()), + ) + self.con.execute( + "UPDATE patient_data SET uuid = ? WHERE id = ?", + (self._uuid("patient_data", cur.lastrowid), cur.lastrowid), + ) + self.log( + user, "patient-record-insert", pid, f"INSERT INTO patient_data pid={pid}" + ) + cur = self.con.execute( + "INSERT INTO history_data (pid, date) VALUES (?, ?)", (pid, now) + ) + self.con.execute( + "UPDATE history_data SET uuid = ? WHERE id = ?", + (self._uuid("history_data", cur.lastrowid), cur.lastrowid), + ) + self.log( + user, "patient-record-insert", pid, f"INSERT INTO history_data pid={pid}" + ) + # The rest of what the New Patient path writes on the pinned app + # (benchmark/openemr_local/fixture.py EXPECTED_TABLE_DELTAS["compiled"]). + self.con.execute( + "INSERT INTO contact (foreign_table_name, foreign_id) VALUES ('patient_data', ?)", + (pid,), + ) + self.log(user, "other-insert", 0, f"INSERT INTO contact foreign_id={pid}") + uid = self.one("SELECT id FROM users WHERE username = ?", (user or "",)) + if uid is not None: + self.con.execute("DELETE FROM recent_patients WHERE user_id = ?", (uid,)) + self.con.execute( + "INSERT INTO recent_patients (user_id, patients) VALUES (?, ?)", + (uid, f'[{{"pid":{pid}}}]'), + ) + self.con.execute( + "INSERT OR REPLACE INTO user_settings VALUES (?, 'dem_expand', '1')", + (uid,), + ) + self.con.execute( + "INSERT OR REPLACE INTO user_settings VALUES (?, 'his_expand', '1')", + (uid,), + ) + self.con.execute( + "INSERT INTO clinical_rules_log (date, pid, uid, category, value, new_value, " + "facility_id) VALUES (?, ?, ?, 'clinical_reminder_widget', '', '', 3)", + (now, pid, uid), + ) + self.log( + user, "patient-record-select", pid, f"SELECT * FROM patient_data pid={pid}" + ) + return pid + + def update_chart( + self, user: Optional[str], pid: int, changes: Mapping[str, Any] + ) -> None: + sets = ", ".join(f'"{k}" = ?' for k in changes) + self.con.execute( + f"UPDATE patient_data SET {sets} WHERE pid = ?", (*changes.values(), pid) + ) + self.log(user, "patient-record-update", pid, f"UPDATE patient_data pid={pid}") + + def update_history( + self, user: Optional[str], pid: int, changes: Mapping[str, Any] + ) -> None: + sets = ", ".join(f'"{k}" = ?' for k in changes) + self.con.execute( + f"UPDATE history_data SET {sets} WHERE pid = ?", (*changes.values(), pid) + ) + self.log(user, "patient-record-update", pid, f"UPDATE history_data pid={pid}") + + def delete_history(self, user: Optional[str], pid: int) -> None: + self.con.execute("DELETE FROM history_data WHERE pid = ?", (pid,)) + self.log( + user, "patient-record-delete", pid, f"DELETE FROM history_data pid={pid}" + ) + + def add_note(self, user: Optional[str], pid: int, body: str) -> None: + self.con.execute( + "INSERT INTO pnotes (date, body, pid, user, groupname, activity, authorized, " + "title, assigned_to, deleted, message_status) " + "VALUES (?,?,?,?, 'Default', 1, 1, 'Unassigned', '', 0, 'New')", + (self._now(), body, pid, user or "admin"), + ) + self.log(user, "patient-record-insert", pid, f"INSERT INTO pnotes pid={pid}") + + def add_allergy(self, user: Optional[str], pid: int, title: str) -> None: + self.con.execute( + "INSERT INTO lists (date, type, title, activity, pid, user, groupname) " + "VALUES (?, 'allergy', ?, 1, ?, ?, 'Default')", + (self._now(), title, pid, user or "admin"), + ) + self.log(user, "patient-record-insert", pid, f"INSERT INTO lists pid={pid}") + + def add_insurance(self, user: Optional[str], pid: int, provider: str) -> None: + self.con.execute( + "INSERT INTO insurance_data (type, provider, pid, date) VALUES " + "('primary', ?, ?, ?)", + (provider, pid, self._now()[:10]), + ) + self.log( + user, "patient-record-insert", pid, f"INSERT INTO insurance_data pid={pid}" + ) diff --git a/packages/flow/benchmark/verification_coverage/independent/summarize.py b/packages/flow/benchmark/verification_coverage/independent/summarize.py new file mode 100644 index 000000000..67a04d383 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/independent/summarize.py @@ -0,0 +1,102 @@ +"""Per fault class: caught, missed, false alarm, for each check. + + python -m verification_coverage.independent.summarize ROWS [ROWS ...] + +ROWS is a ``rows.json`` (stand-in) or ``rows.jsonl`` (live). Prints Markdown. +""" + +from __future__ import annotations + +import json +import sys +from collections import defaultdict +from pathlib import Path +from typing import Any + +CLASSES = ( + "clean", + "concurrent_legitimate", + "wrong_record", + "unrelated_change", + "misread_source", + "missing_side_record", + "duplicate", +) +CHECKS = ("shipped", "framed", "synthesized", "presave") + + +def load(path: Path) -> list[dict[str, Any]]: + text = path.read_text() + if path.suffix == ".jsonl": + return [json.loads(line) for line in text.splitlines() if line.strip()] + return json.loads(text) + + +def cell(rows: list[dict[str, Any]], check: str) -> str: + scores = [ + r["presave_score"] if check == "presave" else r[check]["score"] + for r in rows + if (check == "presave" and "presave_score" in r) + or isinstance(r.get(check), dict) + ] + if not scores: + return "n/a" + n = len(scores) + if rows[0]["expect"] == "clean": + bad = scores.count("false_alarm") + return f"{n - bad}/{n} ok" + (f", **{bad} false alarm**" if bad else "") + caught = scores.count("caught") + missed = n - caught + return f"{caught}/{n} caught" + (f", **{missed} missed**" if missed else "") + + +def table(rows: list[dict[str, Any]]) -> str: + by_class: dict[str, list[dict[str, Any]]] = defaultdict(list) + for r in rows: + if "class" in r: + by_class[r["class"]].append(r) + checks = [c for c in CHECKS if any(c == "presave" or c in r for r in rows)] + out = ["| class | cases | " + " | ".join(checks) + " |"] + out.append("|---|---|" + "---|" * len(checks)) + for cls in CLASSES: + group = by_class.get(cls) + if not group: + continue + out.append( + f"| {cls} | {len(group)} | " + + " | ".join(cell(group, c) for c in checks) + + " |" + ) + return "\n".join(out) + + +def cases(rows: list[dict[str, Any]]) -> str: + checks = [c for c in CHECKS if c != "presave" and any(c in r for r in rows)] + out = ["| case | expect | " + " | ".join(checks) + " | pre-save |"] + out.append("|---|---|" + "---|" * (len(checks) + 1)) + for r in rows: + if "class" not in r: + out.append(f"| {r['id']} | error | {r.get('error', '')[:120]} |") + continue + out.append( + f"| {r['id']} | {r['expect']} | " + + " | ".join( + f"{r[c]['outcome']} ({r[c]['score']})" + if isinstance(r.get(c), dict) + else "n/a" + for c in checks + ) + + f" | {r.get('presave')} |" + ) + return "\n".join(out) + + +def main() -> int: + for arg in sys.argv[1:]: + rows = load(Path(arg)) + print(f"### {arg}\n\n{table(rows)}\n\n{cases(rows)}\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/verification_coverage/openemr_gate.py b/packages/flow/benchmark/verification_coverage/openemr_gate.py new file mode 100644 index 000000000..bacfadff8 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/openemr_gate.py @@ -0,0 +1,159 @@ +"""The fault gate on an OpenEMR test copy (no model calls). + + python -m verification_coverage.openemr_gate --run-id + +Runs ``openadapt_flow.fault_gate.run_gate`` against the fixture: the clean +save is the actor's own ``POST /api/patient``; the faults are privileged SQL +on ``patient_data``; the check reads through OpenEMR's REST API with the +read-only oracle client, exactly as ``verify-run`` does in production. Two +checks are measured: + +- ``full``: the patient list, as in #1365 (``/api/patient``); +- ``scoped``: the same contract read through a search for the run's email, + the kind of read a synthesized check picks. It can't see another chart. + +Writes ``results/openemr//gate-.json``. +""" + +from __future__ import annotations + +import argparse +import json +import os +import re +import sys +from pathlib import Path +from typing import Any, Mapping + +HERE = Path(__file__).resolve().parent +BENCH = HERE.parent +sys.path.insert(0, str(BENCH)) + +from scoreboard.claims_openemr import ( # noqa: E402 + EXISTING, + TOKEN_ENV, + VERIFY_YAML, + _token_env, + reset_and_seed, +) +from scoreboard.tasks import openemr # noqa: E402 + +FIELDS = openemr.SQL_FIELDS + + +def _sql_value(value: Any) -> str: + text = "" if value is None else str(value) + if not re.fullmatch(r"[A-Za-z0-9 ._@:/+-]*", text): + raise ValueError("unexpected characters in a synthetic value") + return f"'{text}'" + + +class OpenEMRCopy: + """The fixture as a :class:`openadapt_flow.fault_gate.TestCopy`.""" + + name = "openemr_fixture" + key_field = "id" + + def __init__(self, values: Mapping[str, str]) -> None: + self.values = dict(values) + + def reset(self) -> None: + reset_and_seed() + + def save(self) -> Any: + fx = openemr.fixture() + body = {k: v for k, v in self.values.items() if k != "state_label"} + body["state"] = "MA" + session = fx.token_session("actor") + try: + status = session.post( + f"{fx.api_base_url}/apis/default/api/patient", json=body + ).status_code + finally: + session.close() + if status not in (200, 201): + raise RuntimeError(f"the clean save returned HTTP {status}") + rows = [r for r in openemr.patients() if r["email"] == self.values["email"]] + return rows[-1]["id"] + + def rows(self) -> list[dict[str, Any]]: + return [dict(r) for r in openemr.patients()] + + def update(self, key: Any, changes: Mapping[str, Any]) -> None: + sets = ", ".join( + f"{name} = {_sql_value(value)}" + for name, value in changes.items() + if name in FIELDS and name != "id" + ) + openemr.fixture()._db( + f"UPDATE openemr.patient_data SET {sets} WHERE id = {int(key)}" + ) + + def insert(self, record: Mapping[str, Any]) -> Any: + db = openemr.fixture()._db + donor = db("SELECT MIN(id) FROM openemr.patient_data").decode().split()[0] + sets = ", ".join( + f"{name} = {_sql_value(value)}" + for name, value in record.items() + if name in FIELDS and name != "id" + ) + db( + "CREATE TEMPORARY TABLE openemr.vc_row AS SELECT * FROM " + f"openemr.patient_data WHERE id = {int(donor)}; " + "UPDATE openemr.vc_row SET id = (SELECT MAX(id) + 1 FROM " + "openemr.patient_data), pid = (SELECT MAX(pid) + 1 FROM " + "openemr.patient_data), uuid = UNHEX(REPLACE(UUID(), '-', ''))" + + (f", {sets}" if sets else "") + + "; INSERT INTO openemr.patient_data SELECT * FROM openemr.vc_row;" + ) + return db("SELECT MAX(id) FROM openemr.patient_data").decode().split()[0] + + def delete(self, key: Any) -> None: + openemr.fixture()._db(f"DELETE FROM openemr.patient_data WHERE id = {int(key)}") + + def verifier_overrides(self) -> dict[str, Any]: + return {} + + +def main() -> int: + import yaml + + from openadapt_flow.fault_gate import run_gate + from openadapt_flow.verify_run import parse_verify_config + + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--run-id", required=True) + parser.add_argument("--item", type=int, default=990) + args = parser.parse_args() + out = HERE / "results" / "openemr" / args.run_id + out.mkdir(parents=True, exist_ok=True) + fx = openemr.fixture() + values = openemr.item_values(args.item) + params = {k: v for k, v in values.items() if k != "state_label"} + os.environ.update(_token_env()) + full = yaml.safe_load(VERIFY_YAML.format(api=fx.ui_base_url, token_env=TOKEN_ENV)) + scoped = json.loads(json.dumps(full)) + scoped["verifier"]["records_path"] = "/apis/default/api/patient?email={email}" + scoped["verifier"]["path_params"] = {"email": {"param": "email"}} + assert EXISTING["email"] != values["email"] + summary = {} + for name, doc in (("full", full), ("scoped", scoped)): + cfg = parse_verify_config(doc) + record = run_gate(cfg, params, OpenEMRCopy(values)) + (out / f"gate-{name}.json").write_text( + json.dumps(record.model_dump(mode="json"), indent=2, sort_keys=True) + "\n" + ) + summary[name] = { + "killed": record.killed, + "applicable": record.applicable, + "clean_pass": record.clean_pass, + "survived": [c["fault"] for c in record.cases if c["result"] == "SURVIVED"], + } + print(name, summary[name], flush=True) + fx.reset() + (out / "gate-summary.json").write_text(json.dumps(summary, indent=2) + "\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/verification_coverage/openemr_run.py b/packages/flow/benchmark/verification_coverage/openemr_run.py new file mode 100644 index 000000000..31fe35bca --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/openemr_run.py @@ -0,0 +1,533 @@ +"""Fresh agent runs on OpenEMR, judged by three engines, per fault class. + + python -m verification_coverage.openemr_run --run-id --per-fault 5 + +The rerun of OpenAdaptAI/OpenAdapt#1365's OpenEMR fault experiment that +``docs/VERIFICATION_COVERAGE.md`` asks for: fresh computer-use agent runs +(Claude Sonnet 5.5, the scoreboard's agent), not rebuilt database states. +Faults are injected only in the fixture's database, by the same triggers and +poller as ``scoreboard/claims_openemr.py``. Each item is judged by three +``verify-run`` engines, each from its own checkout and with its own baseline +taken before the agent starts: + +- ``e1365``: the engine #1365 measured with (collateral check finds a removed + record only); +- ``main``: main before this work (#1375's per-effect collateral change); +- ``after``: frame conditions with OpenEMR's audit log for attribution, and + the round trip against the referral document. + +Fault classes: the seven of #1365 plus three. + +========================= ==================================================== +``ok`` control: a clean save +``partial`` a trigger blanks the new chart's home phone +``wrong_value`` a trigger changes the new chart's postal code +``duplicate`` the poller copies the new chart into a second chart +``no_persist`` the poller deletes the new chart 3 s after it lands +``collateral_loss`` the poller deletes another, pre-existing chart +``collateral_edit`` the poller changes another chart's home phone +``collateral_edit_bot`` the same, logged in OpenEMR's audit log under the + bot's own user (``openadapt_actor``) +``concurrent_edit_other`` the same, logged under another user: a legitimate + concurrent edit, so the save must still verify +``misread_source`` the referral says 02139; the agent is told 02193 + (a misread before the save) and saves it faithfully +========================= ==================================================== + +The audit-log rows the poller writes for the two logged edits are shaped +like the ``patient-record-update`` rows OpenEMR writes for a UI edit. The +fixture's OpenEMR is unchanged; everything injected is in its database. +Synthetic data only. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import multiprocessing +import os +import secrets +import shutil +import subprocess +import sys +import time +from pathlib import Path +from typing import Any + +HERE = Path(__file__).resolve().parent +BENCH = HERE.parent +sys.path.insert(0, str(BENCH)) + +from scoreboard import schema # noqa: E402 +from scoreboard.claims_openemr import ( # noqa: E402 + TOKEN_ENV, + TRIGGERS, + VERIFY_YAML, + Poller, + _install_trigger, + _rows, + _token_env, + ground_truth, + reset_and_seed, +) +from scoreboard.run import ( # noqa: E402 + ITEM_TIMEOUT_S, + SPEND_CAP_USD, + _agent_item, + _ledger_view, + add_spend, + reported_success, + spent, +) +from scoreboard.tasks import openemr # noqa: E402 + +FAULTS = ( + "ok", + "partial", + "wrong_value", + "duplicate", + "no_persist", + "collateral_loss", + "collateral_edit", + "collateral_edit_bot", + "concurrent_edit_other", + "misread_source", +) +#: Faults after which the save is still correct (a false alarm if refused). +CLEAN = ("ok", "concurrent_edit_other") +ENGINES = ("e1365", "main", "after") +BOT_USER = "openadapt_actor" +OTHER_USER = "clinician2" +AUDIT_USER = "oa_audit_reader" +AUDIT_ENV = "VC_AUDIT_PASSWORD" +MISREAD = ("postal_code", "02193") + +FIELDS = ( + "item", + "fault", + "claimed_success", + "ground_truth", + *(f"{e}_outcome" for e in ENGINES), + *(f"{e}_checked" for e in ENGINES), + "presave_check", + "fault_applied", + "model_calls", + "cost_usd", + "host_load_1m", + "final_text", +) + +#: Each referral field, the label the referral document prints, its kind. +DOC_FIELDS = ( + ("title", "Title", None), + ("fname", "First name", None), + ("lname", "Last name", None), + ("DOB", "Date of birth", "date"), + ("sex", "Sex", None), + ("street", "Street", None), + ("city", "City", None), + ("state_label", "State", None), + ("postal_code", "Postal code", None), + ("phone_home", "Home phone", None), + ("email", "Email", None), + ("country_code", "Country", None), +) +#: Parameters the record contract binds (state is a literal there). +BOUND = tuple(name for name, _l, _k in DOC_FIELDS if name != "state_label") + + +def frame_yaml(db_container: str) -> str: + """The frame for the ``after`` engine: OpenEMR's audit log attributes.""" + + query = ( + "SELECT id, user, patient_id FROM log WHERE event LIKE 'patient-record-%' " + "AND event <> 'patient-record-select' AND patient_id > 0" + ) + return ( + "frame:\n" + " identity_field: pid\n" + " attribution:\n" + " kind: audit_read\n" + " actor_field: user\n" + " record_field: patient_id\n" + f" self: [{BOT_USER}]\n" + " read:\n" + " kind: sql\n" + " sql_driver: verification_coverage.exec_mariadb\n" + " sql_connect_args:\n" + f" container: {db_container}\n" + f" user: {AUDIT_USER}\n" + " database: openemr\n" + f" sql_password_env: {AUDIT_ENV}\n" + f' sql_query: "{query}"\n' + ) + + +def referral_text(values: dict[str, str]) -> str: + lines = ["Referral (synthetic test document)", "Referred to: Example Family Clinic"] + lines += [f"{label}: {values[name]}" for name, label, _k in DOC_FIELDS] + return "\n".join(lines) + "\n" + + +def provenance(doc_sha: str, values: dict[str, str]) -> dict[str, Any]: + """What a first reader extracted, citing each line of the referral.""" + + params = {} + for offset, (name, label, kind) in enumerate(DOC_FIELDS): + if name not in BOUND: + continue + entry: dict[str, Any] = { + "value": values[name], + "source": { + "kind": "document", + "sha256": doc_sha, + "line": 3 + offset, + "label": label, + }, + "extractor": "model:simulated-first-reader", + } + if kind: + entry["value_kind"] = kind + params[name] = entry + return {"schema_version": "openadapt.param-provenance/v1", "params": params} + + +class LoggedPoller(Poller): + """The scoreboard poller, plus edits recorded in OpenEMR's audit log.""" + + def __init__(self, fault: str, *args: Any, **kwargs: Any) -> None: + base = "collateral_edit" if fault.endswith(("_bot", "_other")) else fault + super().__init__(base, *args, **kwargs) + self.logged_as = ( + BOT_USER + if fault == "collateral_edit_bot" + else OTHER_USER + if fault == "concurrent_edit_other" + else None + ) + + def run(self) -> None: + super().run() + if self.logged_as and self.applied: + db = openemr.fixture()._db + pid = ( + db(f"SELECT pid FROM openemr.patient_data WHERE id = {self.victim}") + .decode() + .split()[0] + ) + db( + "INSERT INTO openemr.log (date, event, category, user, groupname, " + "comments, patient_id, success) VALUES (NOW(), " + "'patient-record-update', 'Patient Demographics', " + f"'{self.logged_as}', 'Default', '', {int(pid)}, 1)" + ) + self.applied += f" logged as {self.logged_as}" + + +def engine_env(engine_root: Path, extra: dict[str, str]) -> dict[str, str]: + packages = engine_root / "packages" + paths = [packages / "types", packages / "flow", BENCH] + return {**os.environ, **extra, "PYTHONPATH": os.pathsep.join(map(str, paths))} + + +def verify( + engine_root: Path, env: dict[str, str], params: dict[str, str], *argv: str +) -> subprocess.CompletedProcess[str]: + """verify-run from ``engine_root``, the item's values on stdin.""" + + return subprocess.run( + [ + sys.executable, + "-I", + "-c", + _LAUNCH, + "verify-run", + "--params", + "/dev/stdin", + *argv, + ], + input=json.dumps(params), + capture_output=True, + text=True, + timeout=300, + env=env, + cwd=str(engine_root), + ) + + +#: ``-I`` ignores PYTHONPATH, so put it back by hand: the engine's packages +#: and this benchmark (for the audit-read driver), nothing else of the caller. +_LAUNCH = ( + "import os, runpy, sys; " + "sys.path[:0] = os.environ['PYTHONPATH'].split(os.pathsep); " + "sys.argv = ['openadapt-flow'] + sys.argv[1:]; " + "runpy.run_module('openadapt_flow', run_name='__main__')" +) + + +def ensure_audit_reader(password: str) -> str: + """A SELECT-only MariaDB user for the audit log; returns the container.""" + + fx = openemr.fixture() + fx._db( + f"CREATE USER IF NOT EXISTS '{AUDIT_USER}'@'%' IDENTIFIED BY '{password}'; " + f"ALTER USER '{AUDIT_USER}'@'%' IDENTIFIED BY '{password}'; " + f"GRANT SELECT ON openemr.log TO '{AUDIT_USER}'@'%'; FLUSH PRIVILEGES;" + ) + out = fx._compose("ps", "-q", "db").stdout.decode().split() + if not out: + raise SystemExit("no database container for the fixture") + return out[0] + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--run-id", required=True) + parser.add_argument("--per-fault", type=int, default=5) + parser.add_argument("--max-cost", type=float, default=0.50) + parser.add_argument("--faults", default=",".join(FAULTS)) + parser.add_argument("--first-item", type=int, default=941) + for engine in ENGINES: + parser.add_argument(f"--engine-{engine}", required=True, type=Path) + args = parser.parse_args() + engines = {e: getattr(args, f"engine_{e}") for e in ENGINES} + + out = HERE / "results" / "openemr" / args.run_id + work = schema.CACHE / "verification_coverage" / "openemr" / args.run_id + out.mkdir(parents=True, exist_ok=True) + work.mkdir(parents=True, exist_ok=True) + rows_path = out / "items.csv" + done = ( + {int(r["item"]) for r in csv.DictReader(rows_path.open())} + if rows_path.is_file() + else set() + ) + fx = openemr.fixture() + base_yaml = VERIFY_YAML.format(api=fx.ui_base_url, token_env=TOKEN_ENV) + password = secrets.token_hex(16) + heads = { + e: subprocess.run( + ["git", "-C", str(root), "rev-parse", "HEAD"], + capture_output=True, + text=True, + check=True, + ).stdout.strip() + for e, root in engines.items() + } + meta_written = False + plan = list( + enumerate( + (f for f in args.faults.split(",") for _ in range(args.per_fault)), + start=args.first_item, + ) + ) + try: + for i, fault in plan: + if i in done: + continue + if spent() + args.max_cost > SPEND_CAP_USD: + raise SystemExit("spend cap reached") + reset_and_seed() + container = ensure_audit_reader(password) + if not meta_written: + after_yaml = base_yaml + frame_yaml("") + schema.write_meta( + out, + task="openemr_referral", + arm="verification_coverage", + model="claude-sonnet-5-5", + engines=heads, + verify_yaml=base_yaml, + verify_yaml_after=after_yaml, + faults=args.faults.split(","), + per_fault=args.per_fault, + fault_injection=( + "fixture database only: the scoreboard triggers and poller " + "(claims_openemr.py), plus audit-log rows for the two " + "logged edits (openemr_run.py)" + ), + ) + meta_written = True + truth_values = openemr.item_values(i) + told = dict(truth_values) + if fault == "misread_source": + told[MISREAD[0]] = MISREAD[1] + before = _rows() + item_dir = work / f"item-{i:03d}" + shutil.rmtree(item_dir, ignore_errors=True) + item_dir.mkdir(parents=True) + # The referral holds the true values; the provenance, what the + # first reader extracted (the misread, for misread_source). + doc = item_dir / "referral.txt" + doc.write_text(referral_text(truth_values)) + from openadapt_flow.provenance import ( + ProvenanceFile, + cross_check, + default_extractor, + document_sha256, + read_sources, + ) + + prov_doc = provenance(document_sha256(doc), told) + (item_dir / "provenance.json").write_text(json.dumps(prov_doc)) + prov = ProvenanceFile.model_validate(prov_doc) + presave = cross_check(prov, read_sources([doc]), default_extractor(prov)) + params = {k: told[k] for k in BOUND} + env = {**_token_env(), AUDIT_ENV: password} + yamls = { + "e1365": base_yaml, + "main": base_yaml, + "after": base_yaml + frame_yaml(container), + } + baselines = {} + for engine, root in engines.items(): + cfg = item_dir / f"verify-{engine}.yaml" + cfg.write_text(yamls[engine]) + baselines[engine] = item_dir / f"baseline-{engine}.json" + cap = verify( + root, + engine_env(root, env), + params, + "--verify", + str(cfg), + "--capture-baseline", + str(baselines[engine]), + ) + if cap.returncode != 0: + raise SystemExit(f"{engine} baseline failed: {cap.stderr[-800:]}") + poller = None + if fault in TRIGGERS: + _install_trigger(fault, max(int(k) for k in before)) + elif fault not in ("ok", "misread_source"): + poller = LoggedPoller(fault, before, told["email"]) + poller.start() + ledger = out / "ledgers" / f"item-{i:03d}.json" + load0 = schema.load_1m() + ctx = multiprocessing.get_context("spawn") + box = ctx.Queue() + proc = ctx.Process( + target=_agent_item, + args=( + openemr.NAME, + openemr.entry_url(), + openemr.instruction(told), + str(ledger), + args.max_cost, + box, + ), + ) + proc.start() + proc.join(ITEM_TIMEOUT_S) + result: dict[str, Any] = {} + if proc.is_alive(): + proc.terminate() + proc.join(10) + result = {"error": "ItemTimeout"} + elif not box.empty(): + result = box.get() + if poller is not None: + poller.join(timeout=8.0) + poller.stop.set() + view = _ledger_view(ledger, result) + add_spend( + view.cost_usd, f"verification_coverage openemr {args.run_id} item {i}" + ) + claimed = reported_success(view, result.get("error")) # type: ignore[arg-type] + truth = ground_truth(before, truth_values) + if fault == "concurrent_edit_other" and truth == "collateral_edit": + truth = "correct" # another user's edit; the save itself is right + record = item_dir / "agent-run.json" + record.write_text( + json.dumps( + { + "executor_kind": "agent", + "executor_id": "claude-sonnet-5-5", + "claimed_success": claimed, + } + ) + ) + row: dict[str, Any] = { + "item": i, + "fault": fault, + "claimed_success": claimed, + "ground_truth": truth, + "presave_check": presave.status, + "fault_applied": ( + poller.applied + if poller is not None + else fault + if fault in TRIGGERS or fault == "misread_source" + else "" + ), + "model_calls": len(view.calls), + "cost_usd": round(view.cost_usd, 6), + "host_load_1m": load0, + "final_text": (result.get("error") or view.final_text)[:400], + } + for engine, root in engines.items(): + share = item_dir / f"share-{engine}" + shutil.rmtree(share, ignore_errors=True) + extra = ( + [ + "--provenance", + str(item_dir / "provenance.json"), + "--source", + str(doc), + ] + if engine == "after" + else [] + ) + ver = verify( + root, + engine_env(root, {**_token_env(), AUDIT_ENV: password}), + params, + "--verify", + str(item_dir / f"verify-{engine}.yaml"), + "--run-record", + str(record), + "--authorization-ref", + f"VERIFY-COVERAGE-{args.run_id}-{i:03d}", + "--baseline", + str(baselines[engine]), + "--out", + str(share), + *extra, + ) + receipt_file = share / "effect-receipt.json" + receipt = ( + json.loads(receipt_file.read_text())["receipt"] + if receipt_file.is_file() and ver.returncode in (0, 1) + else {} + ) + row[f"{engine}_outcome"] = receipt.get("outcome", "refused") + row[f"{engine}_checked"] = ( + json.dumps(receipt.get("checked"), sort_keys=True) + if receipt.get("checked") + else "" + ) + if not receipt: + (item_dir / f"{engine}.stderr").write_text(ver.stderr[-4000:]) + new = not rows_path.is_file() + with rows_path.open("a", newline="") as f: + w = csv.DictWriter(f, fieldnames=FIELDS) + if new: + w.writeheader() + w.writerow(row) + print( + f"vc {i:3d} {fault:22s} truth={truth:16s} " + + " ".join(f"{e}={row[f'{e}_outcome']}" for e in ENGINES) + + f" presave={presave.status} ${view.cost_usd:.3f}", + flush=True, + ) + time.sleep(0.5) + finally: + fx.reset() + meta = json.loads((out / "meta.json").read_text()) + meta["complete"] = True + (out / "meta.json").write_text(json.dumps(meta, indent=2, default=str) + "\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/verification_coverage/openimis_run.py b/packages/flow/benchmark/verification_coverage/openimis_run.py new file mode 100644 index 000000000..d0a627142 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/openimis_run.py @@ -0,0 +1,552 @@ +"""Fresh agent runs on openIMIS, judged by three engines, per fault class. + + python -m verification_coverage.openimis_run --run-id --per-fault 5 + +The openIMIS counterpart of ``openemr_run.py``: a computer-use agent (Claude +Sonnet 5.5) enters a health-facility claim through the openIMIS UI while a +fault is injected in the fixture's Postgres database (a trigger before the +save, or a poller after it). Each item is judged by the same three +``verify-run`` engines, each with its own baseline. + +openIMIS stamps every claim row with the user who last wrote it +(``AuditUserID``) and when (``ValidityFrom``), so the ``after`` engine's +frame uses ``record_field`` attribution, where OpenEMR's uses its audit log. +A change whose modified-by names another user and whose ``ValidityFrom`` +moved is a concurrent edit; anything else outside the declared claim is +collateral. + +Fault classes as in ``openemr_run.py``, adapted: the trigger faults blank or +change the new claim's explanation, a removal sets ``ValidityTo`` (openIMIS +never deletes rows), and the misread changes the explanation the agent is +told while the claim form document keeps the true one. + +The openIMIS stack is the pinned reference stack in ``openimis_claims`` +(fetched and hash-checked at run time; nothing AGPL is stored here). All data +is synthetic. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import multiprocessing +import re +import shutil +import sys +import threading +import time +from pathlib import Path +from typing import Any + +HERE = Path(__file__).resolve().parent +BENCH = HERE.parent +sys.path.insert(0, str(BENCH)) + +from scoreboard import schema # noqa: E402 +from scoreboard.run import ( # noqa: E402 + ITEM_TIMEOUT_S, + SPEND_CAP_USD, + _agent_item, + _ledger_view, + add_spend, + reported_success, + spent, +) +from scoreboard.tasks import openimis # noqa: E402 + +from verification_coverage.openemr_run import ( # noqa: E402 + CLEAN, + ENGINES, + FAULTS, + engine_env, + verify, +) + +READER_ENV = "VC_IMIS_READER_PASSWORD" +OTHER_USER_ID = 2 # a demo-dataset user other than the actor (checked at run time) +MISREAD_FIELD = "explanation" + +CLAIMS_SQL = ( + 'SELECT c."ClaimID" AS claim_id, c."ClaimCode" AS claim_no, ' + 'i."CHFID" AS insurance_no, c."Explanation" AS explanation, ' + 'c."ClaimStatus" AS claim_status, hf."HFCode" AS hf_code, ' + 'd."ICDCode" AS diagnosis, CAST(c."Claimed" AS TEXT) AS claimed, ' + 'c."AuditUserID" AS audit_user, CAST(c."ValidityFrom" AS TEXT) AS validity_from ' + 'FROM "tblClaim" c JOIN "tblInsuree" i ON i."InsureeID" = c."InsureeID" ' + 'JOIN "tblHF" hf ON hf."HfID" = c."HFID" ' + 'LEFT JOIN "tblICDCodes" d ON d."ICDID" = c."ICDID" ' + 'WHERE c."ValidityTo" IS NULL ORDER BY c."ClaimID"' +) + +FIELDS = ( + "item", + "fault", + "claimed_success", + "ground_truth", + *(f"{e}_outcome" for e in ENGINES), + *(f"{e}_checked" for e in ENGINES), + "presave_check", + "fault_applied", + "model_calls", + "cost_usd", + "host_load_1m", + "final_text", +) + + +def verify_yaml(db_port: int, bot_id: int, *, frame: bool) -> str: + match = ( + " match:\n" + " claim_no: {param: claim_no}\n" + " insurance_no: {param: insurance_no}\n" + ) + effects = ( + " - kind: record_written\n" + match + " count_new_only: true\n" + " timeout_s: 20\n" + ) + for name, value in ( + ("explanation", "{param: explanation}"), + ("claim_status", "'2'"), + ("hf_code", openimis.HEALTH_FACILITY_CODE), + ("diagnosis", "A389"), + ): + effects += ( + " - kind: field_equals\n" + match + f" field: {name}\n" + f" value: {value}\n timeout_s: 20\n" + ) + doc = ( + "schema_version: openadapt.verify/v1\n" + "verifier:\n" + " kind: sql\n" + " sql_driver: pg8000.dbapi\n" + " sql_connect_args:\n" + " host: 127.0.0.1\n" + f" port: {db_port}\n" + f" user: {openimis.READER_ROLE}\n" + " database: IMIS\n" + f" sql_password_env: {READER_ENV}\n" + f" sql_query: '{CLAIMS_SQL}'\n" + "effects:\n" + effects + ) + if frame: + doc += ( + "frame:\n" + " identity_field: claim_id\n" + " attribution:\n" + " kind: record_field\n" + " actor_field: audit_user\n" + " version_field: validity_from\n" + # openIMIS sets both on the server from the signed-in user; the + # claim form has no field for either. + " server_set: [audit_user, validity_from]\n" + f" self: ['{bot_id}']\n" + ) + return doc + + +def claim_form_text(values: dict[str, str]) -> str: + return ( + "Health facility claim (synthetic test document)\n" + f"Insurance No: {values['insurance_no']}\n" + f"Claim No: {values['claim_no']}\n" + f"Explanation: {values['explanation']}\n" + ) + + +def provenance(doc_sha: str, values: dict[str, str]) -> dict[str, Any]: + params = {} + for line, (name, label) in enumerate( + ( + ("insurance_no", "Insurance No"), + ("claim_no", "Claim No"), + ("explanation", "Explanation"), + ), + start=2, + ): + params[name] = { + "value": values[name], + "source": { + "kind": "document", + "sha256": doc_sha, + "line": line, + "label": label, + }, + "extractor": "model:simulated-first-reader", + } + return {"schema_version": "openadapt.param-provenance/v1", "params": params} + + +def _code(value: str) -> str: + if not re.fullmatch(r"[A-Za-z0-9]{1,8}", value): + raise ValueError("unexpected claim code") + return value + + +def psql(sql: str) -> str: + return openimis.fixture()._psql(sql) + + +def valid_claims() -> dict[int, dict[str, str]]: + out = psql( + 'SELECT "ClaimID", "ClaimCode", coalesce("Explanation", \'\'), "AuditUserID" ' + 'FROM "tblClaim" WHERE "ValidityTo" IS NULL ORDER BY "ClaimID";' + ) + rows: dict[int, dict[str, str]] = {} + for line in out.strip().splitlines(): + cid, code, expl, audit = line.split("|", 3) + rows[int(cid)] = {"code": code, "explanation": expl, "audit_user": audit} + return rows + + +def install_trigger(fault: str, claim_no: str) -> None: + body = { + "partial": "NEW.\"Explanation\" := '';", + "wrong_value": 'NEW."Explanation" := NEW."Explanation" || \' (altered)\';', + }[fault] + psql( + "CREATE OR REPLACE FUNCTION vc_fault() RETURNS trigger AS $$ BEGIN " + f'IF NEW."ClaimCode" = \'{_code(claim_no)}\' AND NEW."Explanation" IS NOT NULL ' + f"AND NEW.\"Explanation\" <> '' THEN {body} END IF; RETURN NEW; END $$ LANGUAGE plpgsql;\n" + 'DROP TRIGGER IF EXISTS vc_fault ON "tblClaim";\n' + 'CREATE TRIGGER vc_fault BEFORE INSERT OR UPDATE ON "tblClaim" ' + "FOR EACH ROW EXECUTE FUNCTION vc_fault();\n" + ) + + +def drop_trigger() -> None: + psql( + 'DROP TRIGGER IF EXISTS vc_fault ON "tblClaim"; DROP FUNCTION IF EXISTS vc_fault();' + ) + + +class Poller(threading.Thread): + """Applies one fault once the new claim is written.""" + + def __init__(self, fault: str, claim_no: str, victim: int, bot_id: int) -> None: + super().__init__(daemon=True) + self.fault, self.claim_no, self.victim, self.bot_id = ( + fault, + claim_no, + victim, + bot_id, + ) + self.applied = "" + self.stop = threading.Event() + + def run(self) -> None: + new = "" + while not self.stop.is_set(): + new = psql( + 'SELECT "ClaimID" FROM "tblClaim" WHERE "ValidityTo" IS NULL AND ' + f"\"ClaimCode\" = '{_code(self.claim_no)}' AND \"Explanation\" <> '' LIMIT 1;" + ).strip() + if new: + break + time.sleep(0.5) + if not new: + return + claim = int(new) + time.sleep(1.0) # let the save's own follow-up writes finish + if self.fault == "duplicate": + psql( + 'CREATE TEMP TABLE vc_dup AS SELECT * FROM "tblClaim" ' + f'WHERE "ClaimID" = {claim};\n' + 'UPDATE vc_dup SET "ClaimID" = nextval(pg_get_serial_sequence(' + "'\"tblClaim\"', 'ClaimID')), \"ClaimUUID\" = gen_random_uuid();\n" + 'INSERT INTO "tblClaim" SELECT * FROM vc_dup;\n' + ) + elif self.fault == "no_persist": + time.sleep(2.0) + psql( + f'UPDATE "tblClaim" SET "ValidityTo" = now() WHERE "ClaimID" = {claim};' + ) + elif self.fault == "collateral_loss": + psql( + f'UPDATE "tblClaim" SET "ValidityTo" = now() WHERE "ClaimID" = {self.victim};' + ) + elif self.fault.startswith(("collateral_edit", "concurrent_edit")): + who = ( + f', "AuditUserID" = {self.bot_id}, "ValidityFrom" = now()' + if self.fault == "collateral_edit_bot" + else f', "AuditUserID" = {OTHER_USER_ID}, "ValidityFrom" = now()' + if self.fault == "concurrent_edit_other" + else "" + ) + psql( + 'UPDATE "tblClaim" SET "Explanation" = coalesce("Explanation", \'\') ' + f"|| ' (edited)'{who} WHERE \"ClaimID\" = {self.victim};" + ) + self.applied = f"{self.fault} at {time.strftime('%H:%M:%S')}" + + +def ground_truth(before: dict[int, dict[str, str]], values: dict[str, str]) -> str: + after = valid_claims() + if any(cid not in after for cid in before): + return "collateral_loss" + if any(after[cid] != row for cid, row in before.items()): + return "collateral_edit" + return openimis.check(values) + + +def bot_user_id() -> int: + out = psql( + 'SELECT "UserID" FROM "tblUsers" WHERE "LoginName" = ' + f"'{openimis.ACTOR_USER}' AND \"ValidityTo\" IS NULL;" + ).strip() + if not out: + raise SystemExit("cannot find the actor's openIMIS user id") + return int(out.splitlines()[0]) + + +def main() -> int: + from openadapt_flow.provenance import ( + ProvenanceFile, + cross_check, + default_extractor, + document_sha256, + read_sources, + ) + + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--run-id", required=True) + parser.add_argument("--per-fault", type=int, default=5) + parser.add_argument("--max-cost", type=float, default=0.75) + parser.add_argument("--faults", default=",".join(FAULTS)) + parser.add_argument("--first-item", type=int, default=1) + parser.add_argument("--tag", default="VC") + for engine in ENGINES: + parser.add_argument(f"--engine-{engine}", required=True, type=Path) + args = parser.parse_args() + engines = {e: getattr(args, f"engine_{e}") for e in ENGINES} + + out = HERE / "results" / "openimis" / args.run_id + work = schema.CACHE / "verification_coverage" / "openimis" / args.run_id + out.mkdir(parents=True, exist_ok=True) + work.mkdir(parents=True, exist_ok=True) + rows_path = out / "items.csv" + done = ( + {int(r["item"]) for r in csv.DictReader(rows_path.open())} + if rows_path.is_file() + else set() + ) + fx = openimis.fixture() + openimis.bootstrap(fx) + bot_id = bot_user_id() + if bot_id == OTHER_USER_ID: + raise SystemExit("the 'other user' id is the actor's own id; pick another") + password = openimis._reader_password(fx) + yamls = { + "e1365": verify_yaml(fx.db_port, bot_id, frame=False), + "main": verify_yaml(fx.db_port, bot_id, frame=False), + "after": verify_yaml(fx.db_port, bot_id, frame=True), + } + import subprocess + + heads = { + e: subprocess.run( + ["git", "-C", str(root), "rev-parse", "HEAD"], + capture_output=True, + text=True, + check=True, + ).stdout.strip() + for e, root in engines.items() + } + schema.write_meta( + out, + task="openimis", + arm="verification_coverage", + model="claude-sonnet-5-5", + engines=heads, + verify_yaml=yamls["main"], + verify_yaml_after=yamls["after"], + faults=args.faults.split(","), + per_fault=args.per_fault, + fault_injection="fixture database only: a trigger or a poller (openimis_run.py)", + ) + plan = list( + enumerate( + (f for f in args.faults.split(",") for _ in range(args.per_fault)), + start=args.first_item, + ) + ) + env = {READER_ENV: password} + try: + for i, fault in plan: + if i in done: + continue + if spent() + args.max_cost > SPEND_CAP_USD: + raise SystemExit("spend cap reached") + drop_trigger() + truth_values = openimis.item_values(i, args.tag) + told = dict(truth_values) + if fault == "misread_source": + told[MISREAD_FIELD] = ( + told[MISREAD_FIELD] + .replace("same day", "next day") + .replace("Follow-up", "Followed up") + .replace("Rash", "Rush") + .replace("Child", "Chlid") + .replace("Second", "Secnd") + ) + before = valid_claims() + victim = min(cid for cid, row in before.items() if row["explanation"]) + item_dir = work / f"item-{i:03d}" + shutil.rmtree(item_dir, ignore_errors=True) + item_dir.mkdir(parents=True) + doc = item_dir / "claim.txt" + doc.write_text(claim_form_text(truth_values)) + prov_doc = provenance(document_sha256(doc), told) + (item_dir / "provenance.json").write_text(json.dumps(prov_doc)) + prov = ProvenanceFile.model_validate(prov_doc) + presave = cross_check(prov, read_sources([doc]), default_extractor(prov)) + params = dict(told) + baselines = {} + for engine, root in engines.items(): + cfg = item_dir / f"verify-{engine}.yaml" + cfg.write_text(yamls[engine]) + baselines[engine] = item_dir / f"baseline-{engine}.json" + cap = verify( + root, + engine_env(root, env), + params, + "--verify", + str(cfg), + "--capture-baseline", + str(baselines[engine]), + ) + if cap.returncode != 0: + raise SystemExit(f"{engine} baseline failed: {cap.stderr[-800:]}") + poller = None + if fault in ("partial", "wrong_value"): + install_trigger(fault, told["claim_no"]) + elif fault not in ("ok", "misread_source"): + poller = Poller(fault, told["claim_no"], victim, bot_id) + poller.start() + ledger = out / "ledgers" / f"item-{i:03d}.json" + load0 = schema.load_1m() + ctx = multiprocessing.get_context("spawn") + box = ctx.Queue() + proc = ctx.Process( + target=_agent_item, + args=( + openimis.NAME, + openimis.claim_form_url(), + openimis.instruction(told), + str(ledger), + args.max_cost, + box, + ), + ) + proc.start() + proc.join(ITEM_TIMEOUT_S) + result: dict[str, Any] = {} + if proc.is_alive(): + proc.terminate() + proc.join(10) + result = {"error": "ItemTimeout"} + elif not box.empty(): + result = box.get() + if poller is not None: + poller.join(timeout=10.0) + poller.stop.set() + drop_trigger() + view = _ledger_view(ledger, result) + add_spend( + view.cost_usd, f"verification_coverage openimis {args.run_id} item {i}" + ) + claimed = reported_success(view, result.get("error")) # type: ignore[arg-type] + truth = ground_truth(before, truth_values) + if fault == "concurrent_edit_other" and truth == "collateral_edit": + truth = "correct" + if fault == "misread_source" and truth == "wrong": + truth = "wrong_vs_source" + record = item_dir / "agent-run.json" + record.write_text( + json.dumps( + { + "executor_kind": "agent", + "executor_id": "claude-sonnet-5-5", + "claimed_success": claimed, + } + ) + ) + row: dict[str, Any] = { + "item": i, + "fault": fault, + "claimed_success": claimed, + "ground_truth": truth, + "presave_check": presave.status, + "fault_applied": poller.applied if poller is not None else fault, + "model_calls": len(view.calls), + "cost_usd": round(view.cost_usd, 6), + "host_load_1m": load0, + "final_text": (result.get("error") or view.final_text)[:400], + } + for engine, root in engines.items(): + share = item_dir / f"share-{engine}" + shutil.rmtree(share, ignore_errors=True) + extra = ( + [ + "--provenance", + str(item_dir / "provenance.json"), + "--source", + str(doc), + ] + if engine == "after" + else [] + ) + ver = verify( + root, + engine_env(root, env), + params, + "--verify", + str(item_dir / f"verify-{engine}.yaml"), + "--run-record", + str(record), + "--authorization-ref", + f"VERIFY-COVERAGE-IMIS-{args.run_id}-{i:03d}", + "--baseline", + str(baselines[engine]), + "--out", + str(share), + *extra, + ) + receipt_file = share / "effect-receipt.json" + receipt = ( + json.loads(receipt_file.read_text())["receipt"] + if receipt_file.is_file() and ver.returncode in (0, 1) + else {} + ) + row[f"{engine}_outcome"] = receipt.get("outcome", "refused") + row[f"{engine}_checked"] = ( + json.dumps(receipt["checked"], sort_keys=True) + if receipt.get("checked") + else "" + ) + if not receipt: + (item_dir / f"{engine}.stderr").write_text(ver.stderr[-4000:]) + new = not rows_path.is_file() + with rows_path.open("a", newline="") as f: + w = csv.DictWriter(f, fieldnames=FIELDS) + if new: + w.writeheader() + w.writerow(row) + print( + f"vc-imis {i:3d} {fault:22s} truth={truth:16s} " + + " ".join(f"{e}={row[f'{e}_outcome']}" for e in ENGINES) + + f" presave={presave.status} ${view.cost_usd:.3f}", + flush=True, + ) + finally: + drop_trigger() + meta = json.loads((out / "meta.json").read_text()) + meta["complete"] = True + (out / "meta.json").write_text(json.dumps(meta, indent=2, default=str) + "\n") + return 0 + + +__all__ = ["CLEAN", "main"] + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/verification_coverage/summarize.py b/packages/flow/benchmark/verification_coverage/summarize.py new file mode 100644 index 000000000..8f026b068 --- /dev/null +++ b/packages/flow/benchmark/verification_coverage/summarize.py @@ -0,0 +1,149 @@ +"""Per-fault-class catch rates, before and after, from committed rows. + + python -m verification_coverage.summarize # print the tables + python -m verification_coverage.summarize --write # also RESULTS.md + +A bad save is **caught** when the engine's outcome is anything but +``verified``. A clean save (``ok``, ``concurrent_edit_other``) refused is a +**false alarm**. Ground truth comes from the fixture's own database, read +after the run; a save the agent itself got wrong counts as bad whatever the +injected fault was, and is reported in its own row. +""" + +from __future__ import annotations + +import argparse +import csv +import json +from collections import defaultdict +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ENGINES = ("e1365", "main", "after") +ENGINE_LABEL = { + "e1365": "#1365 engine", + "main": "main (with #1375)", + "after": "frame + gate + provenance", +} +CLEAN_FAULTS = ("ok", "concurrent_edit_other") + + +def load(app: str) -> tuple[list[dict[str, str]], list[dict]]: + rows: list[dict[str, str]] = [] + metas: list[dict] = [] + for run in sorted((HERE / "results" / app).glob("*/items.csv")): + meta = json.loads((run.parent / "meta.json").read_text()) + if not meta.get("complete"): + continue + metas.append(meta) + rows += list(csv.DictReader(run.open())) + return rows, metas + + +def _clean(row: dict[str, str]) -> bool: + return row["ground_truth"] == "correct" + + +def table(rows: list[dict[str, str]]) -> list[str]: + by_fault: dict[str, list[dict[str, str]]] = defaultdict(list) + for row in rows: + by_fault[row["fault"]].append(row) + head = ( + "| Fault class | n | " + + " | ".join(ENGINE_LABEL[e] for e in ENGINES) + + " | Held before the save |" + ) + out = [head, "|" + "---|" * (len(ENGINES) + 3)] + totals = {e: [0, 0] for e in ENGINES} + alarms = {e: [0, 0] for e in ENGINES} + for fault in sorted(by_fault, key=lambda f: (f in CLEAN_FAULTS, f)): + items = by_fault[fault] + clean = [r for r in items if _clean(r)] + bad = [r for r in items if not _clean(r)] + cells = [] + for engine in ENGINES: + parts = [] + if bad: + caught = sum(r[f"{engine}_outcome"] != "verified" for r in bad) + totals[engine][0] += caught + totals[engine][1] += len(bad) + parts.append(f"{caught}/{len(bad)} caught") + if clean: + false = sum(r[f"{engine}_outcome"] != "verified" for r in clean) + alarms[engine][0] += false + alarms[engine][1] += len(clean) + parts.append(f"{false}/{len(clean)} false alarms") + cells.append(", ".join(parts)) + held = sum(r["presave_check"] == "hold" for r in items) + out.append( + f"| `{fault}` | {len(items)} | " + + " | ".join(cells) + + f" | {held}/{len(items)} |" + ) + out.append( + "| **All bad saves** | | " + + " | ".join(f"**{c}/{n}**" for c, n in (totals[e] for e in ENGINES)) + + " | |" + ) + out.append( + "| **All clean saves** | | " + + " | ".join(f"{c}/{n} false alarms" for c, n in (alarms[e] for e in ENGINES)) + + " | |" + ) + return out + + +def render() -> str: + lines = ["# Results", ""] + for app, title in (("openemr", "OpenEMR"), ("openimis", "openIMIS")): + rows, metas = load(app) + lines.append(f"## {title}") + lines.append("") + if not rows: + lines += ["No complete run yet.", ""] + continue + engines = metas[-1].get("engines", {}) + lines.append( + f"{len(rows)} fresh agent runs (Claude Sonnet 5.5). Engines: " + + ", ".join( + f"{ENGINE_LABEL[e]} `{engines.get(e, '?')[:9]}`" for e in ENGINES + ) + + "." + ) + lines.append("") + lines += table(rows) + lines.append("") + gate = HERE / "results" / app + for summary in sorted(gate.glob("*/gate-summary.json")): + data = json.loads(summary.read_text()) + lines.append( + f"Fault gate on the {title} test copy ({summary.parent.name}):" + ) + lines.append("") + for name, s in data.items(): + lines.append( + f"- `{name}` read: {s['killed']} of {s['applicable']} faults killed" + + ( + f"; survived: {', '.join(s['survived'])}" + if s["survived"] + else "" + ) + + ("" if s["clean_pass"] else "; the clean save did not verify") + ) + lines.append("") + return "\n".join(lines).rstrip() + "\n" + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--write", action="store_true") + args = parser.parse_args() + text = render() + print(text) + if args.write: + (HERE / "RESULTS.md").write_text(text) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/openadapt_flow/record_check_synthesis.py b/packages/flow/openadapt_flow/record_check_synthesis.py index 7b88b89a3..6cc7c6f74 100644 --- a/packages/flow/openadapt_flow/record_check_synthesis.py +++ b/packages/flow/openadapt_flow/record_check_synthesis.py @@ -61,6 +61,7 @@ Verdict, stable_id, ) +from openadapt_flow.runtime.effects.sql import read_cell from openadapt_flow.runtime.effects.surfaces import surface_probe #: The network capture ``record --capture-network`` writes. Read here without @@ -818,7 +819,12 @@ def reads_from_sqlite( ) complete = False continue - rows = [dict(r) for r in conn.execute(f'SELECT * FROM "{table}"')] + # Cells as the check's own SQL read returns them (binary as hex), + # so the scan and the generated read compare equal. + rows = [ + {k: read_cell(r[k]) for k in r.keys()} + for r in conn.execute(f'SELECT * FROM "{table}"') + ] best: Optional[tuple[dict[str, Any], dict[str, str]]] = None for row in rows: exact, _ = _bind_fields( diff --git a/packages/flow/openadapt_flow/runtime/effects/sql.py b/packages/flow/openadapt_flow/runtime/effects/sql.py index 2a6a305be..7d89d263d 100644 --- a/packages/flow/openadapt_flow/runtime/effects/sql.py +++ b/packages/flow/openadapt_flow/runtime/effects/sql.py @@ -127,6 +127,19 @@ def assert_read_only_sql(query: str) -> str: return text +def read_cell(value: Any) -> Any: + """A binary column as ``0x`` + hex, so records stay JSON-serializable. + + OpenEMR keys rows by ``uuid binary(16)``; a driver returns those as bytes, + which a baseline (JSON) cannot hold. Equal bytes give equal text, so + record identity and change detection are unaffected. + """ + + if isinstance(value, (bytes, bytearray, memoryview)): + return "0x" + bytes(value).hex() + return value + + class SqlRecordVerifier(VerifierAdapterBase): """Verify effects against a SQL system of record with a read-only SELECT. @@ -198,7 +211,8 @@ def _fetch_records(self) -> Optional[list[dict[str, Any]]]: columns = [str(col[0]) for col in description] rows = cursor.fetchall() return drop_record_fields( - [dict(zip(columns, row)) for row in rows], self.drop_fields + [dict(zip(columns, map(read_cell, row))) for row in rows], + self.drop_fields, ) except Exception: # noqa: BLE001 - any read failure is unreadable return None diff --git a/packages/flow/public-artifacts.json b/packages/flow/public-artifacts.json index 5b4ea85a1..d52d4f50a 100644 --- a/packages/flow/public-artifacts.json +++ b/packages/flow/public-artifacts.json @@ -220,6 +220,11 @@ "benchmark/undo_proposal/results/openemr-new-patient.json", "benchmark/undo_proposal/results/openimis-claim.json", "benchmark/undo_proposal/results/summary.json", + "benchmark/verification_coverage/independent/faults.yaml", + "benchmark/verification_coverage/independent/results/standin-full/checks.json", + "benchmark/verification_coverage/independent/results/standin-full/rows.json", + "benchmark/verification_coverage/independent/results/standin-slice/checks.json", + "benchmark/verification_coverage/independent/results/standin-slice/rows.json", "benchmark/vision_hardening/corpus.json", "benchmark/vision_hardening/results.json", "benchmark/vlm_identity/pairs/collapse_digit_flanked_O0_AC50061_vs_AC5OO61.png", diff --git a/packages/flow/tests/test_effect_sql.py b/packages/flow/tests/test_effect_sql.py index b970ca5df..13dbf1e91 100644 --- a/packages/flow/tests/test_effect_sql.py +++ b/packages/flow/tests/test_effect_sql.py @@ -246,3 +246,93 @@ def connect(): raise sqlite3.OperationalError("db down") assert capture_table_counts(connect, ["encounters"]) is None + + +# -- binary columns (OpenEMR keys rows by uuid binary(16)) -------------------- + +#: The bytes the pinned OpenEMR fixture's first uuid started with: not UTF-8. +OPENEMR_UUID = bytes.fromhex("a2f1c3d40e5b4c7a9b1d2e3f40516273") + + +def _openemr_patients(path: Path) -> sqlite3.Connection: + conn = sqlite3.connect(path) + conn.execute( + "CREATE TABLE patient_data (id INTEGER PRIMARY KEY AUTOINCREMENT, " + "uuid BLOB, pid INTEGER, fname TEXT, lname TEXT, DOB TEXT, email TEXT)" + ) + conn.execute( + "INSERT INTO patient_data (uuid, pid, fname, lname, DOB, email) VALUES " + "(?, 1, 'Wendell', 'Priorchart', '1962-06-14', 'w.priorchart@example.test')", + (OPENEMR_UUID,), + ) + conn.commit() + return conn + + +def test_binary_column_reads_as_hex(tmp_path: Path) -> None: + path = tmp_path / "openemr.db" + _openemr_patients(path).close() + verifier = SqlRecordVerifier( + lambda: sqlite3.connect(path), "SELECT * FROM patient_data" + ) + state = verifier.capture_pre_state() + assert state.reachable + assert state.records[0]["uuid"] == "0x" + OPENEMR_UUID.hex() + state.model_dump(mode="json") # a baseline must serialize + + +def test_verify_run_baselines_and_verifies_a_binary_keyed_table(tmp_path: Path) -> None: + """Before the fix, capture_baseline raised UnicodeDecodeError here.""" + + from openadapt_flow.verify_run import ( + capture_baseline, + parse_verify_config, + verify_run, + ) + + path = tmp_path / "openemr.db" + conn = _openemr_patients(path) + cfg = parse_verify_config( + { + "schema_version": "openadapt.verify/v1", + "verifier": { + "kind": "sql", + "sqlite_database": str(path), + "sql_query": "SELECT * FROM patient_data", + }, + "record": { + "name": "patient", + "match": ["email", "lname"], + "duplicate_key": "email", + "fields": { + "email": "email", + "lname": "lname", + "fname": "fname", + "DOB": "DOB", + }, + }, + } + ) + params = { + "email": "ada.quill@example.test", + "lname": "Quill", + "fname": "Ada", + "DOB": "1984-03-07", + } + baseline = tmp_path / "baseline.json" + capture_baseline(cfg, params, baseline) + conn.execute( + "INSERT INTO patient_data (uuid, pid, fname, lname, DOB, email) VALUES " + "(?, 2, 'Ada', 'Quill', '1984-03-07', 'ada.quill@example.test')", + (bytes.fromhex("ff00ee11dd22cc33bb44aa5599668877"),), + ) + conn.commit() + conn.close() + result = verify_run( + cfg, + params=params, + run_record={"executor_kind": "agent", "executor_id": "openadapt_actor"}, + authorization_ref="binary-columns-test", + baseline_path=baseline, + ) + assert result["receipt"]["outcome"] == "verified" diff --git a/packages/flow/tests/test_independent_verification_suite.py b/packages/flow/tests/test_independent_verification_suite.py new file mode 100644 index 000000000..f3d28044f --- /dev/null +++ b/packages/flow/tests/test_independent_verification_suite.py @@ -0,0 +1,85 @@ +"""The independent verification-coverage suite: its inputs and its stand-in.""" + +from __future__ import annotations + +import sqlite3 +import sys +from pathlib import Path + +import yaml + +BENCH = Path(__file__).resolve().parents[1] / "benchmark" +sys.path.insert(0, str(BENCH)) + +from verification_coverage.independent import standin # noqa: E402 + +SUITE = BENCH / "verification_coverage" / "independent" +OPS = { + "register_referral", + "register_patient", + "overwrite_chart", + "update_chart", + "update_history", + "delete_history", + "add_note", + "add_allergy", + "add_insurance", +} + + +def test_every_case_names_its_spec_clauses_and_a_verdict() -> None: + suite = yaml.safe_load((SUITE / "faults.yaml").read_text()) + spec = (SUITE / "SPEC.md").read_text() + ids = [c["id"] for c in suite["cases"]] + assert len(ids) == len(set(ids)) + for case in suite["cases"]: + assert case["expect"] in ("fault", "clean") + for clause in case["clauses"]: + assert f"**{clause}." in spec, clause + for step in case["steps"]: + assert step["actor"] in ("bot", "clinician2", "none") + assert step["op"] in OPS + classes = {c["class"] for c in suite["cases"]} + assert { + "wrong_record", + "unrelated_change", + "misread_source", + "missing_side_record", + "concurrent_legitimate", + "duplicate", + } <= classes + assert all( + c["expect"] == "clean" + for c in suite["cases"] + if c["class"] == "concurrent_legitimate" + ) + + +DUMP = """\ +CREATE TABLE `patient_data` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `uuid` binary(16) DEFAULT NULL, + `fname` varchar(255) NOT NULL DEFAULT '', + `providerID` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +INSERT INTO `patient_data` VALUES +(1,NULL,'O\\'Neil',5), +(2,NULL,'Line\\nTwo',NULL); +""" + + +def test_the_dump_converts_with_values_and_affinity(tmp_path: Path) -> None: + dump = tmp_path / "baseline.sql" + dump.write_text(DUMP) + out = tmp_path / "copy.sqlite" + counts = standin.build(dump, out) + assert counts == {"patient_data": 2} + con = sqlite3.connect(out) + rows = con.execute("SELECT id, fname, providerID FROM patient_data").fetchall() + assert rows == [(1, "O'Neil", 5), (2, "Line\nTwo", None)] + # MariaDB compares '5' = 5; the stand-in must too. + assert con.execute( + "SELECT COUNT(*) FROM patient_data WHERE providerID = ?", ("5",) + ).fetchone() == (1,) + con.close() diff --git a/packages/flow/tests/test_record_check_synthesis.py b/packages/flow/tests/test_record_check_synthesis.py index 0033b0344..409d8457d 100644 --- a/packages/flow/tests/test_record_check_synthesis.py +++ b/packages/flow/tests/test_record_check_synthesis.py @@ -984,3 +984,31 @@ def test_a_demonstration_with_no_write_is_refused(tmp_path, capsys): with pytest.raises(SystemExit) as exc: main(["scaffold-verifier", str(rec), "--complete-read"]) assert "REFUSED" in str(exc.value.code if exc.value.code is not None else exc.value) + + +def test_a_binary_keyed_table_reads_the_same_in_the_scan_and_the_check(tmp_path): + """OpenEMR keys patient_data by uuid binary(16). The scan must see the + cells as the generated SQL read returns them, or every such read is + reported as returning different rows.""" + + import sqlite3 + + path = tmp_path / "openemr.db" + conn = sqlite3.connect(path) + conn.execute( + "CREATE TABLE patient_data (id INTEGER PRIMARY KEY, uuid BLOB, " + "fname TEXT, lname TEXT, email TEXT)" + ) + conn.execute( + "INSERT INTO patient_data VALUES (1, ?, 'Ada', 'Quill', 'ada.quill@example.test')", + (bytes.fromhex("a2f1c3d40e5b4c7a9b1d2e3f40516273"),), + ) + conn.commit() + conn.close() + proposal = synthesize( + None, + params={"fname": "Ada", "lname": "Quill", "email": "ada.quill@example.test"}, + db_path=path, + ) + assert not [p for p in proposal.search.problems if "patient_data" in p] + assert any(s.is_target for s in proposal.search.surfaces) diff --git a/packages/flow/tests/test_verification_coverage_bench.py b/packages/flow/tests/test_verification_coverage_bench.py new file mode 100644 index 000000000..0459e7028 --- /dev/null +++ b/packages/flow/tests/test_verification_coverage_bench.py @@ -0,0 +1,95 @@ +"""The verification-coverage benchmark's summary (benchmark/verification_coverage).""" + +from __future__ import annotations + +import csv +import json +import sys +from pathlib import Path + +import pytest + +BENCH = Path(__file__).resolve().parents[1] / "benchmark" + + +@pytest.fixture +def summarize(monkeypatch, tmp_path): + monkeypatch.syspath_prepend(str(BENCH)) + sys.modules.pop("verification_coverage.summarize", None) + from verification_coverage import summarize as mod + + monkeypatch.setattr(mod, "HERE", tmp_path) + return mod + + +def _write(tmp_path: Path, rows: list[dict[str, str]], complete: bool = True) -> None: + run = tmp_path / "results" / "openemr" / "r1" + run.mkdir(parents=True) + (run / "meta.json").write_text( + json.dumps( + { + "complete": complete, + "engines": {"e1365": "a" * 40, "main": "b" * 40, "after": "c" * 40}, + } + ) + ) + with (run / "items.csv").open("w", newline="") as f: + w = csv.DictWriter(f, fieldnames=list(rows[0])) + w.writeheader() + w.writerows(rows) + + +def _row( + fault: str, truth: str, *outcomes: str, presave: str = "agree" +) -> dict[str, str]: + return { + "item": "1", + "fault": fault, + "ground_truth": truth, + "e1365_outcome": outcomes[0], + "main_outcome": outcomes[1], + "after_outcome": outcomes[2], + "presave_check": presave, + } + + +def test_catches_and_false_alarms_are_counted_apart(summarize, tmp_path) -> None: + v, r = "verified", "reconciliation_required" + _write( + tmp_path, + [ + _row("ok", "correct", v, v, v), + _row("collateral_edit", "collateral_edit", v, r, r), + _row("concurrent_edit_other", "correct", v, r, v), + _row("misread_source", "wrong_vs_source", v, v, r, presave="hold"), + ], + ) + text = summarize.render() + assert ( + "| `collateral_edit` | 1 | 0/1 caught | 1/1 caught | 1/1 caught | 0/1 |" in text + ) + assert ( + "| `concurrent_edit_other` | 1 | 0/1 false alarms | 1/1 false alarms | 0/1 false alarms | 0/1 |" + in text + ) + assert ( + "| `misread_source` | 1 | 0/1 caught | 0/1 caught | 1/1 caught | 1/1 |" in text + ) + assert "**0/2** | **1/2** | **2/2**" in text + + +def test_an_incomplete_run_is_not_reported(summarize, tmp_path) -> None: + _write( + tmp_path, + [_row("ok", "correct", "verified", "verified", "verified")], + complete=False, + ) + assert "No complete run yet." in summarize.render() + + +def test_the_benchmark_modules_import(monkeypatch) -> None: + monkeypatch.syspath_prepend(str(BENCH)) + import importlib + + for name in ("exec_mariadb", "summarize"): + importlib.import_module(f"verification_coverage.{name}")