# TIME selective materialization by person

This NEW-only patch adds the ability to materialize canonical `TIME.time_entry` rows and refresh projection/representations only for Leitstand time recordings that belong to one selected person after the raw `TIME.ls_*` import is already present.

## Service methods

- `LeitstandTimeImportService.materializeCanonicalTimeEntriesForPersonDbk(String personDbk, boolean rebuildProjection)`
- `LeitstandTimeImportService.materializeCanonicalTimeEntriesForPersonNumber(Integer personNumber, boolean rebuildProjection)`
- `LeitstandTimeProjectionService.refreshForPersonDbk(String personDbk)`

## Optional startup runner

Enable with:

```yaml
dip:
  time:
    leitstand:
      startup-selective-materialization-enabled: true
      selective-materialization-person-dbk: 100919970619190804070001
      selective-materialization-build-projection: true
```

or:

```yaml
dip:
  time:
    leitstand:
      startup-selective-materialization-enabled: true
      selective-materialization-person-number: 12345
      selective-materialization-build-projection: true
```

## Notes

- intended for already imported `TIME.ls_*` rows
- no legacy code changes
- no raw source sync is triggered by this runner
- if projection rebuild is enabled, representations/embedding enqueueing continue to use the existing T3 behavior
