From 78d0f9b0b9720dbdfa5fe03662adcf7d5abb7825 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Sun, 30 Aug 2026 18:11:29 +0100 Subject: [PATCH 1/2] feat(templates): add the structured invoice document model The invoice family's data layer knew one shape - an invoice as pre-formatted display strings, with one address block per party, line items whose quantity and money are already rendered, and a flat list of summary rows. That cannot carry the structured business invoice: a brand lockup with the sender's own logo, labelled masthead metadata, a contact block with a business registration, priced service lines carrying BigDecimal figures and the unit they are counted in, a totals stack with its own total band, bank payment fields, and a footer line. templates.data.invoice now carries that second model - StructuredInvoiceData (+ its section records) wrapped by StructuredInvoiceDocumentSpec - alongside the display one; a preset consumes the model whose shape it renders. The brand logo arrives as DocumentImageData: the logo is caller-supplied content, not template chrome, and it stays optional so a wordmark-only lockup composes. Every component normalizes null to its empty form, money and quantities default to zero, and collections are frozen, matching the family's existing records. --- .../templates/data/invoice/InvoiceBrand.java | 47 ++++ .../data/invoice/InvoiceContactBlock.java | 45 ++++ .../data/invoice/InvoiceFooterLine.java | 22 ++ .../data/invoice/InvoiceMasthead.java | 48 ++++ .../data/invoice/InvoiceNotesBlock.java | 30 +++ .../data/invoice/InvoicePaymentBlock.java | 54 +++++ .../data/invoice/InvoiceRecipient.java | 36 +++ .../data/invoice/InvoiceServiceLines.java | 100 ++++++++ .../data/invoice/InvoiceSummaryBlock.java | 23 ++ .../data/invoice/InvoiceTotalsBlock.java | 51 ++++ .../data/invoice/StructuredInvoiceData.java | 229 ++++++++++++++++++ .../StructuredInvoiceDocumentSpec.java | 35 +++ .../invoice/StructuredInvoiceDataTest.java | 181 ++++++++++++++ 13 files changed, 901 insertions(+) create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceBrand.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceContactBlock.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceMasthead.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceNotesBlock.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceServiceLines.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceSummaryBlock.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceTotalsBlock.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDocumentSpec.java create mode 100644 templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceBrand.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceBrand.java new file mode 100644 index 000000000..90fc685a0 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceBrand.java @@ -0,0 +1,47 @@ +package com.demcha.compose.document.templates.data.invoice; + +import com.demcha.compose.document.image.DocumentImageData; + +import java.util.Objects; + +/** + * The sender's brand lockup on a structured invoice: the logo image and + * the wordmark lines beside it. + * + *

The logo is caller-supplied content, not template chrome — the caller + * hands over a {@link DocumentImageData} built from its own bytes or path, + * the way it would for any other image it owns. It is optional: with no + * logo a preset falls back to the wordmark alone, so an invoice composes + * without one.

+ * + * @param logo the logo image, or {@code null} for the wordmark-only + * lockup + * @param name the brand name, set as the wordmark + * @param qualifier the second wordmark line under the name (e.g. the + * business type) + * @param tagline the tagline under the lockup + */ +public record InvoiceBrand( + DocumentImageData logo, + String name, + String qualifier, + String tagline) { + + /** + * Normalizes the optional text fields; the logo stays nullable. + */ + public InvoiceBrand { + name = Objects.requireNonNullElse(name, ""); + qualifier = Objects.requireNonNullElse(qualifier, ""); + tagline = Objects.requireNonNullElse(tagline, ""); + } + + /** + * Whether this lockup carries a logo image. + * + * @return {@code true} when a logo was supplied + */ + public boolean hasLogo() { + return logo != null; + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceContactBlock.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceContactBlock.java new file mode 100644 index 000000000..d31873d86 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceContactBlock.java @@ -0,0 +1,45 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.List; +import java.util.Objects; + +/** + * The sender's address and contact channels on a structured invoice. + * + *

Distinct from {@link InvoiceParty}, the narrative model's party + * record: this block carries a website channel and a labelled business + * registration (ABN, VAT or company number — the label is content because + * it differs by jurisdiction), which a structured invoice prints in its + * contact band and its footer.

+ * + * @param legalName the registered business name + * @param addressLines the address lines, in order + * @param phone the phone channel + * @param email the email channel + * @param website the website channel + * @param registrationLabel the label of the registration number + * (e.g. {@code "ABN"}) + * @param registrationNumber the registration number itself + */ +public record InvoiceContactBlock( + String legalName, + List addressLines, + String phone, + String email, + String website, + String registrationLabel, + String registrationNumber) { + + /** + * Normalizes optional fields and freezes the address lines. + */ + public InvoiceContactBlock { + legalName = Objects.requireNonNullElse(legalName, ""); + addressLines = List.copyOf(Objects.requireNonNullElse(addressLines, List.of())); + phone = Objects.requireNonNullElse(phone, ""); + email = Objects.requireNonNullElse(email, ""); + website = Objects.requireNonNullElse(website, ""); + registrationLabel = Objects.requireNonNullElse(registrationLabel, ""); + registrationNumber = Objects.requireNonNullElse(registrationNumber, ""); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java new file mode 100644 index 000000000..4b0c5287b --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java @@ -0,0 +1,22 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.Objects; + +/** + * The page-foot line of a structured invoice: who issued it and under + * which registration. + * + * @param legalName the registered business name + * @param registrationText the registration text as printed + * (e.g. {@code "ABN 12 345 678 901"}) + */ +public record InvoiceFooterLine(String legalName, String registrationText) { + + /** + * Normalizes optional fields to empty strings. + */ + public InvoiceFooterLine { + legalName = Objects.requireNonNullElse(legalName, ""); + registrationText = Objects.requireNonNullElse(registrationText, ""); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceMasthead.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceMasthead.java new file mode 100644 index 000000000..6f86da5d5 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceMasthead.java @@ -0,0 +1,48 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.List; +import java.util.Objects; + +/** + * The masthead of a structured invoice: the document title and the + * label / value metadata printed beside it. + * + *

The metadata is an authored list rather than fixed fields, so an + * invoice prints exactly the rows its business needs — number, dates, + * project, purchase order, contract reference — in the order and wording + * it uses. That is why the labels live in the data: they differ per + * sender, and a preset cannot know them.

+ * + * @param title the document title (e.g. {@code "INVOICE"}) + * @param entries the metadata rows, in print order + */ +public record InvoiceMasthead(String title, List entries) { + + /** + * Normalizes the title and freezes the entry list. + */ + public InvoiceMasthead { + title = Objects.requireNonNullElse(title, ""); + entries = List.copyOf(Objects.requireNonNullElse(entries, List.of())); + } + + /** + * One metadata row. + * + * @param label the row label + * @param value the row value + * @param emphasized whether the value carries emphasis — the due date + * is the usual case; presets are expected to set an + * emphasized value apart + */ + public record Entry(String label, String value, boolean emphasized) { + + /** + * Normalizes optional fields to empty strings. + */ + public Entry { + label = Objects.requireNonNullElse(label, ""); + value = Objects.requireNonNullElse(value, ""); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceNotesBlock.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceNotesBlock.java new file mode 100644 index 000000000..9ab469ef3 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceNotesBlock.java @@ -0,0 +1,30 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.List; +import java.util.Objects; + +/** + * The closing notes of a structured invoice, with the channels to raise a + * query on. + * + * @param heading the block heading (e.g. {@code "NOTES"}) + * @param paragraphs the note paragraphs, in order + * @param contactEmail the email address a query goes to + * @param contactPhone the phone number a query goes to + */ +public record InvoiceNotesBlock( + String heading, + List paragraphs, + String contactEmail, + String contactPhone) { + + /** + * Normalizes optional fields and freezes the paragraph list. + */ + public InvoiceNotesBlock { + heading = Objects.requireNonNullElse(heading, ""); + paragraphs = List.copyOf(Objects.requireNonNullElse(paragraphs, List.of())); + contactEmail = Objects.requireNonNullElse(contactEmail, ""); + contactPhone = Objects.requireNonNullElse(contactPhone, ""); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java new file mode 100644 index 000000000..30ed2008d --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java @@ -0,0 +1,54 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.List; +import java.util.Objects; + +/** + * The payment-information block of a structured invoice: where to send the + * money, and by when. + * + *

Distinct from the narrative model's + * {@link InvoiceData#paymentTerms()}, a list of prose bullets: the fields + * here are labelled values printed as a table (bank, account name, sort + * code or BSB, account number, payment reference), because a payer reads + * them one field at a time. The labels are content — they differ by + * banking system.

+ * + * @param heading the block heading (e.g. {@code "PAYMENT INFORMATION"}) + * @param fields the labelled payment fields, in print order + * @param instruction the sentence under the fields + * @param dueNotice the short due-by notice set apart from the rest + */ +public record InvoicePaymentBlock( + String heading, + List fields, + String instruction, + String dueNotice) { + + /** + * Normalizes optional fields and freezes the field list. + */ + public InvoicePaymentBlock { + heading = Objects.requireNonNullElse(heading, ""); + fields = List.copyOf(Objects.requireNonNullElse(fields, List.of())); + instruction = Objects.requireNonNullElse(instruction, ""); + dueNotice = Objects.requireNonNullElse(dueNotice, ""); + } + + /** + * One labelled payment field. + * + * @param label the field label + * @param value the field value + */ + public record Field(String label, String value) { + + /** + * Normalizes optional fields to empty strings. + */ + public Field { + label = Objects.requireNonNullElse(label, ""); + value = Objects.requireNonNullElse(value, ""); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java new file mode 100644 index 000000000..98109d51a --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java @@ -0,0 +1,36 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.List; +import java.util.Objects; + +/** + * The billed-to block of a structured invoice. + * + *

The block owns its heading, and everything under the recipient's name + * is an authored line — department, street, city, country — so the caller + * decides how many lines the address takes and in what order.

+ * + * @param heading the block heading (e.g. {@code "BILLED TO"}) + * @param name the recipient's name, set apart from the lines below + * @param lines the address lines under the name, in order + * @param emailLabel the label printed before the email address + * @param email the recipient's email address + */ +public record InvoiceRecipient( + String heading, + String name, + List lines, + String emailLabel, + String email) { + + /** + * Normalizes optional fields and freezes the address lines. + */ + public InvoiceRecipient { + heading = Objects.requireNonNullElse(heading, ""); + name = Objects.requireNonNullElse(name, ""); + lines = List.copyOf(Objects.requireNonNullElse(lines, List.of())); + emailLabel = Objects.requireNonNullElse(emailLabel, ""); + email = Objects.requireNonNullElse(email, ""); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceServiceLines.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceServiceLines.java new file mode 100644 index 000000000..e89e3624d --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceServiceLines.java @@ -0,0 +1,100 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Objects; + +/** + * The line-items table of a structured invoice: its column labels and its + * priced service lines. + * + *

Distinct from the narrative model's {@link InvoiceLineItem}, whose + * quantity, unit price and amount are pre-formatted strings: a service + * line carries {@link BigDecimal} figures plus the unit they are counted + * in, so the preset formats them against the document's currency and the + * caller keeps the arithmetic. The column labels are content because the + * currency code and the wording appear inside them.

+ * + * @param columns the column labels + * @param lines the priced service lines, in print order + */ +public record InvoiceServiceLines(Columns columns, List lines) { + + /** + * Normalizes an absent column set and freezes the line list. + */ + public InvoiceServiceLines { + columns = columns == null ? new Columns(null, null, null, null, null, null) : columns; + lines = List.copyOf(Objects.requireNonNullElse(lines, List.of())); + } + + /** + * The table's column labels, in column order. + * + * @param index label of the line-number column + * @param description label of the description column + * @param servicePeriod label of the service-period column + * @param quantity label of the quantity column + * @param unitPrice label of the unit-price column + * @param amount label of the amount column + */ + public record Columns( + String index, + String description, + String servicePeriod, + String quantity, + String unitPrice, + String amount) { + + /** + * Normalizes optional labels to empty strings. + */ + public Columns { + index = Objects.requireNonNullElse(index, ""); + description = Objects.requireNonNullElse(description, ""); + servicePeriod = Objects.requireNonNullElse(servicePeriod, ""); + quantity = Objects.requireNonNullElse(quantity, ""); + unitPrice = Objects.requireNonNullElse(unitPrice, ""); + amount = Objects.requireNonNullElse(amount, ""); + } + } + + /** + * One priced service line. + * + * @param lineNumber the printed line number + * @param title the service title, set apart from the description + * @param description the description under the title + * @param servicePeriod the period this line covers + * @param quantity how much was delivered; {@code null} normalizes + * to {@link BigDecimal#ZERO} + * @param unit what the quantity counts (e.g. {@code "hrs"}) + * @param unitPrice the price per unit; {@code null} normalizes to + * {@link BigDecimal#ZERO} + * @param amount the line total; {@code null} normalizes to + * {@link BigDecimal#ZERO} + */ + public record Line( + int lineNumber, + String title, + String description, + String servicePeriod, + BigDecimal quantity, + String unit, + BigDecimal unitPrice, + BigDecimal amount) { + + /** + * Normalizes optional fields. + */ + public Line { + title = Objects.requireNonNullElse(title, ""); + description = Objects.requireNonNullElse(description, ""); + servicePeriod = Objects.requireNonNullElse(servicePeriod, ""); + quantity = Objects.requireNonNullElse(quantity, BigDecimal.ZERO); + unit = Objects.requireNonNullElse(unit, ""); + unitPrice = Objects.requireNonNullElse(unitPrice, BigDecimal.ZERO); + amount = Objects.requireNonNullElse(amount, BigDecimal.ZERO); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceSummaryBlock.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceSummaryBlock.java new file mode 100644 index 000000000..e857c2e10 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceSummaryBlock.java @@ -0,0 +1,23 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.Objects; + +/** + * The summary block of a structured invoice: what the invoice covers and + * the period it covers it for. + * + * @param heading the block heading (e.g. {@code "INVOICE SUMMARY"}) + * @param intro the prose sentence introducing the work billed + * @param servicePeriod the billed period, set apart from the intro + */ +public record InvoiceSummaryBlock(String heading, String intro, String servicePeriod) { + + /** + * Normalizes optional fields to empty strings. + */ + public InvoiceSummaryBlock { + heading = Objects.requireNonNullElse(heading, ""); + intro = Objects.requireNonNullElse(intro, ""); + servicePeriod = Objects.requireNonNullElse(servicePeriod, ""); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceTotalsBlock.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceTotalsBlock.java new file mode 100644 index 000000000..ccab355ac --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceTotalsBlock.java @@ -0,0 +1,51 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Objects; + +/** + * The totals stack of a structured invoice: the rows leading up to the + * grand total, and the total band itself. + * + *

Distinct from the narrative model's {@link InvoiceSummaryRow} list, + * where the grand total is the last row and is recognised by convention: + * here the total is its own labelled band with its own amount, so a preset + * renders it without inspecting the list.

+ * + * @param rows the rows above the total (subtotal, tax, discounts), + * in print order + * @param totalLabel the label of the total band + * @param totalAmount the amount of the total band; {@code null} normalizes + * to {@link BigDecimal#ZERO} + */ +public record InvoiceTotalsBlock(List rows, String totalLabel, BigDecimal totalAmount) { + + /** + * Normalizes optional fields and freezes the row list. + */ + public InvoiceTotalsBlock { + rows = List.copyOf(Objects.requireNonNullElse(rows, List.of())); + totalLabel = Objects.requireNonNullElse(totalLabel, ""); + totalAmount = Objects.requireNonNullElse(totalAmount, BigDecimal.ZERO); + } + + /** + * One row above the total band. + * + * @param label the row label, carrying its own wording (e.g. a tax + * name and rate) + * @param amount the row amount; {@code null} normalizes to + * {@link BigDecimal#ZERO} + */ + public record Row(String label, BigDecimal amount) { + + /** + * Normalizes optional fields. + */ + public Row { + label = Objects.requireNonNullElse(label, ""); + amount = Objects.requireNonNullElse(amount, BigDecimal.ZERO); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java new file mode 100644 index 000000000..ca6ab53e8 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java @@ -0,0 +1,229 @@ +package com.demcha.compose.document.templates.data.invoice; + +import java.util.Objects; + +/** + * Display-oriented input for structured invoice documents. + * + *

The display model ({@link InvoiceData}) carries an invoice as + * pre-formatted strings: one address block per party, line items whose + * quantity and money are already rendered, and a flat list of summary + * rows. This model is the structured business invoice: a brand lockup with + * the sender's own logo, labelled masthead metadata, a contact block with + * a business registration, priced service lines carrying + * {@link java.math.BigDecimal} figures and the unit they are counted in, a + * totals stack with its own total band, bank payment fields, and a footer + * line. Each block owns its heading and labels, so the wording is content + * rather than a preset choice.

+ * + *

Both models stay: a preset consumes the one whose shape it renders. + * Every component normalizes {@code null} to its empty form, so a partial + * document composes without null checks in preset code. The section + * records construct positionally; this builder is where a document is + * assembled.

+ * + * @param brand the sender's brand lockup + * @param supplier the sender's address and contact channels + * @param masthead the document title and its metadata rows + * @param billTo the billed-to block + * @param summary what the invoice covers, and for which period + * @param serviceLines the line-items table + * @param totals the totals stack and its total band + * @param payment where to send the money, and by when + * @param notes the closing notes and query channels + * @param footer the page-foot line + * @param currencyCode the ISO currency code the figures are stated in + */ +public record StructuredInvoiceData( + InvoiceBrand brand, + InvoiceContactBlock supplier, + InvoiceMasthead masthead, + InvoiceRecipient billTo, + InvoiceSummaryBlock summary, + InvoiceServiceLines serviceLines, + InvoiceTotalsBlock totals, + InvoicePaymentBlock payment, + InvoiceNotesBlock notes, + InvoiceFooterLine footer, + String currencyCode) { + + /** + * Normalizes absent components to their empty forms. + */ + public StructuredInvoiceData { + brand = brand == null ? new InvoiceBrand(null, null, null, null) : brand; + supplier = supplier == null + ? new InvoiceContactBlock(null, null, null, null, null, null, null) : supplier; + masthead = masthead == null ? new InvoiceMasthead(null, null) : masthead; + billTo = billTo == null ? new InvoiceRecipient(null, null, null, null, null) : billTo; + summary = summary == null ? new InvoiceSummaryBlock(null, null, null) : summary; + serviceLines = serviceLines == null + ? new InvoiceServiceLines(null, null) : serviceLines; + totals = totals == null ? new InvoiceTotalsBlock(null, null, null) : totals; + payment = payment == null + ? new InvoicePaymentBlock(null, null, null, null) : payment; + notes = notes == null ? new InvoiceNotesBlock(null, null, null, null) : notes; + footer = footer == null ? new InvoiceFooterLine(null, null) : footer; + currencyCode = Objects.requireNonNullElse(currencyCode, ""); + } + + /** + * Starts a fluent structured invoice data builder. + * + * @return structured invoice data builder + */ + public static Builder builder() { + return new Builder(); + } + + /** + * Fluent builder for complete structured invoice content. + */ + public static final class Builder { + private InvoiceBrand brand; + private InvoiceContactBlock supplier; + private InvoiceMasthead masthead; + private InvoiceRecipient billTo; + private InvoiceSummaryBlock summary; + private InvoiceServiceLines serviceLines; + private InvoiceTotalsBlock totals; + private InvoicePaymentBlock payment; + private InvoiceNotesBlock notes; + private InvoiceFooterLine footer; + private String currencyCode; + + private Builder() { + } + + /** + * Sets the sender's brand lockup. + * + * @param brand brand lockup + * @return this builder + */ + public Builder brand(InvoiceBrand brand) { + this.brand = brand; + return this; + } + + /** + * Sets the sender's address and contact channels. + * + * @param supplier contact block + * @return this builder + */ + public Builder supplier(InvoiceContactBlock supplier) { + this.supplier = supplier; + return this; + } + + /** + * Sets the document title and its metadata rows. + * + * @param masthead masthead + * @return this builder + */ + public Builder masthead(InvoiceMasthead masthead) { + this.masthead = masthead; + return this; + } + + /** + * Sets the billed-to block. + * + * @param billTo recipient block + * @return this builder + */ + public Builder billTo(InvoiceRecipient billTo) { + this.billTo = billTo; + return this; + } + + /** + * Sets what the invoice covers, and for which period. + * + * @param summary summary block + * @return this builder + */ + public Builder summary(InvoiceSummaryBlock summary) { + this.summary = summary; + return this; + } + + /** + * Sets the line-items table. + * + * @param serviceLines service lines + * @return this builder + */ + public Builder serviceLines(InvoiceServiceLines serviceLines) { + this.serviceLines = serviceLines; + return this; + } + + /** + * Sets the totals stack and its total band. + * + * @param totals totals block + * @return this builder + */ + public Builder totals(InvoiceTotalsBlock totals) { + this.totals = totals; + return this; + } + + /** + * Sets where the money goes, and by when. + * + * @param payment payment block + * @return this builder + */ + public Builder payment(InvoicePaymentBlock payment) { + this.payment = payment; + return this; + } + + /** + * Sets the closing notes and query channels. + * + * @param notes notes block + * @return this builder + */ + public Builder notes(InvoiceNotesBlock notes) { + this.notes = notes; + return this; + } + + /** + * Sets the page-foot line. + * + * @param footer footer line + * @return this builder + */ + public Builder footer(InvoiceFooterLine footer) { + this.footer = footer; + return this; + } + + /** + * Sets the ISO currency code the figures are stated in. + * + * @param currencyCode currency code + * @return this builder + */ + public Builder currencyCode(String currencyCode) { + this.currencyCode = currencyCode; + return this; + } + + /** + * Builds the normalized structured invoice data. + * + * @return structured invoice data + */ + public StructuredInvoiceData build() { + return new StructuredInvoiceData(brand, supplier, masthead, billTo, summary, + serviceLines, totals, payment, notes, footer, currencyCode); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDocumentSpec.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDocumentSpec.java new file mode 100644 index 000000000..854d16464 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDocumentSpec.java @@ -0,0 +1,35 @@ +package com.demcha.compose.document.templates.data.invoice; + +/** + * Public compose-first input for structured invoice templates. + * + *

Authoring role: the document-level object structured invoice + * presets are parameterised on, the way the display-oriented presets are + * parameterised on {@link InvoiceDocumentSpec}. Presets that render the + * structured shape — brand lockup, labelled masthead metadata, priced + * service lines with a numeric totals stack, bank payment fields — + * consume this spec; presets that render pre-formatted display strings + * stay on the other one.

+ * + * @param invoice normalized structured invoice content + */ +public record StructuredInvoiceDocumentSpec(StructuredInvoiceData invoice) { + + /** + * Creates a normalized structured invoice document spec. + */ + public StructuredInvoiceDocumentSpec { + invoice = invoice == null ? StructuredInvoiceData.builder().build() : invoice; + } + + /** + * Wraps existing structured invoice data in the document-level spec + * expected by structured invoice templates. + * + * @param invoice structured invoice data + * @return document spec + */ + public static StructuredInvoiceDocumentSpec from(StructuredInvoiceData invoice) { + return new StructuredInvoiceDocumentSpec(invoice); + } +} diff --git a/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java b/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java new file mode 100644 index 000000000..11f747685 --- /dev/null +++ b/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java @@ -0,0 +1,181 @@ +package com.demcha.compose.document.templates.data.invoice; + +import com.demcha.compose.document.image.DocumentImageData; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +/** + * Normalization and immutability contract of the structured invoice model: + * absent components become their empty forms, leaf strings never surface as + * {@code null}, money and quantities default to zero rather than null, the + * brand logo stays optional, and every collection is frozen at construction. + */ +class StructuredInvoiceDataTest { + + @Test + void emptyBuilderYieldsEmptyFormsForEveryComponent() { + StructuredInvoiceData data = StructuredInvoiceData.builder().build(); + + assertThat(data.brand().name()).isEmpty(); + assertThat(data.brand().hasLogo()).isFalse(); + assertThat(data.supplier().addressLines()).isEmpty(); + assertThat(data.masthead().entries()).isEmpty(); + assertThat(data.billTo().lines()).isEmpty(); + assertThat(data.summary().intro()).isEmpty(); + assertThat(data.serviceLines().lines()).isEmpty(); + assertThat(data.serviceLines().columns().amount()).isEmpty(); + assertThat(data.totals().rows()).isEmpty(); + assertThat(data.totals().totalAmount()).isEqualByComparingTo(BigDecimal.ZERO); + assertThat(data.payment().fields()).isEmpty(); + assertThat(data.notes().paragraphs()).isEmpty(); + assertThat(data.footer().legalName()).isEmpty(); + assertThat(data.currencyCode()).isEmpty(); + } + + @Test + void leafRecordsNormalizeNullStringsToEmpty() { + InvoiceBrand brand = new InvoiceBrand(null, null, null, null); + assertThat(brand.name()).isEmpty(); + assertThat(brand.qualifier()).isEmpty(); + assertThat(brand.tagline()).isEmpty(); + + InvoiceContactBlock supplier = + new InvoiceContactBlock(null, null, null, null, null, null, null); + assertThat(supplier.legalName()).isEmpty(); + assertThat(supplier.website()).isEmpty(); + assertThat(supplier.registrationLabel()).isEmpty(); + + InvoiceMasthead.Entry entry = new InvoiceMasthead.Entry(null, null, false); + assertThat(entry.label()).isEmpty(); + assertThat(entry.value()).isEmpty(); + + InvoiceRecipient recipient = new InvoiceRecipient(null, null, null, null, null); + assertThat(recipient.heading()).isEmpty(); + assertThat(recipient.emailLabel()).isEmpty(); + + InvoicePaymentBlock.Field field = new InvoicePaymentBlock.Field(null, null); + assertThat(field.label()).isEmpty(); + assertThat(field.value()).isEmpty(); + + InvoiceFooterLine footer = new InvoiceFooterLine(null, null); + assertThat(footer.registrationText()).isEmpty(); + } + + @Test + void moneyAndQuantitiesDefaultToZeroRatherThanNull() { + InvoiceServiceLines.Line line = new InvoiceServiceLines.Line( + 1, null, null, null, null, null, null, null); + assertThat(line.quantity()).isEqualByComparingTo(BigDecimal.ZERO); + assertThat(line.unitPrice()).isEqualByComparingTo(BigDecimal.ZERO); + assertThat(line.amount()).isEqualByComparingTo(BigDecimal.ZERO); + + InvoiceTotalsBlock.Row row = new InvoiceTotalsBlock.Row("Subtotal", null); + assertThat(row.amount()).isEqualByComparingTo(BigDecimal.ZERO); + + InvoiceTotalsBlock totals = new InvoiceTotalsBlock(null, null, null); + assertThat(totals.totalAmount()).isEqualByComparingTo(BigDecimal.ZERO); + } + + @Test + void brandLogoIsOptionalAndReportedByHasLogo() { + DocumentImageData logo = DocumentImageData.fromBytes(new byte[] {1, 2, 3}); + InvoiceBrand withLogo = new InvoiceBrand(logo, "Northpoint", "Consulting", "Tagline"); + assertThat(withLogo.hasLogo()).isTrue(); + assertThat(withLogo.logo()).isSameAs(logo); + + assertThat(new InvoiceBrand(null, "Northpoint", "", "").hasLogo()).isFalse(); + } + + @Test + void everyCollectionIsFrozenAtConstruction() { + List source = new ArrayList<>(List.of("seed")); + InvoiceContactBlock supplier = new InvoiceContactBlock( + "Studio", source, "", "", "", "ABN", "12 345"); + source.add("added after construction"); + assertThat(supplier.addressLines()).containsExactly("seed"); + + List> frozen = List.of( + supplier.addressLines(), + new InvoiceMasthead("INVOICE", new ArrayList<>()).entries(), + new InvoiceRecipient("BILLED TO", "N", new ArrayList<>(), "", "").lines(), + new InvoiceServiceLines(null, new ArrayList<>()).lines(), + new InvoiceTotalsBlock(new ArrayList<>(), "TOTAL", BigDecimal.ONE).rows(), + new InvoicePaymentBlock("PAY", new ArrayList<>(), "", "").fields(), + new InvoiceNotesBlock("NOTES", new ArrayList<>(), "", "").paragraphs()); + for (List list : frozen) { + assertThatThrownBy(() -> list.add(null)) + .isInstanceOf(UnsupportedOperationException.class); + } + } + + @Test + void builderPassesEveryComponentThroughUnchanged() { + InvoiceBrand brand = new InvoiceBrand(null, "Northpoint", "Consulting", "Strategy."); + InvoiceContactBlock supplier = new InvoiceContactBlock("Northpoint Pty Ltd", + List.of("Level 8"), "+61", "hello@example.com", "example.com", "ABN", "12 345"); + InvoiceMasthead masthead = new InvoiceMasthead("INVOICE", + List.of(new InvoiceMasthead.Entry("Due Date:", "25 June 2025", true))); + InvoiceRecipient billTo = new InvoiceRecipient("BILLED TO", "Greenfield", + List.of("12 Innovation Drive"), "Email:", "ap@example.com"); + InvoiceSummaryBlock summary = + new InvoiceSummaryBlock("INVOICE SUMMARY", "Services rendered.", "1–25 May"); + InvoiceServiceLines serviceLines = new InvoiceServiceLines( + new InvoiceServiceLines.Columns("#", "DESCRIPTION", "SERVICE PERIOD", + "QTY", "UNIT PRICE", "AMOUNT"), + List.of(new InvoiceServiceLines.Line(1, "Consultation", "Workshops", + "1–10 May", new BigDecimal("10"), "hrs", + new BigDecimal("250"), new BigDecimal("2500")))); + InvoiceTotalsBlock totals = new InvoiceTotalsBlock( + List.of(new InvoiceTotalsBlock.Row("SUBTOTAL", new BigDecimal("14000"))), + "TOTAL DUE", new BigDecimal("15400")); + InvoicePaymentBlock payment = new InvoicePaymentBlock("PAYMENT INFORMATION", + List.of(new InvoicePaymentBlock.Field("BSB:", "123-456")), + "Include the invoice number.", "Payment is due within 30 days."); + InvoiceNotesBlock notes = new InvoiceNotesBlock("NOTES", + List.of("Thank you."), "accounts@example.com", "+61"); + InvoiceFooterLine footer = + new InvoiceFooterLine("Northpoint Pty Ltd", "ABN 12 345 678 901"); + + StructuredInvoiceData data = StructuredInvoiceData.builder() + .brand(brand) + .supplier(supplier) + .masthead(masthead) + .billTo(billTo) + .summary(summary) + .serviceLines(serviceLines) + .totals(totals) + .payment(payment) + .notes(notes) + .footer(footer) + .currencyCode("AUD") + .build(); + + assertThat(data.brand()).isSameAs(brand); + assertThat(data.supplier()).isSameAs(supplier); + assertThat(data.masthead()).isSameAs(masthead); + assertThat(data.billTo()).isSameAs(billTo); + assertThat(data.summary()).isSameAs(summary); + assertThat(data.serviceLines()).isSameAs(serviceLines); + assertThat(data.totals()).isSameAs(totals); + assertThat(data.payment()).isSameAs(payment); + assertThat(data.notes()).isSameAs(notes); + assertThat(data.footer()).isSameAs(footer); + assertThat(data.currencyCode()).isEqualTo("AUD"); + assertThat(data.masthead().entries().get(0).emphasized()).isTrue(); + } + + @Test + void documentSpecNormalizesNullInvoiceToEmptyData() { + assertThat(StructuredInvoiceDocumentSpec.from(null).invoice()).isNotNull(); + assertThat(new StructuredInvoiceDocumentSpec(null).invoice().payment().fields()).isEmpty(); + + StructuredInvoiceData data = StructuredInvoiceData.builder().build(); + assertThat(StructuredInvoiceDocumentSpec.from(data).invoice()).isSameAs(data); + } +} From 92903f74bf50667826bc9ff8e608518657bc11cc Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Sun, 30 Aug 2026 18:45:48 +0100 Subject: [PATCH 2/2] feat(templates): add the ConsultingInvoice professional-services preset The invoice family rendered one look on a display model that carries an invoice as pre-formatted strings. This adds both halves of the structured business invoice: a second data model and the first preset that renders it. The model - StructuredInvoiceData and its section records, wrapped by StructuredInvoiceDocumentSpec - carries a brand lockup with the sender's own logo, labelled masthead metadata, a contact block with a business registration, priced service lines with BigDecimal figures and the unit they are counted in, a totals stack with its own total band, and bank payment fields. The logo arrives as DocumentImageData because it is caller-supplied content rather than template chrome, and it stays optional. Every component normalizes null to its empty form, money and quantities default to zero, and collections are frozen. The preset - invoice/presets/ConsultingInvoice - composes the corporate masthead over the priced lines, with the bank details beside the notes and the due-by chip, and owns its session geometry: A4, the published margin, the page fills, and the legal line and page numbers as footer chrome. That line is composed from the supplier's registered name and registration, so a document states them once. The contact marks, bank badge and calendar ship inside the artifact; a document without a logo falls back to the wordmark lockup, and a channel, currency, registration or attention line the sender omits is left out rather than printed empty. qa: one fixtures class feeds the smoke, the exact layout snapshots (single page and a 26-line overflow) and the pixel gate; the smoke drives full layout and render and asserts the priced figures, the repeated table header and the omission guards on the text layer, where the snapshot cannot see inside the table. Examples gain ConsultingInvoiceV2Example (invoice-consulting-v2) with its preview. --- CHANGELOG.md | 30 + .../readme/examples/invoice-consulting-v2.pdf | Bin 0 -> 91956 bytes .../demcha/examples/GenerateAllExamples.java | 2 + .../support/ConsultingInvoiceSampleData.java | 127 + .../examples/support/ShowcaseMetadata.java | 1 + .../v2/ConsultingInvoiceV2Example.java | 54 + .../resources/consulting-invoice-logo.png | Bin 0 -> 64808 bytes .../presets/ConsultingInvoiceFixtures.java | 135 + .../ConsultingInvoiceLayoutSnapshotTest.java | 43 + .../presets/ConsultingInvoiceSmokeTest.java | 168 + .../ConsultingInvoiceVisualParityTest.java | 46 + .../invoice/consulting_invoice_layout.json | 2867 +++++++++++++++++ .../consulting_invoice_overflow_layout.json | 2867 +++++++++++++++++ .../sample-data/consulting-invoice-logo.png | Bin 0 -> 64808 bytes .../consulting_invoice-page-0.png | Bin 0 -> 94555 bytes .../data/invoice/InvoiceFooterLine.java | 22 - .../data/invoice/InvoicePaymentBlock.java | 17 +- .../data/invoice/InvoiceRecipient.java | 26 +- .../data/invoice/StructuredInvoiceData.java | 24 +- .../invoice/presets/ConsultingBody.java | 238 ++ .../invoice/presets/ConsultingClosing.java | 179 + .../invoice/presets/ConsultingIcons.java | 70 + .../invoice/presets/ConsultingInvoice.java | 193 ++ .../invoice/presets/ConsultingMasthead.java | 221 ++ .../invoice/presets/ConsultingStyles.java | 149 + .../invoice/presets/ConsultingText.java | 169 + .../invoice/consulting/icons/bank.png | Bin 0 -> 2769 bytes .../invoice/consulting/icons/email.png | Bin 0 -> 2181 bytes .../invoice/consulting/icons/location.png | Bin 0 -> 3495 bytes .../consulting/icons/payment-calendar.png | Bin 0 -> 2764 bytes .../invoice/consulting/icons/phone.png | Bin 0 -> 2992 bytes .../invoice/consulting/icons/website.png | Bin 0 -> 6072 bytes .../invoice/StructuredInvoiceDataTest.java | 22 +- 33 files changed, 7599 insertions(+), 71 deletions(-) create mode 100644 assets/readme/examples/invoice-consulting-v2.pdf create mode 100644 examples/src/main/java/com/demcha/examples/support/ConsultingInvoiceSampleData.java create mode 100644 examples/src/main/java/com/demcha/examples/templates/invoice/v2/ConsultingInvoiceV2Example.java create mode 100644 examples/src/main/resources/consulting-invoice-logo.png create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceFixtures.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceLayoutSnapshotTest.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceSmokeTest.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceVisualParityTest.java create mode 100644 qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_layout.json create mode 100644 qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_overflow_layout.json create mode 100644 qa/src/test/resources/sample-data/consulting-invoice-logo.png create mode 100644 qa/src/test/resources/visual-baselines/invoice-v2-layered/consulting_invoice-page-0.png delete mode 100644 templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingBody.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingClosing.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingIcons.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoice.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingMasthead.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingStyles.java create mode 100644 templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingText.java create mode 100644 templates/src/main/resources/templates/invoice/consulting/icons/bank.png create mode 100644 templates/src/main/resources/templates/invoice/consulting/icons/email.png create mode 100644 templates/src/main/resources/templates/invoice/consulting/icons/location.png create mode 100644 templates/src/main/resources/templates/invoice/consulting/icons/payment-calendar.png create mode 100644 templates/src/main/resources/templates/invoice/consulting/icons/phone.png create mode 100644 templates/src/main/resources/templates/invoice/consulting/icons/website.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a68c1799..deae67562 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,38 @@ follow semantic versioning; release dates are ISO 8601. ## v2.2.3 — Planned +### Public API + +- **A structured invoice document model.** The invoice family's data layer knew one + shape — an invoice as pre-formatted display strings, with one address block per + party, line items whose quantity and money are already rendered, and a flat list of + summary rows. That cannot carry the structured business invoice: a brand lockup with + the sender's own logo, labelled masthead metadata, a contact block with a business + registration, priced service lines carrying `BigDecimal` figures and the unit they + are counted in, a totals stack with its own total band, bank payment fields, and a + footer line. `templates.data.invoice` now carries that second model — + `StructuredInvoiceData` (+ its section records) wrapped by + `StructuredInvoiceDocumentSpec` — alongside the display one; a preset consumes the + model whose shape it renders. The brand logo arrives as `DocumentImageData`, because + the logo is caller-supplied content rather than template chrome, and it stays + optional so a wordmark-only lockup composes. Every component normalizes `null` to + its empty form, money and quantities default to zero, and collections are frozen. + ### Templates +- **A professional-services invoice preset: `ConsultingInvoice`.** A corporate masthead + — brand lockup and contact channels beside the document title and its metadata — + over priced service lines that carry a service period and a unit per line, closing + with an emphasized total band and the bank details beside the notes and the due-by + chip. Ships as `invoice.presets.ConsultingInvoice` consuming the new structured + invoice model, with its contact marks, bank badge and calendar packaged in the + templates artifact, porting the rendered layout of the published standalone + `northpoint-consulting-invoice` template. Long invoices flow: the line-items table + repeats its header and the totals stack stays whole. Guarded by a smoke test + (including the empty document, the wordmark fallback, the rendered figures and the + repeated header), exact layout snapshots for the single page and the overflow, and a + pixel-parity gate; the examples showcase gains `invoice-consulting-v2`. + - **Monogram Sidebar draws the employer.** Its experience entries rendered the position, the date and the description, and never `CvEntry.subtitle()` — so every company name was missing from the rendered CV while the education block, which does render its diff --git a/assets/readme/examples/invoice-consulting-v2.pdf b/assets/readme/examples/invoice-consulting-v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d832fbded0cf36b1ee41e6fc097ea6f9dec83d3 GIT binary patch literal 91956 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%0AU4R-fua1m)$8jT>#by> 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
  • BLZtj69DwiK7>JxvOq98Kl+DY}%-Q$X6x&yLJAH63ozg&%asMHUH zT(*9gq@L^;^voibX$&wtoGB|U2C$r<3x?Q8H)zH^(7eh!wOdiMywqp8-YV7~{^DAH zu=m7EGM?EMfvThD#hK3PnZw4>@)wQwm* z0|ssnSSP}BP9rWfLv4ypbdzi=SNM!QT{5GqAoB4Fh&QwUeKay=U=BMRIHWDgvJAJE3R+P*Ct5@F z)=5(jWeW@r6(xC==~$XbrS2Ze;OVELKwlbZM9IYsMWh&Ee;7N-l6^AW{TNCmW$FFI zF;u=4;>-0FO&l~HvAjAfi)|HqQ#ZG_Upogi7MlTe3Pzi`J=VRa69#ZETSAx^4H~RoABX@FTO}=XSMfQ!xFEa(=w4% zRHn`zT>swLr#|)_|GCO-pY5+Z0iR;#M<+k9tv{Dc62G2))zl{&RrDEhj730$h(j26 zrHOcRfgY> zbj(l6q30Xi^M>|%Nw3q*k0ed%?n9?AVP&4hlMTi)MR%B1^sMjyrB44M$H5PHs-Byh z7wiA+PNJs7YAh`xFD@jmtONoniYq7ygTzF^B8oy_5oHB2B_Sbk6$y}-gqV=HlCY?} z*aN*Psss@M2`eg#iiv_A2Jni?gJf9$_a#jKpJ*EC+1L^Z>O1(`u!@Ni397kT+xW5? zgB}(SufSQ2g;<4Ig&rRNC8z)4FqzR%tuPA;oaK+&x@*sHaFliLaIQcUSR*{#AQ~eI zD?2-jbwZ>w0sY~l^vNf0INu{e-baiYEf0ul+b+#Gn+gAb4Cv8)AZ3n`bB@uh<=}AR zy#4)@@;g_pGVD(b1OG`Isxtu@w|3AOvYfMa73DEc-l43(*;%d{3r(eCOr^bH=RRJQ z1H^@iQ+3NtpZ6>0)A~zd3Tz;>LeHo53Ad2a8KL{d#YDpa8&lWjYsX0@KvYRwwm7x- z2uAq<3QDiJT(ob+^AZs3_X@;TcVMaZ_|a;H^m%8xG-Qt@I-589AAjA`%fiFU*W=+E RN(hMvgNeAfl(kie{tI9GFoXaA literal 0 HcmV?d00001 diff --git a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java index 59590ed29..d2bb33aca 100644 --- a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java +++ b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java @@ -96,6 +96,7 @@ import com.demcha.examples.templates.cv.v2.CvPanelExample; import com.demcha.examples.templates.cv.v2.CvSidebarPortraitExample; import com.demcha.examples.templates.cv.v2.CvTimelineMinimalExample; +import com.demcha.examples.templates.invoice.ConsultingInvoiceV2Example; import com.demcha.examples.templates.invoice.InvoiceCinematicFileExample; import com.demcha.examples.templates.invoice.ModernInvoiceV2Example; import com.demcha.examples.templates.proposal.CinematicProposalFileExample; @@ -162,6 +163,7 @@ public static void main(String[] args) throws Exception { // Invoices System.out.println("Generated: " + InvoiceCinematicFileExample.generate()); System.out.println("Generated: " + ModernInvoiceV2Example.generate()); + System.out.println("Generated: " + ConsultingInvoiceV2Example.generate()); // Proposals System.out.println("Generated: " + ProposalCinematicFileExample.generate()); diff --git a/examples/src/main/java/com/demcha/examples/support/ConsultingInvoiceSampleData.java b/examples/src/main/java/com/demcha/examples/support/ConsultingInvoiceSampleData.java new file mode 100644 index 000000000..ff61b3188 --- /dev/null +++ b/examples/src/main/java/com/demcha/examples/support/ConsultingInvoiceSampleData.java @@ -0,0 +1,127 @@ +package com.demcha.examples.support; + +import com.demcha.compose.document.image.DocumentImageData; +import com.demcha.compose.document.templates.data.invoice.InvoiceBrand; +import com.demcha.compose.document.templates.data.invoice.InvoiceContactBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceMasthead; +import com.demcha.compose.document.templates.data.invoice.InvoiceNotesBlock; +import com.demcha.compose.document.templates.data.invoice.InvoicePaymentBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceRecipient; +import com.demcha.compose.document.templates.data.invoice.InvoiceServiceLines; +import com.demcha.compose.document.templates.data.invoice.InvoiceSummaryBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceTotalsBlock; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceDocumentSpec; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * Shared sample data for the Consulting Invoice example. + * + *

    The sample is the preset's reference content: a + * professional-services invoice with a brand logo, five masthead metadata + * rows (one emphasized), five priced service lines, a subtotal / tax + * stack with the total band, five bank fields, and notes naming both query + * channels.

    + * + *

    Kept in lockstep with the qa module's + * {@code ConsultingInvoiceFixtures} — the two modules cannot share a + * source file, so a content change here belongs there too.

    + */ +public final class ConsultingInvoiceSampleData { + + private ConsultingInvoiceSampleData() { + } + + /** The single-page reference invoice. */ + public static StructuredInvoiceDocumentSpec sample() { + return StructuredInvoiceDocumentSpec.from(baseBuilder(serviceLines(5)).build()); + } + + /** The sample logo, read from the examples resources. */ + public static DocumentImageData sampleLogo() { + String path = "/consulting-invoice-logo.png"; + try (InputStream input = ConsultingInvoiceSampleData.class.getResourceAsStream(path)) { + if (input == null) { + throw new IllegalStateException("Missing sample logo: " + path); + } + return DocumentImageData.fromBytes(input.readAllBytes()); + } catch (IOException e) { + throw new UncheckedIOException("Failed to read sample logo: " + path, e); + } + } + + private static StructuredInvoiceData.Builder baseBuilder(InvoiceServiceLines lines) { + return StructuredInvoiceData.builder() + .brand(new InvoiceBrand(sampleLogo(), "NORTHPOINT", "CONSULTING", + "Strategy. Solutions. Results.")) + .supplier(new InvoiceContactBlock("Northpoint Consulting Pty Ltd", + List.of("Level 8, 1 Collins Street", "Melbourne VIC 3000 Australia"), + "+61 3 9876 5432", "hello@northpoint.com.au", "northpoint.com.au", + "ABN", "12 345 678 901")) + .masthead(new InvoiceMasthead("INVOICE", List.of( + new InvoiceMasthead.Entry("Invoice Number:", "INV-2025-0478", false), + new InvoiceMasthead.Entry("Issue Date:", "26 May 2025", false), + new InvoiceMasthead.Entry("Due Date:", "25 June 2025", true), + new InvoiceMasthead.Entry("Project:", "Digital Strategy Engagement", false), + new InvoiceMasthead.Entry("PO Number:", "PO-7892", false)))) + .billTo(new InvoiceRecipient("BILLED TO", "Greenfield Industries Ltd.", + "Accounts Payable Department", + List.of("12 Innovation Drive", "Melbourne VIC 3000", "Australia"), + "Email:", "ap@greenfield.com.au")) + .summary(new InvoiceSummaryBlock("INVOICE SUMMARY", + "Professional services rendered in accordance with the statement of " + + "work for the period", + "1 May 2025 – 25 May 2025.")) + .serviceLines(lines) + .totals(new InvoiceTotalsBlock(List.of( + new InvoiceTotalsBlock.Row("SUBTOTAL", new BigDecimal("14000.00")), + new InvoiceTotalsBlock.Row("GST (10%)", new BigDecimal("1400.00"))), + "TOTAL DUE", new BigDecimal("15400.00"))) + .payment(new InvoicePaymentBlock("PAYMENT INFORMATION", List.of( + new InvoicePaymentBlock.Field("Bank Name:", "Example Bank"), + new InvoicePaymentBlock.Field("Account Name:", + "Northpoint Consulting Pty Ltd"), + new InvoicePaymentBlock.Field("BSB:", "123-456"), + new InvoicePaymentBlock.Field("Account Number:", "12345678"), + new InvoicePaymentBlock.Field("Reference:", "INV-2025-0478")), + "Please ensure the invoice number is included in the payment reference.", + "Payment is due within 30 days from the issue date.", "30 days")) + .notes(new InvoiceNotesBlock("NOTES", List.of( + "Thank you for your business.", + "If you have any questions regarding this invoice, please contact us " + + "at accounts@northpoint.com.au or +61 3 9876 5432."), + "accounts@northpoint.com.au", "+61 3 9876 5432")) + .currencyCode("AUD"); + } + + private static InvoiceServiceLines serviceLines(int count) { + String[][] source = { + {"Strategic Consultation", "Leadership alignment workshops", "1–10 May 2025", + "10.00", "hrs", "250.00", "2500.00"}, + {"Market & Competitive Analysis", "Research and analysis report", "1–15 May 2025", + "1.00", "ea", "3500.00", "3500.00"}, + {"Digital Roadmap Development", "Strategy and roadmap creation", "5–20 May 2025", + "1.00", "ea", "4800.00", "4800.00"}, + {"Stakeholder Review Sessions", "Facilitation and documentation", "15–22 May 2025", + "6.00", "hrs", "220.00", "1320.00"}, + {"Presentation & Final Report", "Executive presentation and delivery", + "20–25 May 2025", "1.00", "ea", "1880.00", "1880.00"}}; + List lines = new ArrayList<>(); + for (int index = 0; index < count; index++) { + String[] row = source[index % source.length]; + lines.add(new InvoiceServiceLines.Line(index + 1, row[0], row[1], row[2], + new BigDecimal(row[3]), row[4], new BigDecimal(row[5]), + new BigDecimal(row[6]))); + } + return new InvoiceServiceLines( + new InvoiceServiceLines.Columns("#", "DESCRIPTION", "SERVICE PERIOD", "QTY", + "UNIT PRICE", "AMOUNT"), + lines); + } +} diff --git a/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java b/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java index deb4e65f9..34839328b 100644 --- a/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java +++ b/examples/src/main/java/com/demcha/examples/support/ShowcaseMetadata.java @@ -87,6 +87,7 @@ record Entry(String title, String description, List tags, String codeUrl // ===== Templates / Invoice ===== invoice("invoice-cinematic", "InvoiceCinematicFileExample", "Cinematic Invoice", "Layered ModernInvoice preset with theme-driven layout, advanced tables, and totals.", "invoice", "cinematic"); + invoice("invoice-consulting-v2", "v2/ConsultingInvoiceV2Example", "Consulting Invoice", "The ConsultingInvoice preset on the structured invoice model — brand lockup with the caller's logo, labelled masthead metadata, priced service lines with service periods, a totals stack and bank payment fields.", "invoice"); invoice("invoice-modern-v2", "v2/ModernInvoiceV2Example", "Modern Invoice", "The ModernInvoice preset composed straight from an InvoiceDocumentSpec — line items, totals and payment block driven by the BrandTheme rather than per-document styling.", "invoice"); // ===== Templates / Proposal ===== diff --git a/examples/src/main/java/com/demcha/examples/templates/invoice/v2/ConsultingInvoiceV2Example.java b/examples/src/main/java/com/demcha/examples/templates/invoice/v2/ConsultingInvoiceV2Example.java new file mode 100644 index 000000000..277c31424 --- /dev/null +++ b/examples/src/main/java/com/demcha/examples/templates/invoice/v2/ConsultingInvoiceV2Example.java @@ -0,0 +1,54 @@ +package com.demcha.examples.templates.invoice; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceDocumentSpec; +import com.demcha.compose.document.templates.invoice.presets.ConsultingInvoice; +import com.demcha.examples.support.ConsultingInvoiceSampleData; +import com.demcha.examples.support.ExampleOutputPaths; + +import java.nio.file.Path; + +/** + * Renders the layered {@code invoice.v2} Consulting Invoice preset against + * the shared structured invoice sample data. + * + *

    Output: + * {@code examples/target/generated-pdfs/templates/invoice/invoice-consulting-v2.pdf}.

    + * + *

    The preset owns its page geometry — size, margins, the page fills and + * the footer band — so the session starts unconfigured; see + * {@code ConsultingInvoice.RECOMMENDED_MARGIN}. The brand logo is supplied + * through the data, the way a caller supplies its own.

    + */ +public final class ConsultingInvoiceV2Example { + + private ConsultingInvoiceV2Example() { + } + + /** + * @return absolute path of the rendered PDF + * @throws Exception if rendering fails + */ + public static Path generate() throws Exception { + Path outputFile = ExampleOutputPaths.prepare( + "templates/invoice", "invoice-consulting-v2.pdf"); + StructuredInvoiceDocumentSpec spec = ConsultingInvoiceSampleData.sample(); + DocumentTemplate template = ConsultingInvoice.create(); + + try (DocumentSession document = GraphCompose.document(outputFile).create()) { + template.compose(document, spec); + document.buildPdf(); + } + return outputFile; + } + + /** + * @param args ignored + * @throws Exception if rendering fails + */ + public static void main(String[] args) throws Exception { + System.out.println("Generated: " + generate()); + } +} diff --git a/examples/src/main/resources/consulting-invoice-logo.png b/examples/src/main/resources/consulting-invoice-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a37e806486b297bcf0269815eeb347baacc3e5 GIT binary patch literal 64808 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 M07*qoM6N<$f-YJo^8f$< literal 0 HcmV?d00001 diff --git a/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceFixtures.java b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceFixtures.java new file mode 100644 index 000000000..17f39b942 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceFixtures.java @@ -0,0 +1,135 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.image.DocumentImageData; +import com.demcha.compose.document.templates.data.invoice.InvoiceBrand; +import com.demcha.compose.document.templates.data.invoice.InvoiceContactBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceMasthead; +import com.demcha.compose.document.templates.data.invoice.InvoiceNotesBlock; +import com.demcha.compose.document.templates.data.invoice.InvoicePaymentBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceRecipient; +import com.demcha.compose.document.templates.data.invoice.InvoiceServiceLines; +import com.demcha.compose.document.templates.data.invoice.InvoiceSummaryBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceTotalsBlock; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceDocumentSpec; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * Shared fixture data for the Consulting Invoice gates — the SAME spec + * feeds the smoke, layout-snapshot and pixel gates, so a geometry shift the + * pixel budget absorbs still trips the exact snapshot, and vice versa. + * + *

    The canonical fixture is the preset's reference content: a + * professional-services invoice with a brand logo, five masthead metadata + * rows (one emphasized), five priced service lines, a subtotal / tax + * stack with the total band, five bank fields, and notes naming both query + * channels. The overflow fixture repeats the service lines until the table + * paginates, which is what freezes the repeating table header.

    + * + *

    Kept in lockstep with the examples module's + * {@code ConsultingInvoiceSampleData} — the two modules cannot share a + * source file, so a content change here belongs there too.

    + */ +final class ConsultingInvoiceFixtures { + + private ConsultingInvoiceFixtures() { + } + + /** The single-page reference invoice. */ + static StructuredInvoiceDocumentSpec canonicalInvoice() { + return StructuredInvoiceDocumentSpec.from(baseBuilder(serviceLines(5)).build()); + } + + /** Enough service lines to push the table onto a second page. */ + static StructuredInvoiceDocumentSpec overflowInvoice() { + return StructuredInvoiceDocumentSpec.from(baseBuilder(serviceLines(26)).build()); + } + + /** The sample logo, read from the qa test resources. */ + static DocumentImageData sampleLogo() { + String path = "/sample-data/consulting-invoice-logo.png"; + try (InputStream input = ConsultingInvoiceFixtures.class.getResourceAsStream(path)) { + if (input == null) { + throw new IllegalStateException("Missing sample logo: " + path); + } + return DocumentImageData.fromBytes(input.readAllBytes()); + } catch (IOException e) { + throw new UncheckedIOException("Failed to read sample logo: " + path, e); + } + } + + private static StructuredInvoiceData.Builder baseBuilder(InvoiceServiceLines lines) { + return StructuredInvoiceData.builder() + .brand(new InvoiceBrand(sampleLogo(), "NORTHPOINT", "CONSULTING", + "Strategy. Solutions. Results.")) + .supplier(new InvoiceContactBlock("Northpoint Consulting Pty Ltd", + List.of("Level 8, 1 Collins Street", "Melbourne VIC 3000 Australia"), + "+61 3 9876 5432", "hello@northpoint.com.au", "northpoint.com.au", + "ABN", "12 345 678 901")) + .masthead(new InvoiceMasthead("INVOICE", List.of( + new InvoiceMasthead.Entry("Invoice Number:", "INV-2025-0478", false), + new InvoiceMasthead.Entry("Issue Date:", "26 May 2025", false), + new InvoiceMasthead.Entry("Due Date:", "25 June 2025", true), + new InvoiceMasthead.Entry("Project:", "Digital Strategy Engagement", false), + new InvoiceMasthead.Entry("PO Number:", "PO-7892", false)))) + .billTo(new InvoiceRecipient("BILLED TO", "Greenfield Industries Ltd.", + "Accounts Payable Department", + List.of("12 Innovation Drive", "Melbourne VIC 3000", "Australia"), + "Email:", "ap@greenfield.com.au")) + .summary(new InvoiceSummaryBlock("INVOICE SUMMARY", + "Professional services rendered in accordance with the statement of " + + "work for the period", + "1 May 2025 – 25 May 2025.")) + .serviceLines(lines) + .totals(new InvoiceTotalsBlock(List.of( + new InvoiceTotalsBlock.Row("SUBTOTAL", new BigDecimal("14000.00")), + new InvoiceTotalsBlock.Row("GST (10%)", new BigDecimal("1400.00"))), + "TOTAL DUE", new BigDecimal("15400.00"))) + .payment(new InvoicePaymentBlock("PAYMENT INFORMATION", List.of( + new InvoicePaymentBlock.Field("Bank Name:", "Example Bank"), + new InvoicePaymentBlock.Field("Account Name:", + "Northpoint Consulting Pty Ltd"), + new InvoicePaymentBlock.Field("BSB:", "123-456"), + new InvoicePaymentBlock.Field("Account Number:", "12345678"), + new InvoicePaymentBlock.Field("Reference:", "INV-2025-0478")), + "Please ensure the invoice number is included in the payment reference.", + "Payment is due within 30 days from the issue date.", "30 days")) + .notes(new InvoiceNotesBlock("NOTES", List.of( + "Thank you for your business.", + "If you have any questions regarding this invoice, please contact us " + + "at accounts@northpoint.com.au or +61 3 9876 5432."), + "accounts@northpoint.com.au", "+61 3 9876 5432")) + .currencyCode("AUD"); + } + + private static InvoiceServiceLines serviceLines(int count) { + String[][] source = { + {"Strategic Consultation", "Leadership alignment workshops", "1–10 May 2025", + "10.00", "hrs", "250.00", "2500.00"}, + {"Market & Competitive Analysis", "Research and analysis report", "1–15 May 2025", + "1.00", "ea", "3500.00", "3500.00"}, + {"Digital Roadmap Development", "Strategy and roadmap creation", "5–20 May 2025", + "1.00", "ea", "4800.00", "4800.00"}, + {"Stakeholder Review Sessions", "Facilitation and documentation", "15–22 May 2025", + "6.00", "hrs", "220.00", "1320.00"}, + {"Presentation & Final Report", "Executive presentation and delivery", + "20–25 May 2025", "1.00", "ea", "1880.00", "1880.00"}}; + List lines = new ArrayList<>(); + for (int index = 0; index < count; index++) { + String[] row = source[index % source.length]; + lines.add(new InvoiceServiceLines.Line(index + 1, row[0], row[1], row[2], + new BigDecimal(row[3]), row[4], new BigDecimal(row[5]), + new BigDecimal(row[6]))); + } + return new InvoiceServiceLines( + new InvoiceServiceLines.Columns("#", "DESCRIPTION", "SERVICE PERIOD", "QTY", + "UNIT PRICE", "AMOUNT"), + lines); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceLayoutSnapshotTest.java b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceLayoutSnapshotTest.java new file mode 100644 index 000000000..2f616d80b --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceLayoutSnapshotTest.java @@ -0,0 +1,43 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.TemplateTestSupport; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Exact layout snapshot gate for {@link ConsultingInvoice} — freezes the + * resolved geometry the pixel budget cannot see (a small column or spacing + * shift stays under the visual-diff budget but changes the snapshot), and + * the pagination contract of the overflow invoice: the service lines flow + * onto a second page and the totals stack stays whole. + * + *

    Refresh with {@code -Dgraphcompose.updateSnapshots=true} after a + * deliberate layout change, and commit the JSON with the change.

    + */ +class ConsultingInvoiceLayoutSnapshotTest { + + @Test + void canonicalInvoiceMatchesLayoutSnapshot() throws Exception { + try (DocumentSession session = GraphCompose.document().create()) { + ConsultingInvoice.create().compose( + session, ConsultingInvoiceFixtures.canonicalInvoice()); + assertThat(session.layoutSnapshot().totalPages()).isEqualTo(1); + TemplateTestSupport.assertCanonicalSnapshot( + session, "consulting_invoice_layout", "invoice"); + } + } + + @Test + void overflowInvoicePaginatesOntoASecondPage() throws Exception { + try (DocumentSession session = GraphCompose.document().create()) { + ConsultingInvoice.create().compose( + session, ConsultingInvoiceFixtures.overflowInvoice()); + assertThat(session.layoutSnapshot().totalPages()).isGreaterThan(1); + TemplateTestSupport.assertCanonicalSnapshot( + session, "consulting_invoice_overflow_layout", "invoice"); + } + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceSmokeTest.java new file mode 100644 index 000000000..ed319022b --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceSmokeTest.java @@ -0,0 +1,168 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.data.invoice.InvoiceBrand; +import com.demcha.compose.document.templates.data.invoice.InvoiceContactBlock; +import com.demcha.compose.document.templates.data.invoice.InvoicePaymentBlock; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceDocumentSpec; +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.text.PDFTextStripper; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Smoke test for the structured invoice pipeline through + * {@link ConsultingInvoice} — proves the preset renders a + * {@link StructuredInvoiceDocumentSpec} end-to-end with the packaged icon + * set and a caller-supplied logo, falls back to the wordmark lockup when + * no logo is supplied, renders an empty document through its guards, and + * puts the priced figures on the text layer, where the layout snapshot + * cannot see inside the table. + */ +class ConsultingInvoiceSmokeTest { + + private static byte[] render(StructuredInvoiceDocumentSpec spec) throws Exception { + // The preset owns its page geometry, so the session starts unconfigured. + try (DocumentSession session = GraphCompose.document().create()) { + ConsultingInvoice.create().compose(session, spec); + assertThat(session.roots()).isNotEmpty(); + byte[] pdfBytes = session.toPdfBytes(); + assertThat(pdfBytes).isNotEmpty(); + return pdfBytes; + } + } + + private static String textOf(byte[] pdfBytes) throws Exception { + try (PDDocument document = Loader.loadPDF(pdfBytes)) { + return new PDFTextStripper().getText(document); + } + } + + @Test + void exposesStableIdentity() { + DocumentTemplate template = ConsultingInvoice.create(); + assertThat(template.id()).isEqualTo(ConsultingInvoice.ID); + assertThat(template.displayName()).isEqualTo(ConsultingInvoice.DISPLAY_NAME); + } + + @Test + void rendersCanonicalInvoiceWithLogoAndPackagedIcons() throws Exception { + render(ConsultingInvoiceFixtures.canonicalInvoice()); + } + + @Test + void rendersWordmarkLockupWhenNoLogoIsSupplied() throws Exception { + StructuredInvoiceData canonical = + ConsultingInvoiceFixtures.canonicalInvoice().invoice(); + InvoiceBrand brand = canonical.brand(); + StructuredInvoiceData withoutLogo = rebuild(canonical) + .brand(new InvoiceBrand(null, brand.name(), brand.qualifier(), brand.tagline())) + .build(); + + String text = textOf(render(StructuredInvoiceDocumentSpec.from(withoutLogo))); + // The wordmark lockup draws the brand name as text; the logo path does not. + assertThat(text).contains("NORTHPOINT"); + } + + @Test + void rendersEmptyInvoice() throws Exception { + // Exercises the empty-collection paths through full layout and render: + // no metadata rows, no service lines, no totals rows, no bank fields, + // no notes — and the blank brand that has neither logo nor name. + render(StructuredInvoiceDocumentSpec.from(StructuredInvoiceData.builder().build())); + } + + @Test + void canonicalRenderCarriesTheTableAndTotalsText() throws Exception { + // The line-items table and the totals bands are leaf nodes in the + // layout snapshot, so their content is asserted on the text layer. + String text = textOf(render(ConsultingInvoiceFixtures.canonicalInvoice())); + assertThat(text) + .contains("Strategic Consultation") + .contains("Leadership alignment workshops") + .contains("1–10 May 2025") + .contains("2,500.00") + .contains("GST (10%)") + .contains("TOTAL DUE (AUD)") + .contains("15,400.00") + .contains("INV-2025-0478"); + } + + @Test + void aDocumentWithoutACurrencyPrintsNoEmptyParentheses() throws Exception { + StructuredInvoiceData canonical = ConsultingInvoiceFixtures.canonicalInvoice().invoice(); + StructuredInvoiceData withoutCurrency = rebuild(canonical).currencyCode("").build(); + + String text = textOf(render(StructuredInvoiceDocumentSpec.from(withoutCurrency))); + assertThat(text).doesNotContain("()").contains("TOTAL DUE"); + } + + @Test + void aSupplierWithoutARegistrationPrintsNoDanglingSeparator() throws Exception { + StructuredInvoiceData canonical = ConsultingInvoiceFixtures.canonicalInvoice().invoice(); + InvoiceContactBlock supplier = canonical.supplier(); + StructuredInvoiceData withoutRegistration = rebuild(canonical) + .supplier(new InvoiceContactBlock(supplier.legalName(), supplier.addressLines(), + supplier.phone(), supplier.email(), supplier.website(), "", "")) + .build(); + + String text = textOf(render(StructuredInvoiceDocumentSpec.from(withoutRegistration))); + assertThat(text) + .contains("Northpoint Consulting Pty Ltd") + .doesNotContain("Pty Ltd |"); + } + + @Test + void theBankBandGrowsWithTheNumberOfPaymentFields() throws Exception { + StructuredInvoiceData canonical = ConsultingInvoiceFixtures.canonicalInvoice().invoice(); + InvoicePaymentBlock payment = canonical.payment(); + List more = new ArrayList<>(payment.fields()); + more.add(new InvoicePaymentBlock.Field("SWIFT:", "EXAMPLEAU")); + more.add(new InvoicePaymentBlock.Field("IBAN:", "AU00 1234 5678 9012")); + StructuredInvoiceData withMoreFields = rebuild(canonical) + .payment(new InvoicePaymentBlock(payment.heading(), more, payment.instruction(), + payment.dueNotice(), payment.dueNoticeEmphasis())) + .build(); + + // The band is sized from the field count, so the last field is drawn + // inside it rather than over the instruction beneath. + String text = textOf(render(StructuredInvoiceDocumentSpec.from(withMoreFields))); + assertThat(text).contains("SWIFT:").contains("IBAN:") + .contains("Please ensure the invoice number"); + } + + /** Copies every component of a spec so one of them can be replaced. */ + private static StructuredInvoiceData.Builder rebuild(StructuredInvoiceData data) { + return StructuredInvoiceData.builder() + .brand(data.brand()) + .supplier(data.supplier()) + .masthead(data.masthead()) + .billTo(data.billTo()) + .summary(data.summary()) + .serviceLines(data.serviceLines()) + .totals(data.totals()) + .payment(data.payment()) + .notes(data.notes()) + .currencyCode(data.currencyCode()); + } + + @Test + void overflowInvoiceRepeatsTheTableHeaderOnTheSecondPage() throws Exception { + byte[] pdfBytes = render(ConsultingInvoiceFixtures.overflowInvoice()); + try (PDDocument document = Loader.loadPDF(pdfBytes)) { + assertThat(document.getNumberOfPages()).isGreaterThan(1); + PDFTextStripper stripper = new PDFTextStripper(); + stripper.setStartPage(2); + stripper.setEndPage(2); + assertThat(stripper.getText(document)).contains("SERVICE PERIOD"); + } + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceVisualParityTest.java b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceVisualParityTest.java new file mode 100644 index 000000000..ebe9ee2d0 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoiceVisualParityTest.java @@ -0,0 +1,46 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.testing.visual.PdfVisualRegression; +import org.junit.jupiter.api.Test; + +import java.nio.file.Path; + +/** + * Pixel-diff visual parity gate for {@link ConsultingInvoice}. + * + *

    Separate from {@code InvoiceV2VisualParityTest} because that gate is + * parameterised on the display {@code InvoiceDocumentSpec} while this + * preset consumes the structured spec. Budget and tolerance mirror the + * other template parity gates.

    + * + *

    Re-blessing baselines — after a deliberate visual + * change, re-run with {@code -Dgraphcompose.visual.approve=true} and + * commit the updated PNGs with the change. Baselines live under + * {@code src/test/resources/visual-baselines/invoice-v2-layered/}.

    + */ +class ConsultingInvoiceVisualParityTest { + + private static final Path BASELINE_ROOT = Path.of( + "src", "test", "resources", "visual-baselines", "invoice-v2-layered"); + + private static final long PIXEL_DIFF_BUDGET = 50_000L; + private static final int PER_PIXEL_TOLERANCE = 8; + + @Test + void rendersWithinPixelDiffBudget() throws Exception { + byte[] pdfBytes; + try (DocumentSession document = GraphCompose.document().create()) { + ConsultingInvoice.create().compose( + document, ConsultingInvoiceFixtures.canonicalInvoice()); + pdfBytes = document.toPdfBytes(); + } + + PdfVisualRegression.standard() + .baselineRoot(BASELINE_ROOT) + .perPixelTolerance(PER_PIXEL_TOLERANCE) + .mismatchedPixelBudget(PIXEL_DIFF_BUDGET) + .assertMatchesBaseline("consulting_invoice", pdfBytes); + } +} diff --git a/qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_layout.json b/qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_layout.json new file mode 100644 index 000000000..71f81a1bc --- /dev/null +++ b/qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_layout.json @@ -0,0 +1,2867 @@ +{ + "formatVersion" : "2.0", + "canvas" : { + "pageWidth" : 595.276, + "pageHeight" : 841.89, + "innerWidth" : 534.276, + "innerHeight" : 780.89, + "margin" : { + "top" : 30.5, + "right" : 30.5, + "bottom" : 30.5, + "left" : 30.5 + } + }, + "totalPages" : 1, + "nodes" : [ { + "path" : "ConsultingInvoice[0]", + "entityName" : "ConsultingInvoice", + "entityKind" : "ContainerNode", + "parentPath" : null, + "childIndex" : 0, + "depth" : 1, + "layer" : 1, + "computedX" : 30.5, + "computedY" : 169.316, + "placementX" : 30.5, + "placementY" : 169.316, + "placementWidth" : 534.276, + "placementHeight" : 642.074, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 642.074, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]", + "entityName" : "Masthead", + "entityKind" : "RowNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 0, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 675.406, + "placementX" : 30.5, + "placementY" : 675.406, + "placementWidth" : 534.276, + "placementHeight" : 135.984, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 135.984, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "entityName" : "SupplierHeader", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 30.5, + "computedY" : 682.39, + "placementX" : 30.5, + "placementY" : 682.39, + "placementWidth" : 259.731, + "placementHeight" : 129.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 129.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/BrandLogoBox[0]", + "entityName" : "BrandLogoBox", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 747.39, + "placementX" : 30.5, + "placementY" : 747.39, + "placementWidth" : 259.731, + "placementHeight" : 64.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 64.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/BrandLogoBox[0]/BrandLogo[0]", + "entityName" : "BrandLogo", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/BrandLogoBox[0]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 747.39, + "placementX" : 30.5, + "placementY" : 747.39, + "placementWidth" : 164.874, + "placementHeight" : 64.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 164.874, + "contentHeight" : 64.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 727.39, + "placementX" : 30.5, + "placementY" : 727.39, + "placementWidth" : 259.731, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]/Icon-location[0]", + "entityName" : "Icon-location", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 731.39, + "placementX" : 30.5, + "placementY" : 731.39, + "placementWidth" : 10.0, + "placementHeight" : 10.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 10.0, + "contentHeight" : 10.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 725.088, + "placementX" : 53.5, + "placementY" : 725.088, + "placementWidth" : 100.555, + "placementHeight" : 20.302, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 100.555, + "contentHeight" : 20.302, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 712.39, + "placementX" : 30.5, + "placementY" : 712.39, + "placementWidth" : 259.731, + "placementHeight" : 13.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 13.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]/Icon-phone[0]", + "entityName" : "Icon-phone", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 714.29, + "placementX" : 30.5, + "placementY" : 714.29, + "placementWidth" : 9.2, + "placementHeight" : 9.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 9.2, + "contentHeight" : 9.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 714.102, + "placementX" : 53.5, + "placementY" : 714.102, + "placementWidth" : 53.974, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 53.974, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 697.39, + "placementX" : 30.5, + "placementY" : 697.39, + "placementWidth" : 259.731, + "placementHeight" : 13.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 13.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]/Icon-email[0]", + "entityName" : "Icon-email", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 699.29, + "placementX" : 30.5, + "placementY" : 699.29, + "placementWidth" : 9.2, + "placementHeight" : 9.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 9.2, + "contentHeight" : 9.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 699.102, + "placementX" : 53.5, + "placementY" : 699.102, + "placementWidth" : 86.464, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 86.464, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 682.39, + "placementX" : 30.5, + "placementY" : 682.39, + "placementWidth" : 259.731, + "placementHeight" : 13.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 13.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]/Icon-website[0]", + "entityName" : "Icon-website", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 684.19, + "placementX" : 30.5, + "placementY" : 684.19, + "placementWidth" : 9.4, + "placementHeight" : 9.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 9.4, + "contentHeight" : 9.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 684.102, + "placementX" : 53.5, + "placementY" : 684.102, + "placementWidth" : 63.174, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 63.174, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "entityName" : "InvoiceHeader", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 315.231, + "computedY" : 675.406, + "placementX" : 315.231, + "placementY" : 675.406, + "placementWidth" : 249.545, + "placementHeight" : 135.984, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 249.545, + "contentHeight" : 135.984, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 24.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 778.406, + "placementX" : 339.231, + "placementY" : 778.406, + "placementWidth" : 128.001, + "placementHeight" : 32.984, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 128.001, + "contentHeight" : 32.984, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 751.406, + "placementX" : 339.231, + "placementY" : 751.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 755.618, + "placementX" : 339.231, + "placementY" : 755.618, + "placementWidth" : 57.812, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 57.812, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 755.086, + "placementX" : 447.492, + "placementY" : 755.086, + "placementWidth" : 57.509, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 57.509, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 732.406, + "placementX" : 339.231, + "placementY" : 732.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 736.618, + "placementX" : 339.231, + "placementY" : 736.618, + "placementWidth" : 38.475, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 38.475, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 736.086, + "placementX" : 447.492, + "placementY" : 736.086, + "placementWidth" : 47.5, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 47.5, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 713.406, + "placementX" : 339.231, + "placementY" : 713.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 717.618, + "placementX" : 339.231, + "placementY" : 717.618, + "placementWidth" : 33.796, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 33.796, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 717.086, + "placementX" : 447.492, + "placementY" : 717.086, + "placementWidth" : 50.396, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 50.396, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 694.406, + "placementX" : 339.231, + "placementY" : 694.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 698.618, + "placementX" : 339.231, + "placementY" : 698.618, + "placementWidth" : 26.635, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 26.635, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 698.086, + "placementX" : 447.492, + "placementY" : 698.086, + "placementWidth" : 109.235, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 109.235, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 5, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 675.406, + "placementX" : 339.231, + "placementY" : 675.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 679.618, + "placementX" : 339.231, + "placementY" : 679.618, + "placementWidth" : 41.82, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 41.82, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 679.086, + "placementX" : 447.492, + "placementY" : 679.086, + "placementWidth" : 32.665, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 32.665, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/SpacerNode[1]", + "entityName" : null, + "entityKind" : "SpacerNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 1, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 659.406, + "placementX" : 30.5, + "placementY" : 659.406, + "placementWidth" : 0.0, + "placementHeight" : 16.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 0.0, + "contentHeight" : 16.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]", + "entityName" : "PartiesAndSummary", + "entityKind" : "RowNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 2, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 561.63, + "placementX" : 30.5, + "placementY" : 561.63, + "placementWidth" : 534.276, + "placementHeight" : 97.776, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 97.776, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "entityName" : "BilledTo", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 30.5, + "computedY" : 561.63, + "placementX" : 30.5, + "placementY" : 561.63, + "placementWidth" : 116.538, + "placementHeight" : 97.776, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 116.538, + "contentHeight" : 97.776, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 647.17, + "placementX" : 30.5, + "placementY" : 647.17, + "placementWidth" : 56.469, + "placementHeight" : 12.236, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 56.469, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 640.47, + "placementX" : 30.5, + "placementY" : 640.47, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[2]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 624.33, + "placementX" : 30.5, + "placementY" : 624.33, + "placementWidth" : 97.219, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 97.219, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 612.19, + "placementX" : 30.5, + "placementY" : 612.19, + "placementWidth" : 116.538, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 116.538, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[4]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 578.77, + "placementX" : 30.5, + "placementY" : 578.77, + "placementWidth" : 76.129, + "placementHeight" : 31.92, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 76.129, + "contentHeight" : 31.92, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[5]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 5, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 561.63, + "placementX" : 30.5, + "placementY" : 561.63, + "placementWidth" : 114.008, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 114.008, + "contentHeight" : 10.64, + "margin" : { + "top" : 5.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "entityName" : "InvoiceSummary", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 340.102, + "computedY" : 601.7, + "placementX" : 340.102, + "placementY" : 601.7, + "placementWidth" : 205.246, + "placementHeight" : 57.706, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 205.246, + "contentHeight" : 57.706, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 647.17, + "placementX" : 340.102, + "placementY" : 647.17, + "placementWidth" : 109.748, + "placementHeight" : 12.236, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 109.748, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 640.97, + "placementX" : 340.102, + "placementY" : 640.97, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/ParagraphNode[2]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 613.34, + "placementX" : 340.102, + "placementY" : 613.34, + "placementWidth" : 205.246, + "placementHeight" : 22.63, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 205.246, + "contentHeight" : 22.63, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 601.7, + "placementX" : 340.102, + "placementY" : 601.7, + "placementWidth" : 100.259, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 100.259, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/SpacerNode[3]", + "entityName" : null, + "entityKind" : "SpacerNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 3, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 551.63, + "placementX" : 30.5, + "placementY" : 551.63, + "placementWidth" : 0.0, + "placementHeight" : 10.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 0.0, + "contentHeight" : 10.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/LineItems[4]", + "entityName" : "LineItems", + "entityKind" : "TableNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 4, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 368.328, + "placementX" : 30.5, + "placementY" : 368.328, + "placementWidth" : 534.276, + "placementHeight" : 183.302, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 183.302, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]", + "entityName" : "Totals", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 5, + "depth" : 2, + "layer" : 2, + "computedX" : 340.38, + "computedY" : 299.328, + "placementX" : 340.38, + "placementY" : 299.328, + "placementWidth" : 224.396, + "placementHeight" : 63.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 63.0, + "margin" : { + "top" : 6.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 309.88 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]", + "entityName" : "TotalRow", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 347.328, + "placementX" : 340.38, + "placementY" : 347.328, + "placementWidth" : 224.396, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 350.04, + "placementX" : 340.38, + "placementY" : 350.04, + "placementWidth" : 48.301, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 48.301, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 349.508, + "placementX" : 340.38, + "placementY" : 349.508, + "placementWidth" : 224.396, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 10.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]", + "entityName" : "TotalRow", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 331.328, + "placementX" : 340.38, + "placementY" : 331.328, + "placementWidth" : 224.396, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 334.04, + "placementX" : 340.38, + "placementY" : 334.04, + "placementWidth" : 47.419, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 47.419, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 333.508, + "placementX" : 340.38, + "placementY" : 333.508, + "placementWidth" : 224.396, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 10.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/LineNode[2]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 2, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 327.328, + "placementX" : 340.38, + "placementY" : 327.328, + "placementWidth" : 224.396, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 1.0, + "margin" : { + "top" : 2.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]", + "entityName" : "TotalDue", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 3, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 299.328, + "placementX" : 340.38, + "placementY" : 299.328, + "placementWidth" : 224.396, + "placementHeight" : 27.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 27.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 307.508, + "placementX" : 340.38, + "placementY" : 307.508, + "placementWidth" : 79.135, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 79.135, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 303.252, + "placementX" : 340.38, + "placementY" : 303.252, + "placementWidth" : 224.396, + "placementHeight" : 19.152, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 224.396, + "contentHeight" : 19.152, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 10.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/LineNode[6]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 6, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 293.328, + "placementX" : 30.5, + "placementY" : 293.328, + "placementWidth" : 534.276, + "placementHeight" : 1.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 1.0, + "margin" : { + "top" : 5.0, + "right" : 0.0, + "bottom" : 5.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]", + "entityName" : "PaymentAndNotes", + "entityKind" : "RowNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 7, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 169.316, + "placementX" : 30.5, + "placementY" : 169.316, + "placementWidth" : 534.276, + "placementHeight" : 119.012, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 119.012, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "entityName" : "PaymentInformation", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 30.5, + "computedY" : 169.316, + "placementX" : 30.5, + "placementY" : 169.316, + "placementWidth" : 276.629, + "placementHeight" : 119.012, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 276.629, + "contentHeight" : 119.012, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 276.092, + "placementX" : 30.5, + "placementY" : 276.092, + "placementWidth" : 139.604, + "placementHeight" : 12.236, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 139.604, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 267.892, + "placementX" : 30.5, + "placementY" : 267.892, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]", + "entityName" : "BankInformationBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 185.892, + "placementX" : 30.5, + "placementY" : 185.892, + "placementWidth" : 276.629, + "placementHeight" : 75.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 276.629, + "contentHeight" : 75.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankBadge[0]", + "entityName" : "BankBadge", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 204.392, + "placementX" : 30.5, + "placementY" : 204.392, + "placementWidth" : 38.0, + "placementHeight" : 38.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 38.0, + "contentHeight" : 38.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankBadge[0]/Icon-bank[0]", + "entityName" : "Icon-bank", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankBadge[0]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 39.75, + "computedY" : 213.642, + "placementX" : 39.75, + "placementY" : 213.642, + "placementWidth" : 19.5, + "placementHeight" : 19.5, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 19.5, + "contentHeight" : 19.5, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "entityName" : "BankDetails", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 88.5, + "computedY" : 185.892, + "placementX" : 88.5, + "placementY" : 185.892, + "placementWidth" : 215.629, + "placementHeight" : 75.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 215.629, + "contentHeight" : 75.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 245.892, + "placementX" : 88.5, + "placementY" : 245.892, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 248.604, + "placementX" : 88.5, + "placementY" : 248.604, + "placementWidth" : 42.627, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 42.627, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 248.604, + "placementX" : 164.5, + "placementY" : 248.604, + "placementWidth" : 47.545, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 47.545, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 1, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 230.892, + "placementX" : 88.5, + "placementY" : 230.892, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 233.604, + "placementX" : 88.5, + "placementY" : 233.604, + "placementWidth" : 54.31, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 54.31, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 233.604, + "placementX" : 164.5, + "placementY" : 233.604, + "placementWidth" : 98.845, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 98.845, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 2, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 215.892, + "placementX" : 88.5, + "placementY" : 215.892, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 218.604, + "placementX" : 88.5, + "placementY" : 218.604, + "placementWidth" : 15.164, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 15.164, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 218.604, + "placementX" : 164.5, + "placementY" : 218.604, + "placementWidth" : 26.861, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 26.861, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 3, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 200.892, + "placementX" : 88.5, + "placementY" : 200.892, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 203.604, + "placementX" : 88.5, + "placementY" : 203.604, + "placementWidth" : 61.847, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 61.847, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 203.604, + "placementX" : 164.5, + "placementY" : 203.604, + "placementWidth" : 31.143, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 31.143, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 4, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 185.892, + "placementX" : 88.5, + "placementY" : 185.892, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 188.604, + "placementX" : 88.5, + "placementY" : 188.604, + "placementWidth" : 37.394, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 37.394, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 188.604, + "placementX" : 164.5, + "placementY" : 188.604, + "placementWidth" : 51.758, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 51.758, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 169.316, + "placementX" : 30.5, + "placementY" : 169.316, + "placementWidth" : 246.452, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 246.452, + "contentHeight" : 9.576, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "entityName" : "Notes", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 329.129, + "computedY" : 175.732, + "placementX" : 329.129, + "placementY" : 175.732, + "placementWidth" : 235.647, + "placementHeight" : 112.596, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 235.647, + "contentHeight" : 112.596, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 24.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 276.092, + "placementX" : 353.129, + "placementY" : 276.092, + "placementWidth" : 36.122, + "placementHeight" : 12.236, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 36.122, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 267.892, + "placementX" : 353.129, + "placementY" : 267.892, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/ParagraphNode[2]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 250.252, + "placementX" : 353.129, + "placementY" : 250.252, + "placementWidth" : 107.0, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 107.0, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 212.732, + "placementX" : 353.129, + "placementY" : 212.732, + "placementWidth" : 210.11, + "placementHeight" : 34.52, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 210.11, + "contentHeight" : 34.52, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]", + "entityName" : "PaymentTerms", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 175.732, + "placementX" : 353.129, + "placementY" : 175.732, + "placementWidth" : 211.647, + "placementHeight" : 34.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 211.647, + "contentHeight" : 34.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/CalendarBadge[0]", + "entityName" : "CalendarBadge", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 361.129, + "computedY" : 181.232, + "placementX" : 361.129, + "placementY" : 181.232, + "placementWidth" : 23.0, + "placementHeight" : 23.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 23.0, + "contentHeight" : 23.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/CalendarBadge[0]/Icon-payment-calendar[0]", + "entityName" : "Icon-payment-calendar", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/CalendarBadge[0]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 366.379, + "computedY" : 186.482, + "placementX" : 366.379, + "placementY" : 186.482, + "placementWidth" : 12.5, + "placementHeight" : 12.5, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 12.5, + "contentHeight" : 12.5, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/DueNotice[1]", + "entityName" : "DueNotice", + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 395.129, + "computedY" : 188.689, + "placementX" : 395.129, + "placementY" : 188.689, + "placementWidth" : 150.049, + "placementHeight" : 8.086, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 150.049, + "contentHeight" : 8.086, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + } ] +} diff --git a/qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_overflow_layout.json b/qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_overflow_layout.json new file mode 100644 index 000000000..fda4ec506 --- /dev/null +++ b/qa/src/test/resources/layout-snapshots/canonical-templates/invoice/consulting_invoice_overflow_layout.json @@ -0,0 +1,2867 @@ +{ + "formatVersion" : "2.0", + "canvas" : { + "pageWidth" : 595.276, + "pageHeight" : 841.89, + "innerWidth" : 534.276, + "innerHeight" : 780.89, + "margin" : { + "top" : 30.5, + "right" : 30.5, + "bottom" : 30.5, + "left" : 30.5 + } + }, + "totalPages" : 2, + "nodes" : [ { + "path" : "ConsultingInvoice[0]", + "entityName" : "ConsultingInvoice", + "entityKind" : "ContainerNode", + "parentPath" : null, + "childIndex" : 0, + "depth" : 1, + "layer" : 1, + "computedX" : 30.5, + "computedY" : -478.114, + "placementX" : 30.5, + "placementY" : -478.114, + "placementWidth" : 534.276, + "placementHeight" : 1289.504, + "startPage" : 0, + "endPage" : 1, + "contentWidth" : 534.276, + "contentHeight" : 1289.504, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]", + "entityName" : "Masthead", + "entityKind" : "RowNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 0, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 675.406, + "placementX" : 30.5, + "placementY" : 675.406, + "placementWidth" : 534.276, + "placementHeight" : 135.984, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 135.984, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "entityName" : "SupplierHeader", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 30.5, + "computedY" : 682.39, + "placementX" : 30.5, + "placementY" : 682.39, + "placementWidth" : 259.731, + "placementHeight" : 129.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 129.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/BrandLogoBox[0]", + "entityName" : "BrandLogoBox", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 747.39, + "placementX" : 30.5, + "placementY" : 747.39, + "placementWidth" : 259.731, + "placementHeight" : 64.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 64.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/BrandLogoBox[0]/BrandLogo[0]", + "entityName" : "BrandLogo", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/BrandLogoBox[0]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 747.39, + "placementX" : 30.5, + "placementY" : 747.39, + "placementWidth" : 164.874, + "placementHeight" : 64.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 164.874, + "contentHeight" : 64.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 727.39, + "placementX" : 30.5, + "placementY" : 727.39, + "placementWidth" : 259.731, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]/Icon-location[0]", + "entityName" : "Icon-location", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 731.39, + "placementX" : 30.5, + "placementY" : 731.39, + "placementWidth" : 10.0, + "placementHeight" : 10.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 10.0, + "contentHeight" : 10.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[1]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 725.088, + "placementX" : 53.5, + "placementY" : 725.088, + "placementWidth" : 100.555, + "placementHeight" : 20.302, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 100.555, + "contentHeight" : 20.302, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 712.39, + "placementX" : 30.5, + "placementY" : 712.39, + "placementWidth" : 259.731, + "placementHeight" : 13.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 13.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]/Icon-phone[0]", + "entityName" : "Icon-phone", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 714.29, + "placementX" : 30.5, + "placementY" : 714.29, + "placementWidth" : 9.2, + "placementHeight" : 9.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 9.2, + "contentHeight" : 9.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 714.102, + "placementX" : 53.5, + "placementY" : 714.102, + "placementWidth" : 53.974, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 53.974, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 697.39, + "placementX" : 30.5, + "placementY" : 697.39, + "placementWidth" : 259.731, + "placementHeight" : 13.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 13.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]/Icon-email[0]", + "entityName" : "Icon-email", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 699.29, + "placementX" : 30.5, + "placementY" : 699.29, + "placementWidth" : 9.2, + "placementHeight" : 9.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 9.2, + "contentHeight" : 9.2, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[3]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 699.102, + "placementX" : 53.5, + "placementY" : 699.102, + "placementWidth" : 86.464, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 86.464, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]", + "entityName" : "ContactBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 682.39, + "placementX" : 30.5, + "placementY" : 682.39, + "placementWidth" : 259.731, + "placementHeight" : 13.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 259.731, + "contentHeight" : 13.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]/Icon-website[0]", + "entityName" : "Icon-website", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 684.19, + "placementX" : 30.5, + "placementY" : 684.19, + "placementWidth" : 9.4, + "placementHeight" : 9.4, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 9.4, + "contentHeight" : 9.4, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/SupplierHeader[0]/ContactBand[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 53.5, + "computedY" : 684.102, + "placementX" : 53.5, + "placementY" : 684.102, + "placementWidth" : 63.174, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 63.174, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "entityName" : "InvoiceHeader", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 315.231, + "computedY" : 675.406, + "placementX" : 315.231, + "placementY" : 675.406, + "placementWidth" : 249.545, + "placementHeight" : 135.984, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 249.545, + "contentHeight" : 135.984, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 24.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 778.406, + "placementX" : 339.231, + "placementY" : 778.406, + "placementWidth" : 128.001, + "placementHeight" : 32.984, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 128.001, + "contentHeight" : 32.984, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 8.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 751.406, + "placementX" : 339.231, + "placementY" : 751.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 755.618, + "placementX" : 339.231, + "placementY" : 755.618, + "placementWidth" : 57.812, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 57.812, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[1]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 755.086, + "placementX" : 447.492, + "placementY" : 755.086, + "placementWidth" : 57.509, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 57.509, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 732.406, + "placementX" : 339.231, + "placementY" : 732.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 736.618, + "placementX" : 339.231, + "placementY" : 736.618, + "placementWidth" : 38.475, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 38.475, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 736.086, + "placementX" : 447.492, + "placementY" : 736.086, + "placementWidth" : 47.5, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 47.5, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 713.406, + "placementX" : 339.231, + "placementY" : 713.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 717.618, + "placementX" : 339.231, + "placementY" : 717.618, + "placementWidth" : 33.796, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 33.796, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[3]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 717.086, + "placementX" : 447.492, + "placementY" : 717.086, + "placementWidth" : 50.396, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 50.396, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 694.406, + "placementX" : 339.231, + "placementY" : 694.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 698.618, + "placementX" : 339.231, + "placementY" : 698.618, + "placementWidth" : 26.635, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 26.635, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 698.086, + "placementX" : 447.492, + "placementY" : 698.086, + "placementWidth" : 109.235, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 109.235, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]", + "entityName" : "MetadataBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]", + "childIndex" : 5, + "depth" : 4, + "layer" : 4, + "computedX" : 339.231, + "computedY" : 675.406, + "placementX" : 339.231, + "placementY" : 675.406, + "placementWidth" : 225.545, + "placementHeight" : 18.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 225.545, + "contentHeight" : 18.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 339.231, + "computedY" : 679.618, + "placementX" : 339.231, + "placementY" : 679.618, + "placementWidth" : 41.82, + "placementHeight" : 9.576, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 41.82, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Masthead[0]/InvoiceHeader[1]/MetadataBand[5]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 447.492, + "computedY" : 679.086, + "placementX" : 447.492, + "placementY" : 679.086, + "placementWidth" : 32.665, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 32.665, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/SpacerNode[1]", + "entityName" : null, + "entityKind" : "SpacerNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 1, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 659.406, + "placementX" : 30.5, + "placementY" : 659.406, + "placementWidth" : 0.0, + "placementHeight" : 16.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 0.0, + "contentHeight" : 16.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]", + "entityName" : "PartiesAndSummary", + "entityKind" : "RowNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 2, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 561.63, + "placementX" : 30.5, + "placementY" : 561.63, + "placementWidth" : 534.276, + "placementHeight" : 97.776, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 534.276, + "contentHeight" : 97.776, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "entityName" : "BilledTo", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 30.5, + "computedY" : 561.63, + "placementX" : 30.5, + "placementY" : 561.63, + "placementWidth" : 116.538, + "placementHeight" : 97.776, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 116.538, + "contentHeight" : 97.776, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 647.17, + "placementX" : 30.5, + "placementY" : 647.17, + "placementWidth" : 56.469, + "placementHeight" : 12.236, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 56.469, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 640.47, + "placementX" : 30.5, + "placementY" : 640.47, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[2]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 624.33, + "placementX" : 30.5, + "placementY" : 624.33, + "placementWidth" : 97.219, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 97.219, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 612.19, + "placementX" : 30.5, + "placementY" : 612.19, + "placementWidth" : 116.538, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 116.538, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[4]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 578.77, + "placementX" : 30.5, + "placementY" : 578.77, + "placementWidth" : 76.129, + "placementHeight" : 31.92, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 76.129, + "contentHeight" : 31.92, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]/ParagraphNode[5]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/BilledTo[0]", + "childIndex" : 5, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 561.63, + "placementX" : 30.5, + "placementY" : 561.63, + "placementWidth" : 114.008, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 114.008, + "contentHeight" : 10.64, + "margin" : { + "top" : 5.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "entityName" : "InvoiceSummary", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 340.102, + "computedY" : 601.7, + "placementX" : 340.102, + "placementY" : 601.7, + "placementWidth" : 205.246, + "placementHeight" : 57.706, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 205.246, + "contentHeight" : 57.706, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 647.17, + "placementX" : 340.102, + "placementY" : 647.17, + "placementWidth" : 109.748, + "placementHeight" : 12.236, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 109.748, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 640.97, + "placementX" : 340.102, + "placementY" : 640.97, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/ParagraphNode[2]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 613.34, + "placementX" : 340.102, + "placementY" : 613.34, + "placementWidth" : 205.246, + "placementHeight" : 22.63, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 205.246, + "contentHeight" : 22.63, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PartiesAndSummary[2]/InvoiceSummary[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 340.102, + "computedY" : 601.7, + "placementX" : 340.102, + "placementY" : 601.7, + "placementWidth" : 100.259, + "placementHeight" : 10.64, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 100.259, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/SpacerNode[3]", + "entityName" : null, + "entityKind" : "SpacerNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 3, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 551.63, + "placementX" : 30.5, + "placementY" : 551.63, + "placementWidth" : 0.0, + "placementHeight" : 10.0, + "startPage" : 0, + "endPage" : 0, + "contentWidth" : 0.0, + "contentHeight" : 10.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/LineItems[4]", + "entityName" : "LineItems", + "entityKind" : "TableNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 4, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 60.028, + "placementX" : 30.5, + "placementY" : 60.028, + "placementWidth" : 534.276, + "placementHeight" : 830.732, + "startPage" : 0, + "endPage" : 1, + "contentWidth" : 534.276, + "contentHeight" : 830.732, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]", + "entityName" : "Totals", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 5, + "depth" : 2, + "layer" : 2, + "computedX" : 340.38, + "computedY" : 374.108, + "placementX" : 340.38, + "placementY" : 374.108, + "placementWidth" : 224.396, + "placementHeight" : 63.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 63.0, + "margin" : { + "top" : 6.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 309.88 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]", + "entityName" : "TotalRow", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 422.108, + "placementX" : 340.38, + "placementY" : 422.108, + "placementWidth" : 224.396, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 424.82, + "placementX" : 340.38, + "placementY" : 424.82, + "placementWidth" : 48.301, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 48.301, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 424.288, + "placementX" : 340.38, + "placementY" : 424.288, + "placementWidth" : 224.396, + "placementHeight" : 10.64, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 10.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]", + "entityName" : "TotalRow", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 406.108, + "placementX" : 340.38, + "placementY" : 406.108, + "placementWidth" : 224.396, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 408.82, + "placementX" : 340.38, + "placementY" : 408.82, + "placementWidth" : 47.419, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 47.419, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalRow[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 408.288, + "placementX" : 340.38, + "placementY" : 408.288, + "placementWidth" : 224.396, + "placementHeight" : 10.64, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 10.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/LineNode[2]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 2, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 402.108, + "placementX" : 340.38, + "placementY" : 402.108, + "placementWidth" : 224.396, + "placementHeight" : 1.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 1.0, + "margin" : { + "top" : 2.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]", + "entityName" : "TotalDue", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]", + "childIndex" : 3, + "depth" : 3, + "layer" : 3, + "computedX" : 340.38, + "computedY" : 374.108, + "placementX" : 340.38, + "placementY" : 374.108, + "placementWidth" : 224.396, + "placementHeight" : 27.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 27.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 382.288, + "placementX" : 340.38, + "placementY" : 382.288, + "placementWidth" : 79.135, + "placementHeight" : 10.64, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 79.135, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 13.0 + } + }, { + "path" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/Totals[5]/TotalDue[3]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 340.38, + "computedY" : 378.032, + "placementX" : 340.38, + "placementY" : 378.032, + "placementWidth" : 224.396, + "placementHeight" : 19.152, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 224.396, + "contentHeight" : 19.152, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 10.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/LineNode[6]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 6, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 368.108, + "placementX" : 30.5, + "placementY" : 368.108, + "placementWidth" : 534.276, + "placementHeight" : 1.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 534.276, + "contentHeight" : 1.0, + "margin" : { + "top" : 5.0, + "right" : 0.0, + "bottom" : 5.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]", + "entityName" : "PaymentAndNotes", + "entityKind" : "RowNode", + "parentPath" : "ConsultingInvoice[0]", + "childIndex" : 7, + "depth" : 2, + "layer" : 2, + "computedX" : 30.5, + "computedY" : 244.096, + "placementX" : 30.5, + "placementY" : 244.096, + "placementWidth" : 534.276, + "placementHeight" : 119.012, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 534.276, + "contentHeight" : 119.012, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "entityName" : "PaymentInformation", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]", + "childIndex" : 0, + "depth" : 3, + "layer" : 3, + "computedX" : 30.5, + "computedY" : 244.096, + "placementX" : 30.5, + "placementY" : 244.096, + "placementWidth" : 276.629, + "placementHeight" : 119.012, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 276.629, + "contentHeight" : 119.012, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 350.872, + "placementX" : 30.5, + "placementY" : 350.872, + "placementWidth" : 139.604, + "placementHeight" : 12.236, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 139.604, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 342.672, + "placementX" : 30.5, + "placementY" : 342.672, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]", + "entityName" : "BankInformationBand", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 260.672, + "placementX" : 30.5, + "placementY" : 260.672, + "placementWidth" : 276.629, + "placementHeight" : 75.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 276.629, + "contentHeight" : 75.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankBadge[0]", + "entityName" : "BankBadge", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 30.5, + "computedY" : 279.172, + "placementX" : 30.5, + "placementY" : 279.172, + "placementWidth" : 38.0, + "placementHeight" : 38.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 38.0, + "contentHeight" : 38.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankBadge[0]/Icon-bank[0]", + "entityName" : "Icon-bank", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankBadge[0]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 39.75, + "computedY" : 288.422, + "placementX" : 39.75, + "placementY" : 288.422, + "placementWidth" : 19.5, + "placementHeight" : 19.5, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 19.5, + "contentHeight" : 19.5, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "entityName" : "BankDetails", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 88.5, + "computedY" : 260.672, + "placementX" : 88.5, + "placementY" : 260.672, + "placementWidth" : 215.629, + "placementHeight" : 75.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 215.629, + "contentHeight" : 75.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 320.672, + "placementX" : 88.5, + "placementY" : 320.672, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 323.384, + "placementX" : 88.5, + "placementY" : 323.384, + "placementWidth" : 42.627, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 42.627, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[0]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 323.384, + "placementX" : 164.5, + "placementY" : 323.384, + "placementWidth" : 47.545, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 47.545, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 1, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 305.672, + "placementX" : 88.5, + "placementY" : 305.672, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 308.384, + "placementX" : 88.5, + "placementY" : 308.384, + "placementWidth" : 54.31, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 54.31, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[1]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 308.384, + "placementX" : 164.5, + "placementY" : 308.384, + "placementWidth" : 98.845, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 98.845, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 2, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 290.672, + "placementX" : 88.5, + "placementY" : 290.672, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 293.384, + "placementX" : 88.5, + "placementY" : 293.384, + "placementWidth" : 15.164, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 15.164, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[2]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 293.384, + "placementX" : 164.5, + "placementY" : 293.384, + "placementWidth" : 26.861, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 26.861, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 3, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 275.672, + "placementX" : 88.5, + "placementY" : 275.672, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 278.384, + "placementX" : 88.5, + "placementY" : 278.384, + "placementWidth" : 61.847, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 61.847, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[3]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 278.384, + "placementX" : 164.5, + "placementY" : 278.384, + "placementWidth" : 31.143, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 31.143, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]", + "entityName" : "BankField", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]", + "childIndex" : 4, + "depth" : 6, + "layer" : 6, + "computedX" : 88.5, + "computedY" : 260.672, + "placementX" : 88.5, + "placementY" : 260.672, + "placementWidth" : 215.629, + "placementHeight" : 15.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 215.629, + "contentHeight" : 15.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]", + "childIndex" : 0, + "depth" : 7, + "layer" : 7, + "computedX" : 88.5, + "computedY" : 263.384, + "placementX" : 88.5, + "placementY" : 263.384, + "placementWidth" : 37.394, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 37.394, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]/ParagraphNode[1]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/BankInformationBand[2]/BankDetails[1]/BankField[4]", + "childIndex" : 1, + "depth" : 7, + "layer" : 7, + "computedX" : 164.5, + "computedY" : 263.384, + "placementX" : 164.5, + "placementY" : 263.384, + "placementWidth" : 51.758, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 51.758, + "contentHeight" : 9.576, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/PaymentInformation[0]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 30.5, + "computedY" : 244.096, + "placementX" : 30.5, + "placementY" : 244.096, + "placementWidth" : 246.452, + "placementHeight" : 9.576, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 246.452, + "contentHeight" : 9.576, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "entityName" : "Notes", + "entityKind" : "SectionNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]", + "childIndex" : 1, + "depth" : 3, + "layer" : 3, + "computedX" : 329.129, + "computedY" : 250.512, + "placementX" : 329.129, + "placementY" : 250.512, + "placementWidth" : 235.647, + "placementHeight" : 112.596, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 235.647, + "contentHeight" : 112.596, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 24.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/ParagraphNode[0]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 0, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 350.872, + "placementX" : 353.129, + "placementY" : 350.872, + "placementWidth" : 36.122, + "placementHeight" : 12.236, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 36.122, + "contentHeight" : 12.236, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/LineNode[1]", + "entityName" : null, + "entityKind" : "LineNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 1, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 342.672, + "placementX" : 353.129, + "placementY" : 342.672, + "placementWidth" : 30.0, + "placementHeight" : 1.2, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 30.0, + "contentHeight" : 1.2, + "margin" : { + "top" : 4.0, + "right" : 0.0, + "bottom" : 4.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/ParagraphNode[2]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 2, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 325.032, + "placementX" : 353.129, + "placementY" : 325.032, + "placementWidth" : 107.0, + "placementHeight" : 10.64, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 107.0, + "contentHeight" : 10.64, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/ParagraphNode[3]", + "entityName" : null, + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 3, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 287.512, + "placementX" : 353.129, + "placementY" : 287.512, + "placementWidth" : 210.11, + "placementHeight" : 34.52, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 210.11, + "contentHeight" : 34.52, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]", + "entityName" : "PaymentTerms", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]", + "childIndex" : 4, + "depth" : 4, + "layer" : 4, + "computedX" : 353.129, + "computedY" : 250.512, + "placementX" : 353.129, + "placementY" : 250.512, + "placementWidth" : 211.647, + "placementHeight" : 34.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 211.647, + "contentHeight" : 34.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/CalendarBadge[0]", + "entityName" : "CalendarBadge", + "entityKind" : "ShapeContainerNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]", + "childIndex" : 0, + "depth" : 5, + "layer" : 5, + "computedX" : 361.129, + "computedY" : 256.012, + "placementX" : 361.129, + "placementY" : 256.012, + "placementWidth" : 23.0, + "placementHeight" : 23.0, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 23.0, + "contentHeight" : 23.0, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/CalendarBadge[0]/Icon-payment-calendar[0]", + "entityName" : "Icon-payment-calendar", + "entityKind" : "ImageNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/CalendarBadge[0]", + "childIndex" : 0, + "depth" : 6, + "layer" : 6, + "computedX" : 366.379, + "computedY" : 261.262, + "placementX" : 366.379, + "placementY" : 261.262, + "placementWidth" : 12.5, + "placementHeight" : 12.5, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 12.5, + "contentHeight" : 12.5, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + }, { + "path" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]/DueNotice[1]", + "entityName" : "DueNotice", + "entityKind" : "ParagraphNode", + "parentPath" : "ConsultingInvoice[0]/PaymentAndNotes[7]/Notes[1]/PaymentTerms[4]", + "childIndex" : 1, + "depth" : 5, + "layer" : 5, + "computedX" : 395.129, + "computedY" : 263.469, + "placementX" : 395.129, + "placementY" : 263.469, + "placementWidth" : 150.049, + "placementHeight" : 8.086, + "startPage" : 1, + "endPage" : 1, + "contentWidth" : 150.049, + "contentHeight" : 8.086, + "margin" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + }, + "padding" : { + "top" : 0.0, + "right" : 0.0, + "bottom" : 0.0, + "left" : 0.0 + } + } ] +} diff --git a/qa/src/test/resources/sample-data/consulting-invoice-logo.png b/qa/src/test/resources/sample-data/consulting-invoice-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a37e806486b297bcf0269815eeb347baacc3e5 GIT binary patch literal 64808 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 M07*qoM6N<$f-YJo^8f$< literal 0 HcmV?d00001 diff --git a/qa/src/test/resources/visual-baselines/invoice-v2-layered/consulting_invoice-page-0.png b/qa/src/test/resources/visual-baselines/invoice-v2-layered/consulting_invoice-page-0.png new file mode 100644 index 0000000000000000000000000000000000000000..d491ee7ed3711b74bdd6d3368a68307ebd790e05 GIT binary patch literal 94555 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 literal 0 HcmV?d00001 diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java deleted file mode 100644 index 4b0c5287b..000000000 --- a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceFooterLine.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.demcha.compose.document.templates.data.invoice; - -import java.util.Objects; - -/** - * The page-foot line of a structured invoice: who issued it and under - * which registration. - * - * @param legalName the registered business name - * @param registrationText the registration text as printed - * (e.g. {@code "ABN 12 345 678 901"}) - */ -public record InvoiceFooterLine(String legalName, String registrationText) { - - /** - * Normalizes optional fields to empty strings. - */ - public InvoiceFooterLine { - legalName = Objects.requireNonNullElse(legalName, ""); - registrationText = Objects.requireNonNullElse(registrationText, ""); - } -} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java index 30ed2008d..f8d2184b0 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoicePaymentBlock.java @@ -14,16 +14,22 @@ * them one field at a time. The labels are content — they differ by * banking system.

    * - * @param heading the block heading (e.g. {@code "PAYMENT INFORMATION"}) - * @param fields the labelled payment fields, in print order - * @param instruction the sentence under the fields - * @param dueNotice the short due-by notice set apart from the rest + * @param heading the block heading + * (e.g. {@code "PAYMENT INFORMATION"}) + * @param fields the labelled payment fields, in print order + * @param instruction the sentence under the fields + * @param dueNotice the short due-by notice set apart from the rest + * @param dueNoticeEmphasis the run inside {@code dueNotice} that carries + * the emphasis — usually the term itself, as in + * {@code "30 days"}; empty leaves the notice + * evenly set */ public record InvoicePaymentBlock( String heading, List fields, String instruction, - String dueNotice) { + String dueNotice, + String dueNoticeEmphasis) { /** * Normalizes optional fields and freezes the field list. @@ -33,6 +39,7 @@ public record InvoicePaymentBlock( fields = List.copyOf(Objects.requireNonNullElse(fields, List.of())); instruction = Objects.requireNonNullElse(instruction, ""); dueNotice = Objects.requireNonNullElse(dueNotice, ""); + dueNoticeEmphasis = Objects.requireNonNullElse(dueNoticeEmphasis, ""); } /** diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java index 98109d51a..777dddb9d 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/InvoiceRecipient.java @@ -6,20 +6,25 @@ /** * The billed-to block of a structured invoice. * - *

    The block owns its heading, and everything under the recipient's name - * is an authored line — department, street, city, country — so the caller - * decides how many lines the address takes and in what order.

    + *

    The block owns its heading, and the lines under the recipient's name + * come in two groups because a preset sets them apart: the {@code subline} + * is the single attention line — a department, a contact, a cost centre — + * that sits directly under the name, and {@code addressLines} is the + * address block under that.

    * - * @param heading the block heading (e.g. {@code "BILLED TO"}) - * @param name the recipient's name, set apart from the lines below - * @param lines the address lines under the name, in order - * @param emailLabel the label printed before the email address - * @param email the recipient's email address + * @param heading the block heading (e.g. {@code "BILLED TO"}) + * @param name the recipient's name, set apart from the lines below + * @param subline the attention line under the name; empty when the + * recipient has none + * @param addressLines the address lines, in order + * @param emailLabel the label printed before the email address + * @param email the recipient's email address */ public record InvoiceRecipient( String heading, String name, - List lines, + String subline, + List addressLines, String emailLabel, String email) { @@ -29,7 +34,8 @@ public record InvoiceRecipient( public InvoiceRecipient { heading = Objects.requireNonNullElse(heading, ""); name = Objects.requireNonNullElse(name, ""); - lines = List.copyOf(Objects.requireNonNullElse(lines, List.of())); + subline = Objects.requireNonNullElse(subline, ""); + addressLines = List.copyOf(Objects.requireNonNullElse(addressLines, List.of())); emailLabel = Objects.requireNonNullElse(emailLabel, ""); email = Objects.requireNonNullElse(email, ""); } diff --git a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java index ca6ab53e8..d685766bb 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceData.java @@ -3,7 +3,7 @@ import java.util.Objects; /** - * Display-oriented input for structured invoice documents. + * Structured input for business invoice documents. * *

    The display model ({@link InvoiceData}) carries an invoice as * pre-formatted strings: one address block per party, line items whose @@ -31,7 +31,6 @@ * @param totals the totals stack and its total band * @param payment where to send the money, and by when * @param notes the closing notes and query channels - * @param footer the page-foot line * @param currencyCode the ISO currency code the figures are stated in */ public record StructuredInvoiceData( @@ -44,7 +43,6 @@ public record StructuredInvoiceData( InvoiceTotalsBlock totals, InvoicePaymentBlock payment, InvoiceNotesBlock notes, - InvoiceFooterLine footer, String currencyCode) { /** @@ -55,15 +53,15 @@ public record StructuredInvoiceData( supplier = supplier == null ? new InvoiceContactBlock(null, null, null, null, null, null, null) : supplier; masthead = masthead == null ? new InvoiceMasthead(null, null) : masthead; - billTo = billTo == null ? new InvoiceRecipient(null, null, null, null, null) : billTo; + billTo = billTo == null + ? new InvoiceRecipient(null, null, null, null, null, null) : billTo; summary = summary == null ? new InvoiceSummaryBlock(null, null, null) : summary; serviceLines = serviceLines == null ? new InvoiceServiceLines(null, null) : serviceLines; totals = totals == null ? new InvoiceTotalsBlock(null, null, null) : totals; payment = payment == null - ? new InvoicePaymentBlock(null, null, null, null) : payment; + ? new InvoicePaymentBlock(null, null, null, null, null) : payment; notes = notes == null ? new InvoiceNotesBlock(null, null, null, null) : notes; - footer = footer == null ? new InvoiceFooterLine(null, null) : footer; currencyCode = Objects.requireNonNullElse(currencyCode, ""); } @@ -89,7 +87,6 @@ public static final class Builder { private InvoiceTotalsBlock totals; private InvoicePaymentBlock payment; private InvoiceNotesBlock notes; - private InvoiceFooterLine footer; private String currencyCode; private Builder() { @@ -194,17 +191,6 @@ public Builder notes(InvoiceNotesBlock notes) { return this; } - /** - * Sets the page-foot line. - * - * @param footer footer line - * @return this builder - */ - public Builder footer(InvoiceFooterLine footer) { - this.footer = footer; - return this; - } - /** * Sets the ISO currency code the figures are stated in. * @@ -223,7 +209,7 @@ public Builder currencyCode(String currencyCode) { */ public StructuredInvoiceData build() { return new StructuredInvoiceData(brand, supplier, masthead, billTo, summary, - serviceLines, totals, payment, notes, footer, currencyCode); + serviceLines, totals, payment, notes, currencyCode); } } } diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingBody.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingBody.java new file mode 100644 index 000000000..75c38b050 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingBody.java @@ -0,0 +1,238 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.dsl.ParagraphBuilder; +import com.demcha.compose.document.dsl.SectionBuilder; +import com.demcha.compose.document.dsl.TableBuilder; +import com.demcha.compose.document.node.DocumentNode; +import com.demcha.compose.document.node.TextAlign; +import com.demcha.compose.document.style.ClipPolicy; +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.style.DocumentTextStyle; +import com.demcha.compose.document.style.ShapeOutline; +import com.demcha.compose.document.table.DocumentTableCell; +import com.demcha.compose.document.table.DocumentTableColumn; +import com.demcha.compose.document.table.DocumentTableStyle; +import com.demcha.compose.document.table.DocumentTableTextAnchor; +import com.demcha.compose.document.templates.data.invoice.InvoiceRecipient; +import com.demcha.compose.document.templates.data.invoice.InvoiceServiceLines; +import com.demcha.compose.document.templates.data.invoice.InvoiceSummaryBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceTotalsBlock; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; + +import java.util.List; + +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.ACCENT_PRIMARY; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY_ACCENT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY_BOLD; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.CONTENT_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.EMPHASIS_FILL; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.PAGE_BACKGROUND; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.ROW_ALT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL_BOLD; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.TABLE_HEADER; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.TABLE_RATIOS; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.TOTALS_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.TOTAL_AMOUNT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.TOTAL_AMOUNT_RIGHT_INSET; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.TOTAL_LABEL_LEFT_INSET; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.tableStyle; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.decimal; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.link; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.money; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.titleBreakerWidth; + +/** + * The body of the Consulting Invoice: who is billed and for what, the + * priced service lines, and the totals stack. + */ +final class ConsultingBody { + + private ConsultingBody() { + } + + /** The billed-to block: name, attention line, address, then the email. */ + static void renderBilledTo(SectionBuilder section, StructuredInvoiceData data) { + InvoiceRecipient billTo = data.billTo(); + ConsultingMasthead.sectionHeading(section, billTo.heading()); + section.spacing(1.5).addParagraph(billTo.name(), BODY_BOLD); + // A recipient without an attention line gets no line box for it. + if (!billTo.subline().isBlank()) { + section.addParagraph(billTo.subline(), BODY); + } + section.addParagraph(String.join("\n", billTo.addressLines()), BODY); + if (!billTo.email().isBlank()) { + section.addParagraph(paragraph -> paragraph + .rich(rich -> rich + .style(billTo.emailLabel() + " ", BODY_BOLD) + .with(billTo.email(), BODY, link("mailto:" + billTo.email()))) + .margin(DocumentInsets.top(5))); + } + } + + /** What the invoice covers, and the period it covers. */ + static void renderSummary(SectionBuilder section, StructuredInvoiceData data) { + InvoiceSummaryBlock summary = data.summary(); + ConsultingMasthead.sectionHeading(section, summary.heading()); + section.spacing(1) + .addParagraph(paragraph -> paragraph + .text(summary.intro()) + .textStyle(BODY) + .lineSpacing(1.35) + .margin(DocumentInsets.zero())) + .addParagraph(paragraph -> paragraph + .text(summary.servicePeriod()) + .textStyle(BODY_BOLD) + .lineSpacing(1.15) + .margin(DocumentInsets.zero())); + } + + /** + * The line-items table: a repeating header on the accent fill, and one + * zebra-filled row per service line. The unit-price and amount headers + * carry the currency on their second line. + */ + static void renderServiceLines(TableBuilder table, StructuredInvoiceData data) { + InvoiceServiceLines serviceLines = data.serviceLines(); + InvoiceServiceLines.Columns columns = serviceLines.columns(); + // A document that states no currency prints no parenthetical. + String currency = data.currencyCode().isBlank() + ? "" : "(" + data.currencyCode() + ")"; + + DocumentTableStyle headerStyle = DocumentTableStyle.builder() + .padding(DocumentInsets.symmetric(4.5, 4.0)) + .fillColor(ACCENT_PRIMARY) + .stroke(DocumentStroke.of(ACCENT_PRIMARY, 0.6)) + .textStyle(TABLE_HEADER) + .textAnchor(DocumentTableTextAnchor.CENTER) + .lineSpacing(1.0) + .build(); + + table.name("LineItems") + .columns(column(0), column(1), column(2), column(3), column(4), column(5)) + .headerCells( + DocumentTableCell.text(columns.index()), + DocumentTableCell.text(columns.description()), + DocumentTableCell.text(columns.servicePeriod()), + DocumentTableCell.text(columns.quantity()), + DocumentTableCell.lines(columns.unitPrice(), currency), + DocumentTableCell.lines(columns.amount(), currency)) + .headerStyle(headerStyle) + .repeatHeader() + .padding(DocumentInsets.zero()) + .margin(DocumentInsets.zero()); + + List lines = serviceLines.lines(); + for (int index = 0; index < lines.size(); index++) { + InvoiceServiceLines.Line line = lines.get(index); + DocumentColor fill = index % 2 == 0 ? PAGE_BACKGROUND : ROW_ALT; + table.rowCells( + DocumentTableCell.text(Integer.toString(line.lineNumber())) + .withStyle(tableStyle(fill, DocumentTableTextAnchor.CENTER)), + DocumentTableCell.node(descriptionNode(line, fill)) + .withStyle(tableStyle(fill, DocumentTableTextAnchor.CENTER_LEFT)), + DocumentTableCell.text(line.servicePeriod()) + .withStyle(tableStyle(fill, DocumentTableTextAnchor.CENTER)), + DocumentTableCell.lines(decimal(line.quantity()), line.unit()) + .withStyle(tableStyle(fill, DocumentTableTextAnchor.CENTER)), + DocumentTableCell.text(money(line.unitPrice())) + .withStyle(tableStyle(fill, DocumentTableTextAnchor.CENTER_RIGHT)), + DocumentTableCell.text(money(line.amount())) + .withStyle(tableStyle(fill, DocumentTableTextAnchor.CENTER_RIGHT))); + } + } + + private static DocumentTableColumn column(int index) { + return DocumentTableColumn.fixed(CONTENT_WIDTH * TABLE_RATIOS[index]); + } + + /** + * The description cell: the title, an invisible breaker that fills the + * rest of the title line, then the description on its own line. The + * breaker is a zero-height rectangle in the row's own fill — the engine + * has no rich-text line break (see + * {@link ConsultingText#titleBreakerWidth(String)}). + */ + private static DocumentNode descriptionNode(InvoiceServiceLines.Line line, + DocumentColor fill) { + return new ParagraphBuilder() + .name("Description") + .align(TextAlign.LEFT) + .textStyle(SMALL) + .lineSpacing(1.15) + .margin(DocumentInsets.zero()) + .rich(rich -> rich + .style(line.title(), SMALL_BOLD) + .shape(new ShapeOutline.Rectangle(titleBreakerWidth(line.title()), 0.1), fill) + .style(line.description(), SMALL)) + .build(); + } + + /** + * The totals stack, pinned to the right of the content box and kept on + * one page: the rows above the rule, then the emphasized total band. + */ + static void renderTotals(SectionBuilder section, StructuredInvoiceData data) { + InvoiceTotalsBlock totals = data.totals(); + section.keepTogether() + .margin(6, 0, 0, (float) (CONTENT_WIDTH - TOTALS_WIDTH)) + .spacing(1); + for (InvoiceTotalsBlock.Row row : totals.rows()) { + totalsBand(section, row.label(), money(row.amount()), false); + } + section.addLine(line -> line + .horizontal(TOTALS_WIDTH) + .thickness(1.0) + .color(ACCENT_PRIMARY) + .margin(DocumentInsets.top(2))); + String totalLabel = data.currencyCode().isBlank() + ? totals.totalLabel() + : totals.totalLabel() + " (" + data.currencyCode() + ")"; + totalsBand(section, totalLabel, money(totals.totalAmount()), true); + } + + private static void totalsBand(SectionBuilder section, + String label, + String amount, + boolean emphasized) { + double height = emphasized ? 27 : 15; + section.addContainer(container -> { + container.name(emphasized ? "TotalDue" : "TotalRow") + .rectangle(TOTALS_WIDTH, height) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .centerLeft(insetParagraph( + label, + emphasized ? BODY_ACCENT : SMALL_BOLD, + TextAlign.LEFT, + 0, + TOTAL_LABEL_LEFT_INSET)) + .centerRight(insetParagraph( + amount, + emphasized ? TOTAL_AMOUNT : BODY_BOLD, + TextAlign.RIGHT, + TOTAL_AMOUNT_RIGHT_INSET, + 0)); + if (emphasized) { + container.fillColor(EMPHASIS_FILL); + } + }); + } + + private static DocumentNode insetParagraph(String text, + DocumentTextStyle style, + TextAlign align, + double right, + double left) { + return new ParagraphBuilder() + .text(text) + .textStyle(style) + .align(align) + .lineSpacing(1.15) + .padding(new DocumentInsets(0, (float) right, 0, (float) left)) + .margin(DocumentInsets.zero()) + .build(); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingClosing.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingClosing.java new file mode 100644 index 000000000..854e856fa --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingClosing.java @@ -0,0 +1,179 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.dsl.ParagraphBuilder; +import com.demcha.compose.document.dsl.SectionBuilder; +import com.demcha.compose.document.dsl.ShapeContainerBuilder; +import com.demcha.compose.document.node.DocumentNode; +import com.demcha.compose.document.node.LayerAlign; +import com.demcha.compose.document.style.ClipPolicy; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.templates.data.invoice.InvoiceNotesBlock; +import com.demcha.compose.document.templates.data.invoice.InvoicePaymentBlock; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; + +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.ACCENT_PRIMARY; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY_LINK; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.EMPHASIS_FILL; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.HAIRLINE; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.NOTES_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.NOTICE_ACCENT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.NOTICE_BOLD; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.PAYMENT_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL_BOLD; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL_ITALIC; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.link; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.nonBreakingPhone; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.telUri; + +/** + * The closing band of the Consulting Invoice: where the money goes on the + * left, and the notes with the due-by chip on the right. + */ +final class ConsultingClosing { + + private ConsultingClosing() { + } + + /** Payment information: the bank badge, the labelled fields, the instruction. */ + static void renderPayment(SectionBuilder section, StructuredInvoiceData data) { + InvoicePaymentBlock payment = data.payment(); + ConsultingMasthead.sectionHeading(section, payment.heading()); + // The band is as tall as the fields it holds (15pt each), never + // shorter than the badge standing beside them. + double bankBandHeight = Math.max(38.0, payment.fields().size() * 15.0); + section.spacing(3) + .addContainer(container -> container + .name("BankInformationBand") + .rectangle(PAYMENT_WIDTH, bankBandHeight) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .centerLeft(bankBadge()) + .position(bankDetails(payment), 58, 0, LayerAlign.CENTER_LEFT)) + .addParagraph(paragraph -> paragraph + .text(payment.instruction()) + .textStyle(SMALL_ITALIC) + .lineSpacing(1.30) + .margin(DocumentInsets.top(4))); + } + + private static DocumentNode bankBadge() { + return new ShapeContainerBuilder() + .name("BankBadge") + .circle(38) + .fillColor(EMPHASIS_FILL) + .center(ConsultingIcons.icon(ConsultingIcons.BANK, 19.5)) + .build(); + } + + private static DocumentNode bankDetails(InvoicePaymentBlock payment) { + SectionBuilder details = new SectionBuilder().name("BankDetails").spacing(0); + double width = PAYMENT_WIDTH - 61; + for (InvoicePaymentBlock.Field field : payment.fields()) { + details.addContainer(container -> container + .name("BankField") + .rectangle(width, 15) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .centerLeft(ConsultingMasthead.paragraph(field.label(), SMALL_BOLD)) + .position(ConsultingMasthead.paragraph(field.value(), SMALL), + 76, 0, LayerAlign.CENTER_LEFT)); + } + return details.build(); + } + + /** + * The notes column: the paragraphs, with the query channels linked + * where they appear in the prose, and the due-by chip beneath them. + */ + static void renderNotes(SectionBuilder section, StructuredInvoiceData data) { + InvoiceNotesBlock notes = data.notes(); + section.accentLeft(HAIRLINE, 1.0).padding(0, 0, 0, 24).spacing(3); + ConsultingMasthead.sectionHeading(section, notes.heading()); + for (String paragraphText : notes.paragraphs()) { + section.addParagraph(paragraph -> { + paragraph.lineSpacing(1.30).margin(DocumentInsets.zero()); + renderNoteParagraph(paragraph, paragraphText, notes); + }); + } + renderDueNotice(section, data.payment()); + } + + /** + * Links the contact channels inside a note paragraph. The channels are + * matched by value rather than by markup, so the prose stays plain + * content: a paragraph that mentions neither is drawn as plain text. + */ + private static void renderNoteParagraph(ParagraphBuilder paragraph, + String text, + InvoiceNotesBlock notes) { + int emailIndex = notes.contactEmail().isEmpty() ? -1 : text.indexOf(notes.contactEmail()); + if (emailIndex < 0) { + paragraph.text(text).textStyle(BODY); + return; + } + String before = text.substring(0, emailIndex); + int afterEmail = emailIndex + notes.contactEmail().length(); + int phoneIndex = notes.contactPhone().isEmpty() + ? -1 : text.indexOf(notes.contactPhone(), afterEmail); + if (phoneIndex < 0) { + String after = text.substring(afterEmail); + paragraph.rich(rich -> rich + .style(before, BODY) + .with(notes.contactEmail(), BODY_LINK, + link("mailto:" + notes.contactEmail())) + .style(after, BODY)); + return; + } + String between = text.substring(afterEmail, phoneIndex); + String after = text.substring(phoneIndex + notes.contactPhone().length()); + paragraph.rich(rich -> rich + .style(before, BODY) + .with(notes.contactEmail(), BODY_LINK, link("mailto:" + notes.contactEmail())) + .style(between, BODY) + .with(nonBreakingPhone(notes.contactPhone()), BODY, + link(telUri(notes.contactPhone()))) + .style(after, BODY)); + } + + /** The due-by chip: a calendar badge and the notice, on the quiet fill. */ + private static void renderDueNotice(SectionBuilder section, InvoicePaymentBlock payment) { + double width = NOTES_WIDTH - 24; + section.addContainer(container -> container + .name("PaymentTerms") + .roundedRect(width, 34, 4) + .fillColor(EMPHASIS_FILL) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .position(calendarBadge(), 8, 0, LayerAlign.CENTER_LEFT) + .position(dueNotice(payment), 42, 0, LayerAlign.CENTER_LEFT)); + } + + private static DocumentNode calendarBadge() { + return new ShapeContainerBuilder() + .name("CalendarBadge") + .circle(23) + .stroke(DocumentStroke.of(ACCENT_PRIMARY, 0.9)) + .center(ConsultingIcons.icon(ConsultingIcons.CALENDAR, 12.5)) + .build(); + } + + private static DocumentNode dueNotice(InvoicePaymentBlock payment) { + String notice = payment.dueNotice(); + String emphasis = payment.dueNoticeEmphasis(); + ParagraphBuilder paragraph = new ParagraphBuilder() + .name("DueNotice") + .lineSpacing(1.1) + .margin(DocumentInsets.zero()); + int index = emphasis.isEmpty() ? -1 : notice.indexOf(emphasis); + if (index < 0) { + return paragraph.text(notice).textStyle(NOTICE_BOLD).build(); + } + String before = notice.substring(0, index); + String after = notice.substring(index + emphasis.length()); + return paragraph.rich(rich -> rich + .style(before, NOTICE_BOLD) + .style(emphasis, NOTICE_ACCENT) + .style(after, NOTICE_BOLD)) + .build(); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingIcons.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingIcons.java new file mode 100644 index 000000000..d8e4d09da --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingIcons.java @@ -0,0 +1,70 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.dsl.ImageBuilder; +import com.demcha.compose.document.image.DocumentImageData; +import com.demcha.compose.document.node.DocumentNode; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Classpath loader for the Consulting Invoice icon set — the channel marks + * beside the contact lines, the bank badge, and the calendar of the + * due-by notice. + * + *

    These are template chrome, not content: they ship inside the templates + * artifact under {@code templates/invoice/consulting/icons/} and are named + * by the preset, never by the data. Loaded bytes are cached per name, so a + * render reads each icon file once per JVM.

    + */ +final class ConsultingIcons { + + static final String LOCATION = "location"; + static final String PHONE = "phone"; + static final String EMAIL = "email"; + static final String WEBSITE = "website"; + static final String BANK = "bank"; + static final String CALENDAR = "payment-calendar"; + + private static final String ICON_ROOT = "/templates/invoice/consulting/icons/"; + private static final Map CACHE = new ConcurrentHashMap<>(); + + private ConsultingIcons() { + } + + /** + * Builds a sized icon node. + * + * @param name the icon name + * @param size the box the icon is fitted into + * @return the icon node + */ + static DocumentNode icon(String name, double size) { + return new ImageBuilder() + .name("Icon-" + name) + .source(image(name)) + .fitToBounds(size, size) + .build(); + } + + private static DocumentImageData image(String name) { + return CACHE.computeIfAbsent(name, ConsultingIcons::read); + } + + private static DocumentImageData read(String name) { + String resourcePath = ICON_ROOT + name + ".png"; + try (InputStream input = ConsultingIcons.class.getResourceAsStream(resourcePath)) { + if (input == null) { + throw new IllegalStateException( + "Missing consulting invoice icon: " + resourcePath); + } + return DocumentImageData.fromBytes(input.readAllBytes()); + } catch (IOException e) { + throw new UncheckedIOException( + "Failed to read consulting invoice icon: " + resourcePath, e); + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoice.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoice.java new file mode 100644 index 000000000..b183950d2 --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingInvoice.java @@ -0,0 +1,193 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.api.PageBackgroundFill; +import com.demcha.compose.document.node.RowVerticalAlign; +import com.demcha.compose.document.output.DocumentHeaderFooter; +import com.demcha.compose.document.output.DocumentHeaderFooterZone; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.data.invoice.InvoiceContactBlock; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceDocumentSpec; + +import java.util.List; +import java.util.Objects; + +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.CONTENT_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.FOOTER_BAND_RATIO; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.FOOTER_FILL; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.FOOTER_TEXT_SIZE; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.FOOTER_ZONE_HEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.HAIRLINE; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.HEADER_GAP; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.HEADER_LEFT_WEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.HEADER_RIGHT_WEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.LOWER_GAP; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.LOWER_LEFT_WEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.MUTED; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.PAGE; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.PAGE_BACKGROUND; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.PAGE_MARGIN; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.PARTIES_LEFT_WEIGHT; + +/** + * Consulting Invoice — the professional-services invoice preset: a + * corporate masthead over priced service lines, with the bank details and + * the closing notes side by side beneath them. + * + *

    The masthead pairs the sender's brand lockup and contact channels with + * the document title and its metadata; the body bills a recipient, states + * what the invoice covers, and prices the work line by line with a service + * period and a unit against each line; the totals stack closes with an + * emphasized total band. Long invoices flow: the line-items table repeats + * its header on the next page, and the totals stack stays whole.

    + * + *

    The preset owns its session geometry — A4, the margin published as + * {@link #RECOMMENDED_MARGIN}, the near-white page fill and the quiet + * footer band — and draws the legal line and page numbers as footer chrome + * rather than flow content, so they repeat on every page. The legal line is + * composed from the supplier's registered name and registration, so those + * are stated once. A session margin set by the caller is overwritten.

    + * + *

    The preset draws in {@code FontName.POPPINS} and consumes the + * structured invoice model ({@link StructuredInvoiceDocumentSpec}): its + * headings, labels and column titles are content, so the same composition + * prints an invoice in another business's wording without a fork. The + * brand logo arrives through the data as an image the caller owns; a + * document without one falls back to the wordmark lockup. The contact + * marks, the bank badge and the calendar are template chrome and ship + * inside the artifact.

    + */ +public final class ConsultingInvoice { + + /** + * Stable template identifier. + */ + public static final String ID = "invoice-consulting"; + + /** + * Human-readable display name. + */ + public static final String DISPLAY_NAME = "Consulting Invoice"; + + /** + * The session margin (in points) the preset sets. It is published so a + * caller can measure against the same frame; the preset applies it + * itself inside {@code compose}, together with the page size and the + * page fills, so callers leave the session unconfigured. + */ + public static final double RECOMMENDED_MARGIN = ConsultingStyles.PAGE_MARGIN; + + private ConsultingInvoice() { + } + + /** + * Builds the preset. + * + * @return ready-to-use template + */ + public static DocumentTemplate create() { + return new Template(); + } + + private record Template() implements DocumentTemplate { + + @Override + public String id() { + return ID; + } + + @Override + public String displayName() { + return DISPLAY_NAME; + } + + @Override + public void compose(DocumentSession document, StructuredInvoiceDocumentSpec spec) { + Objects.requireNonNull(document, "document"); + StructuredInvoiceData data = Objects.requireNonNull(spec, "spec").invoice(); + + renderChrome(document, data.supplier()); + + document.pageFlow(page -> page + .name("ConsultingInvoice") + .spacing(0) + .addRow("Masthead", row -> row + .gap(HEADER_GAP) + .weights(HEADER_LEFT_WEIGHT, HEADER_RIGHT_WEIGHT) + .verticalAlign(RowVerticalAlign.TOP) + .addSection("SupplierHeader", + section -> ConsultingMasthead.renderSupplier(section, data)) + .addSection("InvoiceHeader", + section -> ConsultingMasthead.renderInvoiceHeader(section, data))) + .addSpacer(spacer -> spacer.height(16)) + .addRow("PartiesAndSummary", row -> row + .gap(35) + .weights(PARTIES_LEFT_WEIGHT, 1.0 - PARTIES_LEFT_WEIGHT) + .verticalAlign(RowVerticalAlign.TOP) + .addSection("BilledTo", + section -> ConsultingBody.renderBilledTo(section, data)) + .addSection("InvoiceSummary", + section -> ConsultingBody.renderSummary(section, data))) + .addSpacer(spacer -> spacer.height(10)) + .addTable(table -> ConsultingBody.renderServiceLines(table, data)) + .addSection("Totals", section -> ConsultingBody.renderTotals(section, data)) + .addLine(line -> line + .horizontal(CONTENT_WIDTH) + .thickness(0.8) + .color(HAIRLINE) + .margin(DocumentInsets.symmetric(5, 0))) + .addRow("PaymentAndNotes", row -> row + .gap(LOWER_GAP) + .weights(LOWER_LEFT_WEIGHT, 1.0 - LOWER_LEFT_WEIGHT) + .verticalAlign(RowVerticalAlign.TOP) + .addSection("PaymentInformation", + section -> ConsultingClosing.renderPayment(section, data)) + .addSection("Notes", + section -> ConsultingClosing.renderNotes(section, data)))); + } + + /** + * The page frame and the band that closes every page: the near-white + * page fill and the quiet footer band are page-ratio background + * fills, and the legal line and page numbers are FOOTER-zone chrome + * drawn after layout, so both repeat on every page of a long + * invoice. + */ + private static void renderChrome(DocumentSession document, InvoiceContactBlock supplier) { + document.pageSize(PAGE) + .margin(DocumentInsets.of(PAGE_MARGIN)) + .pageBackgrounds(List.of( + PageBackgroundFill.fullPage(PAGE_BACKGROUND), + PageBackgroundFill.bottomBand(FOOTER_BAND_RATIO, FOOTER_FILL))) + .footer(DocumentHeaderFooter.builder() + .zone(DocumentHeaderFooterZone.FOOTER) + .height((float) FOOTER_ZONE_HEIGHT) + .centerText(footerLine(supplier)) + .rightText("Page {page} / {pages}") + .fontSize((float) FOOTER_TEXT_SIZE) + .textColor(MUTED) + .showSeparator(false) + .build()); + } + + /** + * The legal line: the supplier's registered name and, when it is + * registered, its labelled registration number. A supplier without + * a registration prints its name alone rather than a name with a + * dangling separator. + */ + private static String footerLine(InvoiceContactBlock supplier) { + String registration = (supplier.registrationLabel() + " " + + supplier.registrationNumber()).trim(); + if (registration.isEmpty()) { + return supplier.legalName(); + } + if (supplier.legalName().isEmpty()) { + return registration; + } + return supplier.legalName() + " | " + registration; + } + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingMasthead.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingMasthead.java new file mode 100644 index 000000000..5699f990c --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingMasthead.java @@ -0,0 +1,221 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.dsl.ImageBuilder; +import com.demcha.compose.document.dsl.ParagraphBuilder; +import com.demcha.compose.document.dsl.SectionBuilder; +import com.demcha.compose.document.dsl.ShapeContainerBuilder; +import com.demcha.compose.document.node.DocumentNode; +import com.demcha.compose.document.node.LayerAlign; +import com.demcha.compose.document.node.TextAlign; +import com.demcha.compose.document.style.ClipPolicy; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentTextStyle; +import com.demcha.compose.document.templates.data.invoice.InvoiceBrand; +import com.demcha.compose.document.templates.data.invoice.InvoiceContactBlock; +import com.demcha.compose.document.templates.data.invoice.InvoiceMasthead; +import com.demcha.compose.document.templates.data.invoice.StructuredInvoiceData; + +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.ACCENT_PRIMARY; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BODY_ACCENT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BRAND_LOGO_BOX_HEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BRAND_MARK; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BRAND_NAME; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.BRAND_QUALIFIER; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.CONTACT_ROW_HEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.HAIRLINE; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.INVOICE_TITLE; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.INVOICE_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.METADATA_ROW_HEIGHT; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SECTION_HEADING; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL_BOLD; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SUPPLIER_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.link; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.telUri; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.tracked; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingText.websiteUri; + +/** + * The masthead of the Consulting Invoice: the sender's lockup and contact + * channels on the left, the document title and its metadata on the right. + * + *

    Both halves are shape containers with anchored children rather than + * rows, because a row is refused inside a row cell and the masthead itself + * is one row of the page flow.

    + */ +final class ConsultingMasthead { + + private ConsultingMasthead() { + } + + /** The sender's half: brand lockup, then one band per contact channel. */ + static void renderSupplier(SectionBuilder section, StructuredInvoiceData data) { + InvoiceBrand brand = data.brand(); + InvoiceContactBlock supplier = data.supplier(); + + section.spacing(2); + if (brand.hasLogo()) { + section.add(logoLockup(brand)); + } else { + renderTextLockup(section, brand); + } + // A channel the sender did not supply gets no band: an empty band + // would print a mark with nothing beside it, and an empty value has + // no address to link to. + String address = String.join("\n", supplier.addressLines()); + if (!address.isBlank()) { + contactBand(section, ConsultingIcons.LOCATION, 10.0, address, + CONTACT_ROW_HEIGHT + 5.0, null); + } + if (!supplier.phone().isBlank()) { + contactBand(section, ConsultingIcons.PHONE, 9.2, supplier.phone(), + CONTACT_ROW_HEIGHT, telUri(supplier.phone())); + } + if (!supplier.email().isBlank()) { + contactBand(section, ConsultingIcons.EMAIL, 9.2, supplier.email(), + CONTACT_ROW_HEIGHT, "mailto:" + supplier.email()); + } + if (!supplier.website().isBlank()) { + contactBand(section, ConsultingIcons.WEBSITE, 9.4, supplier.website(), + CONTACT_ROW_HEIGHT, websiteUri(supplier.website())); + } + } + + /** + * The logo in its box. Height-only sizing lets the engine derive the + * width from the image's own metadata, so a wider or narrower logo + * stays on the same baseline as the contact bands below it. + */ + private static DocumentNode logoLockup(InvoiceBrand brand) { + DocumentNode logo = new ImageBuilder() + .name("BrandLogo") + .source(brand.logo()) + .height(BRAND_LOGO_BOX_HEIGHT) + .build(); + return new ShapeContainerBuilder() + .name("BrandLogoBox") + .rectangle(SUPPLIER_WIDTH, BRAND_LOGO_BOX_HEIGHT) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .centerLeft(logo) + .build(); + } + + /** + * The wordmark-only lockup a document without a logo falls back to: the + * brand's initial as a mark, the name beside it, the qualifier tracked + * between rules, and the tagline. + */ + private static void renderTextLockup(SectionBuilder section, InvoiceBrand brand) { + String mark = brand.name().isBlank() ? "" : brand.name().substring(0, 1); + section.addParagraph(paragraph -> paragraph + .rich(rich -> rich + .style(mark, BRAND_MARK) + .space() + .style(brand.name(), BRAND_NAME)) + .lineSpacing(1.0) + .margin(DocumentInsets.zero())) + .addParagraph(paragraph -> paragraph + .text(brand.qualifier().isBlank() + ? "" : "— " + tracked(brand.qualifier()) + " —") + .textStyle(BRAND_QUALIFIER) + .align(TextAlign.CENTER) + .margin(DocumentInsets.zero())) + .addParagraph(paragraph -> paragraph + .text(brand.tagline()) + .textStyle(BODY_ACCENT) + .align(TextAlign.CENTER) + .margin(DocumentInsets.symmetric(5, 0))); + } + + /** One contact line: the channel mark, and the value anchored beside it. */ + private static void contactBand(SectionBuilder section, + String iconName, + double iconSize, + String text, + double height, + String linkUri) { + DocumentNode contactText = linkUri == null + ? paragraph(text, SMALL) + : linkedParagraph(text, SMALL, linkUri); + section.addContainer(container -> container + .name("ContactBand") + .rectangle(SUPPLIER_WIDTH, height) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .centerLeft(ConsultingIcons.icon(iconName, iconSize)) + .position(contactText, 23, 0, LayerAlign.CENTER_LEFT)); + } + + /** The document half: the tracked title, then one band per metadata row. */ + static void renderInvoiceHeader(SectionBuilder section, StructuredInvoiceData data) { + InvoiceMasthead masthead = data.masthead(); + section.accentLeft(HAIRLINE, 1.1) + .padding(0, 0, 0, 24) + .spacing(1) + .addParagraph(paragraph -> paragraph + .text(tracked(masthead.title())) + .textStyle(INVOICE_TITLE) + .margin(DocumentInsets.bottom(8))); + for (InvoiceMasthead.Entry entry : masthead.entries()) { + metadataBand(section, entry); + } + } + + /** One metadata row: the label at the left, the value at the 48% mark. */ + private static void metadataBand(SectionBuilder section, InvoiceMasthead.Entry entry) { + double width = INVOICE_WIDTH - 24; + section.addContainer(container -> container + .name("MetadataBand") + .rectangle(width, METADATA_ROW_HEIGHT) + .clipPolicy(ClipPolicy.OVERFLOW_VISIBLE) + .centerLeft(paragraph(entry.label(), SMALL_BOLD)) + .position(paragraph(entry.value(), entry.emphasized() ? BODY_ACCENT : BODY), + width * 0.48, + 0, + LayerAlign.CENTER_LEFT)); + } + + /** A plain left-aligned paragraph node on the shared line spacing. */ + static DocumentNode paragraph(String text, DocumentTextStyle style) { + return new ParagraphBuilder() + .text(text) + .textStyle(style) + .align(TextAlign.LEFT) + .lineSpacing(1.15) + .margin(DocumentInsets.zero()) + .build(); + } + + private static DocumentNode linkedParagraph(String text, DocumentTextStyle style, String uri) { + return new ParagraphBuilder() + .text(text) + .textStyle(style) + .align(TextAlign.LEFT) + .link(link(uri)) + .lineSpacing(1.15) + .margin(DocumentInsets.zero()) + .build(); + } + + /** + * The heading every lower region opens with: tracked capitals over a + * short accent rule. + */ + static void sectionHeading(SectionBuilder section, String heading) { + if (heading.isBlank()) { + // No heading, no rule: an orphan rule reads as a divider. + return; + } + section.addParagraph(paragraph -> paragraph + .text(tracked(heading)) + .textStyle(SECTION_HEADING) + .lineSpacing(1.0) + .margin(DocumentInsets.zero())) + .addLine(line -> line + .horizontal(30) + .thickness(1.2) + .color(ACCENT_PRIMARY) + .margin(DocumentInsets.symmetric(4, 0))); + } + +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingStyles.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingStyles.java new file mode 100644 index 000000000..722332b7d --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingStyles.java @@ -0,0 +1,149 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.style.DocumentTextDecoration; +import com.demcha.compose.document.style.DocumentTextStyle; +import com.demcha.compose.document.table.DocumentTableStyle; +import com.demcha.compose.document.table.DocumentTableTextAnchor; +import com.demcha.compose.font.FontName; + +/** + * The Consulting Invoice look: page geometry, the colour roles, the Poppins + * type scale, and the derived widths every region measures against. + * + *

    Preset-local rather than a {@code BrandTheme}: every value below was + * measured against the ported template's reference render, and the type + * scale derives from a single {@link #BODY_SIZE} step that no other family + * shares. A theme slot would add indirection without a second consumer.

    + */ +final class ConsultingStyles { + + private ConsultingStyles() { + } + + // --- page --------------------------------------------------------------- + static final DocumentPageSize PAGE = DocumentPageSize.A4; + static final double PAGE_MARGIN = 30.5; + /** The denominator of every derived width below. */ + static final double CONTENT_WIDTH = PAGE.width() - 2.0 * PAGE_MARGIN; + + // --- band splits, measured from the reference --------------------------- + static final double HEADER_LEFT_WEIGHT = 0.51; + static final double HEADER_RIGHT_WEIGHT = 1.0 - HEADER_LEFT_WEIGHT; + static final double HEADER_GAP = 25.0; + static final double SUPPLIER_WIDTH = (CONTENT_WIDTH - HEADER_GAP) * HEADER_LEFT_WEIGHT; + static final double INVOICE_WIDTH = (CONTENT_WIDTH - HEADER_GAP) * HEADER_RIGHT_WEIGHT; + static final double PARTIES_LEFT_WEIGHT = 0.55; + static final double LOWER_LEFT_WEIGHT = 0.54; + static final double LOWER_GAP = 22.0; + static final double PAYMENT_WIDTH = (CONTENT_WIDTH - LOWER_GAP) * LOWER_LEFT_WEIGHT; + static final double NOTES_WIDTH = (CONTENT_WIDTH - LOWER_GAP) * (1.0 - LOWER_LEFT_WEIGHT); + static final double TOTALS_WIDTH = CONTENT_WIDTH * 0.42; + + /** #, description, service period, qty, unit price, amount. */ + static final double[] TABLE_RATIOS = {0.050, 0.341, 0.218, 0.110, 0.154, 0.127}; + + static final double TABLE_CELL_HORIZONTAL_PADDING = 5.0; + static final double DESCRIPTION_CONTENT_WIDTH = + CONTENT_WIDTH * TABLE_RATIOS[1] - 2.0 * TABLE_CELL_HORIZONTAL_PADDING; + + // --- independent dimensions --------------------------------------------- + static final double CONTACT_ROW_HEIGHT = 13.0; + static final double METADATA_ROW_HEIGHT = 18.0; + static final double FOOTER_BAND_RATIO = 0.039; + static final double FOOTER_ZONE_HEIGHT = 22.0; + static final double FOOTER_TEXT_SIZE = 7.0; + static final double BRAND_LOGO_BOX_HEIGHT = 64.0; + static final double TOTAL_LABEL_LEFT_INSET = 13.0; + static final double TOTAL_AMOUNT_RIGHT_INSET = 10.0; + + // --- type scale, all derived from one step ------------------------------ + static final double BODY_SIZE = 7.6; + static final double SMALL_SIZE = BODY_SIZE * 0.90; + static final double SECTION_SIZE = BODY_SIZE * 1.15; + static final double TITLE_SIZE = BODY_SIZE * 3.10; + static final double TOTAL_SIZE = BODY_SIZE * 1.80; + + // --- colour roles: named for the job, not the hue ----------------------- + static final DocumentColor PAGE_BACKGROUND = DocumentColor.rgb(254, 254, 254); + static final DocumentColor ACCENT_PRIMARY = DocumentColor.rgb(7, 86, 86); + static final DocumentColor INK = DocumentColor.rgb(35, 43, 54); + static final DocumentColor MUTED = DocumentColor.rgb(83, 91, 100); + static final DocumentColor ROW_ALT = DocumentColor.rgb(248, 248, 248); + static final DocumentColor EMPHASIS_FILL = DocumentColor.rgb(237, 246, 245); + static final DocumentColor FOOTER_FILL = DocumentColor.rgb(238, 246, 246); + static final DocumentColor HAIRLINE = DocumentColor.rgb(225, 229, 229); + + static final FontName TEXT_FONT = FontName.POPPINS; + + // --- text roles ---------------------------------------------------------- + static final DocumentTextStyle BODY = style(BODY_SIZE, DocumentTextDecoration.DEFAULT, INK); + static final DocumentTextStyle BODY_BOLD = style(BODY_SIZE, DocumentTextDecoration.BOLD, INK); + static final DocumentTextStyle BODY_ACCENT = + style(BODY_SIZE, DocumentTextDecoration.BOLD, ACCENT_PRIMARY); + static final DocumentTextStyle BODY_LINK = + style(BODY_SIZE, DocumentTextDecoration.DEFAULT, ACCENT_PRIMARY); + static final DocumentTextStyle SMALL = style(SMALL_SIZE, DocumentTextDecoration.DEFAULT, INK); + static final DocumentTextStyle SMALL_BOLD = style(SMALL_SIZE, DocumentTextDecoration.BOLD, INK); + static final DocumentTextStyle SMALL_ITALIC = + style(SMALL_SIZE, DocumentTextDecoration.ITALIC, INK); + static final DocumentTextStyle NOTICE_BOLD = + style(BODY_SIZE * 0.76, DocumentTextDecoration.BOLD, INK); + static final DocumentTextStyle NOTICE_ACCENT = + style(BODY_SIZE * 0.76, DocumentTextDecoration.BOLD, ACCENT_PRIMARY); + static final DocumentTextStyle SECTION_HEADING = + style(SECTION_SIZE, DocumentTextDecoration.BOLD, ACCENT_PRIMARY); + static final DocumentTextStyle INVOICE_TITLE = + style(TITLE_SIZE, DocumentTextDecoration.BOLD, ACCENT_PRIMARY); + static final DocumentTextStyle BRAND_NAME = + style(BODY_SIZE * 2.45, DocumentTextDecoration.BOLD, INK); + static final DocumentTextStyle BRAND_MARK = + style(BODY_SIZE * 3.25, DocumentTextDecoration.BOLD, ACCENT_PRIMARY); + static final DocumentTextStyle BRAND_QUALIFIER = + style(BODY_SIZE * 1.20, DocumentTextDecoration.DEFAULT, INK); + static final DocumentTextStyle TABLE_HEADER = + style(SMALL_SIZE, DocumentTextDecoration.BOLD, DocumentColor.WHITE); + static final DocumentTextStyle TOTAL_AMOUNT = + style(TOTAL_SIZE, DocumentTextDecoration.BOLD, ACCENT_PRIMARY); + + /** + * One line-item cell style: the zebra fill it sits on and where its value + * is anchored. + * + * @param fill the row fill + * @param anchor where the value sits in the cell + * @return the cell style + */ + static DocumentTableStyle tableStyle(DocumentColor fill, DocumentTableTextAnchor anchor) { + return DocumentTableStyle.builder() + .padding(DocumentInsets.symmetric(4.2, TABLE_CELL_HORIZONTAL_PADDING)) + .fillColor(fill) + .stroke(DocumentStroke.of(HAIRLINE, 0.55)) + .textStyle(BODY) + .textAnchor(anchor) + .lineSpacing(1.15) + .build(); + } + + /** + * Composes a text style in the preset's face. + * + * @param size type size in points + * @param decoration weight or slant + * @param color ink colour + * @return the composed style + */ + static DocumentTextStyle style(double size, + DocumentTextDecoration decoration, + DocumentColor color) { + return DocumentTextStyle.builder() + .fontName(TEXT_FONT) + .size(size) + .decoration(decoration) + .color(color) + .build(); + } +} diff --git a/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingText.java b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingText.java new file mode 100644 index 000000000..6e873e2ad --- /dev/null +++ b/templates/src/main/java/com/demcha/compose/document/templates/invoice/presets/ConsultingText.java @@ -0,0 +1,169 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.node.DocumentLinkOptions; + +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.NumberFormat; +import java.util.Locale; +import java.util.Objects; + +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.DESCRIPTION_CONTENT_WIDTH; +import static com.demcha.compose.document.templates.invoice.presets.ConsultingStyles.SMALL_SIZE; + +/** + * The text and number utilities the Consulting Invoice regions share: + * money and quantity formatting, link URIs, and the measurement behind the + * line-item title breaker. + */ +final class ConsultingText { + + /** + * The face the line-item title is measured in. + * + *

    The templates artifact does not carry it. The + * face ships in {@code graph-compose-fonts}, which this module does not + * depend on, so a caller that adds only the templates artifact measures + * in the platform's {@code SansSerif} instead — a different width, and + * one that differs between operating systems. That caller also renders + * the document in a substituted face, so the page is already not the + * designed one; what the fallback adds is that the description column's + * break lands differently per platform. Put the font artifact on the + * classpath to get the designed render.

    + */ + private static final Font DESCRIPTION_BOLD_FONT = loadDescriptionBoldFont(); + + private static final FontRenderContext FONT_RENDER_CONTEXT = + new FontRenderContext(null, true, true); + + private ConsultingText() { + } + + /** + * Width of the invisible breaker that pushes a line item's description + * onto its own line: what is left of the description column once the + * title has been set. + * + *

    A rich run cannot carry a line break — the engine strips a newline + * inside one — so the description column ends its title run with a + * zero-height rectangle wide enough to fill the line instead. Sizing + * that rectangle needs the rendered title width, which is measured here + * rather than laid out.

    + * + * @param title the line-item title + * @return the breaker width, never below one point + */ + static double titleBreakerWidth(String title) { + double titleWidth = DESCRIPTION_BOLD_FONT + .deriveFont((float) SMALL_SIZE) + .getStringBounds(Objects.requireNonNullElse(title, ""), FONT_RENDER_CONTEXT) + .getWidth(); + return Math.max(1.0, DESCRIPTION_CONTENT_WIDTH - titleWidth - 4.0); + } + + private static Font loadDescriptionBoldFont() { + try (InputStream stream = ConsultingText.class.getClassLoader() + .getResourceAsStream("fonts/google/poppins/Poppins-Bold.ttf")) { + if (stream != null) { + return Font.createFont(Font.TRUETYPE_FONT, stream); + } + } catch (Exception cause) { + // A present-but-unreadable font is worth saying out loud; a + // missing one is the documented fallback below. + System.getLogger(ConsultingText.class.getName()) + .log(System.Logger.Level.WARNING, + "Falling back to the platform face: the packaged Poppins Bold " + + "could not be read", + cause); + } + return new Font("SansSerif", Font.BOLD, 1); + } + + /** + * Spaces a value out into tracked capitals (the heading treatment). + * + * @param value the text, already in the case it is set in + * @return the tracked text + */ + static String tracked(String value) { + StringBuilder tracked = new StringBuilder(value.length() * 2); + for (int index = 0; index < value.length(); index++) { + if (index > 0) { + tracked.append(' '); + } + tracked.append(value.charAt(index)); + } + return tracked.toString(); + } + + /** + * Formats a quantity at two decimal places, without grouping. + * + * @param value the quantity + * @return the formatted quantity + */ + static String decimal(BigDecimal value) { + return value.setScale(2, RoundingMode.HALF_UP).toPlainString(); + } + + /** + * Formats an amount with thousands grouping and two decimal places. The + * currency itself is printed in the column header, not per figure. + * + * @param value the amount + * @return the formatted amount + */ + static String money(BigDecimal value) { + NumberFormat format = NumberFormat.getNumberInstance(Locale.ENGLISH); + format.setGroupingUsed(true); + format.setMinimumFractionDigits(2); + format.setMaximumFractionDigits(2); + return format.format(value); + } + + /** + * Wraps a URI as link options. + * + * @param uri the target + * @return the link options + */ + static DocumentLinkOptions link(String uri) { + return new DocumentLinkOptions(uri); + } + + /** + * Builds the {@code tel:} URI of a printed phone number. + * + * @param phone the printed number + * @return the dial URI + */ + static String telUri(String phone) { + return "tel:" + phone.replace(" ", ""); + } + + /** + * Builds the browsable URI of a printed website, adding the scheme when + * the printed form omits it. + * + * @param website the printed website + * @return the browsable URI + */ + static String websiteUri(String website) { + return website.startsWith("http://") || website.startsWith("https://") + ? website + : "https://" + website; + } + + /** + * Keeps a printed phone number on one line. + * + * @param phone the printed number + * @return the number with non-breaking spaces + */ + static String nonBreakingPhone(String phone) { + return phone.replace(' ', '\u00A0'); + } +} diff --git a/templates/src/main/resources/templates/invoice/consulting/icons/bank.png b/templates/src/main/resources/templates/invoice/consulting/icons/bank.png new file mode 100644 index 0000000000000000000000000000000000000000..0abf6a0a933067f9e02ba918dfabfc02ac243430 GIT binary patch literal 2769 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 literal 0 HcmV?d00001 diff --git a/templates/src/main/resources/templates/invoice/consulting/icons/location.png b/templates/src/main/resources/templates/invoice/consulting/icons/location.png new file mode 100644 index 0000000000000000000000000000000000000000..23be9cdad764cd4e6b1031e71107d3c099120a46 GIT binary patch literal 3495 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 GiTMvxT{yY` literal 0 HcmV?d00001 diff --git a/templates/src/main/resources/templates/invoice/consulting/icons/payment-calendar.png b/templates/src/main/resources/templates/invoice/consulting/icons/payment-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8d11a517eecbc10728f414bb0b660318cd002b GIT binary patch literal 2764 zcmZ`*2{@EnAAbq6kjB2XSdyJFwrLEeF*3%NWg?VquC>L@3?UI&G9pX1QdugpZ@Jf& zkbS$O#7K-mD8y7kk?!05?)UZF`+fI)p7Z|B|D5Olod5Z6zY}j`Wxg9O4F>>Vw*`?v z1~KycfbxO=c4JCE2(lhT@-YAiJp``D0Kk{;`)>f?0ulfg-2nh|696Rq?=;$C!41Bj zEX@fZg5PJ;rU(#V{zRt$5Z(V6oU?caIDrIO95aI~LZt*Wv|cB;;lU-vKr_ccPfDN{ z#)IYs0)RrI^fi!Z4V0dpHVUJwhtV}qLn1Lqq|QQB@n01D&U>ErzWC1y_(rH0sG$7c z69P~Bc?ASg{QUn}N32q%4>Uf@f^ftxWc=M->vN*!;&Bo7Mzd10Ch=XPzG5EY3LcMd z=Y@Evi@>NgS<%-|kTgrtPvc^Y{3!uA60NWI5*tBv6ilF1c|K@PF_mBCOU<~a4B3Gt zBDkCmNuE<1MSApl80J(rExpTsm>Rrma`)u$a3L%BeVdWq$cUSDaC4}=A|0Cer01kV zWU+>Nu$FFm@SObme#hN9n^L>prjbEEG?C6^5^=TA;#>g zq5Bs#$#g>?;d*B@pXs z!DFIKrY&otV>GW)l-op0qs^|*!Ko#kbW=@KHirIbQ%`6*i`>hsE+lVWJPjj5$*1r$ z+&I-+gn)1(a<8YoY3DuZ&wxy!MV+_L`@zB6^%$M#SUlI+In;}9F6WM`yw1#`oD`q< zEtNi$Vx=%VCb{K~XcMGXW{`3g(vbq5ZWlWRp?*h5@mKBOezyd^U<|1b9zu-v?IS9t z<>y|0!#!~~_n}T&+UDZ89#&KQ-H}w1DYkq)qYbfoRq<(%g)1!7s&?)h9$Kq!Fzb6> z%Sv$1?5Fj08%5|bK>ptO!a~mb4xSZkD33~kPN;-;_%G3PTvfN=<+=c+9eq?(K8rQ9 zpFbbQS(Pz()6o!cvwwj??3FO~q(d{wzWtt@joEJPFg8wk_g<0~du1CNj@7=>5VjxI z&Q5USjX@A4`NT6bIlZ4h*6SEZ^xc(ljNCo^0JIkrA*Mg)y3Pf4rU(ZwEKt2^!ZL+Y zj!~@+=N8*`gvuZmZU;6lRgboMP+-RO3wv^*^#*2*I9SqHEsBOG< ze0DY@ozVn$cM?A;c;M(aR&zCfY_}DVSEDR16w`kLRf1}KW8ghMV99YVJleOQI_%W? zOe2AL?LE;~oflv?43t5K@))WcW?DCVTuPtgr(3nI{53ivuUsRCJ84_r__OxWvdXeA zliTuG5oXa)bgwyVMmaL%(v7d#}Fn>Qx=}OxQ$#ED?HT`2Ky4 z$aKGk)+{48A}JQ%rl&My2VY&=m|d&(sOE=&-UWIp%h(jng+^Rd+T_y34SPqm432Vc z++0n+R2%DdaJk(F`@&*TaX2qFY0W04;r;xTpMl8fOkWsCBfZQQ{=l0aZ*AIURVC3qjxo`8 zHBcJ7mO@L-%s8X&I|msC+2UlAxB;{=n!X3Z7shM7t-sh-p}Dp?xl}1=+z&c-26RGB zw{5||rppc*&Q8pX39Ez3;Sa>+I4D}z7 ziHcEQ>5wmhAiD&4qw2qM@;5ACTvBcNzKu8n7||og!^87v+|4|NON#_IAEg*XwG01- zS4Xew%F;3++{Go&2gi18P0iU4@1v2vOLHgT!M%3G_zQm zU95-$ei|A`jf4nTN#rA~w)3vxVjc<#V=ZSLl#R{^jdse*e_>vi+4TI0+vGRKt8lwb zMg=7&>5@H+*MWD)kK9!NwK-oBg9czL>4d3TA{5p77E>tdsba2SdEjbY7G-9S$ qq6&yagrFV&r?>w7@$jP;e%9Lg*Dd`Xp^)znOTfa+ico=fkNO=8PuC>? literal 0 HcmV?d00001 diff --git a/templates/src/main/resources/templates/invoice/consulting/icons/phone.png b/templates/src/main/resources/templates/invoice/consulting/icons/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..3f55069b7bca44032e9cd4fbacf53a9ea0735b32 GIT binary patch literal 2992 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 literal 0 HcmV?d00001 diff --git a/templates/src/main/resources/templates/invoice/consulting/icons/website.png b/templates/src/main/resources/templates/invoice/consulting/icons/website.png new file mode 100644 index 0000000000000000000000000000000000000000..1605a03ab651fb31197b94f0b3fb1d1b50d448ca GIT binary patch literal 6072 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 literal 0 HcmV?d00001 diff --git a/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java b/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java index 11f747685..6a513dfdb 100644 --- a/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java +++ b/templates/src/test/java/com/demcha/compose/document/templates/data/invoice/StructuredInvoiceDataTest.java @@ -26,7 +26,7 @@ void emptyBuilderYieldsEmptyFormsForEveryComponent() { assertThat(data.brand().hasLogo()).isFalse(); assertThat(data.supplier().addressLines()).isEmpty(); assertThat(data.masthead().entries()).isEmpty(); - assertThat(data.billTo().lines()).isEmpty(); + assertThat(data.billTo().addressLines()).isEmpty(); assertThat(data.summary().intro()).isEmpty(); assertThat(data.serviceLines().lines()).isEmpty(); assertThat(data.serviceLines().columns().amount()).isEmpty(); @@ -34,7 +34,6 @@ void emptyBuilderYieldsEmptyFormsForEveryComponent() { assertThat(data.totals().totalAmount()).isEqualByComparingTo(BigDecimal.ZERO); assertThat(data.payment().fields()).isEmpty(); assertThat(data.notes().paragraphs()).isEmpty(); - assertThat(data.footer().legalName()).isEmpty(); assertThat(data.currencyCode()).isEmpty(); } @@ -55,16 +54,14 @@ void leafRecordsNormalizeNullStringsToEmpty() { assertThat(entry.label()).isEmpty(); assertThat(entry.value()).isEmpty(); - InvoiceRecipient recipient = new InvoiceRecipient(null, null, null, null, null); + InvoiceRecipient recipient = new InvoiceRecipient(null, null, null, null, null, null); assertThat(recipient.heading()).isEmpty(); assertThat(recipient.emailLabel()).isEmpty(); + assertThat(recipient.subline()).isEmpty(); InvoicePaymentBlock.Field field = new InvoicePaymentBlock.Field(null, null); assertThat(field.label()).isEmpty(); assertThat(field.value()).isEmpty(); - - InvoiceFooterLine footer = new InvoiceFooterLine(null, null); - assertThat(footer.registrationText()).isEmpty(); } @Test @@ -103,10 +100,10 @@ void everyCollectionIsFrozenAtConstruction() { List> frozen = List.of( supplier.addressLines(), new InvoiceMasthead("INVOICE", new ArrayList<>()).entries(), - new InvoiceRecipient("BILLED TO", "N", new ArrayList<>(), "", "").lines(), + new InvoiceRecipient("BILLED TO", "N", "", new ArrayList<>(), "", "").addressLines(), new InvoiceServiceLines(null, new ArrayList<>()).lines(), new InvoiceTotalsBlock(new ArrayList<>(), "TOTAL", BigDecimal.ONE).rows(), - new InvoicePaymentBlock("PAY", new ArrayList<>(), "", "").fields(), + new InvoicePaymentBlock("PAY", new ArrayList<>(), "", "", "").fields(), new InvoiceNotesBlock("NOTES", new ArrayList<>(), "", "").paragraphs()); for (List list : frozen) { assertThatThrownBy(() -> list.add(null)) @@ -122,7 +119,7 @@ void builderPassesEveryComponentThroughUnchanged() { InvoiceMasthead masthead = new InvoiceMasthead("INVOICE", List.of(new InvoiceMasthead.Entry("Due Date:", "25 June 2025", true))); InvoiceRecipient billTo = new InvoiceRecipient("BILLED TO", "Greenfield", - List.of("12 Innovation Drive"), "Email:", "ap@example.com"); + "Accounts Payable", List.of("12 Innovation Drive"), "Email:", "ap@example.com"); InvoiceSummaryBlock summary = new InvoiceSummaryBlock("INVOICE SUMMARY", "Services rendered.", "1–25 May"); InvoiceServiceLines serviceLines = new InvoiceServiceLines( @@ -136,12 +133,9 @@ void builderPassesEveryComponentThroughUnchanged() { "TOTAL DUE", new BigDecimal("15400")); InvoicePaymentBlock payment = new InvoicePaymentBlock("PAYMENT INFORMATION", List.of(new InvoicePaymentBlock.Field("BSB:", "123-456")), - "Include the invoice number.", "Payment is due within 30 days."); + "Include the invoice number.", "Payment is due within 30 days.", "30 days"); InvoiceNotesBlock notes = new InvoiceNotesBlock("NOTES", List.of("Thank you."), "accounts@example.com", "+61"); - InvoiceFooterLine footer = - new InvoiceFooterLine("Northpoint Pty Ltd", "ABN 12 345 678 901"); - StructuredInvoiceData data = StructuredInvoiceData.builder() .brand(brand) .supplier(supplier) @@ -152,7 +146,6 @@ void builderPassesEveryComponentThroughUnchanged() { .totals(totals) .payment(payment) .notes(notes) - .footer(footer) .currencyCode("AUD") .build(); @@ -165,7 +158,6 @@ void builderPassesEveryComponentThroughUnchanged() { assertThat(data.totals()).isSameAs(totals); assertThat(data.payment()).isSameAs(payment); assertThat(data.notes()).isSameAs(notes); - assertThat(data.footer()).isSameAs(footer); assertThat(data.currencyCode()).isEqualTo("AUD"); assertThat(data.masthead().entries().get(0).emphasized()).isTrue(); }