pohoda_create_offer
Create new issued or received offers in POHODA accounting software. Specify offer type, date, partner details, line items, and notes to generate offers.
Instructions
Create a new offer in POHODA. Requires offerType and date. Optional: text, partner details, note, and line items.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| offerType | Yes | Offer type: issuedOffer or receivedOffer (required) | |
| date | Yes | Offer date (DD.MM.YYYY or YYYY-MM-DD) | |
| text | No | Offer text/description | |
| partnerName | No | Partner company name | |
| partnerStreet | No | Partner street | |
| partnerCity | No | Partner city | |
| partnerZip | No | Partner ZIP code | |
| partnerIco | No | Partner IČO | |
| note | No | Note | |
| items | No | Line items: text, quantity, unitPrice, rateVAT (none|low|high), optional unit |
Implementation Reference
- src/tools/offers.ts:80-129 (handler)Handler function for pohoda_create_offer that constructs XML and sends it to the Pohoda client.
async (params) => { try { const xml = buildImportDoc({ ico: client.ico }, (item) => { const ofr = item.ele(NS.ofr, "ofr:offer").att("version", "2.0"); const header = ofr.ele(NS.ofr, "ofr:offerHeader"); header.ele(NS.ofr, "ofr:offerType").txt(params.offerType); header.ele(NS.ofr, "ofr:date").txt(toIsoDate(params.date)); if (params.text) header.ele(NS.ofr, "ofr:text").txt(params.text); const hasPartner = params.partnerName ?? params.partnerStreet ?? params.partnerCity ?? params.partnerZip ?? params.partnerIco; if (hasPartner) { const identity = header.ele(NS.ofr, "ofr:partnerIdentity"); const typAddr = identity.ele(NS.typ, "typ:address"); if (params.partnerName) typAddr.ele(NS.typ, "typ:name").txt(params.partnerName); if (params.partnerStreet) typAddr.ele(NS.typ, "typ:street").txt(params.partnerStreet); if (params.partnerCity) typAddr.ele(NS.typ, "typ:city").txt(params.partnerCity); if (params.partnerZip) typAddr.ele(NS.typ, "typ:zip").txt(params.partnerZip); if (params.partnerIco) typAddr.ele(NS.typ, "typ:ico").txt(params.partnerIco); } if (params.note) header.ele(NS.ofr, "ofr:note").txt(params.note); if (params.items && params.items.length > 0) { const detail = ofr.ele(NS.ofr, "ofr:offerDetail"); for (const it of params.items) { const ofrItem = detail.ele(NS.ofr, "ofr:offerItem"); ofrItem.ele(NS.ofr, "ofr:text").txt(it.text); ofrItem.ele(NS.ofr, "ofr:quantity").txt(String(it.quantity)); ofrItem.ele(NS.ofr, "ofr:rateVAT").txt(it.rateVAT); ofrItem .ele(NS.ofr, "ofr:homeCurrency") .ele(NS.typ, "typ:unitPrice") .txt(String(it.unitPrice)); if (it.unit) ofrItem.ele(NS.ofr, "ofr:unit").txt(it.unit); } } }); const response = await client.sendXml(xml); const result = extractImportResult(parseResponse(response)); return result.success ? ok( `Offer created successfully.${result.producedId != null ? ` ID: ${result.producedId}` : ""} ${result.message}` ) : err(result.message); } catch (e) { return err((e as Error).message); } } - src/tools/offers.ts:65-79 (schema)Input validation schema for pohoda_create_offer tool parameters.
{ offerType: offerTypeEnum.describe("Offer type: issuedOffer or receivedOffer (required)"), date: z.string().describe("Offer date (DD.MM.YYYY or YYYY-MM-DD)"), text: z.string().optional().describe("Offer text/description"), partnerName: z.string().optional().describe("Partner company name"), partnerStreet: z.string().optional().describe("Partner street"), partnerCity: z.string().optional().describe("Partner city"), partnerZip: z.string().optional().describe("Partner ZIP code"), partnerIco: z.string().optional().describe("Partner IČO"), note: z.string().optional().describe("Note"), items: z .array(offerItemSchema) .optional() .describe("Line items: text, quantity, unitPrice, rateVAT (none|low|high), optional unit"), }, - src/tools/offers.ts:62-64 (registration)Tool registration for pohoda_create_offer.
server.tool( "pohoda_create_offer", "Create a new offer in POHODA. Requires offerType and date. Optional: text, partner details, note, and line items.",