DIP/docs/TIME_PHASE_T3_PROJECTION_RE...

61 lines
1.9 KiB
Markdown

# TIME Phase T3 — Projection, representations, and embedding enqueueing
This phase adds the NEW-only TIME projection layer on top of the Leitstand import foundation from T2.
## Scope
Included in T3:
- `TIME.time_entry_search_projection`
- Leitstand projection builder from imported `TIME.ls_*` tables
- semantic text materialization for canonical `DOC.doc_document` roots of `TIME.time_entry`
- lexical indexing through `DOC.doc_text_representation.search_vector`
- embedding job enqueueing for the TIME primary semantic representation
Not included yet:
- structured search endpoint
- dedicated TIME search DTOs
- Toggl import
- cross-source search
## Representation strategy
One root semantic representation is generated per canonical `TIME.time_entry` document.
The semantic text is built from:
- Time recording description / remark / ID / URL
- person display name
- activity type
- task ids / names / descriptions
- cost unit ids / names / descriptions
- contract names / references
- contract position names / references
- organization names
- recorded time window and duration
This keeps the searchable unit aligned with the future common TIME search concept: one canonical time-entry document enriched with source-specific business context.
## Operational notes
After T2 import runs, T3 can immediately refresh projection rows for the imported Leitstand time recordings.
A separate startup runner is also available for rebuilding all TIME projections and semantic representations for already-imported rows:
```yaml
id: time-t3-startup
dip:
time:
leitstand:
startup-projection-rebuild-enabled: false
build-search-projection: true
build-representations: true
representation-language-code: de
```
## Files added in this phase
- `TIME.time_entry_search_projection`
- `LeitstandTimeProjectionService`
- `TimeEntryRepresentationMaterializationService`
- `LeitstandTimeProjectionStartupRunner`