# Mobilemed compatibility contract matrix

Frozen source: `https://integracao.mobilemed.com.br/doc/api_data.json`
Captured: `2026-09-21T17:37:47Z`
SHA-256: `3391e5329943dce35ef6cca2dab749866b17c7f2e178ca9db6e4bca7d13d00ea`
Operations: **26**
Authenticated Mobilemed behavior: **unavailable — no authorized token supplied**
Public auth boundary — original capture: **2 matches and 2 precedence mismatches before the guard correction**.

Post-deployment verification: **4/4 authentication cases now match** the frozen real Mobilemed responses, checked at `2026-09-21T19:55:15.858378+00:00` through `https://integracao.themishealth.com.br`. [Read the HTTP evidence](deployed-auth-comparison.json). This does not establish authenticated business parity.

Transport limitation observed: the public hosting edge returned HTTP 403/code 1010 for the default Python urllib User-Agent. These four checks used the explicitly identified `OneLaudos-Parity-Verification/1.0` client; arbitrary-client transport compatibility remains unverified.

Route presence and checked-in tests identify implementation evidence; they do not establish live behavioral parity.

| # | Operation | Request contract | Success / error | Files · pagination · effects | Themis evidence |
|---:|---|---|---|---|---|
| 1 | **POST /v1/exam/{accessionNumber}/comment**<br>createComment | `accessionNumber` String required; `status` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 2 | **GET /v1/exam/{accessionNumber}**<br>find | header `format` String required; header `base64` bool required; header `group` bool required; header `marcacaoClinica` bool required; `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 3 | **GET /v1/exam/studyUID/{studyUID}**<br>findByStudyUID | header `token` String required; header `api` String required; header `format` String required; header `base64` bool required; header `group` bool required; `studyUID` String required | success [200]; error [400, 404, 406, 500] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 4 | **GET /v1/exam/{accessionNumber}/comments**<br>getComments | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 5 | **GET /v1/exam/logs/integration**<br>integrationLogs | `success` bool required; `startDate` date required; `finalDate` date required; `page` number required; `xlsx` bool required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination documented; read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 6 | **GET /v1/exam/{accessionNumber}/keyimages**<br>keyImagesJPEG | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['jpeg']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 7 | **POST /v1/exam/{accessionNumber}/report**<br>receiveReport | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['pdf', 'base64', 'rtf']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 8 | **POST /v1/exam/reintegrateReports**<br>reintegrateReports | No fields stated; body/null semantics unknown | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 9 | **POST /v1/exam/{accessionNumber}/replicate**<br>replicate | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 10 | **POST /v1/exam/{accessionNumber}/mammography**<br>saveMammography | header `token` String required; header `api` String required; `accessionNumber` String required | success [200]; error [400, 404, 406, 500] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 11 | **POST /v1/exam/{accessionNumber}/attachment**<br>setAttachment | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['pdf', 'attachment']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 12 | **POST /v1/exam/{accessionNumber}/resident-physician**<br>setPhysician | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 13 | **POST /v1/exam/{accessionNumber}/priority**<br>setPriority | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 14 | **POST /v1/exam/{accessionNumber}/release**<br>setRelease | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 15 | **POST /v1/exam/{accessionNumber}/description**<br>updateDescription | `accessionNumber` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam.controller.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-read.service.spec.ts`<br>`ris-backend/src/mobilemed-compat/exam/mobilemed-exam-write.service.spec.ts` |
| 16 | **GET /v1/physician**<br>findByCrmUf | `crm` String required; `uf` String required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/physician/mobilemed-physician.controller.ts`<br>`ris-backend/src/mobilemed-compat/physician/mobilemed-physician.service.spec.ts` |
| 17 | **POST /v1/results/add-print-count**<br>addPrintCount | No fields stated; body/null semantics unknown | success [201]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 18 | **GET /v1/results/signed/{code}**<br>getDigitalSign | `code` String required | success [201]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 19 | **POST /v1/results/get-exams**<br>getExams | No fields stated; body/null semantics unknown | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 20 | **POST /v1/results/get-all-exams**<br>getExams | No fields stated; body/null semantics unknown | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 21 | **GET /v1/results/getAllPais**<br>getPais | `Busca` String required | success [201]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 22 | **GET /v1/results/report-pdf-link/{laudo_hash}**<br>getReportPdfLink | `hash` Integer required | success [201]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 23 | **POST /v1/results/send-email**<br>sendEmail | No fields stated; body/null semantics unknown | success [201]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.controller.ts`<br>`ris-backend/src/mobilemed-compat/results/mobilemed-results.service.spec.ts` |
| 24 | **GET /v1/viewer/{accessionNumber}**<br>getViewerUrl | `accessionNumber` String required; `forMedic` bool required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/viewer/mobilemed-viewer.controller.ts`<br>`ris-backend/src/mobilemed-compat/viewer/mobilemed-viewer.service.spec.ts` |
| 25 | **GET /v1/viewer/list/bydate**<br>getViewerUrlByDate | `dataInicial` String required; `dataFinal` String required; `forMedic` bool required; `page` Number required; `pageSize` Number required | success [200]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); read-only is implied by GET; caching and consistency are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/viewer/mobilemed-viewer.controller.ts`<br>`ris-backend/src/mobilemed-compat/viewer/mobilemed-viewer.service.spec.ts` |
| 26 | **POST /v1/worklist**<br>createWorklist | header `token` String required; header `api` String optional; header `adapter` String optional; header `Content-Type` String required | success [201]; error ['unknown (not stated by public reference)'] | files ['unknown (not stated by public reference)']; pagination unknown (not stated by public reference); mutation is implied by POST/name/description; transaction, idempotency and follow-up visibility are unknown | OpenAPI: yes; route documented; behavioral parity requires replay/live evidence<br>`ris-backend/src/mobilemed-compat/mobilemed-compat.controller.ts`<br>`ris-backend/src/mobilemed-compat/mobilemed-compat.controller.spec.ts`<br>`ris-backend/src/mobilemed-compat/worklist/normalize-worklist-payload.spec.ts` |

## Reading the machine matrix

`contract-matrix.json` retains verbatim request/success/error examples, all raw field descriptions, required flags, declared types, explicit unknown null/error/file/pagination/effect semantics, normalized paths and source/test references. Unknowns are strings rather than inferred values so they remain visible to automation.
