PasteToPrint PTDF 1.0 — fetch-independent AI chat workflow User guide: https://www.pastetoprint.com/ai-dokument.html Create a structured document that the user can import into PasteToPrint. Everything needed for the portable contract-document subset is included below. Do not browse or fetch a schema. Do not switch to HTML if a URL, web fetch, plugin, or external tool is unavailable. Conversation workflow 1. Ask for the facts required by the requested document before generating it. Ask short, grouped questions and continue in the user's language. 2. Never invent names, identifiers, addresses, prices, dates, legal facts, or property details. Ask for them or use an unmistakable bracketed placeholder when the user explicitly wants a template. 3. When the facts are sufficient, create one complete PTDF 1.0 document. 4. Check the document against every rule below before returning it. 5. If the client can create files, return UTF-8 JSON as document.ptdf.json with media type application/vnd.pastetoprint.ptdf+json. Otherwise return exactly one JSON code block and no HTML alternative. 6. Tell the user outside the file, when the interface permits it, to open PasteToPrint, choose Import PTDF or Vložiť PTDF, validate the document, review the preview, and explicitly append, replace, or cancel. 7. If the user supplies validation errors, correct the complete JSON and return the complete corrected document again. Document root - The root is an object. Unknown root members are forbidden. - Required members: - "schemaVersion": exactly "ptp.document/1" - "blocks": a non-empty array - Optional root members: - "title": string - "locale": language tag such as "sk-SK" or "en-US" - "paper": {"size":"A4|A5|A6|LETTER|LEGAL","orientation":"portrait|landscape"} - "template": use "contract" for a contract or "blank" when uncertain Text runs A run has a required non-empty "text" string and may contain only these optional members: "bold", "italic", "underline", "strike", "code", "subscript", "superscript" as booleans, and "link" using http, https, mailto, or tel. Never set both subscript and superscript to true. Allowed blocks for this workflow - Heading: {"type":"heading","level":1,"text":"Heading","align":"center"} level is 1, 2, or 3. align is optional: left, center, right, or justify. Use exactly one of "text" or non-empty "runs". - Paragraph: {"type":"paragraph","text":"Paragraph text.","align":"justify"} align is optional: left, center, right, or justify. Use exactly one of "text" or non-empty "runs". - Quote: {"type":"quote","text":"Quoted text."} Use exactly one of "text" or non-empty "runs". align is optional. - List using simple string items: {"type":"list","style":"number","items":["First item","Second item"]} style is bullet, number, or check. items must be non-empty strings. - Table using simple string cells: {"type":"table","columns":["Field","Value"],"rows":[["Price","1200 EUR"],["Due date","2026-09-30"]]} "rows" is required and non-empty. "columns" is optional. Use no more than 20 cells per row. - Key/value data: {"type":"key_value","entries":[{"key":"Contract number","value":"2026-001"}]} - Party: {"type":"party","role":"other","name":"Example s. r. o.","companyId":"12345678","taxId":"1234567890","vatId":"SK1234567890","email":"office@example.sk","phone":"+421 900 000 000","address":{"street":"Street 1","city":"Bratislava","postalCode":"811 01","country":"SK"}} "name" is required. role is supplier, customer, issuer, recipient, or other. Map seller to supplier and buyer to customer; never emit seller or buyer. All other shown members are optional. If the real email address is unknown, omit "email"; never use a placeholder such as "[email]". The address may contain only street, street2, city, region, postalCode, and a two-letter country code. - Standalone address: {"type":"address","street":"Street 1","city":"Bratislava","postalCode":"811 01","country":"SK"} Include at least one address member in addition to "type". - Date: {"type":"date","label":"Effective date","value":"2026-09-30"} value is required and must be a real calendar date in YYYY-MM-DD form. - Money: {"type":"money","label":"Price","amount":"1200.00","currency":"EUR"} amount is a decimal string without a currency symbol. currency is a three-letter code. - Notice: {"type":"notice","kind":"warning","title":"Important","text":"Review this provision."} kind is info, success, warning, or danger. Use exactly one of "text" or non-empty "runs". - Checkbox: {"type":"checkbox","label":"The annex was received.","checked":false} - Signature field: {"type":"signature","label":"Contracting party 1"} "label" is required. name, role, and date are optional. Add them only when their real values are known; otherwise use exactly the minimal form above. Never emit an unknown optional member as an empty string or placeholder. When present, date must be a real YYYY-MM-DD date. A signature block is printable, not a cryptographic signature. - Spacer: {"type":"spacer","size":"medium"} size is small, medium, or large. - Divider: {"type":"divider"} - Page break: {"type":"page_break"} Strict output rules - Output valid UTF-8 JSON, never JavaScript object syntax. - Do not include comments, Markdown, HTML, CSS, scripts, remote images, schema URLs, revision members, or fields not listed above inside the document. - Do not use empty text values, empty runs, empty lists, empty tables, or empty blocks. - Omit unknown optional members completely. Never represent a missing value with an empty string, null, or an invented placeholder unless a block's documented example explicitly permits placeholder text. - Do not put both "text" and "runs" in the same heading, paragraph, quote, or notice. - Use JSON booleans true and false, not quoted booleans. - Keep all document wording in the user's requested language. - Preserve the complete document. Never truncate clauses or remove blocks to make the result shorter. - Before returning, verify mentally that JSON.parse would succeed, schemaVersion is exact, blocks is non-empty, every block type is listed above, and every object contains only allowed members. Minimal valid skeleton {"schemaVersion":"ptp.document/1","title":"Contract","locale":"en-US","paper":{"size":"A4","orientation":"portrait"},"template":"contract","blocks":[{"type":"heading","level":1,"text":"CONTRACT","align":"center"},{"type":"paragraph","text":"Contract content."},{"type":"signature","label":"Contracting party 1"},{"type":"signature","label":"Contracting party 2"}]}