Get Invoice Line Items
get_invoice_line_itemsWHAT: Computes ONE of the 10 end-invoices (or the 49 € mount add-on). NOT a booking, NOT a PDF. FIRST classify via get_prices.composition.routes: locked_out+slam+no cylinder → opening_slam; locked_out+locked+no cylinder → opening_locked; +cylinder same trip → pkg_key_slam / pkg_key_locked; door open → cylinder_only; mount after paid opening → cylinder_mount (not an end-invoice). THEN whenKey from get_ort_datetime (day|night|now). Night/WE/holiday is NOT +49 — 49 is only cylinder_mount. Do not invent euro. Do not add 49 on top of pkg_key_*. REQUIRED situationKey. Aliases: zugefallen→opening_slam, abgeschlossen→opening_locked, schluessel_weg_zugefallen→pkg_key_slam. breakdown=true splits combo into opening+49, totalEur unchanged. RETURNS totalEur + composition + contactOption. NEXT: compose_whatsapp or compose_mailto with that contactOption. No VAT.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional. Same formats as get_ort_datetime.at. Only used when whenKey is now or omitted. | |
| locale | No | HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only). | de |
| whenKey | No | day = Mo–Fr 08:00:00–17:59:59 Europe/Berlin except BW holidays. night = weekend, holiday, or 18:00–07:59. now or omit = live get_ort_datetime (or at=). Night is not +49 (49 is only cylinder_mount). Do not invent dusk/dawn. | |
| breakdown | No | If true, pkg_key_slam / pkg_key_locked emit two rows (opening + cylinder_mount_same_trip) instead of one package row. Total euro unchanged. | |
| situationKey | Yes | Required. From composition.routes: opening_slam | opening_locked | pkg_key_slam | pkg_key_locked | cylinder_only | cylinder_mount. Aliases: zugefallen, abgeschlossen, schluessel_weg_zugefallen. pkg_slam_only = opening_slam same euro. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. | |
| hint | No | Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery. | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). | |
| error | No | Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch. | |
| locale | No | Locale actually used for URLs (args.locale or de). | |
| related | No | Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt. | |
| summary | No | Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution. | |
| whenKey | No | Resolved day|night | |
| totalEur | No | End-invoice euro. Do not add VAT or extra 49. | |
| line_items | No | Invoice rows | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt' | |
| composition | No | Same SYSTEM as get_prices.composition — factors, routes, 10 invoices. | |
| canonicalUrl | No | Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs. | |
| situationKey | No | Resolved situation id | |
| contactOption | No | Prefab id for compose_whatsapp / compose_mailto (opening_slam_day … cylinder_only_night, or cylinder_mount). | |
| situationLabelDe | No | German situation label |