API · v1 · stabil
CODEMETA OSDeveloper Center
Konsole öffnen
Entity · performance_records

Performance Record Schema

Schema-ID
performance_record
Collection
performance_records
Permissions
  • Lesenperformance_record_view
  • Anlegenperformance_record_create
  • Ändernperformance_record_edit
  • Löschenperformance_record_delete

Felder

Performance Record Schema

performance_records4 Permissions

Schema for validating Leistungsnachweis entities

partyIduuiderforderlich

Customer party UUID

contractIduuidoptional

Associated contract UUID

nullable
projectIduuidoptional

Project this record was generated for (per-project standalone billing run). Null/absent for collective and per-ticket runs and for legacy records.

read-onlynullable
ticketIduuidoptional

ADR 0963 — ticket this record was generated for (per-ticket standalone billing run). Null/absent for collective and per-project runs and for records created before ADR 0963 (those count as a collective record when the weclapp commission is chosen).

read-onlynullable
performanceRecordNumberstringoptional

Auto-generated sequence number

max 1000 Zeichenread-onlynullable
performanceRecordDatedateoptional

Date of the performance record

nullable
servicePeriodFromdateerforderlich

Service period start date

servicePeriodTodateerforderlich

Service period end date

statusstringerforderlich

Lifecycle status. CLOSED_WITHOUT_INVOICE (ADR 0929) = a record with a net value of 0.00 EUR that was settled without an invoice; its time records stay RECORDED. Set and lifted only via POST /performance-records/:id/close-without-invoice and …/reopen.

OPENRECORDEDDOCUMENT_CREATEDCLOSED_WITHOUT_INVOICECANCELLED
Default: "OPEN"
kindstringoptional

ADR 0914 — billing stream this record was generated for. EMERGENCY = a Notdienst-Leistungsnachweis holding only emergency-service bookings (isEmergencyService) of a customer whose emergency billing is SEPARATE. Missing on documents created before ADR 0914 (= STANDARD).

STANDARDEMERGENCY
Default: "STANDARD"read-only
titlestringoptional

Title / summary

max 200 Zeichennullable
notestringoptional

Internal note

max 2000 Zeichennullable
timeRecordIdsuuid[]optional

Linked time record UUIDs

Default: []
expenseIdsuuid[]optional

Linked expense UUIDs

Default: []
tripIdsuuid[]optional

Linked trip UUIDs

Default: []
materialBucketIdsuuid[]optional

Material buckets selected during a per-project billing preview. Materialised as invoice positions when the invoice is generated (default for opts.materialBucketIds).

Default: []
positionIdsuuid[]optional

Flat-rate project positions (ADR 0310/0406) billed in this per-project run. Their FLAT_RATE line items are part of the snapshot; the invoice stamps project_position.invoiceId from this list.

Default: []
billingComponentsobjectoptional

Snapshot of the component selection of a per-project billing run (display/audit). Null/absent for collective and legacy runs.

nullable
timebooleanoptional
flatRatebooleanoptional
expensesbooleanoptional
materialbooleanoptional
totalMinutesintegeroptional

Total tracked minutes

≥ 0Default: 0
totalBillableMinutesintegeroptional

Total billable minutes (after rounding and inclusive deduction)

≥ 0Default: 0
totalBillingUnitsintegeroptional

Total billing units (Arbeitseinheiten) derived from billable minutes and billingUnitMinutes

≥ 0Default: 0
totalAmountstringoptional

Total net amount in EUR as decimal string. Mirrors netAmount; kept for backward compatibility.

Patternnullable
itemsobject[]optional

Snapshot of calculated line items (services + trips). Frozen at PR creation, reused 1:1 when generating the invoice — no recalculation.

Default: []
positionintegeroptional
≥ 1
descriptionstringerforderlich
max 500 Zeichen
unitstringoptional
max 20 Zeichennullable
quantitynumbererforderlich
≥ 0
unitPricestringerforderlich

Decimal string, e.g. "125.00"

vatRatestringoptional

VAT rate as percent string

Default: "19"
netAmountstringoptional

Computed: quantity * unitPrice

nullable
articleIduuidoptional
nullable
articleNumberstringoptional
nullable
itemTypestringoptional
SERVICETRAVEL_DISTANCETRAVEL_TIMETRAVEL_OTHERFLAT_RATETICKETMATERIALEXPENSE
nullable
expenseIduuidoptional

Source expense UUID (EXPENSE lines of a per-project billing run)

nullable
positionIduuidoptional

Source project_position UUID (FLAT_RATE lines of a per-project billing run)

nullable
contractIdstringoptional
Default: nullnullable
contractItemIdstringoptional
Default: nullnullable
pricedAtstringoptional

ADR 0415 — date (YYYY-MM-DD) at which the base rate of this line was resolved: the service date (default) or the billing-run date (pricingDateBasis=BILLING_DATE). Only set on lines built from a single time record.

Default: nullnullable
rateSourcestringoptional

ADR 0415 — provenance of the applied hourly rate. `record` = rate frozen at booking time with unknown origin (legacy). Only set on lines built from a single time record.

contractparty_overrideparty_discountarticleservice_typerecordnull
Default: nullnullable
nonBillableServicebooleanoptional

ADR 0873 §7 — travel line of a non-billable booking: the 0.00 is the result, not noise. The weclapp zero-value travel filter lets marked lines through. Only set on travel lines.

timeRecordIdstringoptional

Source time record of a service or travel line.

nullable
timeRecordNumberstringoptional

Leistungsnummer (L-YYYY-NNNNN) of the source time record.

nullable
ticketIdstringoptional

Ticket the line belongs to — only for bookings with referenceType TICKET (travel lines inherit it from their booking).

read-onlynullable
groupLabelstringoptional

ADR 0909 — heading of the position group this line belongs to ("Ticket #… // …" or "Helpdesk ohne Ticketzuweisung"). Rendered once at generation time when grouping by ticket is active; missing = ungrouped document. Pushed to weclapp as item.groupName (maxLength 1000 there).

max 1000 Zeichennullable
coveredTimeRecordIdsstring[]optional

ADR 0909 — subset of timeRecordIds that is linked but not priced (contract-covered INCLUDED/CONTINGENT, ADR 0563; covered by a flat-rate position, ADR 0416). These bookings have no line item; the PDF lists them in a separate "already settled" section. Missing on records created before ADR 0909 — those keep the legacy PDF table.

groupPositionsByTicketbooleanoptional

ADR 0909 — snapshot of the effective "group positions by ticket" setting (customer override → tenant default) at generation time. Items then carry groupLabel. Missing on documents created before ADR 0909 (= ungrouped).

Default: false
vatRatestringoptional

Default VAT rate applied to the items snapshot (percent string)

Patternnullable
netAmountstringoptional

Sum of item netAmounts in EUR as decimal string

Patternnullable
vatAmountstringoptional

Total VAT in EUR as decimal string

Patternnullable
grossAmountstringoptional

Gross total (net + VAT) in EUR as decimal string

Patternnullable
invoiceIduuidoptional

Linked invoice UUID (when converted to invoice)

nullable
openTicketNotesobject[]optional

ADR 0146 — snapshot of tickets that were still open when this Leistungsnachweis was generated but were unlocked via `ticket.billingOverride`. Frozen at PR creation so the invoice PDF can render a neutral "Hinweise"-section ("Ticket … wird weiterhin bearbeitet") without re-querying ticket state at print time. Internal `reason` is intentionally NOT included — it stays on the ticket.

Default: []nullable
ticketIduuiderforderlich
read-only
ticketNumberstringerforderlich
max 50 Zeichen
titlestringoptional
max 500 Zeichennullable

Standard-Endpoints

Diese Resource folgt dem generischen CRUD-Vertrag der Plattform. Lesen Sie die Konventionen für Pagination, Idempotenz, Optimistic Locking und Audit. Die wichtigsten Endpoints:

  • GET /api/v1/performance_records — Liste, paginiert + filterbar
  • GET /api/v1/performance_records/<id> — Einzelne Entity
  • POST /api/v1/performance_records — Anlegen
  • PATCH /api/v1/performance_records/<id> — Teil-Update
  • DELETE /api/v1/performance_records/<id> — Soft-Delete
  • GET /api/v1/performance_records/<id>/timeline — Audit + Aktivitäten

Suche