# Registry evaluation of the model-level fields

> `GET /model-versions/{versionId}/completeness` · Scope: `read` · operationId `getModelVersionCompleteness`

Any member. Evaluated against the category, the version's effective date and the organisation's facts.

## Path parameters

- **versionId** `string (uuid)` (required)

## Responses

### 200 (`application/json`)

The evaluation.

- **category** `string` (required, one of: `ev`, `lmt`, `industrial`, `stationary`, `industrial_without_bms`): Battery category per Regulation (EU) 2023/1542; drives registry requirements.
- **fields** `FieldCompleteness[]` (required): Visible fields in registry order (hidden fields are left out).
  - **applies_from** `string (date)`
  - **display** `string` (required, one of: `required_missing`, `required_pending_review`, `ok`, `not_applicable`, `later_required`, `optional_missing`): Combined status shown to users (docs/domain-model.md §5).
  - **field_key** `string` (required)
  - **not_applicable_reason** `string`
  - **reason** `string` (required, one of: `rule`, `condition_met`, `condition_open`, `condition_not_met`, `applies_from`, `trigger`, `marked_not_applicable`): Why the field has its requirement: `rule` (registry rule for the category), `condition_met`, `condition_open` (cannot be decided yet; treated as required), `condition_not_met`, `applies_from` (obligation starts after the reference date), `trigger` (a legal act is still pending), `marked_not_applicable` (a user recorded a reason).
  - **requirement** `string` (required, one of: `required`, `conditional`, `optional`, `not_applicable`, `later_required`)
  - **section** `string` (required)
  - **trigger** `LabelText`: Text in German and English (ADR-010); clients pick the locale.
  - **value_status** `string` (required, one of: `missing`, `captured`, `auto_checked`, `approved`, `rejected`)
- **model_version** `CompletenessSummary`
  - **blocking** `integer` (required): Fields that count against publishing (required_missing + required_pending_review).
  - **counts** `StatusCounts` (required)
  - **total** `integer` (required)
- **reference_date** `string (date)`: The placed-on-market date obligations were evaluated for.
- **registry** `RegistryRef` (required)
  - **hash** `string` (required)
  - **status** `string` (required, one of: `seed`, `verified`): `seed` until verified against primary sources (docs/registry/verification-log.md).
  - **version** `string` (required)
- **summary** `CompletenessSummary` (required)
  - **blocking** `integer` (required): Fields that count against publishing (required_missing + required_pending_review).
  - **counts** `StatusCounts` (required)
  - **total** `integer` (required)
- **target** `TargetRef` (required)
  - **id** `string (uuid)` (required)
  - **type** `string` (required, one of: `model_version`, `battery`)

### 400 (`application/problem+json`)

The request is malformed or failed validation (`validation_error`), or a token is invalid or expired (`invalid_token`).

### 401 (`application/problem+json`)

The API key is missing, unknown or revoked (`unauthenticated`).

### 403 (`application/problem+json`)

The API key may not perform this action (`forbidden`): it lacks the operation's scope, or the action needs more than a viewer's rights.

### 404 (`application/problem+json`)

The resource does not exist in the organisation of the API key, or the public passport is unknown (`not_found`).

### default (`application/problem+json`)

Any other problem, e.g. `internal_error`.

## Example

```bash title="cURL"
curl -X GET "https://passport.kabin.sh/api/v1/model-versions/{versionId}/completeness" \
  -H "Authorization: Bearer $BATTERYPASS_API_KEY"
```
