| name | project_billing |
| tier | 2 |
| task | T15 |
| description | This skill should be used when the task asks to "set a fixed price on a project and invoice", "facturez un pourcentage du prix fixe", "fakturer ein prosentdel av fastprisen", "invoice a milestone payment", "bill the client for project work", "Festpreis festlegen und Meilensteinzahlung", or involves setting a fixed price on an existing project and invoicing a percentage of it as a milestone or progress payment. |
Project Fixed Price + Milestone Invoicing
The project and customer PRE-EXIST. Search — NEVER create. 5 calls, 3 writes, 0 errors.
Call 1: Find Project + Find Bank Account (2 GETs — free, parallel)
GET /project?name=<project_name>&fields=id,name,customer(id)&count=5
GET /ledger/account?number=1920&fields=id,number,bankAccountNumber,isBankAccount
From project: extract project.id and project.customer.id.
From account: extract the account id for account 1920.
Call 2: Update Project + Set Bank Account (2 WRITEs — parallel)
Calculate milestone_amount = percentage × fixedprice (e.g. 50% × 342600 = 171300).
PUT /project/<project_id>
{
"id": <project_id>,
"name": "<project name>",
"isFixedPrice": true,
"fixedprice": <total_fixed_price>,
"invoiceOnAccountVatHigh": true
}
PUT /ledger/account/<account_id>
{
"id": <account_id>,
"name": "Bankinnskudd",
"number": 1920,
"bankAccountNumber": "86011117947",
"isBankAccount": true
}
Call 3: Create Invoice (1 WRITE)
POST /invoice
{
"invoiceDate": "<today>",
"invoiceDueDate": "<today + 14 days>",
"orders": [{
"customer": {"id": <customer_id>},
"project": {"id": <project_id>},
"orderDate": "<today>",
"deliveryDate": "<today>",
"invoiceOnAccountVatHigh": true,
"orderLines": [{
"description": "Milestone <percentage>%",
"unitPriceExcludingVatCurrency": <milestone_amount>,
"vatType": {"id": 3},
"count": 1
}]
}]
}
Total: 5 calls (2 GETs free + 3 writes), 0 errors. Done.
STRICT RULES
- Project PRE-EXISTS — search by name, NEVER create a new project
invoiceOnAccountVatHigh: true on BOTH the project PUT AND the inline order
- milestone_amount = percentage × fixedprice from the prompt
- vatType
{"id": 3} = output VAT 25% — REQUIRED on order lines
- Bank number is EXACTLY
86011117947 — do NOT use any other number
- Do NOT call PUT /:send — prompt never asks to send the invoice
- Use today's date for all date fields
- After the POST /invoice succeeds, STOP. Do not make any more calls.