From bcf2ebd81d720b045b2cc2aae96395540ee58ef5 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Thu, 1 Oct 2026 15:52:05 +0100 Subject: [PATCH 1/2] test(qa): hold every template's DOCX export to its corpus baseline, line by line, in LibreOffice --- CHANGELOG.md | 12 + CONTRIBUTING.md | 10 + .../presets/CoverLetterDocxCorpus.java | 29 + .../templates/cv/presets/CvDocxCorpus.java | 45 + .../fidelity/DocxCorpusDocument.java | 29 + .../fidelity/DocxFidelityCorpusTest.java | 121 + .../fidelity/DocxFidelityGateTest.java | 170 + .../templates/fidelity/FidelityBaseline.java | 136 + .../fidelity/FidelityMeasurement.java | 147 + .../fidelity/LibreOfficeConverter.java | 77 + .../document/templates/fidelity/PdfLines.java | 125 + .../invoice/presets/InvoiceDocxCorpus.java | 45 + .../proposal/presets/ProposalDocxCorpus.java | 59 + .../receipt/presets/ReceiptDocxCorpus.java | 21 + .../rota/presets/RotaDocxCorpus.java | 17 + .../libreoffice-windows-lines.tsv | 3611 +++++++++++++++++ .../docx-fidelity/libreoffice-windows.tsv | 64 + 17 files changed, 4718 insertions(+) create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterDocxCorpus.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CvDocxCorpus.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxCorpusDocument.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/InvoiceDocxCorpus.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/proposal/presets/ProposalDocxCorpus.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/receipt/presets/ReceiptDocxCorpus.java create mode 100644 qa/src/test/java/com/demcha/compose/document/templates/rota/presets/RotaDocxCorpus.java create mode 100644 qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv create mode 100644 qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv diff --git a/CHANGELOG.md b/CHANGELOG.md index 435b3fbb0..eba95581f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1475,6 +1475,18 @@ follow semantic versioning; release dates are ISO 8601. ### Tests +- **The DOCX export is held to its corpus, line by line.** `DocxFidelityCorpusTest` exports + every template preset — 62 documents across CVs, cover letters, invoices, proposals, a + receipt and a rota — to DOCX, has LibreOffice set each one, and finds each of the page's + lines in it by its letters. Against the committed baseline a document fails when a line is + no longer found (set at other words or on another page), when a line drifts half a point + further from the page, or when it takes a page more. Counts per document would not do: a + sidebar CV that LibreOffice sets about 3pt off throughout lost an indented list without + its counts moving, and the line check names the two lines lost and the six set 12pt + higher. It runs on request, `-Dgraphcompose.docxFidelity=libreoffice`; a change that moves + documents nearer the page rewrites the baseline, whose diff shows which. `DocxFidelityGateTest` + holds the gate itself to lines set lower, a line lost and a page more. + - **One DOCX export's state stays in that export — now pinned.** The backend keeps what an export is in the middle of in its own fields, and starts each export from nothing. `DocxExportIsolationTest` holds that to the byte on deterministic output: a backend used diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1156937d5..71779a89e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -345,6 +345,16 @@ Choose the smallest tests that match the change: [CvV2VisualParityTest.java (CV)](qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CvV2VisualParityTest.java) [CoverLetterV2VisualParityTest.java (cover letter)](qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterV2VisualParityTest.java) and the [per-preset smoke tests](qa/src/test/java/com/demcha/compose/document/templates/cv/presets) +- For DOCX export (`render-docx`) changes: + [DocxFidelityCorpusTest.java](qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java). + It exports every template preset to DOCX, has LibreOffice set each one, and holds every + line of every document to the drift its baseline records: a line set further from the page, + a line set at other words, or a page more fails it. It needs LibreOffice and runs only when + asked for — install first, as for any standalone `qa` run: + `./mvnw -B -ntp test -f qa/pom.xml -Dtest=DocxFidelityCorpusTest -Dgraphcompose.docxFidelity=libreoffice`. + A change that moves documents nearer the page rewrites the baseline with + `-Dgraphcompose.docxFidelity.update=true`, and commits it with the change: its diff shows + which documents moved. A new preset joins the corpus in its family's `*DocxCorpus` class. If a change affects public docs, examples, or screenshots, update those assets in the same PR so the repository stays internally consistent. diff --git a/qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterDocxCorpus.java b/qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterDocxCorpus.java new file mode 100644 index 000000000..759b9e096 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterDocxCorpus.java @@ -0,0 +1,29 @@ +package com.demcha.compose.document.templates.coverletter.presets; + +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.coverletter.data.CoverLetterDocument; +import com.demcha.compose.document.templates.fidelity.DocxCorpusDocument; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +/** The cover-letter presets of the DOCX fidelity corpus, each on the canonical letter. */ +public final class CoverLetterDocxCorpus { + + private CoverLetterDocxCorpus() { + } + + public static List documents() { + List documents = new ArrayList<>(); + CoverLetterPresetFixtures.presets().forEach(arguments -> { + Object[] preset = arguments.get(); + @SuppressWarnings("unchecked") + Supplier> template = + (Supplier>) preset[2]; + documents.add(new DocxCorpusDocument("letter", (String) preset[0], (Double) preset[1], + session -> template.get().compose(session, CoverLetterPresetFixtures.canonicalLetter()))); + }); + return documents; + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CvDocxCorpus.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CvDocxCorpus.java new file mode 100644 index 000000000..10d3ebfa2 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CvDocxCorpus.java @@ -0,0 +1,45 @@ +package com.demcha.compose.document.templates.cv.presets; + +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.cv.data.CvDocument; +import com.demcha.compose.document.templates.fidelity.DocxCorpusDocument; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +/** The CV presets of the DOCX fidelity corpus, each on the fixture its own tests render. */ +public final class CvDocxCorpus { + + private CvDocxCorpus() { + } + + public static List documents() { + List documents = new ArrayList<>(); + CvPresetFixtures.presets().forEach(arguments -> { + Object[] preset = arguments.get(); + @SuppressWarnings("unchecked") + Supplier> template = (Supplier>) preset[2]; + documents.add(cv((String) preset[0], (Double) preset[1], template, CvPresetFixtures.canonicalDocument())); + }); + documents.add(cv("charcoal_gold", 0, CharcoalGold::create, CharcoalGoldFixtures.canonicalCv())); + documents.add(cv("navy_sidebar", 0, NavySidebar::create, NavySidebarFixtures.canonicalCv())); + documents.add(cv("slate_orange", -1, SlateOrange::create, SlateOrangeFixtures.canonicalCv())); + documents.add(cv("midnight_navy", -1, MidnightNavy::create, MidnightNavyFixtures.canonicalCv())); + documents.add(cv("orange_ops", -1, OrangeOps::create, OrangeOpsFixtures.canonicalCv())); + documents.add(cv("professional_sidebar", -1, ProfessionalSidebar::create, ProfessionalSidebarFixtures.canonicalCv())); + documents.add(cv("serif_headline", -1, SerifHeadline::create, SerifHeadlineFixtures.canonicalCv())); + documents.add(cv("teal_pulse", -1, TealPulse::create, TealPulseFixtures.canonicalCv())); + documents.add(cv("terracotta_rail", -1, TerracottaRail::create, TerracottaRailFixtures.canonicalCv())); + documents.add(cv("violet_grid", -1, VioletGrid::create, VioletGridFixtures.canonicalCv())); + return documents; + } + + private static DocxCorpusDocument cv(String name, double margin, + Supplier> template, CvDocument cv) { + return new DocxCorpusDocument("cv", name, margin, session -> { + OrangeOpsTestFont.register(session); + template.get().compose(session, cv); + }); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxCorpusDocument.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxCorpusDocument.java new file mode 100644 index 000000000..1f9ca92ee --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxCorpusDocument.java @@ -0,0 +1,29 @@ +package com.demcha.compose.document.templates.fidelity; + +import com.demcha.compose.document.api.DocumentSession; + +import java.util.Objects; +import java.util.function.Consumer; + +/** + * One document of the DOCX fidelity corpus: a template preset composed on its fixture. + * + * @param family the template family, such as {@code cv} or {@code invoice} + * @param name the preset, unique within its family + * @param margin the page margin on A4, in points, or a negative value for the session's own + * page and margins + * @param compose composes the document into a fresh session + */ +public record DocxCorpusDocument(String family, String name, double margin, Consumer compose) { + + public DocxCorpusDocument { + Objects.requireNonNull(family, "family"); + Objects.requireNonNull(name, "name"); + Objects.requireNonNull(compose, "compose"); + } + + /** The file stem the document's PDF and DOCX are written under. */ + public String stem() { + return family + "-" + name; + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java new file mode 100644 index 000000000..4fcd02651 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java @@ -0,0 +1,121 @@ +package com.demcha.compose.document.templates.fidelity; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.backend.semantic.docx.DocxSemanticBackend; +import com.demcha.compose.document.templates.coverletter.presets.CoverLetterDocxCorpus; +import com.demcha.compose.document.templates.cv.presets.CvDocxCorpus; +import com.demcha.compose.document.templates.invoice.presets.InvoiceDocxCorpus; +import com.demcha.compose.document.templates.proposal.presets.ProposalDocxCorpus; +import com.demcha.compose.document.templates.receipt.presets.ReceiptDocxCorpus; +import com.demcha.compose.document.templates.rota.presets.RotaDocxCorpus; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Every template preset's DOCX, set by an editor, stands no further from the engine's PDF than + * its baseline holds it. + * + *

The engine draws each corpus document to PDF and exports it to DOCX; LibreOffice converts + * the DOCX to PDF; each document is measured line by line against the page + * ({@link FidelityMeasurement}) and held to the baseline for this editor and operating system + * ({@link FidelityBaseline}). A change to the export that sets any document further from the + * page fails here, wherever the document is.

+ * + *

It runs only when asked for, with {@code -Dgraphcompose.docxFidelity=libreoffice}: it + * needs LibreOffice and takes a few minutes. Asked for and without LibreOffice, it fails rather + * than passing unrun. {@code -Dgraphcompose.docxFidelity.update=true} writes what it measured as + * the baseline, for a change that moves documents nearer the page; the baseline's diff then + * shows the reviewer which documents moved. The documents, their PDFs and the report are left + * in {@code target/docx-fidelity}.

+ */ +class DocxFidelityCorpusTest { + + private static final String EDITOR = "libreoffice"; + + @Test + void everyDocumentStandsNoFurtherFromThePageThanItsBaseline() throws Exception { + Assumptions.assumeTrue(EDITOR.equals(System.getProperty("graphcompose.docxFidelity")), + "NOT_RUN: the DOCX fidelity corpus runs with -Dgraphcompose.docxFidelity=libreoffice"); + LibreOfficeConverter converter = LibreOfficeConverter.find().orElseThrow(() -> new IllegalStateException( + "the DOCX fidelity corpus was asked for, and no LibreOffice was found: set -Dgraphcompose.soffice")); + + Path work = Path.of("target", "docx-fidelity").toAbsolutePath(); + Path engine = Files.createDirectories(work.resolve("engine")); + Path editor = work.resolve(EDITOR); + List corpus = corpus(); + List docx = new ArrayList<>(); + for (DocxCorpusDocument document : corpus) { + docx.add(export(document, engine)); + } + converter.convert(docx, editor, work); + + List measurements = new ArrayList<>(); + for (DocxCorpusDocument document : corpus) { + Path converted = editor.resolve(document.stem() + ".pdf"); + assertThat(converted).as("LibreOffice's PDF of %s", document.stem()).exists(); + measurements.add(FidelityMeasurement.of(document.stem(), + engine.resolve(document.stem() + ".pdf"), converted)); + } + String note = EDITOR + " on " + LibreOfficeConverter.platform(); + FidelityBaseline.write(work.resolve("measured-" + EDITOR + ".tsv"), note, measurements); + + Path baseline = Path.of("src", "test", "resources", "docx-fidelity", + EDITOR + "-" + LibreOfficeConverter.platform() + ".tsv"); + if (Boolean.getBoolean("graphcompose.docxFidelity.update")) { + FidelityBaseline.write(baseline, note, measurements); + return; + } + assertThat(FidelityBaseline.read(baseline).regressions(measurements)) + .as("documents set further from the page than %s holds them (measured: %s)", + baseline, work.resolve("measured-" + EDITOR + ".tsv")) + .isEmpty(); + } + + @Test + void everyCorpusDocumentHasAStemOfItsOwn() { + Set stems = new HashSet<>(); + for (DocxCorpusDocument document : corpus()) { + assertThat(stems.add(document.stem())).as("%s named once", document.stem()).isTrue(); + } + assertThat(stems).hasSizeGreaterThanOrEqualTo(60); + } + + /** Every family's presets. */ + static List corpus() { + List corpus = new ArrayList<>(); + corpus.addAll(CvDocxCorpus.documents()); + corpus.addAll(CoverLetterDocxCorpus.documents()); + corpus.addAll(InvoiceDocxCorpus.documents()); + corpus.addAll(ProposalDocxCorpus.documents()); + corpus.addAll(ReceiptDocxCorpus.documents()); + corpus.addAll(RotaDocxCorpus.documents()); + return corpus; + } + + /** Writes a document's PDF and its DOCX; returns the DOCX. */ + private static Path export(DocxCorpusDocument document, Path dir) throws Exception { + var builder = GraphCompose.document(); + if (document.margin() >= 0) { + float margin = (float) document.margin(); + builder.pageSize(DocumentPageSize.A4).margin(margin, margin, margin, margin); + } + try (DocumentSession session = builder.create()) { + document.compose().accept(session); + Files.write(dir.resolve(document.stem() + ".pdf"), session.toPdfBytes()); + Path docx = dir.resolve(document.stem() + ".docx"); + Files.write(docx, session.export(DocxSemanticBackend.builder().deterministic(true).build())); + return docx; + } + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java new file mode 100644 index 000000000..1bb05c968 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java @@ -0,0 +1,170 @@ +package com.demcha.compose.document.templates.fidelity; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.dsl.PageFlowBuilder; +import com.demcha.compose.document.style.DocumentInsets; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.within; + +/** + * The fidelity gate catches what it is there to catch: lines set lower, a line lost, a page + * more — measured on PDFs drawn to differ in just that way, and held line by line against a + * baseline — and lets a document that moved nearer the page through. + */ +class DocxFidelityGateTest { + + private static final List LINES = List.of( + "The first paragraph of the probe document.", + "A second paragraph, set under the first.", + "A third paragraph closes the page."); + + @TempDir + Path dir; + + @Test + void aDocumentMeasuredAgainstItselfDoesNotDrift() throws Exception { + Path page = pdf("page", flow -> LINES.forEach(flow::addParagraph)); + + FidelityMeasurement measured = FidelityMeasurement.of("probe", page, page); + + assertThat(measured.lines()).isEqualTo(3); + assertThat(measured.matched()).isEqualTo(3); + assertThat(measured.median()).isZero(); + assertThat(measured.over2()).isZero(); + } + + @Test + void linesSetLowerDriftByAsMuch() throws Exception { + Path page = pdf("page", flow -> LINES.forEach(flow::addParagraph)); + Path lower = pdf("lower", flow -> { + flow.addSpacer(spacer -> spacer.height(6)); + LINES.forEach(flow::addParagraph); + }); + + FidelityMeasurement measured = FidelityMeasurement.of("probe", page, lower); + + assertThat(measured.matched()).isEqualTo(3); + assertThat(measured.median()).isCloseTo(6, within(0.5)); + assertThat(measured.over2()).isEqualTo(3); + } + + @Test + void aLostLineIsNotFound() throws Exception { + Path page = pdf("page", flow -> LINES.forEach(flow::addParagraph)); + Path lost = pdf("lost", flow -> LINES.subList(0, 2).forEach(flow::addParagraph)); + + assertThat(FidelityMeasurement.of("probe", page, lost).matched()).isEqualTo(2); + } + + @Test + void aPageMoreIsCounted() throws Exception { + Path page = pdf("page", flow -> LINES.forEach(flow::addParagraph)); + Path longer = pdf("longer", flow -> { + LINES.forEach(flow::addParagraph); + flow.addPageBreak(pageBreak -> { }); + flow.addParagraph("Spilled onto a page of its own."); + }); + + FidelityMeasurement measured = FidelityMeasurement.of("probe", page, longer); + + assertThat(measured.enginePages()).isEqualTo(1); + assertThat(measured.editorPages()).isEqualTo(2); + } + + @Test + void theBaselineFailsALineSetFurtherFromThePage() { + FidelityBaseline baseline = FidelityBaseline.of(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0.4), line(1, "bb", -2.8)))); + + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 1.0), line(1, "bb", -2.8))))) + .as("a line 0.6pt further").singleElement().asString().contains("1 lines further").contains("+1.00"); + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0.4), line(1, "bb", -3.4))))) + .as("a line already 2.8pt off, set 0.6pt further").singleElement().asString().contains("further"); + } + + @Test + void theBaselineFailsALineNoLongerFound() { + FidelityBaseline baseline = FidelityBaseline.of(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0.4), line(1, "bb", 2.8)))); + + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0.4))))) + .singleElement().asString().contains("1 lines no longer found").contains("\"bb\""); + } + + @Test + void theBaselineFailsAPageFurtherFromTheEnginesCountAndADocumentItDoesNotHold() { + FidelityBaseline baseline = FidelityBaseline.of(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0.4)))); + + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 2, line(1, "aa", 0.4))))) + .singleElement().asString().contains("2 pages"); + assertThat(baseline.regressions(List.of(doc("cv-other", 1, 1, line(1, "aa", 0.4))))) + .singleElement().asString().contains("not in the baseline"); + } + + @Test + void theBaselineLetsThroughALineWithinRoundingOrNearerThePage() { + FidelityBaseline baseline = FidelityBaseline.of(List.of(doc("cv-probe", 1, 2, line(1, "aa", 0.4), line(1, "bb", 2.8)))); + + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 2, line(1, "aa", 0.8), line(1, "bb", 3.2))))) + .as("within half a point").isEmpty(); + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0), line(1, "bb", 0.1), + line(1, "cc", 0.2))))).as("nearer the page, a page fewer and a line more found").isEmpty(); + } + + @Test + void aBaselineIsReadAsItWasWritten() throws Exception { + Path file = dir.resolve("baseline.tsv"); + List rows = List.of(doc("cv-a", 1, 1, line(1, "aa", 0.25)), + doc("cv-b", 2, 3, line(1, "aa", -1.5), line(2, "cc", 3))); + + FidelityBaseline.write(file, "probe", rows); + + assertThat(FidelityBaseline.read(file).regressions(rows)).isEmpty(); + assertThat(FidelityBaseline.read(file).regressions(List.of(doc("cv-b", 2, 3, line(1, "aa", -1.5))))) + .as("the line file read back with the document file").singleElement().asString().contains("no longer found"); + assertThat(Files.readAllLines(file)).first().isEqualTo("# probe"); + } + + @Test + void aMalformedBaselineRowIsRefusedByName() { + assertThatThrownBy(() -> FidelityMeasurement.parse("cv-a\t1\tone\t40\t39\t0.25\t0.5\t1", Map.of())) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("cv-a"); + } + + @SafeVarargs + private static FidelityMeasurement doc(String stem, int enginePages, int editorPages, + Map.Entry... lines) { + Map found = new LinkedHashMap<>(); + for (Map.Entry line : lines) { + found.put(line.getKey(), line.getValue()); + } + return new FidelityMeasurement(stem, enginePages, editorPages, lines.length, lines.length, 0, 0, 0, found); + } + + private static Map.Entry line(int page, String letters, double drift) { + return Map.entry(page + ":" + letters, new FidelityMeasurement.Found(page, letters, drift)); + } + + private Path pdf(String name, Consumer content) throws Exception { + Path file = dir.resolve(name + ".pdf"); + try (DocumentSession session = GraphCompose.document() + .pageSize(400, 300) + .margin(DocumentInsets.of(20)) + .create()) { + session.pageFlow(content::accept); + Files.write(file, session.toPdfBytes()); + } + return file; + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java new file mode 100644 index 000000000..bbfe2c712 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java @@ -0,0 +1,136 @@ +package com.demcha.compose.document.templates.fidelity; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * The measurements a DOCX export is held to: one per corpus document, and the drift of each of + * its lines the editor set where the page does, as last accepted. + * + *

A change may move the export nearer the page, never further. Against its baseline a + * document fails when the editor sets it on a page count further from the engine's, when a + * line the baseline found is no longer found — the editor breaks it at another word, or puts it + * on another page — or when a found line drifts {@value #LINE_SLACK}pt further from the page + * than it did. Line by line, because a document already set a few points off throughout hides a + * new defect in its counts. A document the baseline does not hold fails until the baseline is + * written with it.

+ * + *

The baseline is two files: {@code .tsv}, a row per document, and + * {@code -lines.tsv}, a row per found line, named by its page and a digest of its + * letters, with a few of them to read it by.

+ */ +final class FidelityBaseline { + + /** How much further a line may drift, in points: rounding, not room for a change to spend. */ + static final double LINE_SLACK = 0.5; + + /** How many of a document's failing lines a failure names. */ + private static final int NAMED = 4; + + private final Map rows; + + private FidelityBaseline(Map rows) { + this.rows = rows; + } + + static FidelityBaseline read(Path documents) throws IOException { + Map> lines = new LinkedHashMap<>(); + Path lineFile = linesOf(documents); + if (Files.exists(lineFile)) { + for (String row : Files.readAllLines(lineFile, StandardCharsets.UTF_8)) { + if (!row.isBlank() && !row.startsWith("#")) { + FidelityMeasurement.parseLine(row, lines); + } + } + } + Map rows = new LinkedHashMap<>(); + if (Files.exists(documents)) { + for (String row : Files.readAllLines(documents, StandardCharsets.UTF_8)) { + if (row.isBlank() || row.startsWith("#") || row.equals(FidelityMeasurement.HEADER)) { + continue; + } + String stem = row.substring(0, Math.max(0, row.indexOf('\t'))); + FidelityMeasurement measured = FidelityMeasurement.parse(row, lines.getOrDefault(stem, Map.of())); + rows.put(measured.stem(), measured); + } + } + return new FidelityBaseline(rows); + } + + static FidelityBaseline of(Collection measurements) { + Map rows = new LinkedHashMap<>(); + measurements.forEach(row -> rows.put(row.stem(), row)); + return new FidelityBaseline(rows); + } + + /** Writes the measurements as a baseline, under a note of where they were taken. */ + static void write(Path documents, String note, Collection measurements) throws IOException { + List sorted = measurements.stream() + .sorted(Comparator.comparing(FidelityMeasurement::stem)).toList(); + List rows = new ArrayList<>(List.of("# " + note, FidelityMeasurement.HEADER)); + List lines = new ArrayList<>(List.of("# " + note + " — document, line, drift below the page (pt), letters")); + for (FidelityMeasurement measured : sorted) { + rows.add(measured.row()); + lines.addAll(measured.lineRows()); + } + Files.createDirectories(documents.toAbsolutePath().getParent()); + Files.write(documents, rows, StandardCharsets.UTF_8); + Files.write(linesOf(documents), lines, StandardCharsets.UTF_8); + } + + /** What each measurement does worse than its baseline; empty when none does. */ + List regressions(Collection measurements) { + List found = new ArrayList<>(); + for (FidelityMeasurement now : measurements) { + FidelityMeasurement was = rows.get(now.stem()); + if (was == null) { + found.add(now.stem() + ": not in the baseline; measured " + now.row()); + continue; + } + int pagesOffWas = Math.abs(was.editorPages() - was.enginePages()); + int pagesOffNow = Math.abs(now.editorPages() - now.enginePages()); + if (pagesOffNow > pagesOffWas) { + found.add(now.stem() + ": set on " + now.editorPages() + " pages against the page's " + + now.enginePages() + " (baseline " + was.editorPages() + ")"); + } + List lost = new ArrayList<>(); + List further = new ArrayList<>(); + was.found().forEach((id, line) -> { + FidelityMeasurement.Found there = now.found().get(id); + if (there == null) { + lost.add("\"" + line.preview() + "\""); + } else if (Math.abs(there.drift()) > Math.abs(line.drift()) + LINE_SLACK) { + further.add(String.format(Locale.ROOT, "\"%s\" %+.2f -> %+.2fpt", + line.preview(), line.drift(), there.drift())); + } + }); + if (!lost.isEmpty()) { + found.add(now.stem() + ": " + lost.size() + " lines no longer found, set at other words or " + + "on another page: " + named(lost)); + } + if (!further.isEmpty()) { + found.add(now.stem() + ": " + further.size() + " lines further from the page: " + named(further)); + } + } + return found; + } + + private static String named(List lines) { + return String.join(", ", lines.subList(0, Math.min(NAMED, lines.size()))) + + (lines.size() > NAMED ? ", and " + (lines.size() - NAMED) + " more" : ""); + } + + private static Path linesOf(Path documents) { + String name = documents.getFileName().toString(); + return documents.resolveSibling(name.replaceFirst("\\.tsv$", "") + "-lines.tsv"); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java new file mode 100644 index 000000000..f76a9acec --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java @@ -0,0 +1,147 @@ +package com.demcha.compose.document.templates.fidelity; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HexFormat; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * How far an editor's rendering of a document's DOCX stands from the engine's PDF of it. + * + *

Each line of the page is looked for, by its letters, on the same page of the editor's + * PDF; a line the editor breaks at another word, or puts on another page, is not found. A found + * line's drift is how far its baseline stands below the page's, above when negative.

+ * + * @param stem the document + * @param enginePages the pages the engine draws + * @param editorPages the pages the editor sets the DOCX on + * @param lines the page's lines + * @param matched the page's lines found in the editor's + * @param median the median of the found lines' drift either way, in points + * @param p90 the drift either way nine in ten found lines stay within, in points + * @param over2 the found lines drifting more than 2pt either way + * @param found each found line's drift, by its {@link #lineId line id}; empty when read + * from a baseline row + */ +record FidelityMeasurement(String stem, int enginePages, int editorPages, int lines, int matched, + double median, double p90, int over2, Map found) { + + /** A found line: where it is, a few of its letters to name it by, and its drift. */ + record Found(int page, String preview, double drift) { + } + + static final String HEADER = "document\tengine_pages\teditor_pages\tlines\tmatched\tmedian\tp90\tover2"; + + FidelityMeasurement { + found = Collections.unmodifiableMap(new LinkedHashMap<>(found)); + } + + /** The share of the page's lines found in the editor's, from 0 to 1. */ + double matchedShare() { + return lines == 0 ? 1 : (double) matched / lines; + } + + /** Measures the editor's PDF of a document against the engine's. */ + static FidelityMeasurement of(String stem, Path enginePdf, Path editorPdf) throws IOException { + return of(stem, PdfLines.of(enginePdf), PdfLines.of(editorPdf)); + } + + static FidelityMeasurement of(String stem, PdfLines engine, PdfLines editor) { + Map page = engine.byKey(); + Map set = editor.byKey(); + Map found = new LinkedHashMap<>(); + List drifts = new ArrayList<>(); + for (Map.Entry line : page.entrySet()) { + PdfLines.Line there = set.get(line.getKey()); + if (there != null) { + double drift = round(there.baseline() - line.getValue().baseline()); + found.put(lineId(line.getValue()), new Found(line.getValue().page(), preview(line.getValue().key()), drift)); + drifts.add(Math.abs(drift)); + } + } + Collections.sort(drifts); + int over2 = (int) drifts.stream().filter(drift -> drift > 2).count(); + return new FidelityMeasurement(stem, engine.pages(), editor.pages(), page.size(), drifts.size(), + quantile(drifts, 0.5), quantile(drifts, 0.9), over2, found); + } + + /** A line's identity across runs: its page and a digest of its letters. */ + static String lineId(PdfLines.Line line) { + try { + byte[] digest = MessageDigest.getInstance("SHA-256").digest(line.key().getBytes(StandardCharsets.UTF_8)); + return line.page() + ":" + HexFormat.of().formatHex(digest, 0, 6); + } catch (NoSuchAlgorithmException missing) { + throw new IllegalStateException(missing); + } + } + + private static String preview(String key) { + String letters = key.replaceAll("[\\t\\r\\n]", ""); + return letters.length() <= 32 ? letters : letters.substring(0, 32); + } + + private static double round(double points) { + return Math.round(points * 100) / 100.0; + } + + private static double quantile(List sorted, double share) { + if (sorted.isEmpty()) { + return 0; + } + return round(sorted.get((int) Math.round(share * (sorted.size() - 1)))); + } + + /** The measurement as a row of the baseline's document file. */ + String row() { + return String.join("\t", stem, Integer.toString(enginePages), Integer.toString(editorPages), + Integer.toString(lines), Integer.toString(matched), + String.format(Locale.ROOT, "%.2f", median), String.format(Locale.ROOT, "%.2f", p90), + Integer.toString(over2)); + } + + /** The measurement's found lines as rows of the baseline's line file. */ + List lineRows() { + List rows = new ArrayList<>(); + found.forEach((id, line) -> rows.add(String.join("\t", stem, id, + String.format(Locale.ROOT, "%.2f", line.drift()), line.preview()))); + return rows; + } + + /** Reads a row of the baseline's document file, with the lines the line file holds for it. */ + static FidelityMeasurement parse(String row, Map found) { + String[] cells = row.split("\t"); + if (cells.length != 8) { + throw new IllegalArgumentException("a baseline row has 8 cells, not " + cells.length + ": " + row); + } + try { + return new FidelityMeasurement(cells[0], Integer.parseInt(cells[1]), Integer.parseInt(cells[2]), + Integer.parseInt(cells[3]), Integer.parseInt(cells[4]), Double.parseDouble(cells[5]), + Double.parseDouble(cells[6]), Integer.parseInt(cells[7]), found); + } catch (NumberFormatException malformed) { + throw new IllegalArgumentException("a baseline row holds a cell that is not a number: " + row, malformed); + } + } + + /** Reads a row of the baseline's line file into its document's lines. */ + static void parseLine(String row, Map> byDocument) { + String[] cells = row.split("\t", 4); + if (cells.length < 3) { + throw new IllegalArgumentException("a baseline line row has at least 3 cells: " + row); + } + try { + int page = Integer.parseInt(cells[1].substring(0, cells[1].indexOf(':'))); + byDocument.computeIfAbsent(cells[0], stem -> new LinkedHashMap<>()) + .put(cells[1], new Found(page, cells.length > 3 ? cells[3] : "", Double.parseDouble(cells[2]))); + } catch (NumberFormatException | StringIndexOutOfBoundsException malformed) { + throw new IllegalArgumentException("a baseline line row is malformed: " + row, malformed); + } + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java new file mode 100644 index 000000000..178d11cef --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java @@ -0,0 +1,77 @@ +package com.demcha.compose.document.templates.fidelity; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +/** + * Converts DOCX files to PDF with LibreOffice, headless, in one process for the whole corpus. + * + *

The process runs under a profile of its own, so a LibreOffice the user has open neither + * blocks it nor is changed by it.

+ */ +final class LibreOfficeConverter { + + private static final long TIMEOUT_MINUTES = 15; + + private final Path soffice; + + private LibreOfficeConverter(Path soffice) { + this.soffice = soffice; + } + + /** + * The LibreOffice to convert with: {@code -Dgraphcompose.soffice}, then {@code SOFFICE}, then + * {@code soffice} on the path, then the Windows default installation. + */ + static Optional find() { + List candidates = new ArrayList<>(); + String property = System.getProperty("graphcompose.soffice"); + if (property != null && !property.isBlank()) { + candidates.add(property); + } + String environment = System.getenv("SOFFICE"); + if (environment != null && !environment.isBlank()) { + candidates.add(environment); + } + String path = System.getenv("PATH"); + if (path != null) { + for (String directory : path.split(java.io.File.pathSeparator)) { + candidates.add(Path.of(directory, "soffice").toString()); + candidates.add(Path.of(directory, "soffice.exe").toString()); + } + } + candidates.add("C:/Program Files/LibreOffice/program/soffice.exe"); + return candidates.stream().map(Path::of).filter(Files::isRegularFile).findFirst().map(LibreOfficeConverter::new); + } + + /** Converts each DOCX into a PDF of the same stem in {@code outDir}. */ + void convert(List docxFiles, Path outDir, Path workDir) throws IOException, InterruptedException { + Files.createDirectories(outDir); + Path profile = Files.createDirectories(workDir.resolve("libreoffice-profile")); + List command = new ArrayList<>(List.of(soffice.toString(), "--headless", "--norestore", + "-env:UserInstallation=" + profile.toUri(), "--convert-to", "pdf", "--outdir", outDir.toString())); + docxFiles.forEach(file -> command.add(file.toString())); + Path log = workDir.resolve("libreoffice.log"); + Process process = new ProcessBuilder(command).redirectErrorStream(true).redirectOutput(log.toFile()).start(); + if (!process.waitFor(TIMEOUT_MINUTES, TimeUnit.MINUTES)) { + process.destroyForcibly(); + throw new IllegalStateException("LibreOffice did not convert the corpus within " + + TIMEOUT_MINUTES + " minutes; see " + log); + } + if (process.exitValue() != 0) { + throw new IllegalStateException("LibreOffice exited with " + process.exitValue() + "; see " + log); + } + } + + /** The operating system the baseline of a LibreOffice run belongs to. */ + static String platform() { + String os = System.getProperty("os.name", "").toLowerCase(Locale.ROOT); + return os.contains("win") ? "windows" : os.contains("mac") ? "mac" : "linux"; + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java new file mode 100644 index 000000000..7cb94b3bb --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java @@ -0,0 +1,125 @@ +package com.demcha.compose.document.templates.fidelity; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.text.PDFTextStripper; +import org.apache.pdfbox.text.TextPosition; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * The lines of text a PDF draws, each keyed by its page and its letters, with the baseline its + * first letter stands on. + * + *

Glyphs are read in the order the page draws them. A line ends where the next glyph stands + * on another baseline, steps back to the left, or stands further off than one and a half of its + * size: two columns on one baseline are two lines, as they are two runs of text. The key is the + * line's letters without white space, lower-cased, so text an editor sets with spaces between + * tracked letters, or with a trailing space, keys as the page's does. Lines of fewer than three + * letters are left out, and only the first line of each key on a page is kept.

+ */ +final class PdfLines { + + /** A line: its page, its letters, and the baseline of its first letter from the page's top. */ + record Line(int page, String key, double baseline) { + } + + private final List lines; + private final int pages; + + private PdfLines(List lines, int pages) { + this.lines = lines; + this.pages = pages; + } + + /** Reads a PDF's lines. */ + static PdfLines of(Path pdf) throws IOException { + try (PDDocument document = Loader.loadPDF(pdf.toFile())) { + Collector collector = new Collector(); + collector.setSortByPosition(false); + collector.getText(document); + collector.endLine(); + return new PdfLines(collector.lines, document.getNumberOfPages()); + } + } + + int pages() { + return pages; + } + + List lines() { + return lines; + } + + /** The lines by page and key, the first of each kept. */ + Map byKey() { + Map keyed = new LinkedHashMap<>(); + for (Line line : lines) { + keyed.putIfAbsent(line.page() + "/" + line.key(), line); + } + return keyed; + } + + private static final class Collector extends PDFTextStripper { + + private final List lines = new ArrayList<>(); + private final StringBuilder key = new StringBuilder(); + private int page; + private double baseline = Double.NaN; + private double lastEnd = Double.NaN; + private double lastX = Double.NaN; + + private Collector() throws IOException { + } + + @Override + protected void startPage(org.apache.pdfbox.pdmodel.PDPage pdPage) throws IOException { + endLine(); + page = getCurrentPageNo() - 1; + super.startPage(pdPage); + } + + @Override + protected void processTextPosition(TextPosition glyph) { + double y = glyph.getYDirAdj(); + double x = glyph.getXDirAdj(); + double size = Math.max(1, glyph.getFontSizeInPt()); + boolean sameLine = !Double.isNaN(baseline) + && Math.abs(y - baseline) < size * 0.5 + && x >= lastX - 1 + && x - lastEnd < size * 1.5; + if (!sameLine) { + endLine(); + baseline = y; + } + String letters = glyph.getUnicode(); + if (letters != null) { + for (int i = 0; i < letters.length(); i++) { + char c = letters.charAt(i); + if (!Character.isWhitespace(c) && c != ' ') { + key.append(c); + } + } + } + lastX = x; + lastEnd = x + glyph.getWidthDirAdj(); + } + + private void endLine() { + String letters = key.toString().toLowerCase(Locale.ROOT); + if (letters.codePointCount(0, letters.length()) >= 3) { + lines.add(new Line(page, letters, baseline)); + } + key.setLength(0); + baseline = Double.NaN; + lastEnd = Double.NaN; + lastX = Double.NaN; + } + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/InvoiceDocxCorpus.java b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/InvoiceDocxCorpus.java new file mode 100644 index 000000000..ffc80ad5a --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/InvoiceDocxCorpus.java @@ -0,0 +1,45 @@ +package com.demcha.compose.document.templates.invoice.presets; + +import com.demcha.compose.document.templates.fidelity.DocxCorpusDocument; + +import java.util.List; + +/** The invoice presets of the DOCX fidelity corpus, with the long fixtures that run to more pages. */ +public final class InvoiceDocxCorpus { + + private InvoiceDocxCorpus() { + } + + public static List documents() { + double classic = ClassicInvoice.RECOMMENDED_MARGIN; + double modern = ModernInvoice.RECOMMENDED_MARGIN; + return List.of( + invoice("classic", classic, s -> ClassicInvoice.create().compose(s, InvoicePresetFixtures.canonicalInvoice())), + invoice("classic_long", classic, s -> ClassicInvoice.create().compose(s, InvoicePresetFixtures.stressInvoice())), + invoice("modern", modern, s -> ModernInvoice.create().compose(s, InvoicePresetFixtures.canonicalInvoice())), + invoice("modern_long", modern, s -> ModernInvoice.create().compose(s, InvoicePresetFixtures.stressInvoice())), + invoice("consulting", -1, + s -> ConsultingInvoice.create().compose(s, ConsultingInvoiceFixtures.canonicalInvoice())), + invoice("consulting_long", -1, + s -> ConsultingInvoice.create().compose(s, ConsultingInvoiceFixtures.overflowInvoice())), + invoice("luma_studio", -1, + s -> LumaStudioInvoice.create().compose(s, LumaStudioInvoiceFixtures.canonicalInvoice())), + invoice("luma_studio_long", -1, + s -> LumaStudioInvoice.create().compose(s, LumaStudioInvoiceFixtures.overflowInvoice())), + invoice("metered", -1, s -> MeteredInvoice.create().compose(s, MeteredInvoiceFixtures.invoice())), + invoice("merchant", -1, s -> MerchantInvoice.create().compose(s, MerchantInvoiceFixtures.invoice())), + invoice("obsidian", -1, s -> ObsidianInvoice.create().compose(s, ObsidianInvoiceFixtures.invoice())), + invoice("platform", -1, s -> PlatformInvoice.create().compose(s, PlatformInvoiceFixtures.invoice())), + invoice("payments", -1, + s -> PaymentsInvoice.create().compose(s, PaymentsInvoiceFixtures.canonicalInvoice())), + invoice("subscription", -1, + s -> SubscriptionInvoice.create().compose(s, SubscriptionInvoiceFixtures.invoice())), + invoice("workspace", -1, + s -> WorkspaceInvoice.create().compose(s, WorkspaceInvoiceFixtures.canonicalInvoice()))); + } + + private static DocxCorpusDocument invoice(String name, double margin, + java.util.function.Consumer compose) { + return new DocxCorpusDocument("invoice", name, margin, compose); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/proposal/presets/ProposalDocxCorpus.java b/qa/src/test/java/com/demcha/compose/document/templates/proposal/presets/ProposalDocxCorpus.java new file mode 100644 index 000000000..0e409d1a7 --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/proposal/presets/ProposalDocxCorpus.java @@ -0,0 +1,59 @@ +package com.demcha.compose.document.templates.proposal.presets; + +import com.demcha.compose.document.templates.data.proposal.ProposalData; +import com.demcha.compose.document.templates.data.proposal.ProposalDocumentSpec; +import com.demcha.compose.document.templates.fidelity.DocxCorpusDocument; + +import java.util.List; + +/** The proposal presets of the DOCX fidelity corpus. */ +public final class ProposalDocxCorpus { + + private ProposalDocxCorpus() { + } + + public static List documents() { + return List.of( + new DocxCorpusDocument("proposal", "indigo", -1, + s -> IndigoProposal.create().compose(s, IndigoProposalFixtures.canonicalProposal())), + new DocxCorpusDocument("proposal", "editorial", -1, + s -> EditorialProposal.create().compose(s, EditorialProposalFixtures.canonicalProposal())), + new DocxCorpusDocument("proposal", "northline", -1, + s -> NorthlineProposal.create().compose(s, NorthlineProposalFixtures.canonicalProposal())), + new DocxCorpusDocument("proposal", "modern", 28, + s -> ModernProposal.create().compose(s, modern()))); + } + + // The spec ModernProposalSmokeTest renders. + private static ProposalDocumentSpec modern() { + return ProposalDocumentSpec.from(ProposalData.builder() + .title("Proposal") + .proposalNumber("GC-P-2026-014") + .preparedDate("02 Apr 2026") + .validUntil("30 Apr 2026") + .projectTitle("Document platform consolidation") + .executiveSummary("A phased engagement to retire per-team PDF scripts " + + "in favour of one canonical document engine.") + .sender(from -> from + .name("GraphCompose Studio") + .addressLines("18 Layout Street", "London, UK") + .email("hello@graphcompose.dev") + .phone("+44 20 5555 1000") + .website("graphcompose.dev")) + .recipient(to -> to + .name("Northwind Systems") + .addressLines("Attn: Procurement", "410 Market Avenue") + .email("procurement@northwind.example")) + .section("Scope", "Discovery, architecture, and a reference rollout.") + .section("Approach", "Iterative delivery with weekly checkpoints.") + .timelineItem("Discovery", "2 weeks", "Stakeholder interviews + audit") + .timelineItem("Build", "6 weeks", "Engine + template migration") + .pricingRow("Discovery", "Workshops + audit", "GBP 6,000") + .pricingRow("Build", "Engine + templates", "GBP 24,000") + .emphasizedPricingRow("Total", "", "GBP 30,000") + .acceptanceTerm("50% on signature, 50% on delivery.") + .acceptanceTerm("Valid for 30 days from the prepared date.") + .footerNote("Thank you for considering GraphCompose.") + .build()); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/receipt/presets/ReceiptDocxCorpus.java b/qa/src/test/java/com/demcha/compose/document/templates/receipt/presets/ReceiptDocxCorpus.java new file mode 100644 index 000000000..681b4a56e --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/receipt/presets/ReceiptDocxCorpus.java @@ -0,0 +1,21 @@ +package com.demcha.compose.document.templates.receipt.presets; + +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.templates.core.theme.BrandTheme; +import com.demcha.compose.document.templates.fidelity.DocxCorpusDocument; + +import java.util.List; + +/** The receipt preset of the DOCX fidelity corpus. */ +public final class ReceiptDocxCorpus { + + private ReceiptDocxCorpus() { + } + + public static List documents() { + return List.of(new DocxCorpusDocument("receipt", "modern", ModernReceipt.RECOMMENDED_MARGIN, + s -> ModernReceipt.create(BrandTheme.receiptModern(), + ModernReceipt.Options.branded(null, DocumentColor.rgb(23, 92, 211))) + .compose(s, ReceiptFixtures.canonicalReceipt()))); + } +} diff --git a/qa/src/test/java/com/demcha/compose/document/templates/rota/presets/RotaDocxCorpus.java b/qa/src/test/java/com/demcha/compose/document/templates/rota/presets/RotaDocxCorpus.java new file mode 100644 index 000000000..de27ce04d --- /dev/null +++ b/qa/src/test/java/com/demcha/compose/document/templates/rota/presets/RotaDocxCorpus.java @@ -0,0 +1,17 @@ +package com.demcha.compose.document.templates.rota.presets; + +import com.demcha.compose.document.templates.fidelity.DocxCorpusDocument; + +import java.util.List; + +/** The rota preset of the DOCX fidelity corpus. */ +public final class RotaDocxCorpus { + + private RotaDocxCorpus() { + } + + public static List documents() { + return List.of(new DocxCorpusDocument("rota", "cobalt", -1, + s -> CobaltRota.create().compose(s, CobaltRotaFixtures.canonicalRota()))); + } +} diff --git a/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv b/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv new file mode 100644 index 000000000..af8ae619b --- /dev/null +++ b/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv @@ -0,0 +1,3611 @@ +# libreoffice on windows — document, line, drift below the page (pt), letters +cv-blue_banner 0:8f1010120ed6 0.42 jordanrivera +cv-blue_banner 0:8d7a2cca3060 -0.20 +442055551000|jordan.rivera@exam +cv-blue_banner 0:b944906ed84c -0.20 professionalsummary +cv-blue_banner 0:c2f296ef30a3 -0.19 professionalexperience +cv-blue_banner 0:a76f47480818 -0.25 seniorplatformengineer +cv-blue_banner 0:060300b18051 -0.20 2024-present +cv-blue_banner 0:f890faef907f -0.20 northwindsystems +cv-blue_banner 0:daf65306b3b6 -0.22 softwareengineer +cv-blue_banner 0:e7cc1822c6dc -0.17 2021-2024 +cv-blue_banner 0:998c1a985022 -0.17 brightleaflabs +cv-blue_banner 0:41bb54fbae8d -0.19 backendengineer +cv-blue_banner 0:3fa772117260 -0.14 2019-2021 +cv-blue_banner 0:ef148f221e31 -0.14 helixprintco +cv-blue_banner 0:d7119ba1b2b4 -0.13 maintainedahigh-volumeinvoice-pr +cv-blue_banner 0:68bf0109c6f8 -0.12 education +cv-blue_banner 0:0ad1957d6bab -0.18 msccomputerscience +cv-blue_banner 0:47ce0218bbea -0.13 universityofmanchester +cv-blue_banner 0:2ffe115b06e5 -0.12 distinction.thesis:composablelay +cv-blue_banner 0:b6749d0b616b -0.16 bscsoftwareengineering +cv-blue_banner 0:30f9262640a0 -0.11 2015-2019 +cv-blue_banner 0:89ad9656f393 -0.11 imperialcollegelondon +cv-blue_banner 0:baa173b4a82e -0.10 first-classhonours.specialisatio +cv-blue_banner 0:6d3d5673c39f -0.14 oraclejavacertification +cv-blue_banner 0:d40b22f00acb -0.09 2023-2024 +cv-blue_banner 0:2669e1f6d55c -0.09 professionaltrack +cv-blue_banner 0:3857373829c1 -0.08 java17platformdeep-dive:records, +cv-blue_banner 0:5f94c50dc5bf -0.07 technicalskills +cv-blue_banner 0:eea537278f83 -0.08 •languages:java21,kotlin,groovy, +cv-blue_banner 0:9c2cd7231a53 -0.07 •document&print:pdfbox,apachepoi +cv-blue_banner 0:7bf8639ec5d3 -0.06 •layoutengines:customdsldesign,s +cv-blue_banner 0:8e66776d28d7 -0.05 •build&infrastructure:maven,grad +cv-blue_banner 0:1ed4fc7d7768 -0.04 •testing:junit5,assertj,pdfbox-b +cv-blue_banner 0:26671c309eb9 -0.03 •distribution:mavencentral,sonat +cv-blue_banner 0:676dfdd56ad2 -0.02 additionalinformation +cv-blue_banner 0:f20997652453 -0.03 languages:english(fluent),german +cv-blue_banner 0:ec9d3622395e -0.02 workeligibility:eligibletoworkin +cv-blue_banner 0:dd20ae01c3cf -0.01 opensource:maintainerofgraphcomp +cv-blue_banner 0:33c35e9d236d 0.00 speaking:jvmsummit2024,devoxxuk2 +cv-blue_banner 0:2577c0f557b2 0.01 projects +cv-blue_banner 0:47f6c54ae700 -0.30 graphcompose(java21,pdfbox,maven +cv-blue_banner 0:7fea658a4957 0.00 productioncv/invoice/proposalpip +cv-boxed_sections 0:8f1010120ed6 0.46 jordanrivera +cv-boxed_sections 0:8d7a2cca3060 -0.12 +442055551000|jordan.rivera@exam +cv-boxed_sections 0:b944906ed84c -0.42 professionalsummary +cv-boxed_sections 0:5f94c50dc5bf -0.43 technicalskills +cv-boxed_sections 0:eea537278f83 -0.46 •languages:java21,kotlin,groovy, +cv-boxed_sections 0:9c2cd7231a53 -0.45 •document&print:pdfbox,apachepoi +cv-boxed_sections 0:7bf8639ec5d3 -0.45 •layoutengines:customdsldesign,s +cv-boxed_sections 0:8e66776d28d7 -0.44 •build&infrastructure:maven,grad +cv-boxed_sections 0:1ed4fc7d7768 -0.44 •testing:junit5,assertj,pdfbox-b +cv-boxed_sections 0:26671c309eb9 -0.43 •distribution:mavencentral,sonat +cv-boxed_sections 0:68bf0109c6f8 -0.42 education +cv-boxed_sections 0:0ad1957d6bab -0.42 msccomputerscience +cv-boxed_sections 0:3fa772117260 -0.46 2019-2021 +cv-boxed_sections 0:47ce0218bbea -0.43 universityofmanchester +cv-boxed_sections 0:2ffe115b06e5 -0.42 distinction.thesis:composablelay +cv-boxed_sections 0:b6749d0b616b -0.29 bscsoftwareengineering +cv-boxed_sections 0:30f9262640a0 -0.32 2015-2019 +cv-boxed_sections 0:89ad9656f393 -0.30 imperialcollegelondon +cv-boxed_sections 0:baa173b4a82e -0.28 first-classhonours.specialisatio +cv-boxed_sections 0:6d3d5673c39f -0.15 oraclejavacertification +cv-boxed_sections 0:d40b22f00acb -0.19 2023-2024 +cv-boxed_sections 0:2669e1f6d55c -0.16 professionaltrack +cv-boxed_sections 0:3857373829c1 -0.15 java17platformdeep-dive:records, +cv-boxed_sections 0:2577c0f557b2 -0.13 projects +cv-boxed_sections 0:b2b029995203 -0.16 •graphcompose(java21,pdfbox,mave +cv-boxed_sections 0:67593a76ef70 -0.46 declarativejavapdflayoutengine.s +cv-boxed_sections 0:b9292cbd1454 -0.45 pipelinesforhiringtoolsandbillin +cv-boxed_sections 0:1b50bb81df5a -0.05 •templatestudio(kotlin,composede +cv-boxed_sections 0:836e76daecbf -0.04 internaltoolforevaluatingcv,prop +cv-boxed_sections 0:25cdca2beb8b 0.06 •layoutlint(java21,javaparser,sp +cv-boxed_sections 0:7488006d7864 -0.23 staticanalyserthatflagsfragileau +cv-boxed_sections 0:c4d0c415b4f8 -0.23 production. +cv-boxed_sections 0:fb1927f88597 0.18 •chromeforge(java,graphcompose,p +cv-boxed_sections 0:e7e62230eb1f 0.18 editorial-magazinedocumenttoolki +cv-boxed_sections 0:c2f296ef30a3 0.20 professionalexperience +cv-boxed_sections 0:a76f47480818 0.19 seniorplatformengineer +cv-boxed_sections 0:060300b18051 0.16 2024-present +cv-boxed_sections 0:f890faef907f 0.18 northwindsystems +cv-boxed_sections 1:49faf14f1f56 -0.73 ledthereusabledocument-generatio +cv-boxed_sections 1:6bd3f168e89e -0.73 maintenancetimeby70%byretiringpe +cv-boxed_sections 1:daf65306b3b6 -0.30 softwareengineer +cv-boxed_sections 1:e7cc1822c6dc -0.33 2021-2024 +cv-boxed_sections 1:998c1a985022 -0.31 brightleaflabs +cv-boxed_sections 1:e55664011cda -0.59 builtbackendservicesandproductio +cv-boxed_sections 1:e80236b6d2b1 -0.59 itexttoacustomlayoutengine,elimi +cv-boxed_sections 1:41bb54fbae8d -0.16 backendengineer +cv-boxed_sections 1:3fa772117260 -0.19 2019-2021 +cv-boxed_sections 1:ef148f221e31 -0.17 helixprintco +cv-boxed_sections 1:9d31a6bfbc69 -0.45 maintainedahigh-volumeinvoice-pr +cv-boxed_sections 1:03af8a628309 -0.45 change. +cv-boxed_sections 1:676dfdd56ad2 -0.13 additionalinformation +cv-boxed_sections 1:f20997652453 -0.16 languages:english(fluent),german +cv-boxed_sections 1:ec9d3622395e -0.16 workeligibility:eligibletoworkin +cv-boxed_sections 1:dd20ae01c3cf -0.15 opensource:maintainerofgraphcomp +cv-boxed_sections 1:33c35e9d236d -0.15 speaking:jvmsummit2024,devoxxuk2 +cv-centered_headline 0:8f1010120ed6 -0.50 jordanrivera +cv-centered_headline 0:87ca614d0eab -0.18 professionaltitle +cv-centered_headline 0:8d7a2cca3060 -0.23 +442055551000|jordan.rivera@exam +cv-centered_headline 0:b944906ed84c -0.28 professionalsummary +cv-centered_headline 0:f43d42692f27 0.06 platformengineerwith10+yearsbuil +cv-centered_headline 0:5f94c50dc5bf -0.25 technicalskills +cv-centered_headline 0:eea537278f83 -0.21 •languages:java21,kotlin,groovy, +cv-centered_headline 0:9c2cd7231a53 -0.20 •document&print:pdfbox,apachepoi +cv-centered_headline 0:7bf8639ec5d3 -0.19 •layoutengines:customdsldesign,s +cv-centered_headline 0:8e66776d28d7 -0.18 •build&infrastructure:maven,grad +cv-centered_headline 0:1ed4fc7d7768 -0.17 •testing:junit5,assertj,pdfbox-b +cv-centered_headline 0:26671c309eb9 -0.16 •distribution:mavencentral,sonat +cv-centered_headline 0:68bf0109c6f8 -0.19 education +cv-centered_headline 0:0ad1957d6bab -0.19 msccomputerscience +cv-centered_headline 0:3fa772117260 -0.20 2019-2021 +cv-centered_headline 0:47ce0218bbea -0.16 universityofmanchester +cv-centered_headline 0:2ffe115b06e5 -0.14 distinction.thesis:composablelay +cv-centered_headline 0:b6749d0b616b -0.07 bscsoftwareengineering +cv-centered_headline 0:30f9262640a0 -0.08 2015-2019 +cv-centered_headline 0:89ad9656f393 -0.04 imperialcollegelondon +cv-centered_headline 0:baa173b4a82e -0.02 first-classhonours.specialisatio +cv-centered_headline 0:6d3d5673c39f 0.05 oraclejavacertification +cv-centered_headline 0:d40b22f00acb 0.04 2023-2024 +cv-centered_headline 0:2669e1f6d55c 0.08 professionaltrack +cv-centered_headline 0:3857373829c1 0.10 java17platformdeep-dive:records, +cv-centered_headline 0:2577c0f557b2 0.07 projects +cv-centered_headline 0:0f2c67872251 0.11 graphcompose(java21,pdfbox,maven +cv-centered_headline 0:d73d02174dc9 0.24 templatestudio(kotlin,composedes +cv-centered_headline 0:836e76daecbf 0.25 internaltoolforevaluatingcv,prop +cv-centered_headline 0:542ec793b5b1 0.36 layoutlint(java21,javaparser,spo +cv-centered_headline 0:dc31b6a18325 0.37 staticanalyserthatflagsfragileau +cv-centered_headline 0:ee180ea1e0a5 0.48 chromeforge(java,graphcompose,pa +cv-centered_headline 0:e7e62230eb1f 0.49 editorial-magazinedocumenttoolki +cv-centered_headline 0:c2f296ef30a3 0.46 professionalexperience +cv-centered_headline 0:a76f47480818 0.46 seniorplatformengineer +cv-centered_headline 0:060300b18051 0.45 2024-present +cv-centered_headline 0:f890faef907f 0.49 northwindsystems +cv-centered_headline 0:49faf14f1f56 0.81 ledthereusabledocument-generatio +cv-centered_headline 0:6bd3f168e89e 0.82 maintenancetimeby70%byretiringpe +cv-centered_headline 0:daf65306b3b6 0.59 softwareengineer +cv-centered_headline 0:e7cc1822c6dc 0.58 2021-2024 +cv-centered_headline 0:998c1a985022 0.62 brightleaflabs +cv-centered_headline 0:41bb54fbae8d 0.72 backendengineer +cv-centered_headline 0:ef148f221e31 0.75 helixprintco +cv-centered_headline 1:9d31a6bfbc69 0.31 maintainedahigh-volumeinvoice-pr +cv-centered_headline 1:03af8a628309 0.32 change. +cv-centered_headline 1:676dfdd56ad2 -0.01 additionalinformation +cv-centered_headline 1:f20997652453 0.03 languages:english(fluent),german +cv-centered_headline 1:ec9d3622395e 0.04 workeligibility:eligibletoworkin +cv-centered_headline 1:dd20ae01c3cf 0.05 opensource:maintainerofgraphcomp +cv-centered_headline 1:33c35e9d236d 0.06 speaking:jvmsummit2024,devoxxuk2 +cv-charcoal_gold 0:73423c7707c4 3.21 anastasia +cv-charcoal_gold 0:6627835f988e 2.75 smith +cv-charcoal_gold 0:093e7d5fdbaa 2.72 contact +cv-charcoal_gold 0:a8acc3a90a7b 2.94 +447700900123 +cv-charcoal_gold 0:0126a18bf252 2.94 hello@anastasiasmith.com +cv-charcoal_gold 0:92966f349443 2.94 london,unitedkingdom +cv-charcoal_gold 0:42535367bd3c 2.94 anastasiasmith.com +cv-charcoal_gold 0:d5d2c85de2b9 2.94 linkedin.com/in/anastasiasmith +cv-charcoal_gold 0:32c1cf49a2fe 2.72 skills +cv-charcoal_gold 0:340455fbac25 2.84 projectmanagement +cv-charcoal_gold 0:03cd52ebdc67 2.84 budgeting&forecasting +cv-charcoal_gold 0:115925c1b96b 2.84 stakeholdercommunication +cv-charcoal_gold 0:4e321f38b222 2.84 riskmanagement +cv-charcoal_gold 0:2f594f65f16c 2.84 dataanalysis +cv-charcoal_gold 0:b08c44dac044 2.84 processimprovement +cv-charcoal_gold 0:c7b5692b2d27 2.84 microsoftexcel +cv-charcoal_gold 0:2e2c6b2f5ad9 2.84 powerbi +cv-charcoal_gold 0:f73b1d7d3bc6 2.84 jira/confluence +cv-charcoal_gold 0:b011cfad056f 2.84 agilemethodologies +cv-charcoal_gold 0:6cb574fa10b6 2.82 languages +cv-charcoal_gold 0:b6234d2ea0d6 2.91 english +cv-charcoal_gold 0:bef32d2c315a 2.91 native +cv-charcoal_gold 0:aa304b5d1d72 2.91 russian +cv-charcoal_gold 0:21bb36ad0638 2.91 french +cv-charcoal_gold 0:23ed645595d6 2.91 b2–upperintermediate +cv-charcoal_gold 0:28561c6b68fc 2.91 german +cv-charcoal_gold 0:3cb3c2736bad 2.91 a2–basic +cv-charcoal_gold 0:68bf0109c6f8 2.92 education +cv-charcoal_gold 0:48f12eb2ea0d 2.94 mscprojectmanagement +cv-charcoal_gold 0:ede0c8c47a1f 2.94 universitycollegelondon +cv-charcoal_gold 0:fc3f0389b9de 2.94 2018–2019 +cv-charcoal_gold 0:66cb4ff79ee1 2.93 bscbusinessadministration +cv-charcoal_gold 0:8826393fc0f0 2.93 king'scollegelondon +cv-charcoal_gold 0:c7d18ae8c50d 2.93 2014–2017 +cv-charcoal_gold 0:3acba0d7b5dc 2.61 projectmanager +cv-charcoal_gold 0:f54e0195601a 3.01 results-drivenprojectmanagerwith +cv-charcoal_gold 0:7a0497cef9c6 3.01 teamsanddeliveringcomplexproject +cv-charcoal_gold 0:c38f1902ece8 3.24 skilledinagileandwaterfallmethod +cv-charcoal_gold 0:ca94787c6c7a 2.54 management.passionateaboutdrivin +cv-charcoal_gold 0:53e5e7c5a884 2.64 experience +cv-charcoal_gold 0:086c0e036e67 2.80 2021–present +cv-charcoal_gold 0:eddc2d311872 2.74 seniorprojectmanager +cv-charcoal_gold 0:243953e20dc4 2.84 digitalsolutionsltd·london,uk +cv-charcoal_gold 0:7fde5861c84b 2.91 •managecross-functionalteamsofup +cv-charcoal_gold 0:80c76af1fe2a 2.93 •implementagilepracticesthatimpr +cv-charcoal_gold 0:b6bb33b79f44 2.95 •buildstrongclientrelationshipsa +cv-charcoal_gold 0:6c39082d9294 2.92 2019–2021 +cv-charcoal_gold 0:46df57ef8321 2.96 innovatechsystems·london,uk +cv-charcoal_gold 0:271b01626043 2.99 •delivered12+projectsacrossitand +cv-charcoal_gold 0:77dd7c2ad6ae 3.01 •monitoredbudgets,timelines,andr +cv-charcoal_gold 0:bf8278cd4edc 3.03 •identifiedrisksandimplementedmi +cv-charcoal_gold 0:2773f92777d7 3.05 •achieved98%on-timeprojectdelive +cv-charcoal_gold 0:ad564a6ee91d 3.02 2017–2019 +cv-charcoal_gold 0:e085ad3a0d32 2.96 projectcoordinator +cv-charcoal_gold 0:6ac382583801 3.06 globalbusinessservices·london,uk +cv-charcoal_gold 0:77aec5bb6b7f 3.09 •supportedprojectmanagersinplann +cv-charcoal_gold 0:38dafe4a1765 3.11 •preparedreports,dashboards,andd +cv-charcoal_gold 0:5c95a9041b72 3.13 •coordinatedmeetingsandtrackedac +cv-charcoal_gold 0:f0d87e2131e2 3.15 •improvedinternalprocessesandpro +cv-charcoal_gold 0:e831beb04c00 3.06 certifications +cv-charcoal_gold 0:93a7ba535da0 3.22 pmp®certification +cv-charcoal_gold 0:0f9f6d10bfa3 3.26 projectmanagementinstitute +cv-charcoal_gold 0:73a2af8864fc 3.28 2020 +cv-charcoal_gold 0:043092900ed5 3.25 prince2®foundation +cv-charcoal_gold 0:544a764703d6 3.29 axelos +cv-charcoal_gold 0:023e33504ab9 3.31 2019 +cv-charcoal_gold 0:83cd2e790f6a 3.28 agilepm®foundation +cv-charcoal_gold 0:0005e5872534 3.32 apmginternational +cv-charcoal_gold 0:6ee18b42fbf1 3.06 achievements +cv-charcoal_gold 0:3f06e4a3eb33 3.22 excellenceindeliveryaward +cv-charcoal_gold 0:0c373352626d 3.26 digitalsolutionsltd +cv-charcoal_gold 0:d398b29d3dbb 3.28 2023 +cv-charcoal_gold 0:92cb97e6b786 3.25 processimprovementinitiative +cv-charcoal_gold 0:6517b58450f7 3.29 increasedefficiencyby30% +cv-charcoal_gold 0:b1ab1e892617 3.31 2022 +cv-charcoal_gold 0:c2f5106fbd5a 3.28 topperformer +cv-charcoal_gold 0:058521fbf0d1 3.32 innovatechsystems +cv-charcoal_gold 0:3def82282260 3.25 technicaltools +cv-charcoal_gold 0:eb04bd42c7fb 3.31 microsoft365|jira|confluence|asa +cv-classic_serif 0:8f1010120ed6 -0.15 jordanrivera +cv-classic_serif 0:8d7a2cca3060 0.19 +442055551000|jordan.rivera@exam +cv-classic_serif 0:3c69d6bb4892 0.24 professionalprofile +cv-classic_serif 0:32c1cf49a2fe 0.14 skills +cv-classic_serif 0:873a24d153c8 0.11 languages:java21,kotlin,groovy,p +cv-classic_serif 0:05e907ef2b18 0.09 document&print:pdfbox,apachepoi( +cv-classic_serif 0:76656a8a6621 0.06 layoutengines:customdsldesign,se +cv-classic_serif 0:1cd141fef347 0.04 build&infrastructure:maven,gradl +cv-classic_serif 0:181ddda7f959 0.01 testing:junit5,assertj,pdfbox-ba +cv-classic_serif 0:c40c656d9558 -0.01 distribution:mavencentral,sonaty +cv-classic_serif 0:53e5e7c5a884 0.00 experience +cv-classic_serif 0:a76f47480818 0.01 seniorplatformengineer +cv-classic_serif 0:060300b18051 -0.02 2024-present +cv-classic_serif 0:f890faef907f -0.01 northwindsystems +cv-classic_serif 0:49faf14f1f56 -0.24 ledthereusabledocument-generatio +cv-classic_serif 0:6bd3f168e89e -0.25 maintenancetimeby70%byretiringpe +cv-classic_serif 0:daf65306b3b6 0.13 softwareengineer +cv-classic_serif 0:e7cc1822c6dc 0.10 2021-2024 +cv-classic_serif 0:998c1a985022 0.11 brightleaflabs +cv-classic_serif 0:e55664011cda -0.12 builtbackendservicesandproductio +cv-classic_serif 0:e80236b6d2b1 -0.13 itexttoacustomlayoutengine,elimi +cv-classic_serif 0:41bb54fbae8d 0.24 backendengineer +cv-classic_serif 0:3fa772117260 0.21 2019-2021 +cv-classic_serif 0:ef148f221e31 0.22 helixprintco +cv-classic_serif 0:9d31a6bfbc69 -0.01 maintainedahigh-volumeinvoice-pr +cv-classic_serif 0:03af8a628309 -0.02 change. +cv-classic_serif 0:2577c0f557b2 0.25 projects +cv-classic_serif 0:0f2c67872251 0.26 graphcompose(java21,pdfbox,maven +cv-classic_serif 0:67593a76ef70 -0.01 declarativejavapdflayoutengine.s +cv-classic_serif 0:b9292cbd1454 -0.02 pipelinesforhiringtoolsandbillin +cv-classic_serif 0:d73d02174dc9 0.35 templatestudio(kotlin,composedes +cv-classic_serif 0:836e76daecbf 0.33 internaltoolforevaluatingcv,prop +cv-classic_serif 0:542ec793b5b1 0.45 layoutlint(java21,javaparser,spo +cv-classic_serif 0:ee180ea1e0a5 12.20 chromeforge(java,graphcompose,pa +cv-classic_serif 0:e7e62230eb1f 12.18 editorial-magazinedocumenttoolki +cv-classic_serif 0:68bf0109c6f8 12.20 education +cv-classic_serif 0:0ad1957d6bab 12.21 msccomputerscience +cv-classic_serif 0:47ce0218bbea 12.19 universityofmanchester +cv-classic_serif 0:2ffe115b06e5 12.21 distinction.thesis:composablelay +cv-classic_serif 0:b6749d0b616b 12.33 bscsoftwareengineering +cv-classic_serif 0:30f9262640a0 12.30 2015-2019 +cv-classic_serif 1:89ad9656f393 0.16 imperialcollegelondon +cv-classic_serif 1:baa173b4a82e 0.18 first-classhonours.specialisatio +cv-classic_serif 1:6d3d5673c39f 0.30 oraclejavacertification +cv-classic_serif 1:d40b22f00acb 0.27 2023-2024 +cv-classic_serif 1:2669e1f6d55c 0.28 professionaltrack +cv-classic_serif 1:3857373829c1 0.30 java17platformdeep-dive:records, +cv-classic_serif 1:7b476727faf3 0.33 additional +cv-classic_serif 1:f20997652453 0.29 languages:english(fluent),german +cv-classic_serif 1:ec9d3622395e 0.37 workeligibility:eligibletoworkin +cv-classic_serif 1:dd20ae01c3cf 0.44 opensource:maintainerofgraphcomp +cv-classic_serif 1:33c35e9d236d 0.52 speaking:jvmsummit2024,devoxxuk2 +cv-compact_mono 0:8f1010120ed6 0.41 jordanrivera +cv-compact_mono 0:f9e4560bd641 -0.14 london,uk/+442055551000/jordan.r +cv-compact_mono 0:32c1cf49a2fe 0.34 skills +cv-compact_mono 0:551282493299 -0.01 languagesjava21,kotlin,groovy,py +cv-compact_mono 0:8f5cfd05d621 -0.22 document&printpdfbox,apachepoi +cv-compact_mono 0:148ff6990529 -0.11 (docx/xlsx),itext,postscript +cv-compact_mono 0:862bd50bcc32 -0.10 layoutenginescustomdsldesign,sem +cv-compact_mono 0:ec4f3e745260 0.01 layouttrees,pagination,snapshott +cv-compact_mono 0:55a8b2742c06 0.02 build&infrastructuremaven,gradle +cv-compact_mono 0:1649ba79bc7a 0.13 actions,jitpack +cv-compact_mono 0:d4ac2ee01f81 0.14 testingjunit5,assertj,pdfbox-bas +cv-compact_mono 0:b04e6ebfb02b 0.25 diff,layout-graphsnapshots +cv-compact_mono 0:93c9f742ef14 0.26 distributionmavencentral,sonatyp +cv-compact_mono 0:8f21bd149ad7 0.37 gpgsigning,jitpack +cv-compact_mono 0:68bf0109c6f8 0.93 education +cv-compact_mono 0:9ad8d9ef1711 0.43 msccomputerscience/universityof +cv-compact_mono 0:594f6dd11e20 0.50 manchester/2019-2021 +cv-compact_mono 0:387dc0387824 0.53 bscsoftwareengineering/imperialc +cv-compact_mono 0:453806946a88 0.60 london/2015-2019 +cv-compact_mono 0:7816e7a28b71 0.63 oraclejavacertification/professi +cv-compact_mono 0:d40b22f00acb 0.85 2023-2024 +cv-compact_mono 0:7b476727faf3 1.41 additional +cv-compact_mono 0:ecc25e73b19b 0.90 languages:english(fluent),german +cv-compact_mono 0:ac7f0ee6a49e 0.91 (intermediate),spanish(basic) +cv-compact_mono 0:8051a4b5e34f 0.94 opensource:maintainerofgraphcomp +cv-compact_mono 0:08c2e869a75b 0.95 regularcontributortopdfboxissuet +cv-compact_mono 0:1900eab6c028 0.54 profile +cv-compact_mono 0:3828b9718a0d -0.05 platformengineerwith10+yearsbuil +cv-compact_mono 0:f6b5e93ccadd -0.04 engines,anddeveloper-facingtempl +cv-compact_mono 0:927ef106776a -0.03 semanticauthoringdsls,andturning +cv-compact_mono 0:330fcb75ed52 -0.02 librariesthatscale. +cv-compact_mono 0:53e5e7c5a884 0.26 experience +cv-compact_mono 0:c9efb118bfda -0.09 seniorplatformengineer,northwind +cv-compact_mono 0:9ccc3e904e5a -0.25 favourofonecanonicalengine. +cv-compact_mono 0:e21e4e47835a -0.04 softwareengineer,brightleaflabs| +cv-compact_mono 0:0cdd48f05f9d -0.24 builtbackendservicesandproductio +cv-compact_mono 0:e48f1e2c853d -0.22 permonth.drovethemigrationfromit +cv-compact_mono 0:b78a9a72ca9a -0.20 andcuttingp99renderlatencyfrom1. +cv-compact_mono 0:9f5d87c00954 0.01 backendengineer,helixprintco|201 +cv-compact_mono 0:a485c37fe7ea -0.19 maintainedahigh-volumeinvoice-pr +cv-compact_mono 0:5a136b6b9d8c -0.17 testharnessthatgatedeverytemplat +cv-compact_mono 0:d94eccbb1fbe 0.09 selectedprojects +cv-compact_mono 0:0059a3aac61e -0.46 graphcompose(java21,pdfbox,maven +cv-compact_mono 0:18b7f8c840e4 -0.43 dsl,slot-basedtemplates,snapshot +cv-compact_mono 0:d36f78e88fe0 -0.39 forhiringtoolsandbillingsystems. +cv-compact_mono 0:55e119878845 -0.38 templatestudio(kotlin,composedes +cv-compact_mono 0:c7b83853442b -0.35 proposal,andinvoiceoutputacross1 +cv-compact_mono 0:6b844249c695 -0.31 freezing. +cv-compact_mono 0:6793d28e9783 -0.26 chromeforge(java,graphcompose,pa +cv-compact_mono 0:e3cfea265b3b -0.23 graphcompose:cinematiccovers,pul +cv-editorial_blue 0:8f1010120ed6 0.45 jordanrivera +cv-editorial_blue 0:2d58f0cadc2d 0.22 platformengineer +cv-editorial_blue 0:1b28eb6a9a2e 0.14 +442055551000-london,uk +cv-editorial_blue 0:8817bf9310b6 0.11 jordan.rivera@example.com|linked +cv-editorial_blue 0:3c69d6bb4892 0.15 professionalprofile +cv-editorial_blue 0:32c1cf49a2fe 0.14 skills +cv-editorial_blue 0:8447174c8fff 0.19 •java21 +cv-editorial_blue 0:4797e5b5555b 0.19 •kotlin +cv-editorial_blue 0:44408890ac29 0.19 •groovy +cv-editorial_blue 0:9b676a2ec3c3 0.19 •python +cv-editorial_blue 0:c96e7be4e2bd 0.34 •sql +cv-editorial_blue 0:5bf26a4a07e7 0.34 •pdfbox +cv-editorial_blue 0:60bb71068aa6 0.34 •apachepoi(docx/xlsx) +cv-editorial_blue 0:8af129f35b4a 0.34 •itext +cv-editorial_blue 0:af16271643f5 0.33 •postscript +cv-editorial_blue 0:52014e35429b 0.33 •icccolourprofiles +cv-editorial_blue 0:5cc4da0e31ab 0.33 •fontmetrics +cv-editorial_blue 0:ffd06dc07d03 0.33 •customdsldesign +cv-editorial_blue 0:b3307292a943 0.33 •semanticlayouttrees +cv-editorial_blue 0:6a0bf046882f 0.33 •pagination +cv-editorial_blue 0:8d5738dcdcbd 0.33 •snapshottesting +cv-editorial_blue 0:8f39f0146d0e 0.33 •visualregression +cv-editorial_blue 0:a26a92311896 0.32 •maven +cv-editorial_blue 0:d1002e9575f5 0.32 •gradle +cv-editorial_blue 0:e7b0f50a3bf3 0.32 •githubactions +cv-editorial_blue 0:193e87ad43b7 0.32 •jitpack +cv-editorial_blue 0:62e29bf5f417 0.32 •docker +cv-editorial_blue 0:83844532ef02 0.32 •jmhbenchmarking +cv-editorial_blue 0:8a7a4807b03b 0.32 •junit5 +cv-editorial_blue 0:40aaef8fe2a9 0.32 •assertj +cv-editorial_blue 0:a736ceace0f5 0.31 •pdfbox-basedpngdiff +cv-editorial_blue 0:9a38eea08d15 0.31 •layout-graphsnapshots +cv-editorial_blue 0:0d50de959d19 0.31 •mutationtesting(pitest) +cv-editorial_blue 0:7ea255c76189 0.31 •mavencentral +cv-editorial_blue 0:4e484fca00bb 0.41 •sonatypeossrh +cv-editorial_blue 0:feaf5883619f 0.41 •gpgsigning +cv-editorial_blue 0:11f34b7449a4 0.41 •semanticversioningdiscipline +cv-editorial_blue 0:68bf0109c6f8 0.58 education +cv-editorial_blue 0:78cdd0bfd1ce 0.54 msccomputerscience2019-2021 +cv-editorial_blue 0:47ce0218bbea 0.54 universityofmanchester +cv-editorial_blue 0:2ffe115b06e5 0.54 distinction.thesis:composablelay +cv-editorial_blue 0:c5947a492ce6 0.63 bscsoftwareengineering2015-2019 +cv-editorial_blue 0:89ad9656f393 0.63 imperialcollegelondon +cv-editorial_blue 0:baa173b4a82e 0.63 first-classhonours.specialisatio +cv-editorial_blue 0:83766950a9ce 0.72 oraclejavacertification2023-2024 +cv-editorial_blue 0:2669e1f6d55c 0.72 professionaltrack +cv-editorial_blue 0:3857373829c1 0.72 java17platformdeep-dive:records, +cv-editorial_blue 0:2577c0f557b2 0.72 projects +cv-editorial_blue 0:0f2c67872251 0.68 graphcompose(java21,pdfbox,maven +cv-editorial_blue 0:cf13c8a0c3d0 0.39 declarativejavapdflayoutengine.s +cv-editorial_blue 0:cfef54184ea6 0.40 proposalpipelinesforhiringtoolsa +cv-editorial_blue 0:d73d02174dc9 0.79 templatestudio(kotlin,composedes +cv-editorial_blue 0:7127a108c33c 0.50 internaltoolforevaluatingcv,prop +cv-editorial_blue 0:6b844249c695 0.50 freezing. +cv-editorial_blue 0:542ec793b5b1 0.90 layoutlint(java21,javaparser,spo +cv-editorial_blue 0:ee180ea1e0a5 1.00 chromeforge(java,graphcompose,pa +cv-editorial_blue 0:e7e62230eb1f 1.01 editorial-magazinedocumenttoolki +cv-editorial_blue 0:53e5e7c5a884 1.01 experience +cv-editorial_blue 0:1b72d3ce3e11 0.99 seniorplatformengineer2024-prese +cv-editorial_blue 0:f890faef907f 0.96 northwindsystems +cv-editorial_blue 0:1af5650959fe 0.67 ledthereusabledocument-generatio +cv-editorial_blue 0:27c01c228bd8 0.67 templatemaintenancetimeby70%byre +cv-editorial_blue 0:1a7fe8433bff 1.08 softwareengineer2021-2024 +cv-editorial_blue 0:998c1a985022 1.05 brightleaflabs +cv-editorial_blue 0:e86691b0219f 0.76 builtbackendservicesandproductio +cv-editorial_blue 0:4ec57434564a 0.76 migrationfromitexttoacustomlayou +cv-editorial_blue 1:ef148f221e31 10.35 helixprintco +cv-editorial_blue 1:f811fbee6901 10.06 maintainedahigh-volumeinvoice-pr +cv-editorial_blue 1:cbfca5b2a6d7 10.06 templatechange. +cv-editorial_blue 1:7b476727faf3 10.37 additional +cv-editorial_blue 1:f20997652453 10.34 languages:english(fluent),german +cv-editorial_blue 1:ec9d3622395e 10.35 workeligibility:eligibletoworkin +cv-editorial_blue 1:dd20ae01c3cf 10.35 opensource:maintainerofgraphcomp +cv-editorial_blue 1:33c35e9d236d 10.36 speaking:jvmsummit2024,devoxxuk2 +cv-editorial_blue 1:0b516aa076e0 10.33 referencesavailableuponrequest. +cv-engineering_resume 0:8f1010120ed6 0.15 jordanrivera +cv-engineering_resume 0:2d58f0cadc2d -0.25 platformengineer +cv-engineering_resume 0:fbeea547d99e -0.21 london,uk +cv-engineering_resume 0:89674e6f130e -0.20 +442055551000 +cv-engineering_resume 0:e0f850305ded -0.19 jordan.rivera@example.com +cv-engineering_resume 0:84308bea4540 -0.18 linkedin +cv-engineering_resume 0:c0b0109d9439 -0.17 github +cv-engineering_resume 0:32c1cf49a2fe -0.50 skills +cv-engineering_resume 0:873a24d153c8 -0.44 languages:java21,kotlin,groovy,p +cv-engineering_resume 0:db84150190bb -0.63 document&print:pdfbox,apachepoi +cv-engineering_resume 0:69d03fef7130 -0.62 (docx/xlsx),itext,postscript,icc +cv-engineering_resume 0:d52fd337f016 -0.61 profiles +cv-engineering_resume 0:f93032b34754 -0.60 layoutengines:customdsldesign,se +cv-engineering_resume 0:2d6fa255ba3a -0.59 layouttrees,pagination,snapshott +cv-engineering_resume 0:f274537aaf2c -0.58 regression +cv-engineering_resume 0:45fcec9fa26d -0.57 build&infrastructure:maven,gradl +cv-engineering_resume 0:33ddf84f4bab -0.56 actions,jitpack,docker +cv-engineering_resume 0:af23376e2ec2 -0.55 testing:junit5,assertj,pdfbox-ba +cv-engineering_resume 0:a8c30cabf363 -0.54 diff,layout-graphsnapshots,mutat +cv-engineering_resume 0:7c093617a679 -0.53 (pitest) +cv-engineering_resume 0:11ca7190fe83 -0.52 distribution:mavencentral,sonaty +cv-engineering_resume 0:768ad260251b -0.51 gpgsigning,jitpack,semanticversi +cv-engineering_resume 0:d43c8bd5797a -0.50 discipline +cv-engineering_resume 0:68bf0109c6f8 -0.38 education +cv-engineering_resume 0:5f9c672fafaf -0.32 msccomputerscience/2019-2021 +cv-engineering_resume 0:141310eca6fb -0.31 bscsoftwareengineering/2015-2019 +cv-engineering_resume 0:608c03298f47 -0.30 oraclejavacertification/2023-202 +cv-engineering_resume 0:41ffd8b76afc -0.38 details +cv-engineering_resume 0:ecc25e73b19b -0.52 languages:english(fluent),german +cv-engineering_resume 0:ac7f0ee6a49e -0.51 (intermediate),spanish(basic) +cv-engineering_resume 0:970ca9d789c2 -0.50 workeligibility:eligibletoworkin +cv-engineering_resume 0:0735680e2596 -0.49 theeu +cv-engineering_resume 0:e8256e23459a -1.55 engineeringprofile +cv-engineering_resume 0:53e5e7c5a884 8.95 experience +cv-engineering_resume 0:4977534824cc 9.04 seniorplatformengineer/2024-pres +cv-engineering_resume 0:f890faef907f 9.08 northwindsystems +cv-engineering_resume 0:0bf7eb0b1058 8.84 ledthereusabledocument-generatio +cv-engineering_resume 0:7033b2988e4d 9.08 softwareengineer/2021-2024 +cv-engineering_resume 0:998c1a985022 9.12 brightleaflabs +cv-engineering_resume 0:8b5abdc8c0d7 9.02 technicalevidence +cv-engineering_resume 0:e2fbf67cb588 9.51 graphcompose(java21,pdfbox,maven +cv-engineering_resume 0:eb5950729749 9.37 templates,snapshottesting.powers +cv-engineering_resume 0:81c8132f9792 9.29 systems.(opensource) +cv-engineering_resume 0:c944ee08a5bf 9.38 layoutlint(java21,javaparser,spo +cv-engineering_resume 0:2d80d05697ad 9.09 untypedoffsets,implicitpagebreak +cv-engineering_resume 0:6793d28e9783 9.28 chromeforge(java,graphcompose,pa +cv-engineering_resume 0:e3cfea265b3b 8.99 graphcompose:cinematiccovers,pul +cv-executive 0:8f1010120ed6 -0.50 jordanrivera +cv-executive 0:89ff05847e96 -0.28 london,uk|+442055551000 +cv-executive 0:8817bf9310b6 -0.30 jordan.rivera@example.com|linked +cv-executive 0:b944906ed84c -0.01 professionalsummary +cv-executive 0:6fbdc8b79878 0.08 platformengineerwith10+yearsbuil +cv-executive 0:c2be183b1c5f 0.08 templatesystems.specialisedinhig +cv-executive 0:7f92a9c9efc9 0.08 scriptsintotyped,snapshot-tested +cv-executive 0:5f94c50dc5bf -0.03 technicalskills +cv-executive 0:eea537278f83 -0.24 •languages:java21,kotlin,groovy, +cv-executive 0:9c2cd7231a53 -0.24 •document&print:pdfbox,apachepoi +cv-executive 0:7bf8639ec5d3 -0.24 •layoutengines:customdsldesign,s +cv-executive 0:8e66776d28d7 -0.24 •build&infrastructure:maven,grad +cv-executive 0:1ed4fc7d7768 -0.24 •testing:junit5,assertj,pdfbox-b +cv-executive 0:26671c309eb9 -0.24 •distribution:mavencentral,sonat +cv-executive 0:68bf0109c6f8 -0.05 education +cv-executive 0:0ad1957d6bab -0.26 msccomputerscience +cv-executive 0:3fa772117260 -0.26 2019-2021 +cv-executive 0:47ce0218bbea -0.26 universityofmanchester +cv-executive 0:2ffe115b06e5 -0.26 distinction.thesis:composablelay +cv-executive 0:b6749d0b616b -0.16 bscsoftwareengineering +cv-executive 0:30f9262640a0 -0.16 2015-2019 +cv-executive 0:89ad9656f393 -0.16 imperialcollegelondon +cv-executive 0:baa173b4a82e -0.16 first-classhonours.specialisatio +cv-executive 0:6d3d5673c39f -0.06 oraclejavacertification +cv-executive 0:d40b22f00acb -0.06 2023-2024 +cv-executive 0:2669e1f6d55c -0.06 professionaltrack +cv-executive 0:3857373829c1 -0.06 java17platformdeep-dive:records, +cv-executive 0:2577c0f557b2 0.13 projects +cv-executive 0:b2b029995203 -0.08 •graphcompose(java21,pdfbox,mave +cv-executive 0:cf13c8a0c3d0 -0.33 declarativejavapdflayoutengine.s +cv-executive 0:cfef54184ea6 -0.33 proposalpipelinesforhiringtoolsa +cv-executive 0:1b50bb81df5a 0.02 •templatestudio(kotlin,composede +cv-executive 0:7127a108c33c -0.23 internaltoolforevaluatingcv,prop +cv-executive 0:6b844249c695 -0.23 freezing. +cv-executive 0:25cdca2beb8b 0.12 •layoutlint(java21,javaparser,sp +cv-executive 0:f5fa2add7746 -0.13 staticanalyserthatflagsfragileau +cv-executive 0:9f5414016bd1 -0.13 toproduction. +cv-executive 0:fb1927f88597 0.22 •chromeforge(java,graphcompose,p +cv-executive 0:e7e62230eb1f 0.22 editorial-magazinedocumenttoolki +cv-executive 0:c2f296ef30a3 0.41 professionalexperience +cv-executive 0:a76f47480818 0.20 seniorplatformengineer +cv-executive 0:060300b18051 0.20 2024-present +cv-executive 0:f890faef907f 0.20 northwindsystems +cv-executive 0:1af5650959fe 0.50 ledthereusabledocument-generatio +cv-executive 0:27c01c228bd8 0.50 templatemaintenancetimeby70%byre +cv-executive 1:daf65306b3b6 -3.18 softwareengineer +cv-executive 1:e7cc1822c6dc -3.18 2021-2024 +cv-executive 1:998c1a985022 -3.18 brightleaflabs +cv-executive 1:ff8303967fa4 -2.88 builtbackendservicesandproductio +cv-executive 1:bd1fc9a4d815 -2.88 fromitexttoacustomlayoutengine,e +cv-executive 1:41bb54fbae8d -3.08 backendengineer +cv-executive 1:3fa772117260 -3.08 2019-2021 +cv-executive 1:ef148f221e31 -3.08 helixprintco +cv-executive 1:f811fbee6901 -2.78 maintainedahigh-volumeinvoice-pr +cv-executive 1:cbfca5b2a6d7 -2.78 templatechange. +cv-executive 1:676dfdd56ad2 -2.89 additionalinformation +cv-executive 1:f20997652453 -3.10 languages:english(fluent),german +cv-executive 1:ec9d3622395e -3.10 workeligibility:eligibletoworkin +cv-executive 1:dd20ae01c3cf -3.10 opensource:maintainerofgraphcomp +cv-executive 1:33c35e9d236d -3.10 speaking:jvmsummit2024,devoxxuk2 +cv-midnight_navy 0:21d2636ad3df -16.37 alexmorgan +cv-midnight_navy 0:5518402feccc -17.05 marketingmanager +cv-midnight_navy 0:093e7d5fdbaa -17.12 contact +cv-midnight_navy 0:01dcad830244 -16.44 +1(555)123-4567 +cv-midnight_navy 0:3eef38c97138 -16.45 alex.morgan@email.com +cv-midnight_navy 0:d5a0d0abdc64 -16.45 newyork,ny,usa +cv-midnight_navy 0:84308bea4540 -16.46 linkedin +cv-midnight_navy 0:0e6a8e0b849e -16.47 portfolio +cv-midnight_navy 0:68bf0109c6f8 -17.11 education +cv-midnight_navy 0:6e1119579227 -17.18 masterofbusiness +cv-midnight_navy 0:512afb6c7631 -17.18 administration +cv-midnight_navy 0:09b0e2130c1e -16.68 universityofchicagoboothschoolof +cv-midnight_navy 0:11d404179596 -16.69 business +cv-midnight_navy 0:3b8048983ecc -17.07 2016–2018 +cv-midnight_navy 0:84c2243138f7 -17.20 bachelorofsciencein +cv-midnight_navy 0:e2a530e251d3 -17.19 marketing +cv-midnight_navy 0:1f676d444ffb -16.99 bostonuniversity +cv-midnight_navy 0:8789bd1a8f91 -17.07 2012–2016 +cv-midnight_navy 0:32c1cf49a2fe -17.15 skills +cv-midnight_navy 0:4a3750fc1d48 -15.95 strategicplanning +cv-midnight_navy 0:0d676ed982b4 -13.85 digitalmarketing +cv-midnight_navy 0:c29cfa799c8d -11.74 marketresearch +cv-midnight_navy 0:2c5646de026b -9.64 brandmanagement +cv-midnight_navy 0:2f594f65f16c -7.53 dataanalysis +cv-midnight_navy 0:340455fbac25 -5.43 projectmanagement +cv-midnight_navy 0:96fa20c5c60d -3.33 googleanalytics +cv-midnight_navy 0:9bc298c12dc3 -1.22 seo/sem +cv-midnight_navy 0:a95ee8d8cf67 0.88 microsoftofficesuite +cv-midnight_navy 0:d4e16994df90 2.99 communication +cv-midnight_navy 0:6cb574fa10b6 3.88 languages +cv-midnight_navy 0:b6234d2ea0d6 8.86 english +cv-midnight_navy 0:9c9b13446cd9 18.59 spanish +cv-midnight_navy 0:21bb36ad0638 28.32 french +cv-midnight_navy 0:b944906ed84c 2.44 professionalsummary +cv-midnight_navy 0:05b2b441ce7b 3.20 results-drivenmarketingmanagerwi +cv-midnight_navy 0:66d5ff95c72a 3.18 executingdata-drivenmarketingstr +cv-midnight_navy 0:27747b7a33ce 3.16 engagement.proventrackrecordinle +cv-midnight_navy 0:a0f4e7019ffc 3.14 successfulcampaigns,anddeliverin +cv-midnight_navy 0:68352cb08e62 3.12 strongbrandsandcreatingimpactful +cv-midnight_navy 0:53e5e7c5a884 2.32 experience +cv-midnight_navy 0:086c0e036e67 2.39 2021–present +cv-midnight_navy 0:009b5b6479fa 2.47 starwavesolutions +cv-midnight_navy 0:60cebc1ec80c 2.47 newyork,ny +cv-midnight_navy 0:e0ee3cbb7b53 1.94 ·manageateamof6marketingprofessi +cv-midnight_navy 0:8ba85a74e016 1.96 anddesignteamstodrivecampaignsuc +cv-midnight_navy 0:407f710db042 1.97 ·overseedigitalcampaignsacrossse +cv-midnight_navy 0:308aef77a1c3 1.99 resultingina25%increaseinroi. +cv-midnight_navy 0:7e121dceb78a 2.53 seniormarketingspecialist +cv-midnight_navy 0:f7d1049ec64b 2.59 2018–2021 +cv-midnight_navy 0:4b8292fda43e 2.67 brightlinetechnologies +cv-midnight_navy 0:a246f7ba3f71 2.11 ·executedmulti-channelmarketingc +cv-midnight_navy 0:58b162e46dda 2.13 engagementby30%. +cv-midnight_navy 0:ef77f2daef0f 2.72 ·managedsocialmediachannelsandco +cv-midnight_navy 0:a112a7b3c16b 2.74 ·coordinatedwithcreativeteamstod +cv-midnight_navy 0:990b9f22bb48 2.70 marketingcoordinator +cv-midnight_navy 0:88f4e236ebcd 2.84 peakperformancegroup +cv-midnight_navy 0:c8186fbbdae9 2.84 boston,ma +cv-midnight_navy 0:87777be540ce 2.83 ·supportedthedevelopmentandexecu +cv-midnight_navy 0:44bbb2209a31 2.85 ·assistedinorganizingevents,webi +cv-midnight_navy 0:a1b8ec0d8fa7 2.86 ·monitoredcampaignperformanceand +cv-midnight_navy 0:6c6e2844f9eb 2.88 ·maintainedandupdatedmarketingda +cv-midnight_navy 0:6ee18b42fbf1 2.78 achievements +cv-midnight_navy 0:ce3ecf332528 3.82 increasedbrand +cv-midnight_navy 0:d42f3bf2c01a 3.24 awarenessby40% +cv-midnight_navy 0:f732077ea0c0 2.67 within2years. +cv-midnight_navy 0:f030b07931b5 3.82 boostedlead +cv-midnight_navy 0:912bf883fae8 3.24 generationby35% +cv-midnight_navy 0:f9049751a4c8 2.67 annually. +cv-midnight_navy 0:fa2311efab0a 3.56 recognizedastop +cv-midnight_navy 0:7918c6d41cc5 2.68 performerin2022. +cv-midnight_navy 0:e831beb04c00 2.81 certifications +cv-midnight_navy 0:4344ae02bbc0 2.88 googleanalyticscertified +cv-midnight_navy 0:bbdefa2950f4 2.86 google +cv-midnight_navy 0:73a2af8864fc 2.84 2020 +cv-midnight_navy 0:200b36afcfde 13.51 hubspotacademy +cv-midnight_navy 0:1bea20e1df19 13.49 2021 +cv-minimal_underlined 0:8f1010120ed6 0.46 jordanrivera +cv-minimal_underlined 0:8d7a2cca3060 0.18 +442055551000|jordan.rivera@exam +cv-minimal_underlined 0:b944906ed84c -0.11 professionalsummary +cv-minimal_underlined 0:80cc87fdc4c4 -0.72 platformengineerwith10+yearsbuil +cv-minimal_underlined 0:bddc0bd093ce -0.72 systems.specialisedinhigh-throug +cv-minimal_underlined 0:95a43d7b3df0 -0.71 snapshot-testedlibrariesthatscal +cv-minimal_underlined 0:5f94c50dc5bf -0.38 technicalskills +cv-minimal_underlined 0:eea537278f83 -0.70 •languages:java21,kotlin,groovy, +cv-minimal_underlined 0:9c2cd7231a53 -0.69 •document&print:pdfbox,apachepoi +cv-minimal_underlined 0:7bf8639ec5d3 -0.69 •layoutengines:customdsldesign,s +cv-minimal_underlined 0:8e66776d28d7 -0.68 •build&infrastructure:maven,grad +cv-minimal_underlined 0:1ed4fc7d7768 -0.68 •testing:junit5,assertj,pdfbox-b +cv-minimal_underlined 0:26671c309eb9 -0.67 •distribution:mavencentral,sonat +cv-minimal_underlined 0:68bf0109c6f8 -0.64 education +cv-minimal_underlined 0:0ad1957d6bab -0.93 msccomputerscience +cv-minimal_underlined 0:3fa772117260 -0.97 2019-2021 +cv-minimal_underlined 0:47ce0218bbea -0.94 universityofmanchester +cv-minimal_underlined 0:2ffe115b06e5 -0.93 distinction.thesis:composablelay +cv-minimal_underlined 0:b6749d0b616b -0.80 bscsoftwareengineering +cv-minimal_underlined 0:30f9262640a0 -0.83 2015-2019 +cv-minimal_underlined 0:89ad9656f393 -0.81 imperialcollegelondon +cv-minimal_underlined 0:baa173b4a82e -0.79 first-classhonours.specialisatio +cv-minimal_underlined 0:6d3d5673c39f -0.66 oraclejavacertification +cv-minimal_underlined 0:d40b22f00acb -0.70 2023-2024 +cv-minimal_underlined 0:2669e1f6d55c -0.67 professionaltrack +cv-minimal_underlined 0:3857373829c1 -0.66 java17platformdeep-dive:records, +cv-minimal_underlined 0:2577c0f557b2 -0.63 projects +cv-minimal_underlined 0:b2b029995203 -0.94 •graphcompose(java21,pdfbox,mave +cv-minimal_underlined 0:67593a76ef70 -1.24 declarativejavapdflayoutengine.s +cv-minimal_underlined 0:b9292cbd1454 -1.23 pipelinesforhiringtoolsandbillin +cv-minimal_underlined 0:1b50bb81df5a -0.83 •templatestudio(kotlin,composede +cv-minimal_underlined 0:25cdca2beb8b -13.51 •layoutlint(java21,javaparser,sp +cv-minimal_underlined 0:7488006d7864 -13.81 staticanalyserthatflagsfragileau +cv-minimal_underlined 0:c4d0c415b4f8 -13.80 production. +cv-minimal_underlined 0:fb1927f88597 -13.40 •chromeforge(java,graphcompose,p +cv-minimal_underlined 0:e7e62230eb1f -13.39 editorial-magazinedocumenttoolki +cv-minimal_underlined 0:c2f296ef30a3 -13.36 professionalexperience +cv-minimal_underlined 0:a76f47480818 -13.65 seniorplatformengineer +cv-minimal_underlined 0:060300b18051 -13.69 2024-present +cv-minimal_underlined 0:f890faef907f -13.66 northwindsystems +cv-minimal_underlined 1:49faf14f1f56 -0.73 ledthereusabledocument-generatio +cv-minimal_underlined 1:6bd3f168e89e -0.73 maintenancetimeby70%byretiringpe +cv-minimal_underlined 1:daf65306b3b6 -0.30 softwareengineer +cv-minimal_underlined 1:e7cc1822c6dc -0.33 2021-2024 +cv-minimal_underlined 1:998c1a985022 -0.31 brightleaflabs +cv-minimal_underlined 1:e55664011cda -0.59 builtbackendservicesandproductio +cv-minimal_underlined 1:e80236b6d2b1 -0.59 itexttoacustomlayoutengine,elimi +cv-minimal_underlined 1:41bb54fbae8d -0.16 backendengineer +cv-minimal_underlined 1:3fa772117260 -0.19 2019-2021 +cv-minimal_underlined 1:ef148f221e31 -0.17 helixprintco +cv-minimal_underlined 1:9d31a6bfbc69 -0.45 maintainedahigh-volumeinvoice-pr +cv-minimal_underlined 1:03af8a628309 -0.45 change. +cv-minimal_underlined 1:676dfdd56ad2 -0.12 additionalinformation +cv-minimal_underlined 1:f20997652453 -0.43 languages:english(fluent),german +cv-minimal_underlined 1:ec9d3622395e -0.43 workeligibility:eligibletoworkin +cv-minimal_underlined 1:dd20ae01c3cf -0.42 opensource:maintainerofgraphcomp +cv-minimal_underlined 1:33c35e9d236d -0.42 speaking:jvmsummit2024,devoxxuk2 +cv-mint_editorial 0:8f1010120ed6 -1.30 jordanrivera +cv-mint_editorial 0:2d58f0cadc2d -0.27 platformengineer +cv-mint_editorial 0:093e7d5fdbaa -0.71 contact +cv-mint_editorial 0:89674e6f130e -0.07 +442055551000 +cv-mint_editorial 0:e0f850305ded -0.07 jordan.rivera@example.com +cv-mint_editorial 0:fbeea547d99e -0.07 london,uk +cv-mint_editorial 0:84308bea4540 -0.07 linkedin +cv-mint_editorial 0:c0b0109d9439 -0.07 github +cv-mint_editorial 0:68bf0109c6f8 -0.71 education +cv-mint_editorial 0:0ad1957d6bab -0.16 msccomputerscience +cv-mint_editorial 0:47ce0218bbea -0.28 universityofmanchester +cv-mint_editorial 0:3fa772117260 -0.29 2019-2021 +cv-mint_editorial 0:5993c29826a9 -0.18 bscsoftware +cv-mint_editorial 0:8c85b6639e62 -0.18 engineering +cv-mint_editorial 0:89ad9656f393 -0.30 imperialcollegelondon +cv-mint_editorial 0:30f9262640a0 -0.31 2015-2019 +cv-mint_editorial 0:95c2a0cf9777 -0.20 oraclejava +cv-mint_editorial 0:b00a6c108553 -0.20 certification +cv-mint_editorial 0:2669e1f6d55c -0.32 professionaltrack +cv-mint_editorial 0:d40b22f00acb -0.33 2023-2024 +cv-mint_editorial 0:1900eab6c028 -0.71 profile +cv-mint_editorial 0:924e8fc8d04f 0.29 platformengineerwith10+yearsbuil +cv-mint_editorial 0:df58bf5ac853 0.29 pipelines,layoutengines,anddevel +cv-mint_editorial 0:bedc997db3d0 0.29 inhigh-throughputpdfrendering,se +cv-mint_editorial 0:3be7f615205f 0.29 production-opsscriptsintotyped,s +cv-mint_editorial 0:53e5e7c5a884 -0.71 experience +cv-mint_editorial 0:a76f47480818 -0.16 seniorplatformengineer +cv-mint_editorial 0:d492f2d34b81 -0.28 northwindsystems|2024-present +cv-mint_editorial 0:11a63b6a756a 0.28 ledthereusabledocument-generatio +cv-mint_editorial 0:e9ddcca2381b 0.28 reportingflowsacross8productteam +cv-mint_editorial 0:8e7a066998f5 0.28 by70%byretiringper-teampdfscript +cv-mint_editorial 0:daf65306b3b6 -0.17 softwareengineer +cv-mint_editorial 0:14aeb7d88f36 -0.29 brightleaflabs|2021-2024 +cv-mint_editorial 0:78c890058374 0.27 builtbackendservicesandproductio +cv-mint_editorial 0:798b575aa9c2 0.27 processing2m+documentspermonth.d +cv-mint_editorial 0:337c2b00cc88 0.27 customlayoutengine,eliminatingli +cv-mint_editorial 0:cbec16fb4c22 0.27 from1.4sto380ms. +cv-mint_editorial 1:2b3bcb2b7d1d -0.60 expertise +cv-mint_editorial 1:6cb574fa10b6 -0.05 languages +cv-mint_editorial 1:f2197dc148f6 -0.05 document&print +cv-mint_editorial 1:634db137981a -0.05 layoutengines +cv-mint_editorial 1:86c328e816c6 -0.05 build&infrastructure +cv-mint_editorial 1:cf80cd8aed48 -0.05 testing +cv-mint_editorial 1:933548450302 -0.05 distribution +cv-mint_editorial 1:32c1cf49a2fe -0.60 skills +cv-mint_editorial 1:d5680c2e2769 -0.05 java21 +cv-mint_editorial 1:19a67c2a5369 -0.05 kotlin +cv-mint_editorial 1:95bfacd3a466 -0.05 groovy +cv-mint_editorial 1:11a4a60b518b -0.05 python +cv-mint_editorial 1:4ec7c53222c8 -0.05 sql +cv-mint_editorial 1:57529f20c3ad -0.05 pdfbox +cv-mint_editorial 1:3e860f41a5ea -0.60 social +cv-mint_editorial 1:84308bea4540 -0.30 linkedin +cv-mint_editorial 1:c0b0109d9439 -0.30 github +cv-mint_editorial 1:53e5e7c5a884 -0.60 experience +cv-mint_editorial 1:41bb54fbae8d -0.05 backendengineer +cv-mint_editorial 1:43aab7d19dc6 -0.17 helixprintco|2019-2021 +cv-mint_editorial 1:d9af05f99661 0.39 maintainedahigh-volumeinvoice-pr +cv-mint_editorial 1:1081945512b1 0.39 authoredthecompliancetestharness +cv-modern_professional 0:8f1010120ed6 0.00 jordanrivera +cv-modern_professional 0:89ff05847e96 0.14 london,uk|+442055551000 +cv-modern_professional 0:8817bf9310b6 0.11 jordan.rivera@example.com|linked +cv-modern_professional 0:b944906ed84c 0.01 professionalsummary +cv-modern_professional 0:6fbdc8b79878 -0.42 platformengineerwith10+yearsbuil +cv-modern_professional 0:5f94c50dc5bf 0.01 technicalskills +cv-modern_professional 0:eea537278f83 -0.12 •languages:java21,kotlin,groovy, +cv-modern_professional 0:9c2cd7231a53 -0.12 •document&print:pdfbox,apachepoi +cv-modern_professional 0:7bf8639ec5d3 -0.12 •layoutengines:customdsldesign,s +cv-modern_professional 0:8e66776d28d7 -0.12 •build&infrastructure:maven,grad +cv-modern_professional 0:1ed4fc7d7768 -0.12 •testing:junit5,assertj,pdfbox-b +cv-modern_professional 0:26671c309eb9 -0.12 •distribution:mavencentral,sonat +cv-modern_professional 0:68bf0109c6f8 0.02 education +cv-modern_professional 0:0ad1957d6bab -0.12 msccomputerscience +cv-modern_professional 0:3fa772117260 -0.11 2019-2021 +cv-modern_professional 0:47ce0218bbea -0.17 universityofmanchester +cv-modern_professional 0:2ffe115b06e5 -0.11 distinction.thesis:composablelay +cv-modern_professional 0:b6749d0b616b -0.02 bscsoftwareengineering +cv-modern_professional 0:30f9262640a0 -0.01 2015-2019 +cv-modern_professional 0:89ad9656f393 -0.07 imperialcollegelondon +cv-modern_professional 0:baa173b4a82e -0.01 first-classhonours.specialisatio +cv-modern_professional 0:6d3d5673c39f 0.08 oraclejavacertification +cv-modern_professional 0:d40b22f00acb 0.09 2023-2024 +cv-modern_professional 0:2669e1f6d55c 0.03 professionaltrack +cv-modern_professional 0:3857373829c1 0.09 java17platformdeep-dive:records, +cv-modern_professional 0:2577c0f557b2 0.22 projects +cv-modern_professional 0:b2b029995203 0.09 •graphcompose(java21,pdfbox,mave +cv-modern_professional 0:dd39d2ff3520 -0.21 declarativejavapdflayoutengine.s +cv-modern_professional 0:9ecaa6df6d41 -0.21 invoice/proposalpipelinesforhiri +cv-modern_professional 0:1b50bb81df5a 0.19 •templatestudio(kotlin,composede +cv-modern_professional 0:18eec9e76e2d -0.11 internaltoolforevaluatingcv,prop +cv-modern_professional 0:6bc2807453c6 -0.11 baselinefreezing. +cv-modern_professional 0:25cdca2beb8b 0.29 •layoutlint(java21,javaparser,sp +cv-modern_professional 0:cc2850ddd8ba -0.01 staticanalyserthatflagsfragileau +cv-modern_professional 0:7b985a1d2b08 -0.01 shiptoproduction. +cv-modern_professional 0:fb1927f88597 0.39 •chromeforge(java,graphcompose,p +cv-modern_professional 0:cda7db6c6ea6 0.09 editorial-magazinedocumenttoolki +cv-modern_professional 0:fe63fe18585a 0.09 callouts. +cv-modern_professional 0:c2f296ef30a3 0.53 professionalexperience +cv-modern_professional 0:a76f47480818 0.39 seniorplatformengineer +cv-modern_professional 0:060300b18051 0.40 2024-present +cv-modern_professional 0:f890faef907f 0.34 northwindsystems +cv-modern_professional 0:a6525dacbac7 0.10 ledthereusabledocument-generatio +cv-modern_professional 0:15e3905f4890 0.10 reducedtemplatemaintenancetimeby +cv-modern_professional 0:daf65306b3b6 0.49 softwareengineer +cv-modern_professional 0:e7cc1822c6dc 0.50 2021-2024 +cv-modern_professional 0:998c1a985022 0.44 brightleaflabs +cv-modern_professional 0:e86691b0219f 0.20 builtbackendservicesandproductio +cv-modern_professional 0:4ec57434564a 0.20 migrationfromitexttoacustomlayou +cv-modern_professional 0:41bb54fbae8d 0.59 backendengineer +cv-modern_professional 0:ef148f221e31 0.54 helixprintco +cv-modern_professional 0:a32c7f2401d9 0.30 maintainedahigh-volumeinvoice-pr +cv-modern_professional 0:7068c1d7034b 0.30 everytemplatechange. +cv-modern_professional 1:676dfdd56ad2 -7.64 additionalinformation +cv-modern_professional 1:f20997652453 -7.77 languages:english(fluent),german +cv-modern_professional 1:ec9d3622395e -7.77 workeligibility:eligibletoworkin +cv-modern_professional 1:dd20ae01c3cf -7.77 opensource:maintainerofgraphcomp +cv-modern_professional 1:33c35e9d236d -7.77 speaking:jvmsummit2024,devoxxuk2 +cv-monogram_sidebar 0:093e7d5fdbaa 2.70 contact +cv-monogram_sidebar 0:89674e6f130e 3.35 +442055551000 +cv-monogram_sidebar 0:e0f850305ded 3.87 jordan.rivera@example.com +cv-monogram_sidebar 0:fbeea547d99e 4.39 london,uk +cv-monogram_sidebar 0:84308bea4540 4.91 linkedin +cv-monogram_sidebar 0:c0b0109d9439 5.43 github +cv-monogram_sidebar 0:68bf0109c6f8 5.40 education +cv-monogram_sidebar 0:0ad1957d6bab 5.50 msccomputerscience +cv-monogram_sidebar 0:47ce0218bbea 5.53 universityofmanchester +cv-monogram_sidebar 0:3fa772117260 5.54 2019-2021 +cv-monogram_sidebar 0:b6749d0b616b 5.51 bscsoftwareengineering +cv-monogram_sidebar 0:89ad9656f393 5.54 imperialcollegelondon +cv-monogram_sidebar 0:30f9262640a0 5.55 2015-2019 +cv-monogram_sidebar 0:32c1cf49a2fe 5.52 skills +cv-monogram_sidebar 0:d5680c2e2769 5.67 java21 +cv-monogram_sidebar 0:19a67c2a5369 5.69 kotlin +cv-monogram_sidebar 0:95bfacd3a466 5.71 groovy +cv-monogram_sidebar 0:11a4a60b518b 5.73 python +cv-monogram_sidebar 0:4ec7c53222c8 5.75 sql +cv-monogram_sidebar 0:57529f20c3ad 5.77 pdfbox +cv-monogram_sidebar 0:1814aacb6d5a 5.79 apachepoi(docx/xlsx) +cv-monogram_sidebar 0:136c67657614 2.57 jordan +cv-monogram_sidebar 0:8ba35ebe3d5c 2.58 rivera +cv-monogram_sidebar 0:2d58f0cadc2d 2.76 platformengineer +cv-monogram_sidebar 0:b944906ed84c 2.70 professionalsummary +cv-monogram_sidebar 0:e9b75496bfb4 2.48 platformengineerwith10+yearsbuil +cv-monogram_sidebar 0:84b4d993d952 2.48 developer-facingtemplatesystems. +cv-monogram_sidebar 0:dc1181e6cd7b 2.48 andturningbrittleproduction-opss +cv-monogram_sidebar 0:c2f296ef30a3 2.70 professionalexperience +cv-monogram_sidebar 0:a76f47480818 2.73 seniorplatformengineer +cv-monogram_sidebar 0:f890faef907f 2.77 northwindsystems +cv-monogram_sidebar 0:060300b18051 2.79 2024-present +cv-monogram_sidebar 0:0bf7eb0b1058 2.51 ledthereusabledocument-generatio +cv-monogram_sidebar 0:b9f0f08f8ce0 2.51 teams.reducedtemplatemaintenance +cv-monogram_sidebar 0:ab9a16f78540 2.51 canonicalengine. +cv-monogram_sidebar 0:daf65306b3b6 2.76 softwareengineer +cv-monogram_sidebar 0:998c1a985022 2.80 brightleaflabs +cv-monogram_sidebar 0:e7cc1822c6dc 2.82 2021-2024 +cv-monogram_sidebar 0:e77e909f6ff5 2.54 builtbackendservicesandproductio +cv-monogram_sidebar 0:97c59b2fdb55 2.54 drovethemigrationfromitexttoacus +cv-monogram_sidebar 0:2c2b19cf214d 2.54 latencyfrom1.4sto380ms. +cv-monogram_sidebar 0:2577c0f557b2 2.76 projects +cv-monogram_sidebar 0:abdcacccefe1 3.23 templatestudio(kotlin,composedes +cv-monogram_sidebar 0:041a43f9a663 3.52 andinvoiceoutputacross14designpr +cv-monogram_sidebar 0:f87e2f0c02dc 3.57 layoutlint(java21,javaparser,spo +cv-monogram_sidebar 0:a646f74483b1 3.86 rows,untypedoffsets,implicitpage +cv-monogram_sidebar 0:676dfdd56ad2 4.13 additionalinformation +cv-monogram_sidebar 0:f20997652453 4.16 languages:english(fluent),german +cv-monogram_sidebar 0:ec9d3622395e 4.15 workeligibility:eligibletoworkin +cv-monogram_sidebar 0:dd20ae01c3cf 4.14 opensource:maintainerofgraphcomp +cv-navy_sidebar 0:9fdaa20e32a0 3.19 oliviamartinez +cv-navy_sidebar 0:093e7d5fdbaa 2.66 contact +cv-navy_sidebar 0:01dcad830244 2.87 +1(555)123-4567 +cv-navy_sidebar 0:51deda7d1a4f 2.87 your.email@gmail.com +cv-navy_sidebar 0:d5a0d0abdc64 3.07 newyork,ny,usa +cv-navy_sidebar 0:8d5bb5bf42be 3.02 linkedin.com/in/yourname +cv-navy_sidebar 0:68bf0109c6f8 2.71 education +cv-navy_sidebar 0:6e1410a7b5cb 3.17 masterofsciencein +cv-navy_sidebar 0:e2a530e251d3 3.17 marketing +cv-navy_sidebar 0:d244381bfb58 2.82 newyorkuniversity +cv-navy_sidebar 0:60cebc1ec80c 2.82 newyork,ny +cv-navy_sidebar 0:01e4455cec51 2.82 2020-2022 +cv-navy_sidebar 0:fb1235740d31 3.17 bachelorofbusiness +cv-navy_sidebar 0:512afb6c7631 3.17 administration +cv-navy_sidebar 0:1d9547a99a4e 2.82 universityofcalifornia +cv-navy_sidebar 0:de747164b75f 2.82 losangeles,ca +cv-navy_sidebar 0:7878b9e4385f 2.82 2016-2020 +cv-navy_sidebar 0:32c1cf49a2fe 2.76 skills +cv-navy_sidebar 0:ccae905da5fc 2.87 •digitalmarketing +cv-navy_sidebar 0:3e8cddd043e9 2.87 •dataanalysis +cv-navy_sidebar 0:cb393a256ce2 2.87 •projectmanagement +cv-navy_sidebar 0:45dad5d5c3cc 2.87 •seo/sem +cv-navy_sidebar 0:004ded92a5a3 2.87 •microsoftofficesuite +cv-navy_sidebar 0:e06c8b35cc09 2.87 •googleanalytics +cv-navy_sidebar 0:238987499bc7 2.87 •socialmediastrategy +cv-navy_sidebar 0:a3d99b3cc7e0 2.87 •contentmarketing +cv-navy_sidebar 0:6cb574fa10b6 2.81 languages +cv-navy_sidebar 0:b6234d2ea0d6 2.95 english +cv-navy_sidebar 0:1889f4162fb9 2.95 –native +cv-navy_sidebar 0:77915a7314f0 2.95 spanish–advanced +cv-navy_sidebar 0:21bb36ad0638 2.95 french +cv-navy_sidebar 0:3bc244be050e 2.95 –intermediate +cv-navy_sidebar 0:5518402feccc 2.58 marketingmanager +cv-navy_sidebar 0:7b5815d7a663 2.99 results-drivenmarketingprofessio +cv-navy_sidebar 0:18f8b50d02d8 3.01 developingandexecutingdata-drive +cv-navy_sidebar 0:2adca2422cbe 3.03 growth,increaseengagement,anddel +cv-navy_sidebar 0:b3c222da2e1d 3.05 digitalmarketing,marketresearch, +cv-navy_sidebar 0:53e5e7c5a884 2.72 experience +cv-navy_sidebar 0:8a39b996b27c 2.89 jan2022-present +cv-navy_sidebar 0:f97eeb2fe120 2.75 brightwavesolutions,newyork,ny +cv-navy_sidebar 0:a4beef0c22d9 2.50 •developandimplementintegratedma +cv-navy_sidebar 0:234eaa6417f7 2.50 awarenessby35%andleadgenerationb +cv-navy_sidebar 0:dfd245470d6e 2.50 •manageateamof4marketingspeciali +cv-navy_sidebar 0:94d0b8d13763 2.50 anddesignteamstoalignstrategies. +cv-navy_sidebar 0:5dabf21df91b 2.50 •analyzecampaignperformanceusing +cv-navy_sidebar 0:1cb810ca6189 2.50 optimizeroiandreporting. +cv-navy_sidebar 0:3b172b9ab75e 2.69 marketingspecialist +cv-navy_sidebar 0:d514872487af 2.87 jun2020-dec2021 +cv-navy_sidebar 0:a13f57f4d861 2.48 •executeddigitalmarketingcampaig +cv-navy_sidebar 0:4b308a27b878 2.48 channels. +cv-navy_sidebar 0:39b87fda4a82 2.48 •conductedmarketresearchandcompe +cv-navy_sidebar 0:b088780ed500 2.48 andinformstrategy. +cv-navy_sidebar 0:bafd8ea30ebe 2.48 •createdengagingcontentforblogs, +cv-navy_sidebar 0:88a47597543f 2.48 engagementby40%. +cv-navy_sidebar 0:dcf0600524d2 2.66 marketingintern +cv-navy_sidebar 0:73a85d4a71b0 2.84 jan2020-may2020 +cv-navy_sidebar 0:e31c3dfebb27 2.70 •assistedinplanningandexecutingm +cv-navy_sidebar 0:f7ee178c4b93 2.70 •supportedcontentcreationandsoci +cv-navy_sidebar 0:3ffec90452c5 2.70 •analyzeddataandpreparedreportst +cv-navy_sidebar 0:6ee18b42fbf1 2.69 achievements +cv-navy_sidebar 0:cff13cc228a6 2.50 •increasedwebsitetrafficby60%wit +cv-navy_sidebar 0:fae41a639f96 2.50 strategy. +cv-navy_sidebar 0:b46da9584f4f 2.75 •launchedasuccessfulemailmarketi +cv-navy_sidebar 0:3654c4d2721e 2.75 •received“employeeoftheyear”awar +cv-navy_sidebar 0:e831beb04c00 2.74 certifications +cv-navy_sidebar 0:431b6df4450d 2.80 •googleanalyticsindividualqualif +cv-navy_sidebar 0:334a657f5d85 2.80 •hubspotcontentmarketingcertific +cv-navy_sidebar 0:19323523a3e6 2.80 •facebookblueprintcertification +cv-nordic_clean 0:8f1010120ed6 0.15 jordanrivera +cv-nordic_clean 0:2d58f0cadc2d -0.20 platformengineer +cv-nordic_clean 0:fbeea547d99e -0.20 london,uk +cv-nordic_clean 0:89674e6f130e -0.18 +442055551000 +cv-nordic_clean 0:e0f850305ded -0.16 jordan.rivera@example.com +cv-nordic_clean 0:84308bea4540 -0.14 linkedin +cv-nordic_clean 0:c0b0109d9439 -0.12 github +cv-nordic_clean 0:1900eab6c028 -0.25 profile +cv-nordic_clean 0:32c1cf49a2fe -0.06 skills +cv-nordic_clean 0:873a24d153c8 0.06 languages:java21,kotlin,groovy,p +cv-nordic_clean 0:a1cec3782701 -9.71 layoutengines:customdsldesign,se +cv-nordic_clean 0:3a3b8c3bddd0 -9.69 trees,pagination,snapshottesting +cv-nordic_clean 0:b7d8ca9428a4 -9.67 build&infrastructure:maven,gradl +cv-nordic_clean 0:656a2a3e57e0 -9.65 jitpack,docker,jmhbenchmarking +cv-nordic_clean 0:b8b1a42a45e1 -9.63 testing:junit5,assertj,pdfbox-ba +cv-nordic_clean 0:2ec2836b6df6 -9.61 layout-graphsnapshots,mutationte +cv-nordic_clean 0:74b69eb8de4b -9.59 distribution:mavencentral,sonaty +cv-nordic_clean 0:43ad67a4e3f5 -9.57 signing,jitpack,semanticversioni +cv-nordic_clean 0:68bf0109c6f8 -9.49 education +cv-nordic_clean 0:904a600c3869 -9.57 msccomputerscience/universityofm +cv-nordic_clean 0:3fa772117260 -9.38 2019-2021 +cv-nordic_clean 0:78a380e4d1f0 -9.35 bscsoftwareengineering/imperialc +cv-nordic_clean 0:30f9262640a0 -9.16 2015-2019 +cv-nordic_clean 0:7b476727faf3 -8.85 additional +cv-nordic_clean 0:3b0f5db9217f -8.98 languages:english(fluent),german +cv-nordic_clean 0:d8a971cea795 -9.00 spanish(basic) +cv-nordic_clean 0:ec9d3622395e -8.77 workeligibility:eligibletoworkin +cv-nordic_clean 0:d05b8b335e96 -9.04 opensource:maintainerofgraphcomp +cv-nordic_clean 0:2f3b4176123d -9.06 contributortopdfboxissuetriage. +cv-nordic_clean 0:b6b5a250cb72 -9.08 speaking:jvmsummit2024,devoxxuk2 +cv-nordic_clean 0:7ead14c50085 -9.10 ondeclarativedocumentlayout. +cv-nordic_clean 0:53e5e7c5a884 -0.26 experience +cv-nordic_clean 0:4977534824cc -0.18 seniorplatformengineer/2024-pres +cv-nordic_clean 0:f890faef907f -0.14 northwindsystems +cv-nordic_clean 0:64c4b52dceb1 -0.37 ledthereusabledocument-generatio +cv-nordic_clean 0:b2773305641a -0.38 productteams.reducedtemplatemain +cv-nordic_clean 0:7be82f4e179d -0.39 onecanonicalengine. +cv-nordic_clean 0:7033b2988e4d -0.18 softwareengineer/2021-2024 +cv-nordic_clean 0:998c1a985022 -0.14 brightleaflabs +cv-nordic_clean 0:632618b20dab -0.37 builtbackendservicesandproductio +cv-nordic_clean 0:3c3f0a37747d -0.38 month.drovethemigrationfromitext +cv-nordic_clean 0:e710587711df -0.39 p99renderlatencyfrom1.4sto380ms. +cv-nordic_clean 0:fa8695dd2893 -0.18 backendengineer/2019-2021 +cv-nordic_clean 0:ef148f221e31 -0.14 helixprintco +cv-nordic_clean 0:41d451f465c2 -0.37 maintainedahigh-volumeinvoice-pr +cv-nordic_clean 0:6859fed08b66 -0.38 harnessthatgatedeverytemplatecha +cv-nordic_clean 0:d94eccbb1fbe -0.27 selectedprojects +cv-nordic_clean 0:643428f0ebf8 -0.05 templatestudio(kotlin,composedes +cv-nordic_clean 0:c259a0e7581e 0.09 invoiceoutputacross14designprese +cv-nordic_clean 0:f87e2f0c02dc 0.11 layoutlint(java21,javaparser,spo +cv-nordic_clean 0:a646f74483b1 0.25 rows,untypedoffsets,implicitpage +cv-nordic_clean 0:6793d28e9783 0.27 chromeforge(java,graphcompose,pa +cv-nordic_clean 0:e3cfea265b3b 0.41 graphcompose:cinematiccovers,pul +cv-orange_ops 0:8157f110feec 81.86 warehouseoperationssupervisor +cv-orange_ops 0:a8acc3a90a7b 81.97 +447700900123 +cv-orange_ops 0:e6da1125d5d5 81.97 marcus.bennett@email.com +cv-orange_ops 0:6a3bd39f358d 81.97 birmingham,westmidlands,uk +cv-orange_ops 0:84308bea4540 81.97 linkedin +cv-panel 0:8f1010120ed6 -0.40 jordanrivera +cv-panel 0:2d58f0cadc2d 0.12 platformengineer +cv-panel 0:89ff05847e96 0.19 london,uk|+442055551000 +cv-panel 0:8817bf9310b6 0.21 jordan.rivera@example.com|linked +cv-panel 0:1900eab6c028 0.19 profile +cv-panel 0:80cc87fdc4c4 -0.23 platformengineerwith10+yearsbuil +cv-panel 0:c323ef4c385f -0.21 systems.specialisedinhigh-throug +cv-panel 0:3ff1933dba9a -0.19 typed,snapshot-testedlibrariesth +cv-panel 0:32c1cf49a2fe 0.49 skills +cv-panel 0:eea537278f83 0.27 •languages:java21,kotlin,groovy, +cv-panel 0:7e941e729572 0.09 •document&print:pdfbox,apachepoi +cv-panel 0:9e3166ce2413 0.11 itext,postscript,icccolourprofil +cv-panel 0:ebc70ed9b71b 0.13 •layoutengines:customdsldesign,s +cv-panel 0:dd4f24d85605 0.15 pagination,snapshottesting,visua +cv-panel 0:f5f76d479ec8 0.17 •build&infrastructure:maven,grad +cv-panel 0:656a2a3e57e0 0.19 jitpack,docker,jmhbenchmarking +cv-panel 0:9a6921f79b7d 0.25 •distribution:mavencentral,sonat +cv-panel 0:77a74982066f 0.27 jitpack,semanticversioningdiscip +cv-panel 0:68bf0109c6f8 0.50 education +cv-panel 0:871923f4f0f2 0.28 msccomputerscience-2019-2021 +cv-panel 0:47ce0218bbea 0.30 universityofmanchester +cv-panel 0:51e1ec7daa5a 0.10 distinction.thesis:composablelay +cv-panel 0:d10553cd7368 0.12 deterministicdocumentrendering. +cv-panel 0:ba6d361079f4 0.44 bscsoftwareengineering-2015-2019 +cv-panel 0:89ad9656f393 0.46 imperialcollegelondon +cv-panel 0:4c58bcad7242 0.26 first-classhonours.specialisatio +cv-panel 0:2189b9b3b549 0.28 analysis. +cv-panel 0:8971b01c36bb 0.60 oraclejavacertification-2023-202 +cv-panel 0:2669e1f6d55c 0.62 professionaltrack +cv-panel 0:4f17e3d7d6f4 0.42 java17platformdeep-dive:records, +cv-panel 0:9e6154a3b625 0.44 matching,virtualthreads. +cv-panel 0:7b476727faf3 0.67 additional +cv-panel 0:3f88eb4c530c 0.25 languages:english(fluent),german +cv-panel 0:5d276fee8c17 0.27 (basic) +cv-panel 0:ec9d3622395e 0.49 workeligibility:eligibletoworkin +cv-panel 0:d05b8b335e96 0.31 opensource:maintainerofgraphcomp +cv-panel 0:2f3b4176123d 0.33 contributortopdfboxissuetriage. +cv-panel 0:1ae173b42166 0.35 speaking:jvmsummit2024,devoxxuk2 +cv-panel 0:309255ca6a36 0.37 declarativedocumentlayout. +cv-panel 0:53e5e7c5a884 0.49 experience +cv-panel 0:99b44abc1b3e 0.27 seniorplatformengineer-2024-pres +cv-panel 0:f890faef907f 0.29 northwindsystems +cv-panel 0:ded138c59d03 0.47 softwareengineer-2021-2024 +cv-panel 0:998c1a985022 0.49 brightleaflabs +cv-panel 0:0ed66ac9265d 0.29 builtbackendservicesandproductio +cv-panel 0:17c4ef49d4e6 0.31 pipelinesprocessing2m+documentsp +cv-panel 0:a7dd3c5be76b 0.33 migrationfromitexttoacustomlayou +cv-panel 0:a35401d8bcad 0.35 licensingriskandcuttingp99render +cv-panel 0:649d2d9d10d0 0.37 380ms. +cv-panel 0:019bbdc8d0bb 0.69 backendengineer-2019-2021 +cv-panel 0:ef148f221e31 0.71 helixprintco +cv-panel 0:09cc06a649eb 0.51 maintainedahigh-volumeinvoice-pr +cv-panel 0:090e2184c17b 0.53 pdfs/year)andauthoredthecomplian +cv-panel 0:6f071fdf7529 0.55 gatedeverytemplatechange. +cv-panel 0:2577c0f557b2 0.78 projects +cv-panel 0:b2b029995203 0.56 •graphcompose(java21,pdfbox,mave +cv-panel 0:753f46e4e01b 0.56 •templatestudio(kotlin,composede +cv-panel 0:6eb35b5b9a91 0.58 diff) +cv-panel 0:d919bd2d50b6 0.60 internaltoolforevaluatingcv,prop +cv-panel 0:245b9e56b9de 0.62 across14designpresets.pngdiffing +cv-panel 0:6bc2807453c6 0.64 baselinefreezing. +cv-panel 0:25cdca2beb8b 0.96 •layoutlint(java21,javaparser,sp +cv-panel 0:30e034b9c7b2 0.78 staticanalyserthatflagsfragileau +cv-panel 0:e7ad19d64668 0.80 nestedrows,untypedoffsets,implic +cv-panel 0:95ac1a62c76f 0.82 theyshiptoproduction. +cv-panel 0:fb1927f88597 1.14 •chromeforge(java,graphcompose,p +cv-panel 0:bb865a4ccac1 0.96 editorial-magazinedocumenttoolki +cv-panel 0:8a31ccd889ee 0.98 cinematiccovers,pullquotes,multi +cv-panel 0:fe63fe18585a 1.00 callouts. +cv-professional_sidebar 0:093e7d5fdbaa 2.72 contact +cv-professional_sidebar 0:7f459725e1f6 2.92 +12345678900 +cv-professional_sidebar 0:52bf11c1afe0 2.87 your.email@example.com +cv-professional_sidebar 0:0280d774794b 2.77 city,state,country +cv-professional_sidebar 0:6901da423fd3 2.82 linkedin.com/in/username +cv-professional_sidebar 0:941682c65056 2.77 www.yourwebsite.com +cv-professional_sidebar 0:32c1cf49a2fe 2.67 skills +cv-professional_sidebar 0:38a0963a6364 2.65 java +cv-professional_sidebar 0:7e901df4274b 2.65 springboot +cv-professional_sidebar 0:ab1011e077e1 2.65 sql/databases +cv-professional_sidebar 0:bcfad352e21d 2.65 restfulapis +cv-professional_sidebar 0:60a872f76d54 2.65 microservices +cv-professional_sidebar 0:0c525b8c00a0 2.65 git/github +cv-professional_sidebar 0:d548c5b83fa6 2.65 docker +cv-professional_sidebar 0:d1de52313c86 2.65 testing(junit) +cv-professional_sidebar 0:7e7f74200f0e 2.65 problemsolving +cv-professional_sidebar 0:d4e16994df90 2.65 communication +cv-professional_sidebar 0:68bf0109c6f8 2.62 education +cv-professional_sidebar 0:9928b2859b5c 2.58 degreename +cv-professional_sidebar 0:4dca5f288079 2.55 universityname +cv-professional_sidebar 0:dbbecd8a99c4 2.53 2016–2020 +cv-professional_sidebar 0:8789bd1a8f91 2.44 2012–2016 +cv-professional_sidebar 0:6cb574fa10b6 2.39 languages +cv-professional_sidebar 0:b6234d2ea0d6 2.37 english +cv-professional_sidebar 0:87d8ab25d296 2.37 ukrainian +cv-professional_sidebar 0:aa304b5d1d72 2.37 russian +cv-professional_sidebar 0:22f6e39681dd 3.20 yourname +cv-professional_sidebar 0:ce613d3da423 2.68 yourprofessionaltitle +cv-professional_sidebar 0:1900eab6c028 2.82 profile +cv-professional_sidebar 0:53e5e7c5a884 2.86 experience +cv-professional_sidebar 0:59d596674b3e 2.86 javabackenddeveloper +cv-professional_sidebar 0:50c8c8fd14da 2.97 2023–present +cv-professional_sidebar 0:bb2dd5ad974a 2.85 productstudio|london,uk +cv-professional_sidebar 0:ceaee04c6187 2.86 •builtsecurespringbootrestapisfo +cv-professional_sidebar 0:ee25fe80eeb5 2.84 •addedjwtauthentication,validati +cv-professional_sidebar 0:f44671369999 2.82 •tunedjpaqueriesandpostgresqlind +cv-professional_sidebar 0:2bc488c1b6a1 2.80 •addedjunittestsanddockerenviron +cv-professional_sidebar 0:798164649242 2.79 softwaredeveloper +cv-professional_sidebar 0:d8ce4fa21722 2.90 2021–2023 +cv-professional_sidebar 0:8824d2ae15b0 2.78 digitalsolutionsltd|manchester,u +cv-professional_sidebar 0:2e3ec0f8e8c9 2.79 •integratedinternalserviceswitht +cv-professional_sidebar 0:34a68587109d 2.77 •deliveredflywaymigrationsandimp +cv-professional_sidebar 0:d3e359b3c9ce 2.75 •introducedstructuredloggingandp +cv-professional_sidebar 0:69a682467a69 2.73 •workedwithfrontendengineersoncl +cv-professional_sidebar 0:bcde83e4c2f6 2.72 juniorjavadeveloper +cv-professional_sidebar 0:6c39082d9294 2.83 2019–2021 +cv-professional_sidebar 0:25bd55f46bdf 2.71 techworks|remote +cv-professional_sidebar 0:1ee9d7642bbb 2.72 •developedjavaservicesandreusabl +cv-professional_sidebar 0:a96267ad58f6 2.70 •fixeddefectsacrossrest,persiste +cv-professional_sidebar 0:dfaa35ac8977 2.68 •wrotejunittestsandsupportedcont +cv-professional_sidebar 0:a232e51261bb 2.66 •documentedendpointsandoperation +cv-professional_sidebar 0:2577c0f557b2 2.71 projects +cv-professional_sidebar 0:55f503c6b9a8 2.71 cvrewriter +cv-professional_sidebar 0:158a323a7ba4 2.82 2026 +cv-professional_sidebar 0:d8afbbbd5294 2.79 graphcompose +cv-professional_sidebar 0:b2b2f104d32c 2.90 2025 +cv-professional_sidebar 0:403f46579303 2.63 declarativejavaandkotlindocument +cv-professional_sidebar 0:9c15026b6402 2.63 multi-formatrendering. +cv-professional_sidebar 0:07a0b0962107 2.93 references +cv-professional_sidebar 0:5bf64f34444e 2.93 availableuponrequest. +cv-serif_headline 0:5f6ca99b67a6 -0.51 alexandermorgan +cv-serif_headline 0:daf65306b3b6 -0.32 softwareengineer +cv-serif_headline 0:01dcad830244 -0.22 +1(555)123-4567 +cv-serif_headline 0:3eef38c97138 -0.18 alex.morgan@email.com +cv-serif_headline 0:d5a0d0abdc64 -0.15 newyork,ny,usa +cv-serif_headline 0:a0a064d0e491 -0.12 linkedin.com/in/alexmorgan +cv-serif_headline 0:0a52c5f62d73 -0.09 github.com/alexmorgan +cv-serif_headline 0:ff00f99bc03c -0.36 softwareengineerwith5+yearsofexp +cv-serif_headline 0:7fd0d2d0fde8 -0.37 backendservices.proficientinjava +cv-serif_headline 0:81bb94512f0b -0.38 systemdesign,anddeliveringhigh-q +cv-serif_headline 0:53e5e7c5a884 0.00 experience +cv-serif_headline 0:b37c6a2d5d11 0.04 seniorsoftwareengineer +cv-serif_headline 0:e7227bbe0c40 0.04 jan2022–present +cv-serif_headline 0:f4e5af202d87 0.10 techsolutionsinc.|newyork,ny +cv-serif_headline 0:e6f39d8143bc -0.15 •designedanddevelopedmicroservic +cv-serif_headline 0:f41ff924454c -0.15 over1mactiveusers. +cv-serif_headline 0:4b16c2d8cb52 0.10 •implementedrestfulapisandintegr +cv-serif_headline 0:5fd82b15227c -0.14 •optimizeddatabasequeriesandappl +cv-serif_headline 0:38a7ed6f25a8 -0.15 35%. +cv-serif_headline 0:df1ebc2b61e1 0.11 •ledateamof4engineersandmentored +cv-serif_headline 0:ee96c91a5683 0.20 jun2019–dec2021 +cv-serif_headline 0:01bb3d9e4f47 0.26 innovatechltd.|newyork,ny +cv-serif_headline 0:1e69401eddeb 0.27 •builtscalablewebapplicationsusi +cv-serif_headline 0:babe9476fc8f 0.28 •collaboratedwithcross-functiona +cv-serif_headline 0:23cd6cbea0ca 0.28 •implementedci/cdpipelinesusingj +cv-serif_headline 0:45cca445fa04 0.29 •improvedcodequalityandreducedpr +cv-serif_headline 0:78b24f507c79 0.39 juniorsoftwareengineer +cv-serif_headline 0:07b9e4fd0073 0.38 jun2018–may2019 +cv-serif_headline 0:2198cdea3aba 0.44 devsphere|newyork,ny +cv-serif_headline 0:173ed9f7b6b1 0.45 •assistedindevelopingandmaintain +cv-serif_headline 0:0a1fbe0c94d9 0.45 •wroteunitandintegrationteststoe +cv-serif_headline 0:bd5eec545fa8 0.46 •participatedinagileceremoniesan +cv-serif_headline 0:2577c0f557b2 0.54 projects +cv-serif_headline 0:c03ade0f8985 0.59 e-commerceplatform +cv-serif_headline 0:f726495cb8e6 0.59 java,springboot,react,postgresql +cv-serif_headline 0:09271909c2c5 0.36 developedafull-stacke-commerce +cv-serif_headline 0:a395647dca6c 0.36 platformwithuserauthentication,p +cv-serif_headline 0:19ed6c29c718 0.36 catalog,cart,andpaymentintegrati +cv-serif_headline 0:1c1e5cfc5031 0.59 taskmanagementapi +cv-serif_headline 0:4e8f2a166cfe 0.59 java,springboot,mongodb,docker +cv-serif_headline 0:68bf0109c6f8 0.00 education +cv-serif_headline 0:6a75b3a10877 0.07 m.s.incomputerscience +cv-serif_headline 0:d244381bfb58 0.10 newyorkuniversity +cv-serif_headline 0:d52c9df2c684 0.14 2018–2020|newyork,ny +cv-serif_headline 0:8913dcd543d0 0.04 b.s.incomputerscience +cv-serif_headline 0:ee7a3f01df1e 0.08 universityofcalifornia,losangele +cv-serif_headline 0:5f29961bb46f 0.11 2014–2018|losangeles,ca +cv-serif_headline 0:32c1cf49a2fe 0.07 skills +cv-serif_headline 0:6cb574fa10b6 0.15 languages +cv-serif_headline 0:38a0963a6364 0.17 java +cv-serif_headline 0:11a4a60b518b 0.21 python +cv-serif_headline 0:beb45f932639 0.25 javascript/typescript +cv-serif_headline 0:4ec7c53222c8 0.29 sql +cv-serif_headline 0:f9bfab9d2d9b 0.30 frameworks&libraries +cv-serif_headline 0:7e901df4274b 0.32 springboot +cv-serif_headline 0:ec34a1012c4c 0.36 hibernate +cv-serif_headline 0:275976081ce1 0.40 react +cv-serif_headline 0:324373d862ea 0.44 node.js +cv-serif_headline 0:008231aaf999 0.48 express +cv-serif_headline 0:1d446138494b 0.49 databases +cv-serif_headline 0:430005175c4c 0.51 mysql +cv-serif_headline 0:a478b4566be5 0.55 postgresql +cv-serif_headline 0:1cc9a79bdaf0 0.59 mongodb +cv-serif_headline 0:7dc785098784 0.61 tools&technologies +cv-serif_headline 0:d548c5b83fa6 0.63 docker +cv-serif_headline 0:94abcb2d2773 0.67 kubernetes +cv-serif_headline 0:424e9661130e 0.71 jenkins +cv-serif_headline 0:9a881b9b9f23 0.75 git +cv-serif_headline 0:7d1507284a57 0.78 aws +cv-serif_headline 0:b78463a925a0 0.80 softskills +cv-serif_headline 0:1b3b2a6f7d93 0.83 problemsolving|communication +cv-serif_headline 0:c3738991cb30 0.84 teamwork|adaptability +cv-serif_headline 0:7bce4fcdeb12 0.85 leadership|timemanagement +cv-serif_headline 0:e831beb04c00 0.81 certifications +cv-serif_headline 0:eb246465ec07 1.47 awscertified +cv-serif_headline 0:eb2d55035d04 9.95 (aws) +cv-serif_headline 0:39f98aca30e7 1.47 oraclecertified +cv-serif_headline 0:6b5ac810679c 0.83 professional, +cv-serif_headline 0:d52585984184 0.95 javase17(oracle) +cv-serif_headline 0:72be4e94032e 1.47 dockercertified +cv-serif_headline 0:178b6e061a04 9.83 associate +cv-serif_headline 0:418860eec88d 0.95 (dca) +cv-serif_headline 0:958c81247482 1.47 springprofessional +cv-serif_headline 0:b00a6c108553 0.83 certification +cv-serif_headline 0:485507d8292d 0.95 (vmware) +cv-serif_headline 0:64a3f18ab4fa 0.83 fundamentals +cv-serif_headline 0:f4bf1c62326f 0.95 (linuxfoundation) +cv-serif_headline 0:6ee18b42fbf1 8.20 achievements +cv-serif_headline 0:e3072a9546f9 8.28 engineeroftheyear–2023 +cv-serif_headline 0:daa04ec0f117 8.28 performanceoptimization +cv-serif_headline 0:781774e3ebfe 8.03 improvedsystemefficiencyby40% +cv-serif_headline 0:95099c880a38 8.07 throughdatabaseandcodeoptimizati +cv-serif_headline 0:4d752ab730a4 8.28 successfulmigration +cv-sidebar_portrait 0:8f1010120ed6 2.32 jordanrivera +cv-sidebar_portrait 0:89674e6f130e 3.02 +442055551000 +cv-sidebar_portrait 0:e0f850305ded 3.02 jordan.rivera@example.com +cv-sidebar_portrait 0:fbeea547d99e 3.02 london,uk +cv-sidebar_portrait 0:84308bea4540 3.02 linkedin +cv-sidebar_portrait 0:c0b0109d9439 3.02 github +cv-sidebar_portrait 0:68bf0109c6f8 2.69 education +cv-sidebar_portrait 0:0ad1957d6bab 2.75 msccomputerscience +cv-sidebar_portrait 0:47ce0218bbea 2.76 universityofmanchester +cv-sidebar_portrait 0:3fa772117260 2.75 2019-2021 +cv-sidebar_portrait 0:b6749d0b616b 2.75 bscsoftwareengineering +cv-sidebar_portrait 0:89ad9656f393 2.76 imperialcollegelondon +cv-sidebar_portrait 0:30f9262640a0 2.75 2015-2019 +cv-sidebar_portrait 0:32c1cf49a2fe 2.73 skills +cv-sidebar_portrait 0:d5680c2e2769 2.78 java21 +cv-sidebar_portrait 0:19a67c2a5369 2.78 kotlin +cv-sidebar_portrait 0:95bfacd3a466 2.78 groovy +cv-sidebar_portrait 0:11a4a60b518b 2.78 python +cv-sidebar_portrait 0:4ec7c53222c8 2.78 sql +cv-sidebar_portrait 0:6cb574fa10b6 2.77 languages +cv-sidebar_portrait 0:d359699acbd5 2.83 english(fluent) +cv-sidebar_portrait 0:a09174803665 2.81 german(intermediate) +cv-sidebar_portrait 0:d8a971cea795 2.79 spanish(basic) +cv-sidebar_portrait 0:2d58f0cadc2d 2.82 platformengineer +cv-sidebar_portrait 0:3c69d6bb4892 2.73 professionalprofile +cv-sidebar_portrait 0:924e8fc8d04f 2.55 platformengineerwith10+yearsbuil +cv-sidebar_portrait 0:df58bf5ac853 2.57 pipelines,layoutengines,anddevel +cv-sidebar_portrait 0:b6d3e08745d8 2.59 inhigh-throughputpdfrendering,se +cv-sidebar_portrait 0:3ea39d224e93 2.61 brittleproduction-opsscriptsinto +cv-sidebar_portrait 0:53e5e7c5a884 2.81 experience +cv-sidebar_portrait 0:a76f47480818 2.89 seniorplatformengineer +cv-sidebar_portrait 0:d492f2d34b81 2.88 northwindsystems|2024-present +cv-sidebar_portrait 0:11a63b6a756a 2.64 ledthereusabledocument-generatio +cv-sidebar_portrait 0:e9ddcca2381b 2.66 reportingflowsacross8productteam +cv-sidebar_portrait 0:8e7a066998f5 2.68 by70%byretiringper-teampdfscript +cv-sidebar_portrait 0:daf65306b3b6 2.96 softwareengineer +cv-sidebar_portrait 0:14aeb7d88f36 2.95 brightleaflabs|2021-2024 +cv-sidebar_portrait 0:78c890058374 2.71 builtbackendservicesandproductio +cv-sidebar_portrait 0:798b575aa9c2 2.73 processing2m+documentspermonth.d +cv-sidebar_portrait 0:2577c0f557b2 2.97 projects +cv-sidebar_portrait 0:0f2c67872251 3.05 graphcompose(java21,pdfbox,maven +cv-sidebar_portrait 0:1538919cd7d4 2.79 declarativejavapdflayoutengine.s +cv-sidebar_portrait 0:f6d88deff945 2.81 snapshottesting.powersproduction +cv-sidebar_portrait 0:0869235b9cf7 2.83 hiringtoolsandbillingsystems.(op +cv-sidebar_portrait 0:d73d02174dc9 3.11 templatestudio(kotlin,composedes +cv-sidebar_portrait 0:5ebdeb66a893 2.85 internaltoolforevaluatingcv,prop +cv-sidebar_portrait 0:a66d3183c752 2.87 presets.pngdiffing,side-by-sidel +cv-slate_orange 0:4b64999089cd 2.53 versatileprofessional +cv-slate_orange 0:73c506bc28be 2.62 operations•customersuccess•coord +cv-slate_orange 0:b4ac3856722a 3.07 (555)123-4567 +cv-slate_orange 0:422684be6cf9 3.07 daniel.harper@email.com +cv-slate_orange 0:84308bea4540 3.07 linkedin +cv-slate_orange 0:a64d6af50109 3.07 austin,texas•opentorelocate +cv-slate_orange 0:32c1cf49a2fe 2.83 skills +cv-slate_orange 0:ee41e992b046 3.28 customerserviceexcellence +cv-slate_orange 0:39433b0c8c42 3.28 operations&processsupport +cv-slate_orange 0:68ac2246858d 3.28 project&calendarmanagement +cv-slate_orange 0:d2b0c62842b8 3.28 datamanagement&reporting +cv-slate_orange 0:713ccc3fc2fc 3.28 communication&stakeholders +cv-slate_orange 0:010f2ad55bed 3.28 problemsolving&adaptability +cv-slate_orange 0:02020d943fbc 3.28 sales&relationshipbuilding +cv-slate_orange 0:88cc29c2fda2 3.28 microsoftoffice&googlesuite +cv-slate_orange 0:e37d86244e99 3.28 crmsystems(salesforce,hubspot) +cv-slate_orange 0:d70e5edb4685 3.28 timemanagement&prioritization +cv-slate_orange 0:8bab53aa1bee 2.85 selectedachievements +cv-slate_orange 0:b08c44dac044 3.31 processimprovement +cv-slate_orange 0:c7966365f508 3.99 designedanewtrackingsystemthat +cv-slate_orange 0:3a5ad5d0dc8d 3.54 reducedreportingtimeby30%and +cv-slate_orange 0:74821a85e7b9 3.09 improvedaccuracy. +cv-slate_orange 0:dd9532e202a3 3.30 customersatisfaction +cv-slate_orange 0:dfc9a4fd0657 3.98 maintaineda96%customer +cv-slate_orange 0:5e04b5e4dbf9 3.53 satisfactionratingthroughrespons +cv-slate_orange 0:c119f318eaae 3.08 supportandissueresolution. +cv-slate_orange 0:365853229c97 3.29 revenuecontribution +cv-slate_orange 0:292a456730c2 3.97 consistentlyexceededmonthlysales +cv-slate_orange 0:8eb387deb3e1 3.52 goalsby15–20%throughrelationship +cv-slate_orange 0:77706bc9ed09 3.07 buildingandconsultativeservice. +cv-slate_orange 0:6cb574fa10b6 2.85 languages +cv-slate_orange 0:b6234d2ea0d6 3.37 english +cv-slate_orange 0:bef32d2c315a 3.34 native +cv-slate_orange 0:890744623577 3.62 spanishprofessionalworking +cv-slate_orange 0:21bb36ad0638 3.87 french +cv-slate_orange 0:fbb7b5bf4ca3 3.84 basic +cv-slate_orange 0:676dfdd56ad2 3.61 additionalinformation +cv-slate_orange 0:ef68dac1790b 4.06 availability:full-time +cv-slate_orange 0:6795aec0e50a 4.06 willingtorelocate:yes +cv-slate_orange 0:3c69d6bb4892 2.83 professionalprofile +cv-slate_orange 0:36eb8f626c42 2.79 adaptableandresourcefulprofessio +cv-slate_orange 0:f4e999c08086 2.81 customerservice,sales,andproject +cv-slate_orange 0:41221430e3f8 2.83 organizationalskills,andtheabili +cv-slate_orange 0:324c4509a3e4 2.85 managingpriorities,buildingrelat +cv-slate_orange 0:57271827af78 2.87 customersatisfaction,andbusiness +cv-slate_orange 0:c2f296ef30a3 2.95 professionalexperience +cv-slate_orange 0:da2ea6509bec 3.42 operationscoordinator +cv-slate_orange 0:e7227bbe0c40 3.38 jan2022–present +cv-slate_orange 0:9f7cecddf317 3.37 brightstartlogistics,austin,tx +cv-slate_orange 0:e0bbd6c9782e 3.35 •coordinatedailyoperationsandsch +cv-slate_orange 0:dc9a542f8db9 3.34 •developandmaintaindashboardsand +cv-slate_orange 0:66acc2e5b891 3.33 •streamlinecommunicationbetweend +cv-slate_orange 0:8bd3fd672f95 3.32 •managevendorrelationshipsandass +cv-slate_orange 0:dd7872236383 3.34 customersupportspecialist +cv-slate_orange 0:1734c189cfe2 3.30 jun2020–dec2021 +cv-slate_orange 0:b9dfc8902d16 3.29 techwavesolutions,remote +cv-slate_orange 0:56391e23e83a 3.27 •providedtechnicalsupporttocusto +cv-slate_orange 0:7eb50a39cf50 3.26 •resolvedanaverageof40+inquiries +cv-slate_orange 0:46f632748ba8 3.25 •createdknowledgebasearticlesand +cv-slate_orange 0:02b44f46125c 3.24 •collaboratedwithproductandengin +cv-slate_orange 0:a1707ef6164e 3.26 salesassociate +cv-slate_orange 0:2bc613d4e516 3.22 mar2019–may2020 +cv-slate_orange 0:bb7253ff7002 3.21 urbanoutfitters,austin,tx +cv-slate_orange 0:aaa52372c317 2.79 •consistentlyexceededsalestarget +cv-slate_orange 0:198e638fe8f3 2.80 personalizedcustomerservice. +cv-slate_orange 0:dabead95ee7e 3.19 •builtandmaintainedstrongcustome +cv-slate_orange 0:ff3f5f9ca7a0 3.18 •merchandisedfloordisplaysandcon +cv-slate_orange 0:05a39f2908ba 3.17 •recognizedas“topperformer”forq4 +cv-slate_orange 0:832235539465 3.19 administrativeassistant/projecta +cv-slate_orange 0:2ccfc04a3ae7 3.15 may2018–feb2019 +cv-slate_orange 0:cfc5fd80ae80 3.14 greenfieldnonprofitinitiative,au +cv-slate_orange 0:b8aecb03e7ed 3.12 •supportedprojectmanagerswithsch +cv-slate_orange 0:77f797d4d64c 3.11 •managedcalendars,travelarrangem +cv-slate_orange 0:80a7a6cdc723 3.10 •maintaineddonorrecordsandprepar +cv-slate_orange 0:51539a61bb62 3.09 •assistedwitheventplanningandcom +cv-slate_orange 0:68bf0109c6f8 2.70 education +cv-slate_orange 0:84ba6b88f439 2.70 certifications&training +cv-slate_orange 0:9d7190053be6 3.10 bachelorofartsincommunications +cv-slate_orange 0:f592b4ba6aa4 3.07 universityoftexasataustin +cv-slate_orange 0:3f84d2e470fe 3.07 austin,tx•graduatedmay2018 +cv-slate_orange 0:99b337b1faf4 3.10 •googleprojectmanagementcertific +cv-slate_orange 0:4d1b69dc33a1 3.40 •hubspotcustomerservicecertifica +cv-slate_orange 0:01a1e16912b7 3.70 •microsoftexcel:advancedformulas +cv-slate_orange 0:07ef0ade6bb2 4.00 •servsafefoodhandlercertificatio +cv-teal_pulse 0:a5800de7a5df -1.87 isabellamoore +cv-teal_pulse 0:aea71faf1482 -0.38 registerednurse +cv-teal_pulse 0:613c7b77c405 1.08 manchester,unitedkingdom +cv-teal_pulse 0:4ddba42ce115 0.93 isabella.moore@email.com +cv-teal_pulse 0:a8acc3a90a7b 0.68 +447700900123 +cv-teal_pulse 0:84308bea4540 0.83 linkedin +cv-teal_pulse 0:32c1cf49a2fe -0.25 skills +cv-teal_pulse 0:9836c1fde1ab -0.09 patientassessment +cv-teal_pulse 0:7344802265f6 -0.11 careplanning +cv-teal_pulse 0:32b1d161b612 -0.13 medicationadministration +cv-teal_pulse 0:b9fff349f0ab -0.15 clinicaldocumentation +cv-teal_pulse 0:cc981996b30d -0.16 infectionprevention +cv-teal_pulse 0:48d90339937f -0.18 ivtherapy +cv-teal_pulse 0:a392ecf06df5 -0.20 woundcare +cv-teal_pulse 0:7016cd40c2ef -0.21 patienteducation +cv-teal_pulse 0:ff0a6cdd9508 -0.23 safeguarding +cv-teal_pulse 0:7b6511893d61 -0.25 teamcollaboration +cv-teal_pulse 0:d9ff32cb0736 -0.26 dischargecoordination +cv-teal_pulse 0:ceb75137b9fb -0.28 electronichealthrecords +cv-teal_pulse 0:b944906ed84c -0.30 professionalsummary +cv-teal_pulse 0:f8343b9099ef 0.65 compassionateregisterednursewith +cv-teal_pulse 0:50347a4f84fc 0.64 high-qualitypatientcareacrossacu +cv-teal_pulse 0:d24f5be95f6a 0.63 settings.skilledinpatientassessm +cv-teal_pulse 0:824bf3935437 0.62 multidisciplinarycollaboration,d +cv-teal_pulse 0:8d526cd52034 0.60 accurateclinicaldocumentation.kn +cv-teal_pulse 0:4d61455b351b 0.59 communication,andpatient-centred +cv-teal_pulse 0:c2f296ef30a3 -0.35 professionalexperience +cv-teal_pulse 0:5cad9261fd60 -0.06 seniorstaffnurse—manchesterroyal +cv-teal_pulse 0:5149e8e5e6b6 -0.08 deliverdirectnursingcareforadult +cv-teal_pulse 0:8dcc0d173718 -0.08 coordinatecareplanswithdoctors,t +cv-teal_pulse 0:325626fb2f7a -0.09 supervisejuniornursesandsupports +cv-teal_pulse 0:c2864de08768 -0.09 improveddischargecoordinationand +cv-teal_pulse 0:3ac4bbda9488 -0.10 maintainprecisedocumentationande +cv-teal_pulse 0:59a7aa760eea -0.07 staffnurse—salfordgeneralhospita +cv-teal_pulse 0:99bff63b0b23 -0.09 providednursingcareacrossmedical +cv-teal_pulse 0:dee1c05c380e -0.09 administeredmedications,monitore +cv-teal_pulse 0:a0cc1403feda -0.10 supportedinfectioncontrolprocedu +cv-teal_pulse 0:25239222c011 -0.10 builtstrongrapportwithpatientsan +cv-teal_pulse 0:f25d4331b19b -0.08 communitynurse—northcarecommunit +cv-teal_pulse 0:19eefb6b6368 -0.09 deliveredhome-basednursingcarean +cv-teal_pulse 0:16412b3fd5d8 -0.10 managedwoundcare,medicationsuppo +cv-teal_pulse 0:fb42708d13d3 -0.10 workedcloselywithgps,socialservi +cv-teal_pulse 0:68bf0109c6f8 -0.26 education +cv-teal_pulse 0:c1596da36d69 -0.21 bsc(hons)adultnursing +cv-teal_pulse 0:47ce0218bbea -0.22 universityofmanchester +cv-teal_pulse 0:1da060005bfc -0.25 2013–2016 +cv-teal_pulse 0:e831beb04c00 -0.26 certifications +cv-teal_pulse 0:ec8bd1e014bb -0.19 nmcregisterednurse +cv-teal_pulse 0:669f27afcccf -0.22 immediatelifesupport(ils) +cv-teal_pulse 0:34b32be15830 -0.25 venepunctureandcannulationcertif +cv-teal_pulse 0:32215e12a886 -0.28 safeguardingadultslevel3 +cv-teal_pulse 0:676dfdd56ad2 -0.26 additionalinformation +cv-teal_pulse 0:b035d3696f4e -0.22 righttowork:unitedkingdom +cv-teal_pulse 0:cfa1d6dd779c -0.22 availability:1monthnotice +cv-teal_pulse 0:b9b8965717b3 -0.23 compassionatecare.clinicalexcell +cv-terracotta_rail 0:920a88ef5818 0.35 oliver.bennett@email.com +cv-terracotta_rail 0:a8acc3a90a7b 0.35 +447700900123 +cv-terracotta_rail 0:e8c463a6c54d 0.35 bristol,unitedkingdom +cv-terracotta_rail 0:84308bea4540 0.35 linkedin +cv-terracotta_rail 0:32c1cf49a2fe -0.21 skills +cv-terracotta_rail 0:4e1fe6feb1d5 0.37 architecturaldesign +cv-terracotta_rail 0:4b1ce58ed984 0.37 conceptdevelopment +cv-terracotta_rail 0:e8386273ac51 0.37 planningapplications +cv-terracotta_rail 0:09033be5db1b 0.37 technicaldrawings +cv-terracotta_rail 0:de4e9e607840 0.37 revit +cv-terracotta_rail 0:50f08e64c5a6 0.37 autocad +cv-terracotta_rail 0:af7c811cbfce 0.37 bimcoordination +cv-terracotta_rail 0:531b7caeda92 0.37 designpresentations +cv-terracotta_rail 0:bfcd894f9698 0.37 projectdelivery +cv-terracotta_rail 0:9a1192ab93d0 0.37 stakeholdermanagement +cv-terracotta_rail 0:48fe07df4f1c 0.37 sustainabledesign +cv-terracotta_rail 0:95626582af55 0.37 buildingregulations +cv-terracotta_rail 0:35390f5453e8 -0.18 software +cv-terracotta_rail 0:2d5d6ea604fd 0.35 rhino +cv-terracotta_rail 0:5971b0dc0625 0.35 sketchup +cv-terracotta_rail 0:e9d09d8ff5bb 0.35 adobeindesign +cv-terracotta_rail 0:3f4a09b92ccf 0.35 photoshop +cv-terracotta_rail 0:3abe8752b2c0 0.35 microsoftoffice +cv-terracotta_rail 0:e831beb04c00 -0.21 certifications +cv-terracotta_rail 0:3ad949ee8543 0.32 arbregisteredarchitect +cv-terracotta_rail 0:fa807066704f 0.32 ribacharteredmember +cv-terracotta_rail 0:676dfdd56ad2 -0.24 additionalinformation +cv-terracotta_rail 0:705ab1a9cb61 -0.22 languages: +cv-terracotta_rail 0:9ee0e2dddc94 -0.24 english(native), +cv-terracotta_rail 0:de6d9b2b98d4 -0.25 spanish(conversational) +cv-terracotta_rail 0:c75efa67c038 -0.26 righttowork: +cv-terracotta_rail 0:2474519f77a9 -0.28 unitedkingdom +cv-terracotta_rail 0:76a9cead2e9f -0.29 availability: +cv-terracotta_rail 0:d14126d0f8f4 -0.30 1monthnotice +cv-terracotta_rail 0:0f08c27aab24 0.61 oliverbennett +cv-terracotta_rail 0:334d566a27b2 -0.28 seniorarchitect +cv-terracotta_rail 0:b944906ed84c -0.16 professionalsummary +cv-terracotta_rail 0:bbb25a1ee248 0.10 provenexpertiseindesigndevelopme +cv-terracotta_rail 0:bf4ab196cbb6 0.08 strongfocusonsustainability,qual +cv-terracotta_rail 0:0dfcf4444281 0.06 collaborativecommunicatorskilled +cv-terracotta_rail 0:22fdcc5cfe61 0.04 leadingmultidisciplinaryteamstoa +cv-terracotta_rail 0:c2f296ef30a3 -0.30 professionalexperience +cv-terracotta_rail 0:086c0e036e67 -0.30 2021–present +cv-terracotta_rail 0:b3af3b56129a -0.33 northlinestudio,bristol,uk +cv-terracotta_rail 0:27819bba9c0f -0.54 •leaddesignpackagesfromconceptth +cv-terracotta_rail 0:d49fddeb9701 -0.57 andmixed-useprojects. +cv-terracotta_rail 0:1d6340aa301d -0.59 •coordinatestructural,m&e,landsc +cv-terracotta_rail 0:7062411e212a -0.61 buildablesolutions. +cv-terracotta_rail 0:bf75379f5486 -0.63 •prepareandmanageplanningapplica +cv-terracotta_rail 0:894e988cdf94 -0.65 documentation. +cv-terracotta_rail 0:40c00971356d -0.67 •presentandcommunicatedesignprop +cv-terracotta_rail 0:a218287e182e -0.69 anddrivingprojectsforward. +cv-terracotta_rail 0:f2e40fc1edb7 -0.49 architect +cv-terracotta_rail 0:f7d1049ec64b -0.49 2018–2021 +cv-terracotta_rail 0:59e0b0e4edc9 -0.52 urbanformpartners,bath,uk +cv-terracotta_rail 0:4f2dbefcbec0 -0.74 •developedconceptandtechnicaldes +cv-terracotta_rail 0:e2a5e1a23401 -0.76 educationprojects. +cv-terracotta_rail 0:dedc7bfc0f49 -0.78 •preparedcoordinateddrawingsets, +cv-terracotta_rail 0:abba33f53e5a -0.80 construction. +cv-terracotta_rail 0:91a14d5e3005 -0.62 •supportedprojectdeliveryonsite, +cv-terracotta_rail 0:6b3142466e26 -0.84 •coordinatedwithcontractorsandco +cv-terracotta_rail 0:1150d4ba642c -0.86 intent. +cv-terracotta_rail 0:2d2cd24f87d7 -0.67 partiiarchitecturalassistant +cv-terracotta_rail 0:3b8048983ecc -0.67 2016–2018 +cv-terracotta_rail 0:ebd31e5e7505 -0.69 axisdesignworkshop,cardiff,uk +cv-terracotta_rail 0:e48e46c3ddf3 -0.71 •supportedseniorarchitectsacross +cv-terracotta_rail 0:810bbb784193 -0.93 •producedcadandrevitdrawings,mod +cv-terracotta_rail 0:74b6191dd1ef -0.97 •undertookresearch,preparedprese +cv-terracotta_rail 0:d94eccbb1fbe -0.78 selectedprojects +cv-terracotta_rail 0:6b12fdc11f2a -0.83 harbourpoint +cv-terracotta_rail 0:59765cc5b00d -0.84 mixed-useregeneration +cv-terracotta_rail 0:db8e363f0316 -0.85 bristol +cv-terracotta_rail 0:cd7ef0097a95 -0.14 mixed-usedevelopmentdelivering14 +cv-terracotta_rail 0:d37f8456ca99 -0.55 retailspaceandpublicrealmimprove +cv-terracotta_rail 0:8378846eb8e4 -0.96 securedplanningconsentandisnowon +cv-terracotta_rail 0:4ffc92a0d6bb -0.87 theassemblyhotel +cv-terracotta_rail 0:9233fa2c31bc -0.88 boutiquehotelrefurbishment +cv-terracotta_rail 0:0de8ab631548 -0.89 bath +cv-terracotta_rail 0:af610a85e11a -0.18 sensitiverefurbishmentoflistedbu +cv-terracotta_rail 0:fa90dda52a42 -0.59 a36-bedroomboutiquehotel;enhance +cv-terracotta_rail 0:ee09d6e6e7ce -1.00 featuresandguestexperience. +cv-terracotta_rail 0:bb04008bb937 -0.91 elmwoodmews +cv-terracotta_rail 0:43e0681601c8 -0.92 residentialdevelopment +cv-terracotta_rail 0:25e38d563739 -0.93 clifton,bristol +cv-terracotta_rail 0:42b055a661a6 -0.13 designof28high-qualityhomeswithi +cv-terracotta_rail 0:bdc5f821f737 -0.44 sustainablemasterplan;achievedhi +cv-terracotta_rail 0:208ed62d3df6 -0.75 environmentalstandardsandstrongs +cv-terracotta_rail 0:ac5e63220124 -1.06 performance. +cv-terracotta_rail 0:68bf0109c6f8 -0.89 education +cv-terracotta_rail 0:1d1dcf789873 -0.94 marcharchitecture +cv-terracotta_rail 0:00583a6bed38 -0.94 2014–2016 +cv-terracotta_rail 0:5761434c99d8 -0.97 universityofsheffield +cv-terracotta_rail 0:e3f2f6a4e375 -0.97 ba(hons)architecture +cv-terracotta_rail 0:2920a7fb42fc -0.97 2011–2014 +cv-terracotta_rail 0:af625dd0aa20 -1.00 universityofthewestofengland +cv-timeline_minimal 0:8f1010120ed6 0.15 jordanrivera +cv-timeline_minimal 0:2d58f0cadc2d -0.40 platformengineer +cv-timeline_minimal 0:fbeea547d99e -0.19 london,uk +cv-timeline_minimal 0:89674e6f130e -0.19 +442055551000 +cv-timeline_minimal 0:e0f850305ded -0.19 jordan.rivera@example.com +cv-timeline_minimal 0:84308bea4540 -0.19 linkedin +cv-timeline_minimal 0:c0b0109d9439 -0.19 github +cv-timeline_minimal 0:68bf0109c6f8 1.90 education +cv-timeline_minimal 0:54654b90a771 1.40 msccomputerscience|universityof +cv-timeline_minimal 0:a57111bb5a18 1.40 manchester-2019-2021 +cv-timeline_minimal 0:bf13436325bd 1.40 distinction.thesis:composablelay +cv-timeline_minimal 0:4c7268c098b3 1.40 primitivesfordeterministicdocume +cv-timeline_minimal 0:6154cc9024ae 1.40 rendering. +cv-timeline_minimal 0:17dd75fc575f 1.40 bscsoftwareengineering|imperialc +cv-timeline_minimal 0:220e665a6446 1.40 london-2015-2019 +cv-timeline_minimal 0:048a150be6e7 1.40 first-classhonours.specialisatio +cv-timeline_minimal 0:f9d33eb2a1a2 1.40 compilersandstaticanalysis. +cv-timeline_minimal 0:dddc36d8bb44 1.40 oraclejavacertification|professi +cv-timeline_minimal 0:6c065bee3945 1.40 track-2023-2024 +cv-timeline_minimal 0:40f2bfbae245 1.40 java17platformdeep-dive:records, +cv-timeline_minimal 0:6cba964fe5fe 1.40 types,patternmatching,virtualthr +cv-timeline_minimal 0:5f94c50dc5bf 1.90 technicalskills +cv-timeline_minimal 0:5d6819554c7a 1.40 languages:java21,kotlin,groovy,p +cv-timeline_minimal 0:4ec7c53222c8 1.40 sql +cv-timeline_minimal 0:db84150190bb 1.40 document&print:pdfbox,apachepoi +cv-timeline_minimal 0:69d03fef7130 1.40 (docx/xlsx),itext,postscript,icc +cv-timeline_minimal 0:689d68053b81 1.40 profiles,fontmetrics +cv-timeline_minimal 0:8ca175286c7b 1.40 layoutengines:customdsldesign, +cv-timeline_minimal 0:b6f2e7d194af 1.40 semanticlayouttrees,pagination,s +cv-timeline_minimal 0:e8951d583db6 1.40 testing,visualregression +cv-timeline_minimal 0:3b7a3ab3b6ee 1.40 build&infrastructure:maven,gradl +cv-timeline_minimal 0:d176e972b547 1.40 githubactions,jitpack,docker,jmh +cv-timeline_minimal 0:3d119f794292 1.40 benchmarking +cv-timeline_minimal 0:b7b6a102880a 1.40 testing:junit5,assertj,pdfbox-ba +cv-timeline_minimal 0:2f0dced56e7f 1.40 pngdiff,layout-graphsnapshots,mu +cv-timeline_minimal 0:c001aa5cc6fb 1.40 testing(pitest) +cv-timeline_minimal 0:90c057c30e8f 1.40 distribution:mavencentral,sonaty +cv-timeline_minimal 0:7347a19cb48d 1.40 ossrh,gpgsigning,jitpack,semanti +cv-timeline_minimal 0:b13180079f20 1.40 versioningdiscipline +cv-timeline_minimal 0:2577c0f557b2 1.90 projects +cv-timeline_minimal 0:bd82e94c4024 1.40 graphcompose(java21,pdfbox,maven +cv-timeline_minimal 0:54b7bb3a12a0 1.40 jmh):declarativejavapdflayouteng +cv-timeline_minimal 0:83ee0a75c2d4 1.40 semanticdsl,slot-basedtemplates, +cv-timeline_minimal 0:235802baf524 1.40 snapshottesting.powersproduction +cv-timeline_minimal 0:44925c9e42ee 1.40 invoice/proposalpipelinesforhiri +cv-timeline_minimal 0:ae7902eee4b2 1.40 templatestudio(kotlin,composedes +cv-timeline_minimal 0:f15436034237 1.40 pdfboxpngdiff):internaltoolfor +cv-timeline_minimal 0:24a195694090 1.40 evaluatingcv,proposal,andinvoice +cv-timeline_minimal 0:dbcc5c321887 1.40 layoutlint(java21,javaparser,spo +cv-timeline_minimal 0:a1446929a276 1.40 staticanalyserthatflagsfragileau +cv-timeline_minimal 0:d91205080ec3 1.40 patterns(deeplynestedrows,untype +cv-timeline_minimal 0:d31cf3fc9dae 1.40 offsets,implicitpagebreaks)befor +cv-timeline_minimal 0:7b985a1d2b08 1.40 shiptoproduction. +cv-timeline_minimal 0:14e902e0e2ff 1.40 chromeforge(java,graphcompose, +cv-timeline_minimal 0:f87a435df3ac 1.40 pandocbridge):editorial-magazine +cv-timeline_minimal 0:73678fb1255e 1.40 documenttoolkitbuiltongraphcompo +cv-timeline_minimal 0:a0c280e181e2 1.40 cinematiccovers,pullquotes,multi +cv-timeline_minimal 0:d9f1b263312f 1.40 flow,sidebarcallouts. +cv-timeline_minimal 0:b944906ed84c 1.85 professionalsummary +cv-timeline_minimal 0:4bc9e0d2344b 1.30 platformengineerwith10+yearsbuil +cv-timeline_minimal 0:453eef50417c 1.32 anddeveloper-facingtemplatesyste +cv-timeline_minimal 0:39881b36a9c0 1.34 authoringdsls,andturningbrittlep +cv-timeline_minimal 0:83064bdc95f5 1.36 scale. +cv-timeline_minimal 0:c2f296ef30a3 1.93 professionalexperience +cv-timeline_minimal 0:68c08b2a5966 1.63 seniorplatformengineer|northwind +cv-timeline_minimal 0:64c4b52dceb1 1.37 ledthereusabledocument-generatio +cv-timeline_minimal 0:1f193cd1d987 1.36 productteams.reducedtemplatemain +cv-timeline_minimal 0:9ccc3e904e5a 1.35 favourofonecanonicalengine. +cv-timeline_minimal 0:fb53bd1bfeb9 1.59 softwareengineer|brightleaflabs- +cv-timeline_minimal 0:70dd947a4558 1.31 cuttingp99renderlatencyfrom1.4st +cv-timeline_minimal 0:8a9898d2c965 1.55 backendengineer|helixprintco-201 +cv-timeline_minimal 0:a485c37fe7ea 1.29 maintainedahigh-volumeinvoice-pr +cv-timeline_minimal 0:5a136b6b9d8c 1.28 testharnessthatgatedeverytemplat +cv-timeline_minimal 1:676dfdd56ad2 0.20 additionalinformation +cv-timeline_minimal 1:ecc25e73b19b -0.30 languages:english(fluent),german +cv-timeline_minimal 1:ac7f0ee6a49e -0.30 (intermediate),spanish(basic) +cv-timeline_minimal 1:db2a16c45fd5 -0.30 workeligibility:eligibletoworkin +cv-timeline_minimal 1:7001312ec42e -0.30 andtheeu +cv-timeline_minimal 1:a8af27d55da9 -0.30 opensource:maintainerof +cv-timeline_minimal 1:cf566ad0f15d -0.30 graphcompose.regularcontributort +cv-timeline_minimal 1:bf474bb1a54a -0.30 pdfboxissuetriage. +cv-timeline_minimal 1:86512c31ab91 -0.30 speaking:jvmsummit2024,devoxxuk +cv-timeline_minimal 1:e1a9c88a2aa2 -0.30 2025—bothondeclarativedocument +cv-timeline_minimal 1:9331a1c670e0 -0.30 layout. +cv-violet_grid 0:68a76c74faf5 0.23 sofiamartinez +cv-violet_grid 0:04694b6a602f -0.35 ux/uidesigner +cv-violet_grid 0:12932a9489aa -0.10 sofia.martinez.design@gmail.com +cv-violet_grid 0:77b27b9ce612 -0.11 +1(415)555-7842 +cv-violet_grid 0:12d25ebdca93 -0.11 sanfrancisco,ca,usa +cv-violet_grid 0:8a2bdbd153f4 -0.11 sofiamartinez.design +cv-violet_grid 0:84308bea4540 -0.12 linkedin +cv-violet_grid 0:30b943b69458 0.17 user-centereddesignerwith5+years +cv-violet_grid 0:c5d00ee335d1 0.16 icombineresearch,designthinking, +cv-violet_grid 0:62fd7c29c3c0 0.14 passionateaboutcollaboratingwith +cv-violet_grid 0:32c1cf49a2fe 0.14 skills +cv-violet_grid 0:b96067918254 0.24 uxresearch +cv-violet_grid 0:9058674fd905 0.29 userinterviews,surveys, +cv-violet_grid 0:0cdd38014d79 0.28 personas,journeymaps, +cv-violet_grid 0:61e4ba28d469 0.28 competitiveanalysis +cv-violet_grid 0:db5c6756c4b6 8.09 sitemaps,userflows,card +cv-violet_grid 0:6c7ad1834a60 8.08 sorting,contentstrategy +cv-violet_grid 0:187737d59250 0.24 wireframing +cv-violet_grid 0:2286e5aa328a 0.29 lowtohigh-fidelity +cv-violet_grid 0:5c4b21cb1af8 0.24 prototyping +cv-violet_grid 0:1abfa9dc1773 0.29 interactiveprototypes, +cv-violet_grid 0:1ddc6c379a54 0.28 microinteractions, +cv-violet_grid 0:d1d99c54cf40 0.28 transitions +cv-violet_grid 0:7a38f8d94009 0.24 usabilitytesting +cv-violet_grid 0:63af69ae99e6 0.29 testplanning,usability +cv-violet_grid 0:f67c409cc44f 0.28 tests,heuristicevaluation, +cv-violet_grid 0:438e1d3264dd 0.28 insights&iteration +cv-violet_grid 0:7e02941d76f5 0.24 designsystems +cv-violet_grid 0:a0d27161913a 0.29 componentlibraries, +cv-violet_grid 0:82374d275507 0.28 designtokens,pattern +cv-violet_grid 0:caf9f906b16a 0.28 documentation +cv-violet_grid 0:f9d35d43770d 0.26 tools +cv-violet_grid 0:5cb2b3b6143c 0.32 figmafigjamadobexdsketchmironoti +cv-violet_grid 0:53e5e7c5a884 0.30 experience +cv-violet_grid 0:5a0774260e0c 0.42 2022-present +cv-violet_grid 0:204f460767ff 0.38 seniorux/uidesigner|novafin(fint +cv-violet_grid 0:318bba211bdc 0.43 sanfrancisco,ca +cv-violet_grid 0:3883e88c63c3 0.42 ledend-to-enddesignforapersonalf +cv-violet_grid 0:ccc00663f089 2.20 conducteduserresearch,builtperso +cv-violet_grid 0:7d0f908c7e5f 3.98 designedwireframes,prototypes,an +cv-violet_grid 0:9b57c4a85aad 5.77 establishedandmaintainedascalabl +cv-violet_grid 0:6894eafb99c2 7.55 collaboratedwithproductmanagers, +cv-violet_grid 0:01e4455cec51 9.34 2020-2022 +cv-violet_grid 0:24d722f0cfbe 9.30 uxdesigner|brighthealth(healthte +cv-violet_grid 0:530707fb0897 9.34 redesignedpatientportalexperienc +cv-violet_grid 0:b2e27a1d9270 11.12 plannedandfacilitatedusabilityte +cv-violet_grid 0:ab80a52d70fe 12.90 partneredwithengineerstoensurefe +cv-violet_grid 0:11cbf615189b 14.69 createdreusablecomponentsandstyl +cv-violet_grid 0:7e5081a3ed48 16.48 2018-2020 +cv-violet_grid 0:73f7bbf7cd60 16.44 juniorux/uidesigner|lumendigital +cv-violet_grid 0:c6b06045332f 16.49 austin,tx +cv-violet_grid 0:5ea8234925c5 16.48 supporteddiscoveryworkshops,user +cv-violet_grid 0:46f00c76528c 18.26 designedresponsivewebsitesandlan +cv-violet_grid 0:f3cea36a9d83 20.04 collaboratedwithcopywritersandde +cv-violet_grid 0:d94eccbb1fbe 21.81 selectedprojects +cv-violet_grid 0:45dc8bf81211 21.76 novafinmobileapp|personalfinance +cv-violet_grid 0:d398b29d3dbb 21.81 2023 +cv-violet_grid 0:e66c1ce573d3 21.67 ledux/uidesignforbudgeting,goalt +cv-violet_grid 0:0ed8829e68d0 21.67 thatinformedasimplifiednavigatio +cv-violet_grid 0:ee9bd17ebccf 21.67 22%increaseinweeklyactiveusers. +cv-violet_grid 0:28b4603d784a 21.75 brighthealthpatientportal|health +cv-violet_grid 0:1bea20e1df19 21.80 2021 +cv-violet_grid 0:999ddb26bed6 21.66 redesignedkeypatientflowsincludi +cv-violet_grid 0:073d15633c0b 21.66 systemandcomponentlibraryusedacr +cv-violet_grid 0:68bf0109c6f8 21.91 education +cv-violet_grid 0:6cb574fa10b6 21.91 languages +cv-violet_grid 0:0cf7506cf94a 19.58 bacheloroffineartsingraphicdesig +cv-violet_grid 0:00ab7a6aa5f1 19.59 californiacollegeofthearts +cv-violet_grid 0:7e2c21bb41db 19.58 sanfrancisco,ca|2014-2018 +cv-violet_grid 0:b6234d2ea0d6 21.23 english +cv-violet_grid 0:bef32d2c315a 21.22 native +cv-violet_grid 0:9c9b13446cd9 22.46 spanish +cv-violet_grid 0:e35242c809c8 23.69 portuguese +cv-violet_grid 0:c5d1de4964d6 23.69 conversational +invoice-classic 0:c26c22b94338 0.49 graphcomposestudio +invoice-classic 0:2a08ce5567fb 0.35 18layoutstreet +invoice-classic 0:52d6e3de4fa0 0.10 invoice +invoice-classic 0:38e9951985e4 0.32 gc-2026-041 +invoice-classic 0:20fe884effee 0.32 issued02apr2026 +invoice-classic 0:57a66d21eb1b 0.30 totaldue +invoice-classic 0:30d85a94548c 0.37 invoicegc-2026-041issued02apr202 +invoice-classic 0:aeba3a7b3598 0.33 billto +invoice-classic 0:f890faef907f 0.30 northwindsystems +invoice-classic 0:1b405eb431ca 0.03 attn:financeteam +invoice-classic 0:91eefd794f79 0.00 410marketavenue +invoice-classic 0:00a97da4e243 -0.02 manchester,uk +invoice-classic 0:62fcfa8745fc -0.05 ap@northwind.example +invoice-classic 0:2081a41a7764 -0.07 +441615552200 +invoice-classic 0:75857a458999 0.33 from +invoice-classic 0:fbeea547d99e 0.00 london,uk +invoice-classic 0:faf1569a98e9 -0.02 ec1a4gc +invoice-classic 0:befc6e9b5c24 -0.05 billing@graphcompose.dev +invoice-classic 0:89674e6f130e -0.07 +442055551000 +invoice-classic 0:c9046f7a37ad 0.25 description +invoice-classic 0:32e8369a9c4f 0.25 qty +invoice-classic 0:385cfdbc00ec 0.25 unit +invoice-classic 0:cf38d95c9c6b 0.25 amount +invoice-classic 0:987c6297d0a9 0.47 discoveryworkshop +invoice-classic 0:532674c6eb89 0.47 gbp1,450 +invoice-classic 0:08ec6deb1c40 0.47 templatearchitecture2 +invoice-classic 0:d2e67c4b1cca 0.47 gbp980 +invoice-classic 0:d6cdf6a05754 0.47 gbp1,960 +invoice-classic 0:fe13f8ee4f99 0.47 renderqa +invoice-classic 0:7e7398cbff7c 0.47 gbp320 +invoice-classic 0:e23164e940c7 0.47 gbp960 +invoice-classic 0:6047df51175c 0.57 developerenablement1 +invoice-classic 0:c2ad01ea64ae 0.57 gbp780 +invoice-classic 0:d6577e95efba 0.82 subtotal +invoice-classic 0:50cae0510231 0.82 gbp5,150 +invoice-classic 0:a52611c9261b 0.97 vat(20%) +invoice-classic 0:d7f4425b8b16 0.97 gbp1,030 +invoice-classic 0:11239872d178 0.98 total +invoice-classic 0:45a5ad5ad430 0.98 gbp6,180 +invoice-classic 0:ab5aa97074c4 1.10 notes +invoice-classic 0:b78eb53cbd11 1.17 •pleaseincludetheinvoicenumberon +invoice-classic 0:8c8fd62f15a7 1.17 yourremittanceadvice. +invoice-classic 0:f73f1b89e354 1.17 •allworkwasdeliveredasagreedduri +invoice-classic 0:49c1ececed52 1.17 theaprilimplementationwindow. +invoice-classic 0:fb854bac39c8 1.10 paymentterms +invoice-classic 0:24274f39b50b 1.17 •paymentduewithin14calendardays. +invoice-classic 0:c438440ba377 1.17 •banktransferpreferred;contact +invoice-classic 0:434cc906ae90 1.17 billing@graphcompose.devfor +invoice-classic 0:8822ea375315 1.17 remittancedetails. +invoice-classic 0:1a7b5c840e25 1.17 •latepaymentsmaydelayadditional +invoice-classic 0:1631a06d245f 1.17 templatecustomizationwork. +invoice-classic 0:e3337beaa171 1.15 thankyouforchoosinggraphcomposef +invoice-classic_long 0:c26c22b94338 0.49 graphcomposestudio +invoice-classic_long 0:2a08ce5567fb 0.35 18layoutstreet +invoice-classic_long 0:52d6e3de4fa0 0.10 invoice +invoice-classic_long 0:3594d2085950 0.32 gc-2026-042 +invoice-classic_long 0:25851a973edd 0.32 issued04may2026 +invoice-classic_long 0:57a66d21eb1b 0.30 totaldue +invoice-classic_long 0:9eea1e05ff47 0.37 invoicegc-2026-042issued04may202 +invoice-classic_long 0:aeba3a7b3598 0.33 billto +invoice-classic_long 0:f890faef907f 0.30 northwindsystems +invoice-classic_long 0:1b405eb431ca 0.03 attn:financeteam +invoice-classic_long 0:91eefd794f79 0.00 410marketavenue +invoice-classic_long 0:00a97da4e243 -0.02 manchester,uk +invoice-classic_long 0:62fcfa8745fc -0.05 ap@northwind.example +invoice-classic_long 0:2081a41a7764 -0.07 +441615552200 +invoice-classic_long 0:75857a458999 0.33 from +invoice-classic_long 0:fbeea547d99e 0.00 london,uk +invoice-classic_long 0:faf1569a98e9 -0.02 ec1a4gc +invoice-classic_long 0:befc6e9b5c24 -0.05 billing@graphcompose.dev +invoice-classic_long 0:89674e6f130e -0.07 +442055551000 +invoice-classic_long 0:c9046f7a37ad 0.25 description +invoice-classic_long 0:32e8369a9c4f 0.25 qty +invoice-classic_long 0:385cfdbc00ec 0.25 unit +invoice-classic_long 0:cf38d95c9c6b 0.25 amount +invoice-classic_long 0:aa29f2f4fcb4 0.47 discoveryworkshop—sprint1 +invoice-classic_long 0:ce4081aef7a1 0.47 gbp180 +invoice-classic_long 0:9c9a412f0a45 0.47 designsystemaudit—sprint1 +invoice-classic_long 0:7be809cb1590 0.47 gbp217 +invoice-classic_long 0:378b363c8601 0.47 gbp434 +invoice-classic_long 0:5257532a7b5d 0.47 templatearchitecture—sprint1 +invoice-classic_long 0:c467cca4e45a 0.47 gbp254 +invoice-classic_long 0:4a4a218b012a 0.47 gbp762 +invoice-classic_long 0:58a1caacbf7e 0.47 layoutenginetuning—sprint1 +invoice-classic_long 0:dde0144b97b7 0.47 gbp291 +invoice-classic_long 0:457a71636ad9 0.47 gbp1164 +invoice-classic_long 0:6fcf7d6dd606 0.47 renderqapass—sprint1 +invoice-classic_long 0:dda88f5786f5 0.47 gbp328 +invoice-classic_long 0:ee18ad3bbb42 0.47 accessibilityreview—sprint1 +invoice-classic_long 0:e681b4843ffb 0.47 gbp365 +invoice-classic_long 0:1859c20b35dd 0.47 gbp730 +invoice-classic_long 0:c12c14945fcd 0.47 fontpipelinesetup—sprint1 +invoice-classic_long 0:9033a33f66e7 0.47 gbp402 +invoice-classic_long 0:837d48c1ff40 0.47 gbp1206 +invoice-classic_long 0:af6cba848dc0 0.47 chartintegration—sprint1 +invoice-classic_long 0:6109a2c30104 0.47 gbp439 +invoice-classic_long 0:87e9fcb6151d 0.47 gbp1756 +invoice-classic_long 0:a6bee1ec5e35 0.47 datamapping—sprint1 +invoice-classic_long 0:df1f9d4443d8 0.47 gbp476 +invoice-classic_long 0:052c9f49a4b8 0.47 paginationhardening—sprint1 +invoice-classic_long 0:9fba6332e489 0.47 gbp513 +invoice-classic_long 0:6f805c9f78c3 0.47 gbp1026 +invoice-classic_long 0:b54b7f77d86c 0.47 visualregressionwiring—sprint13 +invoice-classic_long 0:dc3d212d6b32 0.47 gbp550 +invoice-classic_long 0:96667fee53f3 0.47 gbp1650 +invoice-classic_long 0:9fe9e123b0f0 0.47 docsauthoring—sprint1 +invoice-classic_long 0:e7b406f24f04 0.47 gbp587 +invoice-classic_long 0:74357ca6b30e 0.47 gbp2348 +invoice-classic_long 0:9c6cf539f5bc 0.47 stakeholderdemo—sprint1 +invoice-classic_long 0:cf79b5cdb735 0.47 gbp624 +invoice-classic_long 0:d2bde6642670 0.47 performanceprofiling—sprint1 +invoice-classic_long 0:679f017f73c1 0.47 gbp661 +invoice-classic_long 0:63985b524723 0.47 gbp1322 +invoice-classic_long 0:f82bef1ac80d 0.47 releaseengineering—sprint1 +invoice-classic_long 0:0b21b7cf2ff9 0.47 gbp698 +invoice-classic_long 0:6afc08056aaa 0.47 gbp2094 +invoice-classic_long 0:632f71e8ff8b 0.47 supportretainer—sprint1 +invoice-classic_long 0:70b393b5fb10 0.47 gbp735 +invoice-classic_long 0:29edf7588a57 0.47 gbp2940 +invoice-classic_long 0:82a9218b91ae 0.47 discoveryworkshop—sprint2 +invoice-classic_long 0:c313f34b71b9 0.47 gbp772 +invoice-classic_long 0:7e69fbffe3e2 0.47 designsystemaudit—sprint2 +invoice-classic_long 0:e096e4fddf9a 0.47 gbp809 +invoice-classic_long 0:c985a0123929 0.47 gbp1618 +invoice-classic_long 0:899f0392eecb 0.47 templatearchitecture—sprint2 +invoice-classic_long 0:4c973ddb9245 0.47 gbp846 +invoice-classic_long 0:6ec359ce3927 0.47 gbp2538 +invoice-classic_long 0:69523ba7402c 0.47 layoutenginetuning—sprint2 +invoice-classic_long 0:0e196c2b490b 0.47 gbp883 +invoice-classic_long 0:6e0d19ab72c6 0.47 gbp3532 +invoice-classic_long 1:c9046f7a37ad 0.30 description +invoice-classic_long 1:32e8369a9c4f 0.30 qty +invoice-classic_long 1:385cfdbc00ec 0.30 unit +invoice-classic_long 1:cf38d95c9c6b 0.30 amount +invoice-classic_long 1:f12cbb7c274d 0.52 renderqapass—sprint2 +invoice-classic_long 1:b813c73bc488 0.52 gbp920 +invoice-classic_long 1:12cd54b50187 0.52 accessibilityreview—sprint2 +invoice-classic_long 1:377d92702316 0.52 gbp957 +invoice-classic_long 1:e7c66f6cf477 0.52 gbp1914 +invoice-classic_long 1:e3d8409ace07 0.52 fontpipelinesetup—sprint2 +invoice-classic_long 1:21604b8f0b36 0.52 gbp994 +invoice-classic_long 1:fe15ed444063 0.52 gbp2982 +invoice-classic_long 1:ca4d3c8eca22 0.52 chartintegration—sprint2 +invoice-classic_long 1:a4c7a6612c99 0.52 gbp1031 +invoice-classic_long 1:1c83f0b47e27 0.52 gbp4124 +invoice-classic_long 1:00de69c6e70f 0.52 datamapping—sprint2 +invoice-classic_long 1:b9d5c56a2cfd 0.52 gbp1068 +invoice-classic_long 1:eb628b5ea8ab 0.52 paginationhardening—sprint2 +invoice-classic_long 1:db5327b47d0e 0.52 gbp205 +invoice-classic_long 1:99d9b3b49da2 0.52 gbp410 +invoice-classic_long 1:505693cbc91e 0.52 visualregressionwiring—sprint23 +invoice-classic_long 1:9f0c5094fb63 0.52 gbp242 +invoice-classic_long 1:095b72c9d880 0.52 gbp726 +invoice-classic_long 1:2a787e61730a 0.52 docsauthoring—sprint2 +invoice-classic_long 1:28ad00e76aef 0.52 gbp279 +invoice-classic_long 1:fbb12fed0bbc 0.52 gbp1116 +invoice-classic_long 1:5369a2c40ff8 0.52 stakeholderdemo—sprint2 +invoice-classic_long 1:16562cbcd318 0.52 gbp316 +invoice-classic_long 1:611b258cb41e 0.52 performanceprofiling—sprint2 +invoice-classic_long 1:e391d4e46366 0.52 gbp353 +invoice-classic_long 1:7106c00cb009 0.52 gbp706 +invoice-classic_long 1:d24a15800df1 0.52 releaseengineering—sprint2 +invoice-classic_long 1:4bed9b4092ee 0.52 gbp390 +invoice-classic_long 1:ae16cd1e31b1 0.52 gbp1170 +invoice-classic_long 1:6876c7b0fe66 0.52 supportretainer—sprint2 +invoice-classic_long 1:909481a45a34 0.52 gbp427 +invoice-classic_long 1:4e58d78d0958 0.52 gbp1708 +invoice-classic_long 1:ddce236bccd7 0.52 discoveryworkshop—sprint3 +invoice-classic_long 1:f8d17c11d834 0.52 gbp464 +invoice-classic_long 1:c0986cd7b1d4 0.52 designsystemaudit—sprint3 +invoice-classic_long 1:09c7aebd89f6 0.52 gbp501 +invoice-classic_long 1:a61c7b6bdd20 0.52 gbp1002 +invoice-classic_long 1:21fd82d170b2 0.52 templatearchitecture—sprint3 +invoice-classic_long 1:399e39a6eff5 0.52 gbp538 +invoice-classic_long 1:81ea39164f41 0.52 gbp1614 +invoice-classic_long 1:47cb1e683e8d 0.52 layoutenginetuning—sprint3 +invoice-classic_long 1:f6df6e8e8f30 0.52 gbp575 +invoice-classic_long 1:7f7db0f4c1cf 0.52 gbp2300 +invoice-classic_long 1:608e31719f07 0.52 renderqapass—sprint3 +invoice-classic_long 1:e4fbc626999e 0.52 gbp612 +invoice-classic_long 1:98bfb4deb0b7 0.52 accessibilityreview—sprint3 +invoice-classic_long 1:7915a839b285 0.52 gbp649 +invoice-classic_long 1:ca74221d78ad 0.52 gbp1298 +invoice-classic_long 1:375dddcbee43 0.52 fontpipelinesetup—sprint3 +invoice-classic_long 1:7b97f0ac8a87 0.52 gbp686 +invoice-classic_long 1:6a57f6a84a1c 0.52 gbp2058 +invoice-classic_long 1:2f4f507058ff 0.62 chartintegration—sprint3 +invoice-classic_long 1:74df855b318c 0.62 gbp723 +invoice-classic_long 1:78016cdf49ca 0.62 gbp2892 +invoice-classic_long 1:d6577e95efba 0.87 subtotal +invoice-classic_long 1:5969b6461056 0.87 gbp44,890 +invoice-classic_long 1:a52611c9261b 1.02 vat(20%) +invoice-classic_long 1:e7fda33332e9 1.02 gbp8,978 +invoice-classic_long 1:11239872d178 1.03 total +invoice-classic_long 1:90b9dec01ea9 1.03 gbp53,868 +invoice-classic_long 1:ab5aa97074c4 1.15 notes +invoice-classic_long 1:970fb4bf9d95 1.22 •sprints1-3weredeliveredunderthe +invoice-classic_long 1:a781fa6c76d2 1.22 frameworkagreement. +invoice-classic_long 1:c980fb1ebf98 1.22 •hardwareandthird-partylicencesa +invoice-classic_long 1:be1dea5817a5 1.22 billedseparately. +invoice-classic_long 1:fb854bac39c8 1.15 paymentterms +invoice-classic_long 1:24274f39b50b 1.22 •paymentduewithin14calendardays. +invoice-classic_long 1:c438440ba377 1.22 •banktransferpreferred;contact +invoice-classic_long 1:434cc906ae90 1.22 billing@graphcompose.devfor +invoice-classic_long 1:8822ea375315 1.22 remittancedetails. +invoice-classic_long 1:e3337beaa171 1.20 thankyouforchoosinggraphcomposef +invoice-consulting 0:d44ceaea97d1 0.27 level8,1collinsstreet +invoice-consulting 0:78a0bb33347f 0.29 melbournevic3000australia +invoice-consulting 0:3b45ab243edb 2.81 +61398765432 +invoice-consulting 0:a17a9fc6d4a8 2.81 hello@northpoint.com.au +invoice-consulting 0:ef0664c1d352 2.81 northpoint.com.au +invoice-consulting 0:52d6e3de4fa0 -0.44 invoice +invoice-consulting 0:6282391a4cc1 -0.63 invoicenumber: +invoice-consulting 0:7d66eb3c1070 -0.19 inv-2025-0478 +invoice-consulting 0:89973ab74e1c -0.63 issuedate: +invoice-consulting 0:0dee636efa5b -0.19 26may2025 +invoice-consulting 0:0e0fb0fc0939 -0.63 duedate: +invoice-consulting 0:7709d5dcefbe -0.19 25june2025 +invoice-consulting 0:633dcfcb4a68 -0.63 project: +invoice-consulting 0:28447bbc85e1 -0.19 digitalstrategyengagement +invoice-consulting 0:d7523d00af19 -0.63 ponumber: +invoice-consulting 0:80a06a9ef12d -0.19 po-7892 +invoice-consulting 0:aef9b6cb1bcd 0.04 billedto +invoice-consulting 0:3fc5213307f9 0.00 greenfieldindustriesltd. +invoice-consulting 0:37d614eaf852 0.01 accountspayabledepartment +invoice-consulting 0:c438c5ffc681 0.02 12innovationdrive +invoice-consulting 0:89f5b4615dc3 0.03 melbournevic3000 +invoice-consulting 0:c585f1decb98 0.04 australia +invoice-consulting 0:4438ad217dea 0.05 email:ap@greenfield.com.au +invoice-consulting 0:cfebda697822 0.04 invoicesummary +invoice-consulting 0:5656f37a9311 0.50 professionalservicesrenderedinac +invoice-consulting 0:a918299ac844 0.51 statementofworkfortheperiod +invoice-consulting 0:3fa8489d9aac 0.02 1may2025–25may2025. +invoice-consulting 0:c9046f7a37ad 0.92 description +invoice-consulting 0:b28225a1247c 0.92 serviceperiod +invoice-consulting 0:32e8369a9c4f 0.92 qty +invoice-consulting 0:d1062d072acd 0.91 unitprice +invoice-consulting 0:3ff0b4a2706b 0.93 (aud) +invoice-consulting 0:cf38d95c9c6b 0.91 amount +invoice-consulting 0:b344321f5471 1.21 1–10may2025 +invoice-consulting 0:a8994a9020c4 1.21 10.00 +invoice-consulting 0:4e9682fa850e 1.22 hrs +invoice-consulting 0:aa92f0e23a97 1.21 250.00 +invoice-consulting 0:e48d9b7a2993 1.21 2,500.00 +invoice-consulting 0:1bcfde966d94 0.89 strategicconsultation +invoice-consulting 0:fd3ca268f319 0.37 leadershipalignmentworkshops +invoice-consulting 0:8d93e0c47a8c 1.23 1–15may2025 +invoice-consulting 0:cf9dcf6da8a8 1.23 1.00 +invoice-consulting 0:97e47b250054 1.23 3,500.00 +invoice-consulting 0:5581aef375ff 0.91 market&competitiveanalysis +invoice-consulting 0:957080ea09d9 0.39 researchandanalysisreport +invoice-consulting 0:47102c31f226 1.25 5–20may2025 +invoice-consulting 0:ec6305055be9 1.25 4,800.00 +invoice-consulting 0:53dea97cf116 0.93 digitalroadmapdevelopment +invoice-consulting 0:acf357e68297 0.41 strategyandroadmapcreation +invoice-consulting 0:c947fb16eab2 1.27 15–22may2025 +invoice-consulting 0:017144e2271f 1.27 6.00 +invoice-consulting 0:be6012a47af0 1.27 220.00 +invoice-consulting 0:172c0a785bc7 1.27 1,320.00 +invoice-consulting 0:fe04037aa850 0.95 stakeholderreviewsessions +invoice-consulting 0:4658a1bff292 0.43 facilitationanddocumentation +invoice-consulting 0:86f73207c794 1.44 20–25may2025 +invoice-consulting 0:55907ef405f6 1.44 1,880.00 +invoice-consulting 0:f2e12ad6cc9f 1.12 presentation&finalreport +invoice-consulting 0:50de6dc61b80 0.60 executivepresentationanddelivery +invoice-consulting 0:d6577e95efba 0.39 subtotal +invoice-consulting 0:6311b1798398 0.83 14,000.00 +invoice-consulting 0:e370855bde0c 0.39 gst(10%) +invoice-consulting 0:b87e26fb8fac 0.83 1,400.00 +invoice-consulting 0:713a1893d967 -0.27 totaldue(aud) +invoice-consulting 0:d4464a725927 0.70 15,400.00 +invoice-consulting 0:13000a5d442c 0.96 paymentinformation +invoice-consulting 0:944d398aea60 1.61 bankname: +invoice-consulting 0:97fa113746b9 1.61 examplebank +invoice-consulting 0:0ecb5847ffa7 1.61 accountname: +invoice-consulting 0:b5dd15368c26 1.61 northpointconsultingptyltd +invoice-consulting 0:6bbca23a71e6 1.61 bsb: +invoice-consulting 0:83a417f0862b 1.61 123-456 +invoice-consulting 0:6b4894c28363 1.61 accountnumber: +invoice-consulting 0:ef797c8118f0 1.61 12345678 +invoice-consulting 0:c608665436db 1.61 reference: +invoice-consulting 0:010450dee1ff 1.62 pleaseensuretheinvoicenumberisin +invoice-consulting 0:ab5aa97074c4 0.96 notes +invoice-consulting 0:7c6ab37d83ef 0.92 thankyouforyourbusiness. +invoice-consulting 0:4a699e29a3bb 1.43 ifyouhaveanyquestionsregardingth +invoice-consulting 0:c766251af1f4 1.44 contactusataccounts@northpoint.c +invoice-consulting 0:3d32fa219332 1.45 +61398765432. +invoice-consulting 0:a6f6e2ddab6d 1.57 paymentisduewithin30daysfromthei +invoice-consulting 0:55ee5fe62c33 0.01 northpointconsultingptyltd|abn12 +invoice-consulting 0:bdbada284e80 0.01 page1/1 +invoice-consulting_long 0:d44ceaea97d1 0.27 level8,1collinsstreet +invoice-consulting_long 0:78a0bb33347f 0.29 melbournevic3000australia +invoice-consulting_long 0:3b45ab243edb 2.81 +61398765432 +invoice-consulting_long 0:a17a9fc6d4a8 2.81 hello@northpoint.com.au +invoice-consulting_long 0:ef0664c1d352 2.81 northpoint.com.au +invoice-consulting_long 0:52d6e3de4fa0 -0.44 invoice +invoice-consulting_long 0:6282391a4cc1 -0.63 invoicenumber: +invoice-consulting_long 0:7d66eb3c1070 -0.19 inv-2025-0478 +invoice-consulting_long 0:89973ab74e1c -0.63 issuedate: +invoice-consulting_long 0:0dee636efa5b -0.19 26may2025 +invoice-consulting_long 0:0e0fb0fc0939 -0.63 duedate: +invoice-consulting_long 0:7709d5dcefbe -0.19 25june2025 +invoice-consulting_long 0:633dcfcb4a68 -0.63 project: +invoice-consulting_long 0:28447bbc85e1 -0.19 digitalstrategyengagement +invoice-consulting_long 0:d7523d00af19 -0.63 ponumber: +invoice-consulting_long 0:80a06a9ef12d -0.19 po-7892 +invoice-consulting_long 0:aef9b6cb1bcd 0.04 billedto +invoice-consulting_long 0:3fc5213307f9 0.00 greenfieldindustriesltd. +invoice-consulting_long 0:37d614eaf852 0.01 accountspayabledepartment +invoice-consulting_long 0:c438c5ffc681 0.02 12innovationdrive +invoice-consulting_long 0:89f5b4615dc3 0.03 melbournevic3000 +invoice-consulting_long 0:c585f1decb98 0.04 australia +invoice-consulting_long 0:4438ad217dea 0.05 email:ap@greenfield.com.au +invoice-consulting_long 0:cfebda697822 0.04 invoicesummary +invoice-consulting_long 0:5656f37a9311 0.50 professionalservicesrenderedinac +invoice-consulting_long 0:a918299ac844 0.51 statementofworkfortheperiod +invoice-consulting_long 0:3fa8489d9aac 0.02 1may2025–25may2025. +invoice-consulting_long 0:c9046f7a37ad 0.92 description +invoice-consulting_long 0:b28225a1247c 0.92 serviceperiod +invoice-consulting_long 0:32e8369a9c4f 0.92 qty +invoice-consulting_long 0:d1062d072acd 0.91 unitprice +invoice-consulting_long 0:3ff0b4a2706b 0.93 (aud) +invoice-consulting_long 0:cf38d95c9c6b 0.91 amount +invoice-consulting_long 0:b344321f5471 1.21 1–10may2025 +invoice-consulting_long 0:a8994a9020c4 1.21 10.00 +invoice-consulting_long 0:4e9682fa850e 1.22 hrs +invoice-consulting_long 0:aa92f0e23a97 1.21 250.00 +invoice-consulting_long 0:e48d9b7a2993 1.21 2,500.00 +invoice-consulting_long 0:1bcfde966d94 0.89 strategicconsultation +invoice-consulting_long 0:fd3ca268f319 0.37 leadershipalignmentworkshops +invoice-consulting_long 0:8d93e0c47a8c 1.23 1–15may2025 +invoice-consulting_long 0:cf9dcf6da8a8 1.23 1.00 +invoice-consulting_long 0:97e47b250054 1.23 3,500.00 +invoice-consulting_long 0:5581aef375ff 0.91 market&competitiveanalysis +invoice-consulting_long 0:957080ea09d9 0.39 researchandanalysisreport +invoice-consulting_long 0:47102c31f226 1.25 5–20may2025 +invoice-consulting_long 0:ec6305055be9 1.25 4,800.00 +invoice-consulting_long 0:53dea97cf116 0.93 digitalroadmapdevelopment +invoice-consulting_long 0:acf357e68297 0.41 strategyandroadmapcreation +invoice-consulting_long 0:c947fb16eab2 1.27 15–22may2025 +invoice-consulting_long 0:017144e2271f 1.27 6.00 +invoice-consulting_long 0:be6012a47af0 1.27 220.00 +invoice-consulting_long 0:172c0a785bc7 1.27 1,320.00 +invoice-consulting_long 0:fe04037aa850 0.95 stakeholderreviewsessions +invoice-consulting_long 0:4658a1bff292 0.43 facilitationanddocumentation +invoice-consulting_long 0:86f73207c794 1.29 20–25may2025 +invoice-consulting_long 0:55907ef405f6 1.29 1,880.00 +invoice-consulting_long 0:f2e12ad6cc9f 0.97 presentation&finalreport +invoice-consulting_long 0:50de6dc61b80 0.45 executivepresentationanddelivery +invoice-consulting_long 0:55ee5fe62c33 0.01 northpointconsultingptyltd|abn12 +invoice-consulting_long 0:c843aa25b80f 0.01 page1/2 +invoice-consulting_long 1:c9046f7a37ad 0.53 description +invoice-consulting_long 1:b28225a1247c 0.53 serviceperiod +invoice-consulting_long 1:32e8369a9c4f 0.53 qty +invoice-consulting_long 1:d1062d072acd 0.52 unitprice +invoice-consulting_long 1:3ff0b4a2706b 0.54 (aud) +invoice-consulting_long 1:cf38d95c9c6b 0.52 amount +invoice-consulting_long 1:b344321f5471 0.72 1–10may2025 +invoice-consulting_long 1:a8994a9020c4 0.72 10.00 +invoice-consulting_long 1:4e9682fa850e 0.73 hrs +invoice-consulting_long 1:aa92f0e23a97 0.72 250.00 +invoice-consulting_long 1:e48d9b7a2993 0.72 2,500.00 +invoice-consulting_long 1:1bcfde966d94 0.40 strategicconsultation +invoice-consulting_long 1:fd3ca268f319 -0.12 leadershipalignmentworkshops +invoice-consulting_long 1:8d93e0c47a8c 0.74 1–15may2025 +invoice-consulting_long 1:cf9dcf6da8a8 0.74 1.00 +invoice-consulting_long 1:97e47b250054 0.74 3,500.00 +invoice-consulting_long 1:5581aef375ff 0.42 market&competitiveanalysis +invoice-consulting_long 1:957080ea09d9 -0.10 researchandanalysisreport +invoice-consulting_long 1:47102c31f226 0.76 5–20may2025 +invoice-consulting_long 1:ec6305055be9 0.76 4,800.00 +invoice-consulting_long 1:53dea97cf116 0.44 digitalroadmapdevelopment +invoice-consulting_long 1:acf357e68297 -0.08 strategyandroadmapcreation +invoice-consulting_long 1:c947fb16eab2 0.78 15–22may2025 +invoice-consulting_long 1:017144e2271f 0.78 6.00 +invoice-consulting_long 1:be6012a47af0 0.78 220.00 +invoice-consulting_long 1:172c0a785bc7 0.78 1,320.00 +invoice-consulting_long 1:fe04037aa850 0.46 stakeholderreviewsessions +invoice-consulting_long 1:4658a1bff292 -0.06 facilitationanddocumentation +invoice-consulting_long 1:86f73207c794 0.80 20–25may2025 +invoice-consulting_long 1:55907ef405f6 0.80 1,880.00 +invoice-consulting_long 1:f2e12ad6cc9f 0.48 presentation&finalreport +invoice-consulting_long 1:50de6dc61b80 -0.04 executivepresentationanddelivery +invoice-consulting_long 1:d6577e95efba 0.02 subtotal +invoice-consulting_long 1:6311b1798398 0.46 14,000.00 +invoice-consulting_long 1:e370855bde0c 0.02 gst(10%) +invoice-consulting_long 1:b87e26fb8fac 0.46 1,400.00 +invoice-consulting_long 1:713a1893d967 -0.64 totaldue(aud) +invoice-consulting_long 1:d4464a725927 0.33 15,400.00 +invoice-consulting_long 1:13000a5d442c 0.59 paymentinformation +invoice-consulting_long 1:944d398aea60 1.24 bankname: +invoice-consulting_long 1:97fa113746b9 1.24 examplebank +invoice-consulting_long 1:0ecb5847ffa7 1.24 accountname: +invoice-consulting_long 1:b5dd15368c26 1.24 northpointconsultingptyltd +invoice-consulting_long 1:6bbca23a71e6 1.24 bsb: +invoice-consulting_long 1:83a417f0862b 1.24 123-456 +invoice-consulting_long 1:6b4894c28363 1.24 accountnumber: +invoice-consulting_long 1:ef797c8118f0 1.24 12345678 +invoice-consulting_long 1:c608665436db 1.24 reference: +invoice-consulting_long 1:7d66eb3c1070 1.24 inv-2025-0478 +invoice-consulting_long 1:010450dee1ff 1.25 pleaseensuretheinvoicenumberisin +invoice-consulting_long 1:ab5aa97074c4 0.59 notes +invoice-consulting_long 1:7c6ab37d83ef 0.55 thankyouforyourbusiness. +invoice-consulting_long 1:4a699e29a3bb 1.06 ifyouhaveanyquestionsregardingth +invoice-consulting_long 1:c766251af1f4 1.07 contactusataccounts@northpoint.c +invoice-consulting_long 1:3d32fa219332 1.08 +61398765432. +invoice-consulting_long 1:a6f6e2ddab6d 1.20 paymentisduewithin30daysfromthei +invoice-consulting_long 1:55ee5fe62c33 0.01 northpointconsultingptyltd|abn12 +invoice-consulting_long 1:1bed6052d9b3 0.01 page2/2 +invoice-luma_studio 0:ac5742bfd7c4 -9.14 &co. +invoice-luma_studio 0:1583c0f92f86 -104.93 luma&co.studio +invoice-luma_studio 0:b2b5b83cc26d -0.07 branding.design.digital. +invoice-luma_studio 0:c9ed0a9b9c8d 0.02 studio3.02,theloom +invoice-luma_studio 0:0a7d7e43c5de 0.00 14gowerstreet +invoice-luma_studio 0:b87f5fb5bcfa -0.02 londonwc1e6bt +invoice-luma_studio 0:2474519f77a9 -0.04 unitedkingdom +invoice-luma_studio 0:89b5eccb38ff 0.12 +44(0)2079460832 +invoice-luma_studio 0:ea8232890494 0.07 hello@lumaandco.studio +invoice-luma_studio 0:374d89493adc 0.03 www.lumaandco.studio +invoice-luma_studio 0:be3e8b44676d -0.05 companyno.12578934|vatno.3694567 +invoice-luma_studio 0:52d6e3de4fa0 -10.79 invoice +invoice-luma_studio 0:6bb089477e20 0.12 invoiceno. +invoice-luma_studio 0:4435610d8a9f 0.19 inv-2024-0587 +invoice-luma_studio 0:8feaf8016bab 0.12 issuedate +invoice-luma_studio 0:8d36ed29c317 0.19 20may2024 +invoice-luma_studio 0:ac10f8c16320 0.12 duedate +invoice-luma_studio 0:9c4e61874f0f 0.19 19june2024 +invoice-luma_studio 0:fb854bac39c8 0.12 paymentterms +invoice-luma_studio 0:ad75b9983242 0.19 30days +invoice-luma_studio 0:466e5b9cd57f 0.12 currency +invoice-luma_studio 0:54f8e1b3fe44 0.19 gbp +invoice-luma_studio 0:aeba3a7b3598 0.04 billto +invoice-luma_studio 0:212254716728 -0.06 northfieldconsultingltd +invoice-luma_studio 0:bcb7024f74fe -0.10 attn:sarahmitchell +invoice-luma_studio 0:13dd937d2fe6 -0.14 21jubileeway +invoice-luma_studio 0:f9bab6a0b45b -0.18 londonse13ss +invoice-luma_studio 0:725a8f5062e7 0.04 shipto +invoice-luma_studio 0:254289ce0191 -0.10 thefoundry,2ndfloor +invoice-luma_studio 0:84db1f48facb -0.14 17-19greatsuffolkstreet +invoice-luma_studio 0:e7a5f0717d99 -0.18 londonse10ns +invoice-luma_studio 0:c9046f7a37ad 0.04 description +invoice-luma_studio 0:32e8369a9c4f 0.04 qty +invoice-luma_studio 0:d1062d072acd 0.04 unitprice +invoice-luma_studio 0:7c512b48ba8a 0.04 vat +invoice-luma_studio 0:cf38d95c9c6b 0.04 amount +invoice-luma_studio 0:7b420577e50f 0.07 £1,200.00 +invoice-luma_studio 0:dc934fe30a94 0.07 20% +invoice-luma_studio 0:d8f4e3a46d2d 0.01 brandstrategyworkshop +invoice-luma_studio 0:be624d692600 -0.56 discoverysession,research&brand +invoice-luma_studio 0:40ca2aad940f -0.55 positioning. +invoice-luma_studio 0:07bcffc86e95 0.08 £2,650.00 +invoice-luma_studio 0:e302dd04d528 0.02 visualidentitydesign +invoice-luma_studio 0:40e412f627fb -0.55 logosuite,colourpalette,typograp +invoice-luma_studio 0:9c17d116fe08 -0.54 &guidelines. +invoice-luma_studio 0:a20d66947acc 0.08 £3,200.00 +invoice-luma_studio 0:b25ac9cd66bd 0.03 websitedesign(upto8pages) +invoice-luma_studio 0:dab758788e6f -0.19 ux/uidesignfordesktopandmobile. +invoice-luma_studio 0:f916278cb74c 0.09 £850.00 +invoice-luma_studio 0:4a1359f78476 0.04 copywriting +invoice-luma_studio 0:69afea703455 -0.18 websitecopy&keymessaging. +invoice-luma_studio 0:07b417914317 0.10 £600.00 +invoice-luma_studio 0:340455fbac25 0.05 projectmanagement +invoice-luma_studio 0:72534f9863ad -0.52 planning,coordination&client +invoice-luma_studio 0:4df00f9a2b20 -0.52 liaison. +invoice-luma_studio 0:d6577e95efba 0.11 subtotal +invoice-luma_studio 0:b504edd8ea39 0.11 £8,500.00 +invoice-luma_studio 0:a52611c9261b 0.10 vat(20%) +invoice-luma_studio 0:a894ec54e7f3 0.10 £1,700.00 +invoice-luma_studio 0:57a66d21eb1b -1.14 totaldue +invoice-luma_studio 0:b4cb2a644826 0.29 £10,200.00 +invoice-luma_studio 0:ab5aa97074c4 -0.07 notes +invoice-luma_studio 0:7c6ab37d83ef -0.39 thankyouforyourbusiness. +invoice-luma_studio 0:3d717dfb25d8 -0.43 ifyouhaveanyquestionsregarding +invoice-luma_studio 0:479a74142336 -0.48 thisinvoice,pleasegetintouch. +invoice-luma_studio 0:1960744391ed -0.52 allworkremainstheintellectualpro +invoice-luma_studio 0:eeb53247f32c -0.56 ofluma&co.studiountilpayment +invoice-luma_studio 0:9eef22d7d34e -0.61 hasbeenreceivedinfull. +invoice-luma_studio 0:3c7ade679fdf -0.07 paymentdetails +invoice-luma_studio 0:b1819c9cd5bf -0.34 pleasemakepaymentbybanktransfert +invoice-luma_studio 0:8c1e4a24f6a8 -0.10 luma&co.studioltd +invoice-luma_studio 0:4381dc2ab142 -0.14 bank +invoice-luma_studio 0:447827e26127 -0.14 starlingbank +invoice-luma_studio 0:10aeacde20ff -0.14 sortcode +invoice-luma_studio 0:c14b2f2f32e4 -0.14 60-83-71 +invoice-luma_studio 0:f5bd52edd4c2 -0.13 accountno. +invoice-luma_studio 0:4e20613ec3a6 -0.13 98765432 +invoice-luma_studio 0:d53cd2cae33d -0.13 iban +invoice-luma_studio 0:279d55d978a1 -0.13 gb36srlg60837198765432 +invoice-luma_studio 0:e398486c0acf -0.13 bic +invoice-luma_studio 0:ddc998160ae0 -0.13 srlggb2l +invoice-luma_studio 0:543a2e86433f 0.24 thankyouforchoosingluma&co.studi +invoice-luma_studio 0:7111b3fcbf69 -0.07 paymentisdueby19june2024. +invoice-luma_studio 0:7b14b8d2c5c4 0.01 page1of1 +invoice-luma_studio_long 0:ac5742bfd7c4 -9.14 &co. +invoice-luma_studio_long 0:1583c0f92f86 -104.93 luma&co.studio +invoice-luma_studio_long 0:b2b5b83cc26d -0.07 branding.design.digital. +invoice-luma_studio_long 0:c9ed0a9b9c8d 0.02 studio3.02,theloom +invoice-luma_studio_long 0:0a7d7e43c5de 0.00 14gowerstreet +invoice-luma_studio_long 0:b87f5fb5bcfa -0.02 londonwc1e6bt +invoice-luma_studio_long 0:2474519f77a9 -0.04 unitedkingdom +invoice-luma_studio_long 0:89b5eccb38ff 0.12 +44(0)2079460832 +invoice-luma_studio_long 0:ea8232890494 0.07 hello@lumaandco.studio +invoice-luma_studio_long 0:374d89493adc 0.03 www.lumaandco.studio +invoice-luma_studio_long 0:be3e8b44676d -0.05 companyno.12578934|vatno.3694567 +invoice-luma_studio_long 0:52d6e3de4fa0 -10.79 invoice +invoice-luma_studio_long 0:6bb089477e20 0.12 invoiceno. +invoice-luma_studio_long 0:4435610d8a9f 0.19 inv-2024-0587 +invoice-luma_studio_long 0:8feaf8016bab 0.12 issuedate +invoice-luma_studio_long 0:8d36ed29c317 0.19 20may2024 +invoice-luma_studio_long 0:ac10f8c16320 0.12 duedate +invoice-luma_studio_long 0:9c4e61874f0f 0.19 19june2024 +invoice-luma_studio_long 0:fb854bac39c8 0.12 paymentterms +invoice-luma_studio_long 0:ad75b9983242 0.19 30days +invoice-luma_studio_long 0:466e5b9cd57f 0.12 currency +invoice-luma_studio_long 0:54f8e1b3fe44 0.19 gbp +invoice-luma_studio_long 0:aeba3a7b3598 0.04 billto +invoice-luma_studio_long 0:212254716728 -0.06 northfieldconsultingltd +invoice-luma_studio_long 0:bcb7024f74fe -0.10 attn:sarahmitchell +invoice-luma_studio_long 0:13dd937d2fe6 -0.14 21jubileeway +invoice-luma_studio_long 0:f9bab6a0b45b -0.18 londonse13ss +invoice-luma_studio_long 0:725a8f5062e7 0.04 shipto +invoice-luma_studio_long 0:254289ce0191 -0.10 thefoundry,2ndfloor +invoice-luma_studio_long 0:84db1f48facb -0.14 17-19greatsuffolkstreet +invoice-luma_studio_long 0:e7a5f0717d99 -0.18 londonse10ns +invoice-luma_studio_long 0:c9046f7a37ad 0.04 description +invoice-luma_studio_long 0:32e8369a9c4f 0.04 qty +invoice-luma_studio_long 0:d1062d072acd 0.04 unitprice +invoice-luma_studio_long 0:7c512b48ba8a 0.04 vat +invoice-luma_studio_long 0:cf38d95c9c6b 0.04 amount +invoice-luma_studio_long 0:7b420577e50f 0.07 £1,200.00 +invoice-luma_studio_long 0:dc934fe30a94 0.07 20% +invoice-luma_studio_long 0:d8f4e3a46d2d 0.01 brandstrategyworkshop +invoice-luma_studio_long 0:be624d692600 -0.56 discoverysession,research&brand +invoice-luma_studio_long 0:d6def76ba3d1 -0.55 positioning.phase1. +invoice-luma_studio_long 0:07bcffc86e95 0.08 £2,650.00 +invoice-luma_studio_long 0:e302dd04d528 0.02 visualidentitydesign +invoice-luma_studio_long 0:40e412f627fb -0.55 logosuite,colourpalette,typograp +invoice-luma_studio_long 0:270a9e26d2e0 -0.54 &guidelines.phase1. +invoice-luma_studio_long 0:a20d66947acc 0.09 £3,200.00 +invoice-luma_studio_long 0:b25ac9cd66bd 0.03 websitedesign(upto8pages) +invoice-luma_studio_long 0:dab758788e6f -0.54 ux/uidesignfordesktopandmobile. +invoice-luma_studio_long 0:bb1a79cda1ae -0.53 phase1. +invoice-luma_studio_long 0:f916278cb74c 0.10 £850.00 +invoice-luma_studio_long 0:4a1359f78476 0.04 copywriting +invoice-luma_studio_long 0:e6a181326fc9 -0.53 websitecopy&keymessaging.phase +invoice-luma_studio_long 0:07b417914317 0.11 £600.00 +invoice-luma_studio_long 0:340455fbac25 0.05 projectmanagement +invoice-luma_studio_long 0:72534f9863ad -0.52 planning,coordination&client +invoice-luma_studio_long 0:8f09113ca513 -0.51 liaison.phase1. +invoice-luma_studio_long 0:532160121f5f -0.50 positioning.phase2. +invoice-luma_studio_long 0:82ed33a90b4e -0.49 &guidelines.phase2. +invoice-luma_studio_long 0:81deaef85fed -0.48 phase2. +invoice-luma_studio_long 0:cc6f3d44f8c5 0.01 page1of3 +invoice-luma_studio_long 1:c9046f7a37ad 0.18 description +invoice-luma_studio_long 1:32e8369a9c4f 0.18 qty +invoice-luma_studio_long 1:d1062d072acd 0.18 unitprice +invoice-luma_studio_long 1:7c512b48ba8a 0.18 vat +invoice-luma_studio_long 1:cf38d95c9c6b 0.18 amount +invoice-luma_studio_long 1:f916278cb74c 0.21 £850.00 +invoice-luma_studio_long 1:dc934fe30a94 0.21 20% +invoice-luma_studio_long 1:4a1359f78476 0.15 copywriting +invoice-luma_studio_long 1:e6a181326fc9 -0.41 websitecopy&keymessaging.phase +invoice-luma_studio_long 1:07b417914317 0.22 £600.00 +invoice-luma_studio_long 1:340455fbac25 0.16 projectmanagement +invoice-luma_studio_long 1:72534f9863ad -0.40 planning,coordination&client +invoice-luma_studio_long 1:ad05c4b80bfe -0.40 liaison.phase2. +invoice-luma_studio_long 1:7b420577e50f 0.23 £1,200.00 +invoice-luma_studio_long 1:d8f4e3a46d2d 0.17 brandstrategyworkshop +invoice-luma_studio_long 1:be624d692600 -0.39 discoverysession,research&brand +invoice-luma_studio_long 1:b95a82d5055c -0.39 positioning.phase3. +invoice-luma_studio_long 1:07bcffc86e95 0.24 £2,650.00 +invoice-luma_studio_long 1:e302dd04d528 0.18 visualidentitydesign +invoice-luma_studio_long 1:40e412f627fb -0.38 logosuite,colourpalette,typograp +invoice-luma_studio_long 1:708bc0c2e87c -0.38 &guidelines.phase3. +invoice-luma_studio_long 1:a20d66947acc 0.25 £3,200.00 +invoice-luma_studio_long 1:b25ac9cd66bd 0.19 websitedesign(upto8pages) +invoice-luma_studio_long 1:dab758788e6f -0.37 ux/uidesignfordesktopandmobile. +invoice-luma_studio_long 1:155500f32e83 -0.37 phase3. +invoice-luma_studio_long 1:82f971bee7f8 -0.35 liaison.phase3. +invoice-luma_studio_long 1:7affbd48dd15 -0.34 positioning.phase4. +invoice-luma_studio_long 1:e489d439e723 -0.33 &guidelines.phase4. +invoice-luma_studio_long 1:7024991be198 -0.32 phase4. +invoice-luma_studio_long 1:bbcc6ebb140f -0.30 liaison.phase4. +invoice-luma_studio_long 1:d6577e95efba 0.33 subtotal +invoice-luma_studio_long 1:b504edd8ea39 0.33 £8,500.00 +invoice-luma_studio_long 1:a52611c9261b 0.32 vat(20%) +invoice-luma_studio_long 1:a894ec54e7f3 0.32 £1,700.00 +invoice-luma_studio_long 1:57a66d21eb1b -0.92 totaldue +invoice-luma_studio_long 1:b4cb2a644826 0.51 £10,200.00 +invoice-luma_studio_long 1:60fd7eb93483 0.01 page2of3 +invoice-luma_studio_long 2:ab5aa97074c4 -11.83 notes +invoice-luma_studio_long 2:7c6ab37d83ef -12.15 thankyouforyourbusiness. +invoice-luma_studio_long 2:3d717dfb25d8 -12.20 ifyouhaveanyquestionsregarding +invoice-luma_studio_long 2:479a74142336 -12.24 thisinvoice,pleasegetintouch. +invoice-luma_studio_long 2:1960744391ed -12.28 allworkremainstheintellectualpro +invoice-luma_studio_long 2:eeb53247f32c -12.33 ofluma&co.studiountilpayment +invoice-luma_studio_long 2:9eef22d7d34e -12.37 hasbeenreceivedinfull. +invoice-luma_studio_long 2:3c7ade679fdf -11.83 paymentdetails +invoice-luma_studio_long 2:b1819c9cd5bf -12.10 pleasemakepaymentbybanktransfert +invoice-luma_studio_long 2:8c1e4a24f6a8 -11.86 luma&co.studioltd +invoice-luma_studio_long 2:4381dc2ab142 -11.90 bank +invoice-luma_studio_long 2:447827e26127 -11.90 starlingbank +invoice-luma_studio_long 2:10aeacde20ff -11.90 sortcode +invoice-luma_studio_long 2:c14b2f2f32e4 -11.90 60-83-71 +invoice-luma_studio_long 2:f5bd52edd4c2 -11.90 accountno. +invoice-luma_studio_long 2:4e20613ec3a6 -11.90 98765432 +invoice-luma_studio_long 2:d53cd2cae33d -11.89 iban +invoice-luma_studio_long 2:279d55d978a1 -11.89 gb36srlg60837198765432 +invoice-luma_studio_long 2:e398486c0acf -11.89 bic +invoice-luma_studio_long 2:ddc998160ae0 -11.89 srlggb2l +invoice-luma_studio_long 2:543a2e86433f 0.23 thankyouforchoosingluma&co.studi +invoice-luma_studio_long 2:7111b3fcbf69 -0.08 paymentisdueby19june2024. +invoice-luma_studio_long 2:bc6d215b63ee 0.01 page3of3 +invoice-merchant 0:0dffa3b5d008 -0.01 coastline +invoice-merchant 0:52d6e3de4fa0 0.08 invoice +invoice-merchant 0:9422e2aeb800 0.08 coastlinecommerceinc. +invoice-merchant 0:8bb83c0c3efb 0.10 150elginstreet,8thfloor +invoice-merchant 0:cf0df3462e70 0.09 ottawa,onk2p1l4 +invoice-merchant 0:408c7c5887a0 0.09 canada +invoice-merchant 0:0d9b94d29fc9 0.01 www.coastline.example +invoice-merchant 0:76957649b8a8 -0.02 billing@coastline.example +invoice-merchant 0:0b44bf19dd44 -0.05 +1613-555-0142 +invoice-merchant 0:884004f21362 -0.03 vatid:ca8139020285rt0001 +invoice-merchant 0:6282391a4cc1 0.23 invoicenumber: +invoice-merchant 0:a6e01b979f55 0.23 inv-2026-000789 +invoice-merchant 0:8d05f5d55191 0.20 invoicedate: +invoice-merchant 0:dc9696f61d36 0.20 27may2026 +invoice-merchant 0:0e0fb0fc0939 0.18 duedate: +invoice-merchant 0:93059e9a1c07 0.18 26june2026 +invoice-merchant 0:d39366fa1423 0.16 billingperiod: +invoice-merchant 0:ec215645f61e 0.16 01may2026–31may2026 +invoice-merchant 0:18e2cca1098e 0.14 paymentterms: +invoice-merchant 0:c6af9fc633ee 0.14 net30days +invoice-merchant 0:967e0b6ca4b9 0.12 currency: +invoice-merchant 0:d60fbd8718ec 0.12 usd +invoice-merchant 0:aeba3a7b3598 -0.03 billto +invoice-merchant 0:45fe04dbae24 -0.07 brightfutureltd. +invoice-merchant 0:65405af34bf9 -0.08 45kingstreet +invoice-merchant 0:1f8da9c4e269 -0.07 manchester,m24wu +invoice-merchant 0:2474519f77a9 -0.06 unitedkingdom +invoice-merchant 0:c7a9cfdd1c55 -0.07 vatid:gb987654321 +invoice-merchant 0:725a8f5062e7 -0.03 shipto +invoice-merchant 0:5895c7cd8d5b -0.08 warehouse7 +invoice-merchant 0:caf76743df2d -0.07 northindustrialestate +invoice-merchant 0:c9046f7a37ad 0.16 description +invoice-merchant 0:169240d91658 0.16 plan/service +invoice-merchant 0:32e8369a9c4f 0.16 qty +invoice-merchant 0:e2a9c81da5f6 0.16 unitprice(usd) +invoice-merchant 0:5dfb966b2bcf 0.16 amount(usd) +invoice-merchant 0:fe6b34582738 0.27 coastlineadvanced +invoice-merchant 0:46f3b0cea3bc 0.23 monthlysubscription +invoice-merchant 0:71738eb7126d 0.24 advancedplan +invoice-merchant 0:7b969356782c 0.24 399.00 +invoice-merchant 0:0a9acaea6477 0.26 paymentprocessing +invoice-merchant 0:91809142f08f 0.21 transactionfee +invoice-merchant 0:358a7392afe6 0.22 asperusage +invoice-merchant 0:561b2814d3c0 0.22 0.00 +invoice-merchant 0:3f9fea8c0fc5 0.24 additionalstaffaccounts +invoice-merchant 0:fbf7948d004d 0.20 staffaccount +invoice-merchant 0:7b476727faf3 0.21 additional +invoice-merchant 0:0856fec27d23 0.21 15.00 +invoice-merchant 0:bc7a1ad05efc 0.21 45.00 +invoice-merchant 0:0036ebf2cfb2 0.23 prioritysupport +invoice-merchant 0:6bfa3f8e9308 0.18 24/7support +invoice-merchant 0:7f0f70e643bc 0.19 included +invoice-merchant 0:3c7ade679fdf 0.53 paymentdetails +invoice-merchant 0:944d398aea60 0.65 bankname: +invoice-merchant 0:d6c3cea2e943 0.65 harbourbankofcanada +invoice-merchant 0:0ecb5847ffa7 0.65 accountname: +invoice-merchant 0:6b4894c28363 0.66 accountnumber: +invoice-merchant 0:ca2ea6319cc8 0.66 1001-4267-153 +invoice-merchant 0:555043320c0c 0.66 swiftcode: +invoice-merchant 0:922f5f70c123 0.66 hrbrcat2 +invoice-merchant 0:f1b1597830d6 0.66 institutionnumber: +invoice-merchant 0:88c0413bfef1 0.66 003 +invoice-merchant 0:e47c9313aced 0.67 transitnumber: +invoice-merchant 0:fec334e6bf8c 0.67 00016 +invoice-merchant 0:4f657c67e41a 0.67 accounttype: +invoice-merchant 0:b8b8acdf702e 0.67 cadaccount +invoice-merchant 0:fa0fbe194b51 0.68 remittanceemail: +invoice-merchant 0:c608665436db 0.68 reference: +invoice-merchant 0:1b0fdc20ced4 0.61 pleaseincludetheinvoicenumber +invoice-merchant 0:cfdf1faf410b 0.59 inyourpaymentreference. +invoice-merchant 0:d6577e95efba 0.54 subtotal +invoice-merchant 0:30d16b02fd3e 0.61 444.00 +invoice-merchant 0:2ee4d3de4ddf 0.56 tax(0%) +invoice-merchant 0:57a66d21eb1b 0.69 totaldue +invoice-merchant 0:a4dfc8dd0535 0.76 usd444.00 +invoice-merchant 0:b0553f008513 0.87 paymentdueby +invoice-merchant 0:a416c258bdd9 0.30 thankyouforchoosingcoastline. +invoice-merchant 0:aaa4b5e2074f 0.27 ifyouhaveanyquestionsaboutthisin +invoice-metered 0:8a80987c409a 0.23 northwindcloud +invoice-metered 0:52d6e3de4fa0 0.20 invoice +invoice-metered 0:41305d2c2d3b -0.19 northwindcloudservicesltd. +invoice-metered 0:c3f5f4cc9def -0.18 120riversideway +invoice-metered 0:5be08c6bee4c -0.19 bristol,bs16qt +invoice-metered 0:2474519f77a9 -0.20 unitedkingdom +invoice-metered 0:ec6d474a1bfc -0.21 vatid: +invoice-metered 0:b03c22d79b17 -0.21 gb412883027 +invoice-metered 0:83e16ec72a3f -0.23 phone: +invoice-metered 0:bff9aeb5400b -0.23 +44(0)1174962280 +invoice-metered 0:439961205ae6 -0.25 email: +invoice-metered 0:228e0a39fe6e -0.25 billing@northwind.example +invoice-metered 0:294ed2cfe15e -0.26 website:https://northwind.exampl +invoice-metered 0:6282391a4cc1 -0.08 invoicenumber: +invoice-metered 0:0edf022238f1 -0.07 inv-2026-00041882 +invoice-metered 0:8d05f5d55191 -0.05 invoicedate: +invoice-metered 0:52c8b7a9ee5f -0.04 31july2026 +invoice-metered 0:0e0fb0fc0939 -0.05 duedate: +invoice-metered 0:6a077b4f161e -0.04 30august2026 +invoice-metered 0:aa1e9c8092ab -0.05 billperiod: +invoice-metered 0:3e380076ca84 -0.04 01jul2026–31jul2026 +invoice-metered 0:18e2cca1098e -0.04 paymentterms: +invoice-metered 0:c6af9fc633ee -0.04 net30days +invoice-metered 0:967e0b6ca4b9 -0.04 currency: +invoice-metered 0:54f8e1b3fe44 -0.04 gbp +invoice-metered 0:aeba3a7b3598 0.01 billto +invoice-metered 0:45fe04dbae24 -0.05 brightfutureltd. +invoice-metered 0:65405af34bf9 -0.04 45kingstreet +invoice-metered 0:1f8da9c4e269 -0.08 manchester,m24wu +invoice-metered 0:c7a9cfdd1c55 -0.16 vatid:gb987654321 +invoice-metered 0:725a8f5062e7 0.01 shipto +invoice-metered 0:5895c7cd8d5b -0.04 warehouse7 +invoice-metered 0:caf76743df2d -0.08 northindustrialestate +invoice-metered 0:c9046f7a37ad 0.28 description +invoice-metered 0:9df6b026a8c6 0.28 service +invoice-metered 0:32e8369a9c4f 0.28 qty +invoice-metered 0:d1062d072acd 0.28 unitprice +invoice-metered 0:cf38d95c9c6b 0.28 amount +invoice-metered 0:f13d9c7c6f89 0.49 computeinstances +invoice-metered 0:d08426b31521 0.46 on-demandusage +invoice-metered 0:05313a23f706 0.50 london(eu-west) +invoice-metered 0:6e477a22f840 0.50 744hrs +invoice-metered 0:352967434b63 0.50 gbp0.0710 +invoice-metered 0:eec5f520909e 0.50 gbp52.82 +invoice-metered 0:721ffa554e56 0.48 objectstorage +invoice-metered 0:df2f05798b9e 0.45 storedvolume +invoice-metered 0:41542149a8a5 0.48 480gb +invoice-metered 0:2242bd7aa8ce 0.48 gbp0.0215 +invoice-metered 0:7c6be041f9c2 0.48 gbp10.32 +invoice-metered 0:8152fd217e12 0.46 manageddatabase +invoice-metered 0:3c8556c4aa26 0.43 primaryandreplica +invoice-metered 0:76afc71f5b3e 0.47 gbp0.1650 +invoice-metered 0:baad0db43ed6 0.47 gbp122.76 +invoice-metered 0:444858f5bf18 0.45 egresstraffic +invoice-metered 0:8b72bb875a83 0.42 datatransferout +invoice-metered 0:8001c2743965 0.45 global +invoice-metered 0:847eb4cbbb42 0.45 310gb +invoice-metered 0:d651e46704f7 0.45 gbp0.0900 +invoice-metered 0:4ecaa7313375 0.45 gbp27.90 +invoice-metered 0:efa8771baad9 0.69 supportplan +invoice-metered 0:9e81cd6e653a 0.65 standardresponse +invoice-metered 0:a0443240c5ed 0.69 gbp0.91 +invoice-metered 0:3c7ade679fdf 0.30 paymentdetails +invoice-metered 0:0ecb5847ffa7 0.29 accountname: +invoice-metered 0:944d398aea60 0.27 bankname: +invoice-metered 0:062433da3c2a 0.27 riverbankplc +invoice-metered 0:6b4894c28363 0.25 accountnumber: +invoice-metered 0:7c068e1eded4 0.25 60415523 +invoice-metered 0:4bf9e1b71d6b 0.23 sortcode: +invoice-metered 0:0309d81ea4af 0.23 20-41-08 +invoice-metered 0:1f619f9689b2 0.21 iban: +invoice-metered 0:6c4b0e61038b 0.21 gb29rivb20410860415523 +invoice-metered 0:4f657c67e41a 0.18 accounttype: +invoice-metered 0:3af279547725 0.18 businesscurrent +invoice-metered 0:fa0fbe194b51 0.16 remittanceemail: +invoice-metered 0:d6577e95efba 0.88 subtotal +invoice-metered 0:79fabcfaa819 0.88 gbp214.71 +invoice-metered 0:a52611c9261b 0.85 vat(20%) +invoice-metered 0:e50d8a0ea599 0.85 gbp42.94 +invoice-metered 0:57a66d21eb1b 0.72 totaldue +invoice-metered 0:f207312dff2f 0.65 gbp257.65 +invoice-metered 0:b0553f008513 0.81 paymentdueby +invoice-metered 0:e60e7ef06ccc -0.01 thankyouforrunningonnorthwindclo +invoice-metered 0:34ea2ec3fe72 -0.01 forbillingandaccountsupport,visi +invoice-metered 0:e28672d64882 -0.04 northwindcloudservicesltd.isasub +invoice-metered 0:985e43c2de34 -0.04 120riversideway,bristol,bs16qt,u +invoice-metered 0:7b14b8d2c5c4 -0.04 page1of1 +invoice-modern 0:52d6e3de4fa0 0.00 invoice +invoice-modern 0:30d85a94548c 0.30 invoicegc-2026-041issued02apr202 +invoice-modern 0:75857a458999 0.20 from +invoice-modern 0:c26c22b94338 0.18 graphcomposestudio +invoice-modern 0:2a08ce5567fb -0.10 18layoutstreet +invoice-modern 0:fbeea547d99e -0.12 london,uk +invoice-modern 0:faf1569a98e9 -0.15 ec1a4gc +invoice-modern 0:befc6e9b5c24 -0.17 billing@graphcompose.dev +invoice-modern 0:89674e6f130e -0.20 +442055551000 +invoice-modern 0:a2b2e7d2906f -0.22 taxidgb-99887766 +invoice-modern 0:aeba3a7b3598 0.20 billto +invoice-modern 0:f890faef907f 0.18 northwindsystems +invoice-modern 0:1b405eb431ca -0.10 attn:financeteam +invoice-modern 0:91eefd794f79 -0.12 410marketavenue +invoice-modern 0:00a97da4e243 -0.15 manchester,uk +invoice-modern 0:62fcfa8745fc -0.17 ap@northwind.example +invoice-modern 0:2081a41a7764 -0.20 +441615552200 +invoice-modern 0:5a6e7135d21b -0.22 taxidnw-2026-01 +invoice-modern 0:c9046f7a37ad 0.10 description +invoice-modern 0:32e8369a9c4f 0.10 qty +invoice-modern 0:385cfdbc00ec 0.10 unit +invoice-modern 0:cf38d95c9c6b 0.10 amount +invoice-modern 0:987c6297d0a9 0.32 discoveryworkshop +invoice-modern 0:532674c6eb89 0.32 gbp1,450 +invoice-modern 0:08ec6deb1c40 0.32 templatearchitecture2 +invoice-modern 0:d2e67c4b1cca 0.32 gbp980 +invoice-modern 0:d6cdf6a05754 0.32 gbp1,960 +invoice-modern 0:fe13f8ee4f99 0.32 renderqa +invoice-modern 0:7e7398cbff7c 0.32 gbp320 +invoice-modern 0:e23164e940c7 0.32 gbp960 +invoice-modern 0:6047df51175c 0.32 developerenablement1 +invoice-modern 0:c2ad01ea64ae 0.32 gbp780 +invoice-modern 0:d6577e95efba 0.32 subtotal +invoice-modern 0:50cae0510231 0.32 gbp5,150 +invoice-modern 0:a52611c9261b 0.32 vat(20%) +invoice-modern 0:d7f4425b8b16 0.32 gbp1,030 +invoice-modern 0:11239872d178 0.33 total +invoice-modern 0:45a5ad5ad430 0.33 gbp6,180 +invoice-modern 0:ab5aa97074c4 0.45 notes +invoice-modern 0:b78eb53cbd11 0.52 •pleaseincludetheinvoicenumberon +invoice-modern 0:8c8fd62f15a7 0.52 yourremittanceadvice. +invoice-modern 0:0c98130c526f 0.52 •allworkwasdeliveredasagreed +invoice-modern 0:2e9787ed79bf 0.52 duringtheaprilimplementation +invoice-modern 0:e41212011d98 0.52 window. +invoice-modern 0:fb854bac39c8 0.45 paymentterms +invoice-modern 0:24274f39b50b 0.52 •paymentduewithin14calendardays. +invoice-modern 0:c438440ba377 0.52 •banktransferpreferred;contact +invoice-modern 0:434cc906ae90 0.52 billing@graphcompose.devfor +invoice-modern 0:8822ea375315 0.52 remittancedetails. +invoice-modern 0:1a7b5c840e25 0.52 •latepaymentsmaydelayadditional +invoice-modern 0:1631a06d245f 0.52 templatecustomizationwork. +invoice-modern 0:e3337beaa171 0.50 thankyouforchoosinggraphcomposef +invoice-modern_long 0:52d6e3de4fa0 0.00 invoice +invoice-modern_long 0:61a964e78950 0.30 invoicegc-2026-042issued04may202 +invoice-modern_long 0:62a2fed3d6e0 0.30 pending +invoice-modern_long 0:75857a458999 0.20 from +invoice-modern_long 0:c26c22b94338 0.18 graphcomposestudio +invoice-modern_long 0:2a08ce5567fb -0.10 18layoutstreet +invoice-modern_long 0:fbeea547d99e -0.12 london,uk +invoice-modern_long 0:faf1569a98e9 -0.15 ec1a4gc +invoice-modern_long 0:befc6e9b5c24 -0.17 billing@graphcompose.dev +invoice-modern_long 0:89674e6f130e -0.20 +442055551000 +invoice-modern_long 0:aeba3a7b3598 0.20 billto +invoice-modern_long 0:f890faef907f 0.18 northwindsystems +invoice-modern_long 0:1b405eb431ca -0.10 attn:financeteam +invoice-modern_long 0:91eefd794f79 -0.12 410marketavenue +invoice-modern_long 0:00a97da4e243 -0.15 manchester,uk +invoice-modern_long 0:62fcfa8745fc -0.17 ap@northwind.example +invoice-modern_long 0:2081a41a7764 -0.20 +441615552200 +invoice-modern_long 0:c9046f7a37ad 0.13 description +invoice-modern_long 0:32e8369a9c4f 0.13 qty +invoice-modern_long 0:385cfdbc00ec 0.13 unit +invoice-modern_long 0:cf38d95c9c6b 0.13 amount +invoice-modern_long 0:aa29f2f4fcb4 0.35 discoveryworkshop—sprint1 +invoice-modern_long 0:ce4081aef7a1 0.35 gbp180 +invoice-modern_long 0:9c9a412f0a45 0.35 designsystemaudit—sprint1 +invoice-modern_long 0:7be809cb1590 0.35 gbp217 +invoice-modern_long 0:378b363c8601 0.35 gbp434 +invoice-modern_long 0:5257532a7b5d 0.35 templatearchitecture—sprint1 +invoice-modern_long 0:c467cca4e45a 0.35 gbp254 +invoice-modern_long 0:4a4a218b012a 0.35 gbp762 +invoice-modern_long 0:58a1caacbf7e 0.35 layoutenginetuning—sprint1 +invoice-modern_long 0:dde0144b97b7 0.35 gbp291 +invoice-modern_long 0:457a71636ad9 0.35 gbp1164 +invoice-modern_long 0:6fcf7d6dd606 0.35 renderqapass—sprint1 +invoice-modern_long 0:dda88f5786f5 0.35 gbp328 +invoice-modern_long 0:ee18ad3bbb42 0.35 accessibilityreview—sprint1 +invoice-modern_long 0:e681b4843ffb 0.35 gbp365 +invoice-modern_long 0:1859c20b35dd 0.35 gbp730 +invoice-modern_long 0:c12c14945fcd 0.35 fontpipelinesetup—sprint1 +invoice-modern_long 0:9033a33f66e7 0.35 gbp402 +invoice-modern_long 0:837d48c1ff40 0.35 gbp1206 +invoice-modern_long 0:af6cba848dc0 0.35 chartintegration—sprint1 +invoice-modern_long 0:6109a2c30104 0.35 gbp439 +invoice-modern_long 0:87e9fcb6151d 0.35 gbp1756 +invoice-modern_long 0:a6bee1ec5e35 0.35 datamapping—sprint1 +invoice-modern_long 0:df1f9d4443d8 0.35 gbp476 +invoice-modern_long 0:052c9f49a4b8 0.35 paginationhardening—sprint1 +invoice-modern_long 0:9fba6332e489 0.35 gbp513 +invoice-modern_long 0:6f805c9f78c3 0.35 gbp1026 +invoice-modern_long 0:b54b7f77d86c 0.35 visualregressionwiring—sprint13 +invoice-modern_long 0:dc3d212d6b32 0.35 gbp550 +invoice-modern_long 0:96667fee53f3 0.35 gbp1650 +invoice-modern_long 0:9fe9e123b0f0 0.35 docsauthoring—sprint1 +invoice-modern_long 0:e7b406f24f04 0.35 gbp587 +invoice-modern_long 0:74357ca6b30e 0.35 gbp2348 +invoice-modern_long 0:9c6cf539f5bc 0.35 stakeholderdemo—sprint1 +invoice-modern_long 0:cf79b5cdb735 0.35 gbp624 +invoice-modern_long 0:d2bde6642670 0.35 performanceprofiling—sprint1 +invoice-modern_long 0:679f017f73c1 0.35 gbp661 +invoice-modern_long 0:63985b524723 0.35 gbp1322 +invoice-modern_long 0:f82bef1ac80d 0.35 releaseengineering—sprint1 +invoice-modern_long 0:0b21b7cf2ff9 0.35 gbp698 +invoice-modern_long 0:6afc08056aaa 0.35 gbp2094 +invoice-modern_long 0:632f71e8ff8b 0.35 supportretainer—sprint1 +invoice-modern_long 0:70b393b5fb10 0.35 gbp735 +invoice-modern_long 0:29edf7588a57 0.35 gbp2940 +invoice-modern_long 0:82a9218b91ae 0.35 discoveryworkshop—sprint2 +invoice-modern_long 0:c313f34b71b9 0.35 gbp772 +invoice-modern_long 0:7e69fbffe3e2 0.35 designsystemaudit—sprint2 +invoice-modern_long 0:e096e4fddf9a 0.35 gbp809 +invoice-modern_long 0:c985a0123929 0.35 gbp1618 +invoice-modern_long 0:899f0392eecb 0.35 templatearchitecture—sprint2 +invoice-modern_long 0:4c973ddb9245 0.35 gbp846 +invoice-modern_long 0:6ec359ce3927 0.35 gbp2538 +invoice-modern_long 0:69523ba7402c 0.35 layoutenginetuning—sprint2 +invoice-modern_long 0:0e196c2b490b 0.35 gbp883 +invoice-modern_long 0:6e0d19ab72c6 0.35 gbp3532 +invoice-modern_long 1:c9046f7a37ad 0.30 description +invoice-modern_long 1:32e8369a9c4f 0.30 qty +invoice-modern_long 1:385cfdbc00ec 0.30 unit +invoice-modern_long 1:cf38d95c9c6b 0.30 amount +invoice-modern_long 1:f12cbb7c274d 0.52 renderqapass—sprint2 +invoice-modern_long 1:b813c73bc488 0.52 gbp920 +invoice-modern_long 1:12cd54b50187 0.52 accessibilityreview—sprint2 +invoice-modern_long 1:377d92702316 0.52 gbp957 +invoice-modern_long 1:e7c66f6cf477 0.52 gbp1914 +invoice-modern_long 1:e3d8409ace07 0.52 fontpipelinesetup—sprint2 +invoice-modern_long 1:21604b8f0b36 0.52 gbp994 +invoice-modern_long 1:fe15ed444063 0.52 gbp2982 +invoice-modern_long 1:ca4d3c8eca22 0.52 chartintegration—sprint2 +invoice-modern_long 1:a4c7a6612c99 0.52 gbp1031 +invoice-modern_long 1:1c83f0b47e27 0.52 gbp4124 +invoice-modern_long 1:00de69c6e70f 0.52 datamapping—sprint2 +invoice-modern_long 1:b9d5c56a2cfd 0.52 gbp1068 +invoice-modern_long 1:eb628b5ea8ab 0.52 paginationhardening—sprint2 +invoice-modern_long 1:db5327b47d0e 0.52 gbp205 +invoice-modern_long 1:99d9b3b49da2 0.52 gbp410 +invoice-modern_long 1:505693cbc91e 0.52 visualregressionwiring—sprint23 +invoice-modern_long 1:9f0c5094fb63 0.52 gbp242 +invoice-modern_long 1:095b72c9d880 0.52 gbp726 +invoice-modern_long 1:2a787e61730a 0.52 docsauthoring—sprint2 +invoice-modern_long 1:28ad00e76aef 0.52 gbp279 +invoice-modern_long 1:fbb12fed0bbc 0.52 gbp1116 +invoice-modern_long 1:5369a2c40ff8 0.52 stakeholderdemo—sprint2 +invoice-modern_long 1:16562cbcd318 0.52 gbp316 +invoice-modern_long 1:611b258cb41e 0.52 performanceprofiling—sprint2 +invoice-modern_long 1:e391d4e46366 0.52 gbp353 +invoice-modern_long 1:7106c00cb009 0.52 gbp706 +invoice-modern_long 1:d24a15800df1 0.52 releaseengineering—sprint2 +invoice-modern_long 1:4bed9b4092ee 0.52 gbp390 +invoice-modern_long 1:ae16cd1e31b1 0.52 gbp1170 +invoice-modern_long 1:6876c7b0fe66 0.52 supportretainer—sprint2 +invoice-modern_long 1:909481a45a34 0.52 gbp427 +invoice-modern_long 1:4e58d78d0958 0.52 gbp1708 +invoice-modern_long 1:ddce236bccd7 0.52 discoveryworkshop—sprint3 +invoice-modern_long 1:f8d17c11d834 0.52 gbp464 +invoice-modern_long 1:c0986cd7b1d4 0.52 designsystemaudit—sprint3 +invoice-modern_long 1:09c7aebd89f6 0.52 gbp501 +invoice-modern_long 1:a61c7b6bdd20 0.52 gbp1002 +invoice-modern_long 1:21fd82d170b2 0.52 templatearchitecture—sprint3 +invoice-modern_long 1:399e39a6eff5 0.52 gbp538 +invoice-modern_long 1:81ea39164f41 0.52 gbp1614 +invoice-modern_long 1:47cb1e683e8d 0.52 layoutenginetuning—sprint3 +invoice-modern_long 1:f6df6e8e8f30 0.52 gbp575 +invoice-modern_long 1:7f7db0f4c1cf 0.52 gbp2300 +invoice-modern_long 1:608e31719f07 0.52 renderqapass—sprint3 +invoice-modern_long 1:e4fbc626999e 0.52 gbp612 +invoice-modern_long 1:98bfb4deb0b7 0.52 accessibilityreview—sprint3 +invoice-modern_long 1:7915a839b285 0.52 gbp649 +invoice-modern_long 1:ca74221d78ad 0.52 gbp1298 +invoice-modern_long 1:375dddcbee43 0.52 fontpipelinesetup—sprint3 +invoice-modern_long 1:7b97f0ac8a87 0.52 gbp686 +invoice-modern_long 1:6a57f6a84a1c 0.52 gbp2058 +invoice-modern_long 1:2f4f507058ff 0.52 chartintegration—sprint3 +invoice-modern_long 1:74df855b318c 0.52 gbp723 +invoice-modern_long 1:78016cdf49ca 0.52 gbp2892 +invoice-modern_long 1:d6577e95efba 0.52 subtotal +invoice-modern_long 1:5969b6461056 0.52 gbp44,890 +invoice-modern_long 1:a52611c9261b 0.52 vat(20%) +invoice-modern_long 1:e7fda33332e9 0.52 gbp8,978 +invoice-modern_long 1:11239872d178 0.53 total +invoice-modern_long 1:90b9dec01ea9 0.53 gbp53,868 +invoice-modern_long 1:ab5aa97074c4 0.65 notes +invoice-modern_long 1:970fb4bf9d95 0.72 •sprints1-3weredeliveredunderthe +invoice-modern_long 1:a781fa6c76d2 0.72 frameworkagreement. +invoice-modern_long 1:c980fb1ebf98 0.72 •hardwareandthird-partylicencesa +invoice-modern_long 1:be1dea5817a5 0.72 billedseparately. +invoice-modern_long 1:fb854bac39c8 0.65 paymentterms +invoice-modern_long 1:24274f39b50b 0.72 •paymentduewithin14calendardays. +invoice-modern_long 1:c438440ba377 0.72 •banktransferpreferred;contact +invoice-modern_long 1:434cc906ae90 0.72 billing@graphcompose.devfor +invoice-modern_long 1:8822ea375315 0.72 remittancedetails. +invoice-modern_long 1:e3337beaa171 0.70 thankyouforchoosinggraphcomposef +invoice-obsidian 0:07f15cde5b18 0.14 kestrel +invoice-obsidian 0:52d6e3de4fa0 0.12 invoice +invoice-obsidian 0:5d1d1b79af09 0.02 invoicenumber +invoice-obsidian 0:3e62d1fbe5ec 0.06 inv-2026-1048 +invoice-obsidian 0:8feaf8016bab 0.02 issuedate +invoice-obsidian 0:4d49cb78b810 0.02 27august2026 +invoice-obsidian 0:ac10f8c16320 -0.05 duedate +invoice-obsidian 0:b55571aaabac -0.05 10september2026 +invoice-obsidian 0:fb854bac39c8 -0.12 paymentterms +invoice-obsidian 0:56a2e019b8aa -0.12 14days +invoice-obsidian 0:466e5b9cd57f -0.19 currency +invoice-obsidian 0:54f8e1b3fe44 -0.19 gbp +invoice-obsidian 0:75857a458999 -0.26 from +invoice-obsidian 0:7d7385ecfbd9 -0.29 kestrelbusiness +invoice-obsidian 0:5f51304df361 -0.27 7harboursidewalk +invoice-obsidian 0:895a6b59f677 -0.29 bristolbs15ty +invoice-obsidian 0:2474519f77a9 -0.29 unitedkingdom +invoice-obsidian 0:70ec69d2102f -0.31 ar@kestrel.example +invoice-obsidian 0:aeba3a7b3598 -0.26 billto +invoice-obsidian 0:7bfc2b791f41 -0.29 northlineconsultingltd +invoice-obsidian 0:13dd937d2fe6 -0.27 21jubileeway +invoice-obsidian 0:f9bab6a0b45b -0.29 londonse13ss +invoice-obsidian 0:c9046f7a37ad -1.75 description +invoice-obsidian 0:32e8369a9c4f -1.75 qty +invoice-obsidian 0:d1062d072acd -1.75 unitprice +invoice-obsidian 0:a52611c9261b -1.75 vat(20%) +invoice-obsidian 0:cf38d95c9c6b -1.75 amount +invoice-obsidian 0:15345cbad705 -0.17 subscriptionsetup +invoice-obsidian 0:5100476d46bb -0.17 one-offaccountandworkspacesetup +invoice-obsidian 0:507f9f133059 -0.21 £150.00 +invoice-obsidian 0:893d7480f763 -0.21 £30.00 +invoice-obsidian 0:629184210581 -0.21 £180.00 +invoice-obsidian 0:3e8060178bc4 -0.21 internationalpaymentsupport +invoice-obsidian 0:33e4ab51097e -0.21 monthlysupportforcross-borderpay +invoice-obsidian 0:96d6b62c061d -0.25 £250.00 +invoice-obsidian 0:70d5b1312085 -0.25 £50.00 +invoice-obsidian 0:d86642b21e53 -0.25 £300.00 +invoice-obsidian 0:9399cf3b221a -0.26 expensemanagementintegration +invoice-obsidian 0:da2890c99f7a -0.26 apiaccessandintegration +invoice-obsidian 0:372ba7238228 -0.29 £200.00 +invoice-obsidian 0:05c6a4f7132f -0.29 £40.00 +invoice-obsidian 0:853580239989 -0.29 £240.00 +invoice-obsidian 0:ba80be228223 -0.30 virtualcards +invoice-obsidian 0:eae2564ef311 -0.30 50virtualcards +invoice-obsidian 0:cf02270203a4 -0.34 £100.00 +invoice-obsidian 0:33b5fc913817 -0.34 £20.00 +invoice-obsidian 0:8aec54fdb1a1 -0.34 £120.00 +invoice-obsidian 0:cc29e90932c5 -0.34 businessaccountmaintenance +invoice-obsidian 0:f1254de1a1d4 -0.34 monthlyaccountmaintenancefee +invoice-obsidian 0:8bf9ac7b27bd -0.38 £6.00 +invoice-obsidian 0:bff295cd3f97 -0.38 £36.00 +invoice-obsidian 0:d6577e95efba 0.56 subtotal +invoice-obsidian 0:4595e1b34cb1 0.55 £730.00 +invoice-obsidian 0:eafa82a0eadf 0.51 £146.00 +invoice-obsidian 0:57a66d21eb1b 0.43 totaldue +invoice-obsidian 0:ad3ba615a506 0.41 £876.00 +invoice-obsidian 0:ab5aa97074c4 0.22 notes +invoice-obsidian 0:0956d8d0441d 0.84 thankyouforchoosingkestrelbusine +invoice-obsidian 0:0b4d6f0e8783 0.84 thisinvoicecoversservicesandfeat +invoice-obsidian 0:02e483554647 0.85 toyourbusinessasofthedateofissue +invoice-obsidian 0:b439106fc5a1 0.86 ifyouhaveanyquestionsaboutthisin +invoice-obsidian 0:877ac656a147 0.87 pleasecontactusatar@kestrel.exam +invoice-obsidian 0:3c7ade679fdf 0.22 paymentdetails +invoice-obsidian 0:473fbeedb47c -0.30 pleasepaybybanktransfer +invoice-obsidian 0:59f2b74175d7 -0.29 totheaccountbelow. +invoice-obsidian 0:811f691f5582 0.23 payee +invoice-obsidian 0:10aeacde20ff 0.22 sortcode +invoice-obsidian 0:a748c443f622 0.16 04-00-75 +invoice-obsidian 0:f92a9c925024 0.21 accountnumber +invoice-obsidian 0:ef797c8118f0 0.15 12345678 +invoice-obsidian 0:52367a6622b1 0.20 reference +invoice-obsidian 0:7c6ab37d83ef 0.48 thankyouforyourbusiness. +invoice-obsidian 0:a97667f07d1b 0.47 paymentisdueby10september2026. +invoice-obsidian 0:7b14b8d2c5c4 -0.03 page1of1 +invoice-payments 0:b6c4ac412ac8 -0.02 meridian +invoice-payments 0:52d6e3de4fa0 0.41 invoice +invoice-payments 0:c0cc75b9cfdc -0.22 meridianpaymentsltd. +invoice-payments 0:5eeaa101da6c -0.19 1harbourexchange +invoice-payments 0:e3f6090f249b -0.23 canarywharf +invoice-payments 0:1bb9adbf32ff -0.26 londone149ge +invoice-payments 0:2474519f77a9 -0.30 unitedkingdom +invoice-payments 0:e89d810f7944 -0.32 companyno.09048900 +invoice-payments 0:a3052fe78c6e -0.32 vatno.gb123456789 +invoice-payments 0:5d1d1b79af09 -0.07 invoicenumber +invoice-payments 0:3d9e18bc1da9 -0.09 invoicedate +invoice-payments 0:9fb3dbb29042 -0.12 billingperiod +invoice-payments 0:acc0140cb66d -0.14 accountid +invoice-payments 0:fb854bac39c8 -0.16 paymentterms +invoice-payments 0:ac10f8c16320 -0.19 duedate +invoice-payments 0:073c1634c496 -0.21 status +invoice-payments 0:052ff4dff688 -0.04 inv-2025-05-10472 +invoice-payments 0:23a4c624cbda -0.01 10may2025 +invoice-payments 0:7b052c343b27 0.02 1-30april2025 +invoice-payments 0:018052c1dd59 0.04 acct_4q8xtb2mkp +invoice-payments 0:98ec3d1fd5b9 0.07 net30 +invoice-payments 0:1ade0cb4877f 0.10 14june2025 +invoice-payments 0:e66d03af0bf1 0.09 unpaid +invoice-payments 0:aeba3a7b3598 0.13 billto +invoice-payments 0:98997fb707ef 0.05 northwindltd. +invoice-payments 0:834834123752 0.13 attention:financeteam +invoice-payments 0:76b6fd2080ed 0.10 42bridgewaterstreet +invoice-payments 0:e031db0583eb 0.07 manchesterm154qt +invoice-payments 0:23f3489a1043 0.04 vatno.gb987654321 +invoice-payments 0:725a8f5062e7 0.13 shipto +invoice-payments 0:9976f2392d8c 0.13 operationscentre +invoice-payments 0:fc0e113402c7 0.10 7kingswaypark +invoice-payments 0:a72c3f2308ed 0.07 leedsls126bd +invoice-payments 0:c9046f7a37ad 0.24 description +invoice-payments 0:1a7b308d8df6 0.24 quantity +invoice-payments 0:d1062d072acd 0.24 unitprice +invoice-payments 0:7c512b48ba8a 0.24 vat +invoice-payments 0:2da123241332 0.24 amount(gbp) +invoice-payments 0:3ab6c1099bcc 5.43 subscriptionbilling +invoice-payments 0:96d6b62c061d 0.40 £250.00 +invoice-payments 0:dc934fe30a94 0.40 20% +invoice-payments 0:0a9acaea6477 5.43 paymentprocessing +invoice-payments 0:351704ebff51 0.40 £1,180.00 +invoice-payments 0:b3bc34f90a55 0.42 fraudscreening +invoice-payments 0:ed051c6a1942 0.46 advancedfraudscreeningandrules +invoice-payments 0:a0a787efd867 0.42 £320.00 +invoice-payments 0:34b75c1d0234 0.41 companyformation +invoice-payments 0:bf45c494a8dc 0.45 incorporationandcompliancefiling +invoice-payments 0:629184210581 0.41 £180.00 +invoice-payments 0:9427a01801d2 0.40 in-personterminals +invoice-payments 0:882be821cf2e 0.44 terminalrentalandfirmwareupdates +invoice-payments 0:3c4459a5e4ec 0.40 £39.00 +invoice-payments 0:5d16afda896e 0.41 £156.00 +invoice-payments 0:0036ebf2cfb2 0.59 prioritysupport +invoice-payments 0:7ef1d2ff5e3a 0.63 namedengineer,one-hourresponse +invoice-payments 0:cf02270203a4 0.59 £100.00 +invoice-payments 0:3c7ade679fdf 0.77 paymentdetails +invoice-payments 0:182748d2fece 0.81 bankname +invoice-payments 0:758f4a6f175f 0.82 accountname +invoice-payments 0:10aeacde20ff 0.83 sortcode +invoice-payments 0:f92a9c925024 0.84 accountnumber +invoice-payments 0:d53cd2cae33d 0.85 iban +invoice-payments 0:3f695692d5f1 0.86 swift/bic +invoice-payments 0:52367a6622b1 0.87 reference +invoice-payments 0:c66da4639881 0.78 harbourbankplc +invoice-payments 0:2cd71c3c2603 0.70 40-02-50 +invoice-payments 0:8fb8a81278c4 0.66 71295408 +invoice-payments 0:48617b6d05d4 0.62 gb29hrbk40025071295408 +invoice-payments 0:6929e6db6e1f 0.58 hrbkgb2l +invoice-payments 0:e4c4788968b2 0.86 subtotal(excl.vat) +invoice-payments 0:7ed180496d4e 0.87 vatat20% +invoice-payments 0:751cbab81a3a 0.90 £2,186.00 +invoice-payments 0:9a5256946abd 0.91 £437.20 +invoice-payments 0:57a66d21eb1b 0.85 totaldue +invoice-payments 0:5eb0b17220fa 0.91 dueby14june2025 +invoice-payments 0:30d896eb989f 0.65 £2,623.20 +invoice-payments 0:ab5aa97074c4 1.06 notes +invoice-payments 0:241bcf576ac5 1.08 thankyouforyourbusiness.thisinvo +invoice-payments 0:f912ca46bf39 1.06 latepaymentmayincurinterestatthe +invoice-payments 0:73a09fec2c1a 1.10 paymentdueby14june2025 +invoice-payments 0:79df6c5bbc16 1.08 pleaseincludetheinvoicenumberasp +invoice-payments 0:28b3008f693b 1.04 questions?we'reheretohelp. +invoice-payments 0:5b88ed40a689 1.07 support@meridianpayments.example +invoice-payments 0:2e3891f6ba2f 1.08 39661900 +invoice-payments 0:7b14b8d2c5c4 -0.04 page1of1 +invoice-platform 0:9817f28442bf 0.04 auroracloud +invoice-platform 0:52d6e3de4fa0 0.61 invoice +invoice-platform 0:1cf61cdc6464 0.06 auroracloudinc. +invoice-platform 0:43315277b007 -0.40 500harbourstreet +invoice-platform 0:d9065bfb8f59 -0.40 vancouver,bcv6c2w2 +invoice-platform 0:408c7c5887a0 -0.41 canada +invoice-platform 0:88a643f14708 0.18 aurora.example +invoice-platform 0:f2cfc804c0f3 0.18 billing@aurora.example +invoice-platform 0:799715f2b96e 0.19 +1604-555-0180 +invoice-platform 0:719c55c7e988 -0.44 vatid:cabn842137755 +invoice-platform 0:6282391a4cc1 -0.31 invoicenumber: +invoice-platform 0:3ad2bd3ce9fc -0.31 inv-2026-07-31-9f4k2m +invoice-platform 0:8d05f5d55191 -0.34 invoicedate: +invoice-platform 0:52c8b7a9ee5f -0.34 31july2026 +invoice-platform 0:0e0fb0fc0939 -0.36 duedate: +invoice-platform 0:6a077b4f161e -0.36 30august2026 +invoice-platform 0:e26e182e1141 -0.39 billingaccountid: +invoice-platform 0:6d4b27b68226 -0.39 7c2d9e-b1f4a8-3k6m0p +invoice-platform 0:d39366fa1423 -0.41 billingperiod: +invoice-platform 0:3e380076ca84 -0.41 01jul2026–31jul2026 +invoice-platform 0:18e2cca1098e -0.44 paymentterms: +invoice-platform 0:c6af9fc633ee -0.44 net30days +invoice-platform 0:967e0b6ca4b9 -0.46 currency: +invoice-platform 0:2afe5e26e9c8 -0.46 cad +invoice-platform 0:aeba3a7b3598 -0.39 billto +invoice-platform 0:45fe04dbae24 -0.41 brightfutureltd. +invoice-platform 0:65405af34bf9 -0.37 45kingstreet +invoice-platform 0:1f8da9c4e269 -0.39 manchester,m24wu +invoice-platform 0:2474519f77a9 -0.41 unitedkingdom +invoice-platform 0:c7a9cfdd1c55 -0.43 vatid:gb987654321 +invoice-platform 0:725a8f5062e7 -0.41 shipto +invoice-platform 0:5895c7cd8d5b -0.36 warehouse7 +invoice-platform 0:caf76743df2d -0.38 northindustrialestate +invoice-platform 0:c9046f7a37ad -0.22 description +invoice-platform 0:9df6b026a8c6 -0.22 service +invoice-platform 0:c697d2981bf4 -0.22 region +invoice-platform 0:0a4e4c29432e -0.22 usage +invoice-platform 0:965711fdf178 -0.22 unitprice(cad) +invoice-platform 0:1742adf77d8c -0.22 amount(cad) +invoice-platform 0:b04a12f6483e -0.26 compute +invoice-platform 0:a2cd33d50126 -0.26 ca-central1 +invoice-platform 0:ff5f15700bca -0.26 744.00 +invoice-platform 0:404314b1f4bd -0.27 hours +invoice-platform 0:456fa3bce642 -0.26 0.0685 +invoice-platform 0:4249970361b2 -0.26 50.96 +invoice-platform 0:f13d9c7c6f89 -0.32 computeinstances +invoice-platform 0:524b18673a85 -0.29 n2standardvm +invoice-platform 0:49a25f9feefa -0.27 storage +invoice-platform 0:f58bef646914 -0.26 480.00 +invoice-platform 0:089bbc1623e2 -0.27 0.0210 +invoice-platform 0:782fd1b0f47e -0.27 10.08 +invoice-platform 0:721ffa554e56 -0.32 objectstorage +invoice-platform 0:b3223a301c5f -0.29 standardclass +invoice-platform 0:3549b0028b75 -0.27 database +invoice-platform 0:ae96e95d52ac -0.27 0.1385 +invoice-platform 0:2ff58dbe7993 -0.27 103.04 +invoice-platform 0:8152fd217e12 -0.32 manageddatabase +invoice-platform 0:3500adb3c8a1 -0.30 postgresqlinstance +invoice-platform 0:3009be769fb8 -0.27 network +invoice-platform 0:8001c2743965 -0.27 global +invoice-platform 0:3f6ae649df50 -0.27 260.00 +invoice-platform 0:7775158f6d3a -0.27 0.0860 +invoice-platform 0:f7650feb3574 -0.27 22.36 +invoice-platform 0:444858f5bf18 -0.32 egresstraffic +invoice-platform 0:8b72bb875a83 -0.30 datatransferout +invoice-platform 0:a18603086e5b -0.27 support +invoice-platform 0:561b2814d3c0 -0.27 0.00 +invoice-platform 0:efa8771baad9 -0.33 supportplan +invoice-platform 0:9e81cd6e653a -0.30 standardresponse +invoice-platform 0:13000a5d442c -0.25 paymentinformation +invoice-platform 0:944d398aea60 -0.11 bankname: +invoice-platform 0:d6c3cea2e943 -0.11 harbourbankofcanada +invoice-platform 0:0ecb5847ffa7 -0.10 accountname: +invoice-platform 0:6b4894c28363 -0.10 accountnumber: +invoice-platform 0:559c58c48948 -0.10 417802336 +invoice-platform 0:555043320c0c -0.09 swiftcode: +invoice-platform 0:5a986aa9e713 -0.09 hbcacat1 +invoice-platform 0:e47c9313aced -0.08 transitnumber: +invoice-platform 0:20b565bff5c3 -0.08 00812 +invoice-platform 0:f1b1597830d6 -0.08 institutionnumber: +invoice-platform 0:3c241d267414 -0.08 049 +invoice-platform 0:4f657c67e41a -0.07 accounttype: +invoice-platform 0:7522b6a6c098 -0.07 businesschequing +invoice-platform 0:fa0fbe194b51 -0.07 remittanceemail: +invoice-platform 0:b3ec04f337ed -0.17 includeyourbillingaccountid +invoice-platform 0:a11a3e122422 -0.18 onyourpaymentremittance. +invoice-platform 0:d6577e95efba -0.21 subtotal +invoice-platform 0:6fb943a5640a -0.21 186.44 +invoice-platform 0:26a72d1933a2 -0.20 tax(5%) +invoice-platform 0:6c5bbecf6ec0 -0.20 9.32 +invoice-platform 0:57a66d21eb1b -0.38 totaldue +invoice-platform 0:17e16a2f994d 0.00 cad195.76 +invoice-platform 0:ac10f8c16320 -0.18 duedate +invoice-platform 0:d5ef7c1f9830 -0.46 thankyouforrunningonauroracloud. +invoice-platform 0:6a88f440b84e -0.46 manageyouraccountataurora.exampl +invoice-platform 0:cf0a1e1dc87b -0.54 500harbourstreet,vancouver,bcv6c +invoice-platform 0:7b14b8d2c5c4 0.02 page1of1 +invoice-subscription 0:435df6fdbffd 0.05 halstead +invoice-subscription 0:52d6e3de4fa0 0.02 invoice +invoice-subscription 0:0a36c1665b7e 0.28 halsteadsoftwareltd. +invoice-subscription 0:6bc2056359b7 0.20 18chandlerrow +invoice-subscription 0:776a7e9eb92a 0.22 leedsls14qt +invoice-subscription 0:2474519f77a9 0.24 unitedkingdom +invoice-subscription 0:bfdec553b85a 0.24 billing@halstead.example +invoice-subscription 0:78acb3cb907b 0.27 www.halstead.example +invoice-subscription 0:f1c030eb4329 0.29 vatnogb418227603 +invoice-subscription 0:77ead61b5875 0.29 invoiceno +invoice-subscription 0:0b0c0ee24de8 0.26 hs-inv-2026-0417 +invoice-subscription 0:8feaf8016bab 0.34 issuedate +invoice-subscription 0:4d49cb78b810 0.32 27august2026 +invoice-subscription 0:ac10f8c16320 0.39 duedate +invoice-subscription 0:b55571aaabac 0.37 10september2026 +invoice-subscription 0:fb854bac39c8 0.45 paymentterms +invoice-subscription 0:56a2e019b8aa 0.42 14days +invoice-subscription 0:466e5b9cd57f 0.50 currency +invoice-subscription 0:54f8e1b3fe44 0.47 gbp +invoice-subscription 0:aeba3a7b3598 0.51 billto +invoice-subscription 0:7bfc2b791f41 -0.76 northlineconsultingltd +invoice-subscription 0:bcb7024f74fe -0.75 attn:sarahmitchell +invoice-subscription 0:13dd937d2fe6 -0.73 21jubileeway +invoice-subscription 0:f9bab6a0b45b -0.72 londonse13ss +invoice-subscription 0:725a8f5062e7 0.51 shipto +invoice-subscription 0:254289ce0191 -0.75 thefoundry,2ndfloor +invoice-subscription 0:84db1f48facb -0.73 17-19greatsuffolkstreet +invoice-subscription 0:e7a5f0717d99 -0.72 londonse10ns +invoice-subscription 0:c9046f7a37ad -0.61 description +invoice-subscription 0:32e8369a9c4f -0.61 qty +invoice-subscription 0:d1062d072acd -0.61 unitprice +invoice-subscription 0:7c512b48ba8a -0.61 vat +invoice-subscription 0:cf38d95c9c6b -0.61 amount +invoice-subscription 0:86705447c73d -0.32 halsteadworkspacepremium(10seats +invoice-subscription 0:0c8dc980db3f -0.32 £18.00 +invoice-subscription 0:dc934fe30a94 -0.32 20% +invoice-subscription 0:629184210581 -0.32 £180.00 +invoice-subscription 0:59df1d2b0f69 -0.20 hostedplatformservices +invoice-subscription 0:44c1ce3394d2 -0.20 £420.00 +invoice-subscription 0:217bada1d20f -0.08 analyticsprolicences(5seats) +invoice-subscription 0:599cd58953ce -0.08 £8.40 +invoice-subscription 0:756b8c62fe05 -0.08 £42.00 +invoice-subscription 0:b055bcc305ed 0.04 prioritysupportplan +invoice-subscription 0:1077d7cede59 0.04 £275.00 +invoice-subscription 0:361537ef6a11 0.16 voiceadd-on(5seats) +invoice-subscription 0:8bf9ac7b27bd 0.16 £6.00 +invoice-subscription 0:893d7480f763 0.16 £30.00 +invoice-subscription 0:ab5aa97074c4 0.45 notes +invoice-subscription 0:4440ed73b83f 1.23 thisinvoicecoverssoftwaresubscri +invoice-subscription 0:fffc319556fa 1.24 hostedservicesforthecurrentbilli +invoice-subscription 0:d6577e95efba 0.29 subtotal +invoice-subscription 0:adde9b2bd3ad 0.29 £947.00 +invoice-subscription 0:a52611c9261b 0.27 vat(20%) +invoice-subscription 0:14edcfc20351 0.27 £189.40 +invoice-subscription 0:57a66d21eb1b 0.42 totaldue +invoice-subscription 0:cf1b68cc49ef 0.49 £1,136.40 +invoice-subscription 0:3c7ade679fdf 1.74 paymentdetails +invoice-subscription 0:56ed021beb35 0.47 beneficiary +invoice-subscription 0:0b85f3c8ed04 0.43 halsteadsoftwareltd +invoice-subscription 0:4381dc2ab142 0.47 bank +invoice-subscription 0:6d50b2dd724f 0.43 northgatebank +invoice-subscription 0:10aeacde20ff 0.47 sortcode +invoice-subscription 0:b19b1415ef9b 0.43 40-05-30 +invoice-subscription 0:f92a9c925024 0.47 accountnumber +invoice-subscription 0:ef797c8118f0 0.43 12345678 +invoice-subscription 0:52367a6622b1 0.47 reference +invoice-subscription 0:04f7247e8e99 0.47 pleaseincludetheinvoicenumberast +invoice-subscription 0:7c6ab37d83ef 0.51 thankyouforyourbusiness. +invoice-subscription 0:354ffeb2bbc3 0.47 paymentisdueby10september2026.if +invoice-subscription 0:7f7d98088133 0.48 foranyqueries,pleasecontactbilli +invoice-subscription 0:7b14b8d2c5c4 0.00 page1of1 +invoice-workspace 0:07f15cde5b18 0.15 kestrel +invoice-workspace 0:52d6e3de4fa0 -0.16 invoice +invoice-workspace 0:091019880d88 -0.37 kestrelcollaboration,inc. +invoice-workspace 0:9167e0470dae -0.31 500howardstreet,6thfloor +invoice-workspace 0:efa5e1529794 -0.28 sanfrancisco,ca94105 +invoice-workspace 0:fd7321c405f8 -0.24 unitedstates +invoice-workspace 0:d3c6f273c22d -0.24 vatid:us77-0560185 +invoice-workspace 0:6282391a4cc1 -0.31 invoicenumber: +invoice-workspace 0:b13757c9a6fc -0.30 inv-2024-0003521 +invoice-workspace 0:8d05f5d55191 -0.29 invoicedate: +invoice-workspace 0:8da43dd45024 -0.27 27may2024 +invoice-workspace 0:d39366fa1423 -0.26 billingperiod: +invoice-workspace 0:ec09225090a8 -0.25 1-31may2024 +invoice-workspace 0:23513511df83 -0.24 workspaceid: +invoice-workspace 0:1179fb658a97 -0.23 t04fq9l2m +invoice-workspace 0:18e2cca1098e -0.21 paymentterms: +invoice-workspace 0:98ec3d1fd5b9 -0.20 net30 +invoice-workspace 0:0e0fb0fc0939 -0.19 duedate: +invoice-workspace 0:f1e2a60122bd -0.18 26june2024 +invoice-workspace 0:aeba3a7b3598 -0.18 billto +invoice-workspace 0:45fe04dbae24 -0.22 brightfutureltd. +invoice-workspace 0:65405af34bf9 -0.17 45kingstreet +invoice-workspace 0:494f1a937311 -0.16 manchesterm27az +invoice-workspace 0:2474519f77a9 -0.16 unitedkingdom +invoice-workspace 0:c7a9cfdd1c55 -0.13 vatid:gb987654321 +invoice-workspace 0:725a8f5062e7 -0.18 shipto +invoice-workspace 0:6d835e737af6 -0.17 unit4,riversidepark +invoice-workspace 0:555d5194cd4d -0.16 leedsls14ap +invoice-workspace 0:c9046f7a37ad 0.21 description +invoice-workspace 0:169240d91658 0.21 plan/service +invoice-workspace 0:32e8369a9c4f 0.21 qty +invoice-workspace 0:e2a9c81da5f6 0.21 unitprice(usd) +invoice-workspace 0:5dfb966b2bcf 0.21 amount(usd) +invoice-workspace 0:2bcc555090a1 0.31 kestrelbusiness+ +invoice-workspace 0:68fad867a983 0.36 workspacesubscription +invoice-workspace 0:e0b844887562 0.37 business+annual +invoice-workspace 0:84906b0f4b73 0.37 50users +invoice-workspace 0:5ee31a6284bc 0.37 8.75 +invoice-workspace 0:843d501d422c 0.37 437.50 +invoice-workspace 0:3007667b4e18 0.29 enterprisekeymanagement +invoice-workspace 0:162e9c93c528 0.34 customer-managedencryptionkeys +invoice-workspace 0:a33a54a73112 0.35 add-on +invoice-workspace 0:d66c66a96157 0.35 100.00 +invoice-workspace 0:0036ebf2cfb2 0.27 prioritysupport +invoice-workspace 0:51833276172f 0.32 namedengineerandresponsetarget +invoice-workspace 0:fe6d3468cf5c 0.33 standard +invoice-workspace 0:a99210875f11 0.33 50.00 +invoice-workspace 0:14209e8ccd53 0.45 workflowautomation +invoice-workspace 0:31be3ff05457 0.50 templatesandscheduledruns +invoice-workspace 0:7f0f70e643bc 0.51 included +invoice-workspace 0:561b2814d3c0 0.51 0.00 +invoice-workspace 0:3c7ade679fdf 1.12 paymentdetails +invoice-workspace 0:944d398aea60 1.21 bankname: +invoice-workspace 0:a18e9fdf120e 1.21 bayunionbank,n.a. +invoice-workspace 0:0ecb5847ffa7 1.17 accountname: +invoice-workspace 0:6b4894c28363 1.13 accountnumber: +invoice-workspace 0:ab92799f9bc7 1.13 000000123456789 +invoice-workspace 0:c1390f638bd3 1.09 routing(aba): +invoice-workspace 0:1f873cdde0ca 1.09 021000021 +invoice-workspace 0:e58256751597 1.06 swift/bic: +invoice-workspace 0:0fdf54f117f8 1.06 bayuus33 +invoice-workspace 0:967e0b6ca4b9 1.02 currency: +invoice-workspace 0:d60fbd8718ec 1.02 usd +invoice-workspace 0:c608665436db 0.98 reference: +invoice-workspace 0:3db3fa89ea2c 0.94 bankaddress: +invoice-workspace 0:b1645851e755 0.94 1marketplaza,sanfrancisco +invoice-workspace 0:9b600d1211c8 1.88 pleaseincludetheinvoicenumberiny +invoice-workspace 0:415eb9e42f41 0.62 reference. +invoice-workspace 0:d6577e95efba 0.76 subtotal +invoice-workspace 0:460dd5bae888 0.76 587.50 +invoice-workspace 0:2ee4d3de4ddf 0.76 tax(0%) +invoice-workspace 0:57a66d21eb1b 0.69 totaldue +invoice-workspace 0:ad00e93ce79a 0.61 usd587.50 +invoice-workspace 0:b0553f008513 0.23 paymentdueby +invoice-workspace 0:08775a92bfca 1.39 thankyouforusingkestrel. +invoice-workspace 0:18e82fbd48a3 1.46 questionsaboutthisinvoice?reachu +invoice-workspace 0:3c72ba0e1eb8 1.33 500howardstreet,6thfloor,sanfran +invoice-workspace 0:9e2917e23527 1.32 kestrel.example +invoice-workspace 0:7b14b8d2c5c4 -0.05 page1of1 +letter-blue_banner 0:8f1010120ed6 0.42 jordanrivera +letter-blue_banner 0:8d7a2cca3060 -0.20 +442055551000|jordan.rivera@exam +letter-blue_banner 0:bef81b541365 -0.21 dearhiringteamatnorthwindsystems +letter-blue_banner 0:a71e98216baa -0.08 iwouldwelcometheopportunitytobri +letter-blue_banner 0:80a6a628ad52 -0.05 sincerely, +letter-boxed_sections 0:8f1010120ed6 0.46 jordanrivera +letter-boxed_sections 0:8d7a2cca3060 -0.12 +442055551000|jordan.rivera@exam +letter-boxed_sections 0:bef81b541365 -0.41 dearhiringteamatnorthwindsystems +letter-boxed_sections 0:ab54410ead82 -0.71 iamexcitedtosharemyinterestinthe +letter-boxed_sections 0:9185168d2cf8 -0.70 document-generationsystemsthatba +letter-boxed_sections 0:5fb2802723b6 -0.70 ienjoytranslatingfuzzyworkflowre +letter-boxed_sections 0:dab2d688b7ab -0.69 adoptioneasierfortherestofthetea +letter-boxed_sections 0:a71e98216baa -0.39 iwouldwelcometheopportunitytobri +letter-boxed_sections 0:80a6a628ad52 -0.38 sincerely, +letter-centered_headline 0:8f1010120ed6 -0.50 jordanrivera +letter-centered_headline 0:2d58f0cadc2d -0.18 platformengineer +letter-centered_headline 0:8d7a2cca3060 -0.23 +442055551000|jordan.rivera@exam +letter-centered_headline 0:bef81b541365 -0.25 dearhiringteamatnorthwindsystems +letter-centered_headline 0:5fb2802723b6 0.13 ienjoytranslatingfuzzyworkflowre +letter-centered_headline 0:dab2d688b7ab 0.14 adoptioneasierfortherestofthetea +letter-centered_headline 0:a71e98216baa -0.12 iwouldwelcometheopportunitytobri +letter-centered_headline 0:80a6a628ad52 -0.09 sincerely, +letter-classic_serif 0:8f1010120ed6 -0.15 jordanrivera +letter-classic_serif 0:8d7a2cca3060 0.19 +442055551000|jordan.rivera@exam +letter-classic_serif 0:bef81b541365 0.20 dearhiringteamatnorthwindsystems +letter-classic_serif 0:ab54410ead82 -0.08 iamexcitedtosharemyinterestinthe +letter-classic_serif 0:9185168d2cf8 -0.10 document-generationsystemsthatba +letter-classic_serif 0:a463bced3db2 -0.13 ienjoytranslatingfuzzyworkflowre +letter-classic_serif 0:dd474e249222 -0.15 makeadoptioneasierfortherestofth +letter-classic_serif 0:a71e98216baa 0.07 iwouldwelcometheopportunitytobri +letter-classic_serif 0:80a6a628ad52 0.05 sincerely, +letter-compact_mono 0:8f1010120ed6 0.31 jordanrivera +letter-compact_mono 0:f9e4560bd641 -0.24 london,uk/+442055551000/jordan.r +letter-compact_mono 0:bef81b541365 -0.08 dearhiringteamatnorthwindsystems +letter-compact_mono 0:1382a6e37675 -0.35 ienjoytranslatingfuzzyworkflowre +letter-compact_mono 0:d8e633770b49 -0.38 easierfortherestoftheteam. +letter-compact_mono 0:a71e98216baa -0.13 iwouldwelcometheopportunitytobri +letter-compact_mono 0:80a6a628ad52 -0.12 sincerely, +letter-editorial_blue 0:8f1010120ed6 0.45 jordanrivera +letter-editorial_blue 0:2d58f0cadc2d 0.22 platformengineer +letter-editorial_blue 0:1b28eb6a9a2e 0.14 +442055551000-london,uk +letter-editorial_blue 0:8817bf9310b6 0.11 jordan.rivera@example.com|linked +letter-editorial_blue 0:bef81b541365 0.13 dearhiringteamatnorthwindsystems +letter-editorial_blue 0:0c42fe9f3491 -0.15 ienjoytranslatingfuzzyworkflowre +letter-editorial_blue 0:dda41d31bb3c -0.15 thatmakeadoptioneasierfortherest +letter-editorial_blue 0:80a6a628ad52 8.86 sincerely, +letter-engineering_resume 0:8f1010120ed6 0.15 jordanrivera +letter-engineering_resume 0:2d58f0cadc2d -0.25 platformengineer +letter-engineering_resume 0:fbeea547d99e -0.21 london,uk +letter-engineering_resume 0:89674e6f130e -0.20 +442055551000 +letter-engineering_resume 0:e0f850305ded -0.19 jordan.rivera@example.com +letter-engineering_resume 0:84308bea4540 -0.18 linkedin +letter-engineering_resume 0:c0b0109d9439 -0.17 github +letter-engineering_resume 0:bef81b541365 -1.40 dearhiringteamatnorthwindsystems +letter-engineering_resume 0:a71e98216baa -1.40 iwouldwelcometheopportunitytobri +letter-engineering_resume 0:80a6a628ad52 -1.41 sincerely, +letter-executive 0:8f1010120ed6 -0.50 jordanrivera +letter-executive 0:89ff05847e96 -0.28 london,uk|+442055551000 +letter-executive 0:8817bf9310b6 -0.30 jordan.rivera@example.com|linked +letter-executive 0:bef81b541365 -0.20 dearhiringteamatnorthwindsystems +letter-executive 0:ab54410ead82 0.13 iamexcitedtosharemyinterestinthe +letter-executive 0:9185168d2cf8 0.13 document-generationsystemsthatba +letter-executive 0:0c42fe9f3491 0.15 ienjoytranslatingfuzzyworkflowre +letter-executive 0:dda41d31bb3c 0.15 thatmakeadoptioneasierfortherest +letter-executive 0:7c5a9817c868 0.18 iwouldwelcometheopportunitytobri +letter-executive 0:4012eb4b05db 0.18 group. +letter-executive 0:80a6a628ad52 -0.10 sincerely, +letter-mint-editorial-letter 0:8f1010120ed6 -1.30 jordanrivera +letter-mint-editorial-letter 0:2d58f0cadc2d -0.27 platformengineer +letter-mint-editorial-letter 0:bef81b541365 -0.16 dearhiringteamatnorthwindsystems +letter-mint-editorial-letter 0:ab54410ead82 0.29 iamexcitedtosharemyinterestinthe +letter-mint-editorial-letter 0:9185168d2cf8 0.29 document-generationsystemsthatba +letter-mint-editorial-letter 0:a463bced3db2 0.29 ienjoytranslatingfuzzyworkflowre +letter-mint-editorial-letter 0:dd474e249222 0.29 makeadoptioneasierfortherestofth +letter-mint-editorial-letter 0:a71e98216baa -0.16 iwouldwelcometheopportunitytobri +letter-mint-editorial-letter 0:80a6a628ad52 -0.16 sincerely, +letter-modern_professional 0:8f1010120ed6 0.00 jordanrivera +letter-modern_professional 0:89ff05847e96 0.14 london,uk|+442055551000 +letter-modern_professional 0:8817bf9310b6 0.11 jordan.rivera@example.com|linked +letter-modern_professional 0:bef81b541365 -0.13 dearhiringteamatnorthwindsystems +letter-modern_professional 0:c65db8c80e17 -0.43 iamexcitedtosharemyinterestinthe +letter-modern_professional 0:c8d01ef84078 -0.43 reusabledocument-generationsyste +letter-modern_professional 0:2e5ddee14dbc -0.43 ienjoytranslatingfuzzyworkflowre +letter-modern_professional 0:906501a5e847 -0.43 examplesthatmakeadoptioneasierfo +letter-modern_professional 0:7c5a9817c868 -0.43 iwouldwelcometheopportunitytobri +letter-modern_professional 0:4012eb4b05db -0.43 group. +letter-modern_professional 0:80a6a628ad52 -0.13 sincerely, +letter-monogram_sidebar 0:136c67657614 -0.38 jordan +letter-monogram_sidebar 0:8ba35ebe3d5c -0.37 rivera +letter-monogram_sidebar 0:2d58f0cadc2d -0.19 platformengineer +letter-monogram_sidebar 0:8d7a2cca3060 -0.17 +442055551000|jordan.rivera@exam +letter-monogram_sidebar 0:bef81b541365 -0.23 dearhiringteamatnorthwindsystems +letter-monogram_sidebar 0:ab54410ead82 0.12 iamexcitedtosharemyinterestinthe +letter-monogram_sidebar 0:9185168d2cf8 0.12 document-generationsystemsthatba +letter-monogram_sidebar 0:a463bced3db2 0.12 ienjoytranslatingfuzzyworkflowre +letter-monogram_sidebar 0:dd474e249222 0.12 makeadoptioneasierfortherestofth +letter-monogram_sidebar 0:a71e98216baa -0.23 iwouldwelcometheopportunitytobri +letter-monogram_sidebar 0:80a6a628ad52 -0.23 sincerely, +letter-monogram_sidebar 0:8f1010120ed6 -0.23 jordanrivera +letter-nordic_clean 0:8f1010120ed6 0.15 jordanrivera +letter-nordic_clean 0:2d58f0cadc2d -0.20 platformengineer +letter-nordic_clean 0:fbeea547d99e -0.20 london,uk +letter-nordic_clean 0:89674e6f130e -0.18 +442055551000 +letter-nordic_clean 0:e0f850305ded -0.16 jordan.rivera@example.com +letter-nordic_clean 0:84308bea4540 -0.14 linkedin +letter-nordic_clean 0:c0b0109d9439 -0.12 github +letter-nordic_clean 0:bef81b541365 -0.11 dearhiringteamatnorthwindsystems +letter-nordic_clean 0:8d84d32bef54 -0.36 iamexcitedtosharemyinterestinthe +letter-nordic_clean 0:be14171d4555 -0.37 thatbalancepublicapidesign,rende +letter-nordic_clean 0:26e89af4523d -0.38 ienjoytranslatingfuzzyworkflowre +letter-nordic_clean 0:27c5581ffbbc -0.39 restoftheteam. +letter-nordic_clean 0:a71e98216baa -0.14 iwouldwelcometheopportunitytobri +letter-nordic_clean 0:80a6a628ad52 -0.14 sincerely, +letter-panel 0:8f1010120ed6 -0.40 jordanrivera +letter-panel 0:2d58f0cadc2d 0.12 platformengineer +letter-panel 0:89ff05847e96 0.19 london,uk|+442055551000 +letter-panel 0:8817bf9310b6 0.21 jordan.rivera@example.com|linked +letter-panel 0:bef81b541365 0.01 dearhiringteamatnorthwindsystems +letter-panel 0:ab54410ead82 -0.17 iamexcitedtosharemyinterestinthe +letter-panel 0:9185168d2cf8 -0.15 document-generationsystemsthatba +letter-panel 0:0c42fe9f3491 -0.13 ienjoytranslatingfuzzyworkflowre +letter-panel 0:dda41d31bb3c -0.11 thatmakeadoptioneasierfortherest +letter-panel 0:7c5a9817c868 -0.09 iwouldwelcometheopportunitytobri +letter-panel 0:4012eb4b05db -0.07 group. +letter-panel 0:80a6a628ad52 0.15 sincerely, +letter-sidebar_portrait 0:8f1010120ed6 -0.73 jordanrivera +letter-sidebar_portrait 0:2d58f0cadc2d -0.23 platformengineer +letter-sidebar_portrait 0:8d7a2cca3060 -0.22 +442055551000|jordan.rivera@exam +letter-sidebar_portrait 0:bef81b541365 -0.28 dearhiringteamatnorthwindsystems +letter-sidebar_portrait 0:ab54410ead82 -0.51 iamexcitedtosharemyinterestinthe +letter-sidebar_portrait 0:9185168d2cf8 -0.49 document-generationsystemsthatba +letter-sidebar_portrait 0:0c42fe9f3491 -0.47 ienjoytranslatingfuzzyworkflowre +letter-sidebar_portrait 0:dda41d31bb3c -0.45 thatmakeadoptioneasierfortherest +letter-sidebar_portrait 0:7c5a9817c868 -0.43 iwouldwelcometheopportunitytobri +letter-sidebar_portrait 0:4012eb4b05db -0.41 group. +letter-sidebar_portrait 0:80a6a628ad52 -0.14 sincerely, +letter-timeline_minimal 0:8f1010120ed6 0.15 jordanrivera +letter-timeline_minimal 0:2d58f0cadc2d -0.40 platformengineer +letter-timeline_minimal 0:fbeea547d99e -0.19 london,uk +letter-timeline_minimal 0:89674e6f130e -0.19 +442055551000 +letter-timeline_minimal 0:e0f850305ded -0.19 jordan.rivera@example.com +letter-timeline_minimal 0:84308bea4540 -0.19 linkedin +letter-timeline_minimal 0:c0b0109d9439 -0.19 github +letter-timeline_minimal 0:bef81b541365 1.52 dearhiringteamatnorthwindsystems +letter-timeline_minimal 0:ab54410ead82 1.32 iamexcitedtosharemyinterestinthe +letter-timeline_minimal 0:9185168d2cf8 1.32 document-generationsystemsthatba +letter-timeline_minimal 0:a463bced3db2 1.32 ienjoytranslatingfuzzyworkflowre +letter-timeline_minimal 0:dd474e249222 1.32 makeadoptioneasierfortherestofth +letter-timeline_minimal 0:a71e98216baa 1.52 iwouldwelcometheopportunitytobri +letter-timeline_minimal 0:80a6a628ad52 1.52 sincerely, +proposal-editorial 0:5205c2a261bc 0.81 northline +proposal-editorial 0:da0daaba4b15 0.33 studio +proposal-editorial 0:ecd1378bc9dc -0.31 proposal +proposal-editorial 0:3786fae913f7 0.63 proposal— +proposal-editorial 0:03a41208320e 1.33 brandrefresh& +proposal-editorial 0:c20712117515 -1.02 websiteredesign +proposal-editorial 0:1bae6dc6c199 -0.11 preparedforasterahealthco.|prepa +proposal-editorial 0:566835ed7fba -1.01 executivesummary +proposal-editorial 0:a27307c3fd63 0.57 thankyoufortheopportunitytopartn +proposal-editorial 0:b03206c0ed03 0.57 nextchapter.thisproposaloutlines +proposal-editorial 0:838b34bafe7b 0.57 brandidentityandredesigningyourw +proposal-editorial 0:c704f790608e 0.57 mission,elevatecredibility,andde +proposal-editorial 0:20bdf45ebb79 0.57 peopleyouserve. +proposal-editorial 0:d28f860aec04 0.57 ourprocessblendsstrategicthinkin +proposal-editorial 0:53fcd88ebb00 0.57 cohesivebrandsystemandamodern,co +proposal-editorial 0:95bad9757a67 0.57 outcomewillbeaclear,confidentpre +proposal-editorial 0:8863e2b998da 0.57 improvesengagement,andsupportsyo +proposal-editorial 0:f16c2c2f1999 -0.82 projectgoals +proposal-editorial 0:c008ab0ba85f -0.19 projectduration +proposal-editorial 0:5a6b4bf425f2 -0.41 6weeks +proposal-editorial 0:7aa73e5c14d3 -0.12 startwindow +proposal-editorial 0:6fcb2d3f02ba -0.33 september2026 +proposal-editorial 0:185e8dc84248 -0.05 primarycontact +proposal-editorial 0:59d00e0c1b99 -0.26 projectlead +proposal-editorial 0:4190fd3a8d72 -0.01 proposalvalidity +proposal-editorial 0:56a2e019b8aa -0.22 14days +proposal-editorial 0:265e93f6b9da -0.05 (until8september2026) +proposal-editorial 0:e2ea93b97611 1.15 strengthenbrand +proposal-editorial 0:7d95098b921b 0.15 credibilityandvisual +proposal-editorial 0:218e304f8b84 -0.85 consistency. +proposal-editorial 0:35597cc9803f 1.15 improvewebsite +proposal-editorial 0:83f63137756b 0.15 usabilityanddrive +proposal-editorial 0:cce9fba37d4e -0.85 meaningfulaction. +proposal-editorial 0:59aaadaf0c54 1.15 communicateyour +proposal-editorial 0:30193022f687 0.15 valueclearlyacrossall +proposal-editorial 0:04b5995c746f -0.85 touchpoints. +proposal-editorial 0:b45d848fe1b6 1.15 buildascalabledigital +proposal-editorial 0:e8228bfeba0e 0.15 foundationforfuture +proposal-editorial 0:1fa35c7a1402 -0.85 growth. +proposal-editorial 0:bc981abcdf59 -1.33 scopeofwork +proposal-editorial 0:28450edd9a4f -0.25 discovery&research +proposal-editorial 0:12bff3036b66 -0.16 visualidentityrefinement +proposal-editorial 0:fc5134bf5fd1 -0.07 websiteux/uidesign +proposal-editorial 0:5d58b01c7096 0.18 designaresponsive,accessibility- +proposal-editorial 0:5d6068f6a879 -0.10 navigationandclearconversionpath +proposal-editorial 0:32001e20b2ed 0.02 contentstructure&messaging +proposal-editorial 0:b3c948ec3e36 0.27 definesitearchitecture,keymessag +proposal-editorial 0:231428fde7aa -0.01 communicatevalueandbuildtrust. +proposal-editorial 0:8c7703bb6fb7 0.11 launchsupport +proposal-editorial 0:026890c58de9 0.01 northlinestudio|northlinestudio. +proposal-editorial 1:e35c32bb5ed8 -46.41 deliverables +proposal-editorial 1:23eb79a19b39 -45.38 brandstrategysummary +proposal-editorial 1:aaa2a6073d69 -45.38 refinedlogosuite&brandguidelines +proposal-editorial 1:d626f7532564 -45.38 color,typography&designsystem +proposal-editorial 1:018ec557a513 -45.38 websiteuxwireframes +proposal-editorial 1:5ed4970fa285 -45.38 high-fidelitywebsitedesigns +proposal-editorial 1:8b712e7e93bf -57.80 contentstrategy&pagetemplates +proposal-editorial 1:e9bf06d9b130 -57.80 developer-readyassets&specificat +proposal-editorial 1:e93e7ba95ceb -57.80 launchchecklist&trainingsession +proposal-editorial 1:94d192b3a326 -46.32 timeline +proposal-editorial 1:02195b8e9896 -45.06 phase +proposal-editorial 1:c51faa148557 -45.06 focus +proposal-editorial 1:caa79af4db67 -45.06 duration +proposal-editorial 1:e0ee8bb50685 -45.06 output +proposal-editorial 1:9a5c531db125 -44.88 01discover +proposal-editorial 1:99b15ca862e5 -44.88 1week +proposal-editorial 1:7817fa5085e2 -43.65 research,audit,insights,and +proposal-editorial 1:73dff70e25ad -45.15 strategy +proposal-editorial 1:ddfbc608570a -43.65 discoveryreport&creative +proposal-editorial 1:93c4abe27cf1 -45.15 direction +proposal-editorial 1:9285b279249c -44.78 02design +proposal-editorial 1:b183847fe9f8 -44.78 2weeks +proposal-editorial 1:1e0716635ae3 -43.55 brandrefinementandwebsite +proposal-editorial 1:80f5fb36f074 -45.05 ux/uidesign +proposal-editorial 1:ad5e8a376247 -43.55 designsystem&high-fidelity +proposal-editorial 1:dbb1831acb45 -45.05 designs +proposal-editorial 1:ea1ecc5ce8ad -44.68 03developprep +proposal-editorial 1:381b99928ddd -43.45 contentstructure,developer +proposal-editorial 1:b144c5104484 -44.95 handoff&assetpreparation +proposal-editorial 1:6ba4e54f2632 -43.45 specs,assets&content +proposal-editorial 1:06a61df042ad -44.95 framework +proposal-editorial 1:17f923a4777c -44.45 04launchsupport +proposal-editorial 1:8f16bc1588b5 -44.60 qa,training&go-liveassistance +proposal-editorial 1:7c23497e09b0 -44.60 qasign-off&successfullaunch +proposal-editorial 1:f9b21c4bda58 -45.18 investment +proposal-editorial 1:4a33eacd5fa6 -43.92 item +proposal-editorial 1:2da123241332 -43.92 amount(gbp) +proposal-editorial 1:1167b381fe2f -43.76 discovery&strategy +proposal-editorial 1:572a8dc5a455 -43.76 £2,500 +proposal-editorial 1:7c2ad9ba0fd0 -43.71 brandidentityrefinement +proposal-editorial 1:7f2732df7390 -43.71 £4,500 +proposal-editorial 1:fc5134bf5fd1 -43.66 websiteux/uidesign +proposal-editorial 1:8534d989b9ed -43.66 £7,000 +proposal-editorial 1:32001e20b2ed -43.61 contentstructure&messaging +proposal-editorial 1:e58a378ffc52 -43.61 £2,000 +proposal-editorial 1:8c7703bb6fb7 -43.56 launchsupport +proposal-editorial 1:d423fc0a31c2 -43.56 £1,500 +proposal-editorial 1:d6577e95efba -43.51 subtotal +proposal-editorial 1:8873236d3571 -43.51 £17,500 +proposal-editorial 1:3d213570f707 -43.46 optional:3monthspost-launchsuppo +proposal-editorial 1:7ffd918ebc4a -43.46 £1,750 +proposal-editorial 1:58656319146d -43.29 totalinvestment +proposal-editorial 1:4aadcd9bc785 -43.29 £19,250 +proposal-editorial 1:51d2361f4fae -45.18 terms +proposal-editorial 1:99ffab766326 -44.80 50%depositisrequiredtosecurethe +proposal-editorial 1:5414e5671cbd -44.05 projectandschedulethekick-off. +proposal-editorial 1:832db31f5c9a -43.87 includestworoundsofrevisionsper +proposal-editorial 1:5130aeada3db -43.12 majordeliverable. +proposal-editorial 1:ffce6ed7e6e5 -42.94 finalfilesandhandoffdeliveredupo +proposal-editorial 1:566f68df6dd8 -42.19 finalpayment. +proposal-editorial 1:06ebb5670fa8 -42.61 ownershipofallfinaldeliverables +proposal-editorial 1:c1514c6cdad1 -44.29 acceptance +proposal-editorial 1:893663b06769 -43.26 bysigningbelow,youagreetothescop +proposal-editorial 1:df16232de5b9 -43.27 acceptedby: +proposal-editorial 1:f089d24d7cf3 -43.27 signature: +proposal-editorial 1:c74c9cd82f13 -43.27 date: +proposal-editorial 1:026890c58de9 0.01 northlinestudio|northlinestudio. +proposal-indigo 0:07f15cde5b18 0.14 kestrel +proposal-indigo 0:ecd1378bc9dc 0.13 proposal +proposal-indigo 0:781d36213745 0.07 preparedfor +proposal-indigo 0:45fe04dbae24 0.09 brightfutureltd. +proposal-indigo 0:65405af34bf9 0.05 45kingstreet +proposal-indigo 0:1f8da9c4e269 0.07 manchester,m24wu +proposal-indigo 0:2474519f77a9 0.08 unitedkingdom +proposal-indigo 0:cf6b67fe426f 0.10 attn +proposal-indigo 0:7b6259001f01 0.09 priyaraman +proposal-indigo 0:59458508a082 0.12 founder +proposal-indigo 0:1f054d7534fa 0.08 priya@brightfuture.example +proposal-indigo 0:a8acc3a90a7b 0.09 +447700900123 +proposal-indigo 0:f99fb5990e3f 0.16 proposalfor +proposal-indigo 0:460ebeabf0d7 0.16 financialinfrastructure +proposal-indigo 0:e0b894e9070f 0.17 &embeddedfinance +proposal-indigo 0:76f9df77e8af 0.18 partnership +proposal-indigo 0:f33b9e206de3 1.06 empoweringbrightfutureltd.withmo +proposal-indigo 0:16a14b235896 1.06 infrastructure,globalcapabilitie +proposal-indigo 0:2fdd6f092df5 1.05 experienceforyourcustomers. +proposal-indigo 0:0e87632cd46b -24.60 date +proposal-indigo 0:dc9696f61d36 -24.61 27may2026 +proposal-indigo 0:621f581e97b4 -24.60 proposalid +proposal-indigo 0:2b2adf7998f8 -24.61 kes-2026-0527-01 +proposal-indigo 0:4bf91849cfb4 -24.60 validuntil +proposal-indigo 0:93059e9a1c07 -24.61 26june2026 +proposal-indigo 0:8d6867ab3a4c -24.60 preparedby +proposal-indigo 0:50910841c2da -24.61 kestrelbusinessteam +proposal-indigo 0:69cca54632df -0.77 aboutkestrelbusiness +proposal-indigo 0:8001c2743965 -27.90 global +proposal-indigo 0:f469802a3144 -27.88 scale +proposal-indigo 0:774cdf08f6a8 -27.90 modern +proposal-indigo 0:9fec08e4574b -27.88 infrastructure +proposal-indigo 0:5924acfba1a5 -27.90 secure& +proposal-indigo 0:b67c263c0379 -27.88 compliant +proposal-indigo 0:88fa0d759f84 -27.90 developer +proposal-indigo 0:962cba9fd476 -27.88 firstapis +proposal-indigo 0:4f30d3328d6f -0.69 projectoverview +proposal-indigo 0:a73369734180 -0.69 thisproposaloutlinesatailoredfin +proposal-indigo 0:19a7c085cb24 -0.68 supportbrightfutureltd.inenablin +proposal-indigo 0:ff5888ea18e0 -0.68 financialservicesforyourbusiness +proposal-indigo 0:2855076f724f -0.67 multi-currencybusinessaccounts +proposal-indigo 0:4e36c64ccf3a -0.66 hold,send,receivein30+currencies +proposal-indigo 0:17f85ac3692b -0.58 corporatecards&expenses +proposal-indigo 0:82c5a2c4443e -0.57 issuephysical&virtualcardswithsm +proposal-indigo 0:e05293fab5bc -0.48 payments&collections +proposal-indigo 0:1443f4651241 -0.47 local&globalpayments,directdebit +proposal-indigo 0:32df55902e8b -0.39 embeddedfinanceapis +proposal-indigo 0:8ac47b282ff6 -0.38 buildfinancialproductsdirectlyin +proposal-indigo 0:58520edff52a -0.30 compliance&risk +proposal-indigo 0:05aecb87ba6a -0.28 kyc,aml,fraudmonitoringandregula +proposal-indigo 0:ec5294e7a376 -0.69 investmentsummary +proposal-indigo 0:af60f4182ca5 -0.69 implementation&onboarding +proposal-indigo 0:572a8dc5a455 -0.69 £2,500 +proposal-indigo 0:760775d91a04 -0.58 platformaccess&apis +proposal-indigo 0:6ca9376c51ca -0.58 £3,000 +proposal-indigo 0:9a38b75a07fb -0.47 transactionfees(est.) +proposal-indigo 0:3b325109deb0 -0.47 variable +proposal-indigo 0:bfece4405b19 -0.36 support&accountmanagement +proposal-indigo 0:7f0f70e643bc -0.36 included +proposal-indigo 0:e0bd5388bdc9 -0.24 estimatedfirstyearinvestment +proposal-indigo 0:51db6c622be8 -0.21 £5,500 +proposal-indigo 0:ab5aa97074c4 -0.26 notes +proposal-indigo 0:b9e9c18c4d13 -0.27 •pricingexcludesapplicabletaxes. +proposal-indigo 0:e4239ffa2bb6 -0.26 •transactionfeesarebasedonusagea +proposal-indigo 0:82eb848e77b3 -0.26 •thisproposalisvalidfor30daysfro +proposal-indigo 0:732bcbb66cec -0.27 kestrelpaymentsltd +proposal-indigo 0:3898e7b5f79b -0.24 7harbourcircus,canarywharf,londo +proposal-indigo 0:29208032c874 -0.23 kestrel.example/business|busines +proposal-modern 0:ecd1378bc9dc 0.00 proposal +proposal-modern 0:f592a683c61d 0.27 documentplatformconsolidation +proposal-modern 0:bbe07492ee1f 0.32 proposalgc-p-2026-014prepared02a +proposal-modern 0:566835ed7fba -0.07 executivesummary +proposal-modern 0:7ccf0e6c59fa -0.10 aphasedengagementtoretireper-tea +proposal-modern 0:75857a458999 -0.42 from +proposal-modern 0:c26c22b94338 -0.45 graphcomposestudio +proposal-modern 0:2a08ce5567fb -0.72 18layoutstreet +proposal-modern 0:fbeea547d99e -0.75 london,uk +proposal-modern 0:3c8401edb4cc -0.77 hello@graphcompose.dev +proposal-modern 0:89674e6f130e -0.80 +442055551000 +proposal-modern 0:213a61c7aeb6 -0.82 graphcompose.dev +proposal-modern 0:f890faef907f -0.45 northwindsystems +proposal-modern 0:577a7fcdaa02 -0.72 attn:procurement +proposal-modern 0:91eefd794f79 -0.75 410marketavenue +proposal-modern 0:3daace874084 -0.77 procurement@northwind.example +proposal-modern 0:5f161c914988 -0.41 scope +proposal-modern 0:9e580657f485 -0.57 discovery,architecture,andarefer +proposal-modern 0:cec9111de36d -0.41 approach +proposal-modern 0:3215ea3be6d9 -0.57 iterativedeliverywithweeklycheck +proposal-modern 0:94d192b3a326 -0.41 timeline +proposal-modern 0:02195b8e9896 -0.47 phase +proposal-modern 0:caa79af4db67 -0.47 duration +proposal-modern 0:41ffd8b76afc -0.47 details +proposal-modern 0:fa44132b238e -0.25 discovery +proposal-modern 0:b183847fe9f8 -0.25 2weeks +proposal-modern 0:4b20bfb69ca7 -0.25 stakeholderinterviews+audit +proposal-modern 0:44575cf5b285 -0.15 build +proposal-modern 0:5a6b4bf425f2 -0.15 6weeks +proposal-modern 0:7a802048127d -0.15 engine+templatemigration +proposal-modern 0:f9b21c4bda58 0.09 investment +proposal-modern 0:4a33eacd5fa6 0.03 item +proposal-modern 0:c9046f7a37ad 0.03 description +proposal-modern 0:cf38d95c9c6b 0.03 amount +proposal-modern 0:fe9b6b4f133b 0.25 workshops+auditgbp6,000 +proposal-modern 0:62e788ae3916 0.25 engine+templatesgbp24,000 +proposal-modern 0:11239872d178 0.25 total +proposal-modern 0:1c3065490625 0.25 gbp30,000 +proposal-modern 0:63feb7230a5d 0.57 acceptanceterms +proposal-modern 0:35046a9f5675 0.50 •50%onsignature,50%ondelivery. +proposal-modern 0:f03c1877ea2b 0.50 •validfor30daysfromthepreparedda +proposal-modern 0:90572e911376 0.42 thankyouforconsideringgraphcompo +proposal-northline 0:5205c2a261bc -0.44 northline +proposal-northline 0:da0daaba4b15 -0.44 studio +proposal-northline 0:ecd1378bc9dc -0.38 proposal +proposal-northline 0:53df6a685985 -0.06 proposal– +proposal-northline 0:03a41208320e 0.54 brandrefresh& +proposal-northline 0:c20712117515 -0.16 websiteredesign +proposal-northline 0:1bae6dc6c199 -0.20 preparedforasterahealthco.|prepa +proposal-northline 0:566835ed7fba -0.54 executivesummary +proposal-northline 0:a27307c3fd63 0.08 thankyoufortheopportunitytopartn +proposal-northline 0:b03206c0ed03 0.08 nextchapter.thisproposaloutlines +proposal-northline 0:838b34bafe7b 0.08 brandidentityandredesigningyourw +proposal-northline 0:c704f790608e 0.08 mission,elevatecredibility,andde +proposal-northline 0:20bdf45ebb79 0.08 peopleyouserve. +proposal-northline 0:d28f860aec04 0.08 ourprocessblendsstrategicthinkin +proposal-northline 0:53fcd88ebb00 0.08 cohesivebrandsystemandamodern,co +proposal-northline 0:95bad9757a67 0.08 outcomewillbeaclear,confidentpre +proposal-northline 0:8863e2b998da 0.08 improvesengagement,andsupportsyo +proposal-northline 0:f16c2c2f1999 -0.44 projectgoals +proposal-northline 0:e4af490aeb22 -0.26 projectataglance +proposal-northline 0:c008ab0ba85f -0.20 projectduration +proposal-northline 0:5a6b4bf425f2 -0.37 6weeks +proposal-northline 0:7aa73e5c14d3 -0.15 startwindow +proposal-northline 0:6fcb2d3f02ba -0.32 september2026 +proposal-northline 0:185e8dc84248 -0.10 primarycontact +proposal-northline 0:59d00e0c1b99 -0.27 projectlead +proposal-northline 0:4190fd3a8d72 -0.05 proposalvalidity +proposal-northline 0:56a2e019b8aa -0.22 14days +proposal-northline 0:e2ea93b97611 10.92 strengthenbrand +proposal-northline 0:7d95098b921b 10.42 credibilityandvisual +proposal-northline 0:218e304f8b84 9.92 consistency. +proposal-northline 0:35597cc9803f 10.92 improvewebsite +proposal-northline 0:83f63137756b 10.42 usabilityanddrive +proposal-northline 0:cce9fba37d4e 9.92 meaningfulaction. +proposal-northline 0:59aaadaf0c54 10.92 communicateyour +proposal-northline 0:30193022f687 10.42 valueclearlyacrossall +proposal-northline 0:04b5995c746f 9.92 touchpoints. +proposal-northline 0:b45d848fe1b6 10.92 buildascalabledigital +proposal-northline 0:e8228bfeba0e 10.42 foundationforfuture +proposal-northline 0:1fa35c7a1402 9.92 growth. +proposal-northline 0:bc981abcdf59 9.91 scopeofwork +proposal-northline 0:28450edd9a4f 10.27 discovery&research +proposal-northline 0:155f35b4967f 10.87 stakeholderinterviews,brandaudit +proposal-northline 0:973aeda5fe6d 10.17 insightstoinformstrategy. +proposal-northline 0:12bff3036b66 10.37 visualidentityrefinement +proposal-northline 0:d7ac738462f9 10.97 refinelogosystem,colorpalette,ty +proposal-northline 0:9136e740c370 10.27 cohesive,modernidentity. +proposal-northline 0:fc5134bf5fd1 10.47 websiteux/uidesign +proposal-northline 0:5d58b01c7096 11.07 designaresponsive,accessibility- +proposal-northline 0:5d6068f6a879 10.37 navigationandclearconversionpath +proposal-northline 0:32001e20b2ed 10.57 contentstructure&messaging +proposal-northline 0:b3c948ec3e36 11.17 definesitearchitecture,keymessag +proposal-northline 0:231428fde7aa 10.47 communicatevalueandbuildtrust. +proposal-northline 0:8c7703bb6fb7 10.67 launchsupport +proposal-northline 0:64aa6ccd2e0e 11.27 developerhandoff,qasupport,train +proposal-northline 0:1f71a8d2d1d2 10.57 ensureasmoothlaunch. +proposal-northline 0:026890c58de9 0.01 northlinestudio|northlinestudio. +proposal-northline 1:5205c2a261bc -0.34 northline +proposal-northline 1:da0daaba4b15 -0.34 studio +proposal-northline 1:ecd1378bc9dc -0.28 proposal +proposal-northline 1:e35c32bb5ed8 -0.44 deliverables +proposal-northline 1:23eb79a19b39 -0.12 brandstrategysummary +proposal-northline 1:aaa2a6073d69 -0.12 refinedlogosuite&brandguidelines +proposal-northline 1:d626f7532564 -0.12 color,typography&designsystem +proposal-northline 1:018ec557a513 -0.12 websiteuxwireframes +proposal-northline 1:5ed4970fa285 -0.12 high-fidelitywebsitedesigns +proposal-northline 1:f4a5e0b85868 -0.12 responsivedesignfordesktop,table +proposal-northline 1:8b712e7e93bf -0.12 contentstrategy&pagetemplates +proposal-northline 1:e9bf06d9b130 -0.12 developer-readyassets&specificat +proposal-northline 1:e93e7ba95ceb -0.12 launchchecklist&trainingsession +proposal-northline 1:94d192b3a326 -0.44 timeline +proposal-northline 1:02195b8e9896 0.11 phase +proposal-northline 1:c51faa148557 0.11 focus +proposal-northline 1:caa79af4db67 0.11 duration +proposal-northline 1:e0ee8bb50685 0.11 output +proposal-northline 1:9a5c531db125 0.29 01discover +proposal-northline 1:99b15ca862e5 0.29 1week +proposal-northline 1:7817fa5085e2 0.87 research,audit,insights,and +proposal-northline 1:73dff70e25ad 0.17 strategy +proposal-northline 1:ddfbc608570a 0.87 discoveryreport&creative +proposal-northline 1:93c4abe27cf1 0.17 direction +proposal-northline 1:9285b279249c 0.39 02design +proposal-northline 1:b183847fe9f8 0.39 2weeks +proposal-northline 1:1e0716635ae3 0.97 brandrefinementandwebsite +proposal-northline 1:80f5fb36f074 0.27 ux/uidesign +proposal-northline 1:ad5e8a376247 0.97 designsystem&high-fidelity +proposal-northline 1:dbb1831acb45 0.27 designs +proposal-northline 1:ea1ecc5ce8ad 0.49 03developprep +proposal-northline 1:381b99928ddd 1.07 contentstructure,developer +proposal-northline 1:b144c5104484 0.37 handoff&assetpreparation +proposal-northline 1:6ba4e54f2632 1.07 specs,assets&content +proposal-northline 1:06a61df042ad 0.37 framework +proposal-northline 1:17f923a4777c 0.72 04launchsupport +proposal-northline 1:8f16bc1588b5 0.57 qa,training&go-liveassistance +proposal-northline 1:7c23497e09b0 0.57 qasign-off&successfullaunch +proposal-northline 1:f9b21c4bda58 0.61 investment +proposal-northline 1:4a33eacd5fa6 1.16 item +proposal-northline 1:2da123241332 1.16 amount(gbp) +proposal-northline 1:1167b381fe2f 1.32 discovery&strategy +proposal-northline 1:572a8dc5a455 1.32 £2,500 +proposal-northline 1:7c2ad9ba0fd0 1.37 brandidentityrefinement +proposal-northline 1:7f2732df7390 1.37 £4,500 +proposal-northline 1:fc5134bf5fd1 1.42 websiteux/uidesign +proposal-northline 1:8534d989b9ed 1.42 £7,000 +proposal-northline 1:32001e20b2ed 1.47 contentstructure&messaging +proposal-northline 1:e58a378ffc52 1.47 £2,000 +proposal-northline 1:8c7703bb6fb7 1.52 launchsupport +proposal-northline 1:d423fc0a31c2 1.52 £1,500 +proposal-northline 1:d6577e95efba 1.57 subtotal +proposal-northline 1:8873236d3571 1.57 £17,500 +proposal-northline 1:3d213570f707 1.62 optional:3monthspost-launchsuppo +proposal-northline 1:7ffd918ebc4a 1.62 £1,750 +proposal-northline 1:58656319146d 1.79 totalinvestment +proposal-northline 1:4aadcd9bc785 1.79 £19,250 +proposal-northline 1:51d2361f4fae 0.61 terms +proposal-northline 1:99ffab766326 0.78 50%depositisrequiredtosecurethe +proposal-northline 1:5414e5671cbd 1.55 projectandschedulethekick-off. +proposal-northline 1:832db31f5c9a 1.73 includestworoundsofrevisionsper +proposal-northline 1:5130aeada3db 2.50 majordeliverable. +proposal-northline 1:ffce6ed7e6e5 2.68 finalfilesandhandoffdeliveredupo +proposal-northline 1:566f68df6dd8 3.45 finalpayment. +proposal-northline 1:06ebb5670fa8 3.03 ownershipofallfinaldeliverables +proposal-northline 1:5312201597c1 3.80 transferstoasterahealthco.afterf +proposal-northline 1:d31e8d77a816 3.80 paymentisreceived. +proposal-northline 1:c1514c6cdad1 1.41 acceptance +proposal-northline 1:893663b06769 1.73 bysigningbelow,youagreetothescop +proposal-northline 1:df16232de5b9 1.72 acceptedby: +proposal-northline 1:f089d24d7cf3 1.72 signature: +proposal-northline 1:c74c9cd82f13 1.72 date: +proposal-northline 1:026890c58de9 0.01 northlinestudio|northlinestudio. +receipt-modern 0:2b019b5b46da 0.31 northwindpay +receipt-modern 0:a3c304a23bb1 0.30 transferconfirmation +receipt-modern 0:e885a92f5bb7 0.18 generatedon09august2026 +receipt-modern 0:c288dd6df716 0.19 referencenwp-4821-0067 +receipt-modern 0:9de2a2d7cd7a 0.18 amountcollected +receipt-modern 0:465691680b99 0.03 £66.62 +receipt-modern 0:4260e5ae365d 0.20 directdebitcollectedbyharbourfin +receipt-modern 0:4ddb3e96801a 0.18 completed +receipt-modern 0:a22e6dacae05 0.24 valuedate07jul2026 +receipt-modern 0:53becbb168d1 0.24 operationdate07jul2026 +receipt-modern 0:b311cb4017a4 0.24 schemebacsdirectdebit +receipt-modern 0:1bd90283f7fe 0.18 paidfrom +receipt-modern 0:0293c2cdfa58 0.23 alexsample +receipt-modern 0:85d2c9e53e92 -0.03 12exampleway +receipt-modern 0:db3b3fcfe2d1 -0.02 brentfordtw00aa +receipt-modern 0:2474519f77a9 -0.01 unitedkingdom +receipt-modern 0:a3570420c75d 0.29 account••••4396 +receipt-modern 0:d2f5582b8015 0.29 sortcode00-00-00 +receipt-modern 0:c4ab31d8c668 0.18 paidto +receipt-modern 0:c032ca75a3a7 0.23 harbourfinanceltd +receipt-modern 0:995c51cebabe -0.02 1samplequay +receipt-modern 0:f05e0b2f4fe3 -0.01 manchesterm00aa +receipt-modern 0:597533badf94 0.29 account••••5604 +receipt-modern 0:a5938b687682 0.29 sortcode00-00-11 +receipt-modern 0:5434155c0fda 0.23 transferdetails +receipt-modern 0:a4d7978db2aa 0.29 mandatereference +receipt-modern 0:0123b9cf310f 0.29 mnd-0110-8054-5652 +receipt-modern 0:3840804e6235 0.29 transactionid +receipt-modern 0:60e01e42bb33 0.29 b71f0c2e-9a44-4f18-bd30-51c7a2e9 +receipt-modern 0:2cbaa23e0a56 0.29 paymentscheme +receipt-modern 0:1477cb720a28 0.29 bacsdirectdebit +receipt-modern 0:1fa78044a7da 0.29 statementdescription +receipt-modern 0:b77918146dd3 0.29 harbourfin4821 +receipt-modern 0:c72294b34f1a 0.23 amountbreakdown +receipt-modern 0:cf38d95c9c6b 0.29 amount +receipt-modern 0:dc40efafaeb3 0.29 transferfee +receipt-modern 0:3a82ba6903c6 0.29 £0.00 +receipt-modern 0:1cdd81427c35 0.29 exchangerate +receipt-modern 0:0311534a9954 0.29 1.00gbp/gbp +receipt-modern 0:c1dc9f641ca3 0.29 totaldebited +receipt-modern 0:de149c2431a2 0.23 paymentprogress +receipt-modern 0:4568e72e6bfd 0.29 instructed +receipt-modern 0:c5f62da028cc 0.25 07jul2026,08:12bst·collectionreq +receipt-modern 0:788d0109e065 0.30 inclearing +receipt-modern 0:7cb44e46733a 0.26 08jul2026,09:00bst·three-working +receipt-modern 0:d31e014808ec 0.31 settled +receipt-modern 0:06cb75439693 0.27 09jul2026,06:30bst·fundsdebiteda +receipt-modern 0:ab5aa97074c4 0.26 notes +receipt-modern 0:a8da22f90eac 0.31 keepthisconfirmationforyourrecor +receipt-modern 0:59941ac03c12 0.39 scantocheckthisconfirmationagain +receipt-modern 0:868e2517782a 0.13 support+442000000000 +receipt-modern 0:94d25770d489 0.13 help@northwind-pay.example +receipt-modern 0:d613d9566d09 0.13 northwindpayisafictionalinstitut +receipt-modern 0:403a860bfc00 0.13 invented. +receipt-modern 0:7b14b8d2c5c4 -0.04 page1of1 +rota-cobalt 0:33888e306262 1.18 quay +rota-cobalt 0:f5f481423c57 1.03 quaysidebar +rota-cobalt 0:d457d4238a16 1.43 monday31st +rota-cobalt 0:916a90a10237 1.43 tuesday1st +rota-cobalt 0:c602d130bfde 1.43 wednesday2nd +rota-cobalt 0:74cf6babb6f6 1.43 thursday3rd +rota-cobalt 0:ae6aa379ad0c 1.43 friday4th +rota-cobalt 0:a6643f169bfd 1.43 saturday5th +rota-cobalt 0:58752a3c0543 1.43 sunday6th +rota-cobalt 0:c4aee96677b0 2.02 /cleancrushedice +rota-cobalt 0:2895e01ceae0 1.26 machine&area +rota-cobalt 0:f4e7df025c89 2.22 pianist18:30/clean +rota-cobalt 0:d3acaa767810 1.71 crushedicemachine& +rota-cobalt 0:4a91ee5f0106 1.20 area +rota-cobalt 0:b913ee5e077a 2.02 privatedinner44pax/ +rota-cobalt 0:d89987d22df9 1.26 soulgf/pianist18:30 +rota-cobalt 0:fb980282ae0a 2.02 pianist18:30/partner +rota-cobalt 0:3c1fc038017e 1.26 meeting3:30pm +rota-cobalt 0:cc96b22615e5 1.42 pianist19:00 +rota-cobalt 0:bc14a4ce6407 2.17 statuslegend +rota-cobalt 0:1f58b9145b24 2.23 request +rota-cobalt 0:b4dc66dde806 2.23 off +rota-cobalt 0:cdc2def9aec4 2.23 hol +rota-cobalt 0:08c4242b5f58 2.23 stock +rota-cobalt 0:f8f8922da592 2.23 standby +rota-cobalt 0:c2fb788c7dee 2.23 training +rota-cobalt 0:a18603086e5b 2.23 support +rota-cobalt 0:17ae69cc7e46 2.21 covers +rota-cobalt 0:412a5c513322 2.22 l104/d50 +rota-cobalt 0:304560bf3205 2.22 l33/d57 +rota-cobalt 0:ca6ce47ada53 2.22 l32/d76 +rota-cobalt 0:e594a1e64b7d 2.22 l22/d48 +rota-cobalt 0:7062fafe1dab 2.22 l65/d112 +rota-cobalt 0:778cb57b62fa 2.22 l73/d112 +rota-cobalt 0:1b4471920f01 2.22 l72/d83 +rota-cobalt 0:288965a1f2c8 2.12 management +rota-cobalt 0:6a61eb7383e8 2.23 rosa +rota-cobalt 0:3bb0f0bb5552 2.24 09:00-18:00 +rota-cobalt 0:9fff4d6be39d 2.24 16:00-01:00 +rota-cobalt 0:1017e02ccc77 2.24 08:00-18:00 +rota-cobalt 0:e669544e9895 1.45 08:00-16:00 +rota-cobalt 0:19c30663e8ef 1.51 16:00-21:00 +rota-cobalt 0:c9affe7f7587 2.34 tomas +rota-cobalt 0:6d43df86fe4b 2.35 16:00-00:00 +rota-cobalt 0:5a5f719aae11 1.65 11:00-16:00 +rota-cobalt 0:df9ba122242c 2.27 bartenders +rota-cobalt 0:dbaf86dd80e3 2.39 nadia +rota-cobalt 0:0cdd9d9e75dc 1.60 09:00-16:00 +rota-cobalt 0:f1e2ce9aa575 1.67 16:00-22:00 +rota-cobalt 0:de7ee76e7373 2.60 elias +rota-cobalt 0:61587c4c0d6d 2.60 09:00-17:00 +rota-cobalt 0:7195a8ed72b9 1.81 12:00-16:00 +rota-cobalt 0:953cb9ba8128 2.80 mirela +rota-cobalt 0:c1298a6e85c2 2.81 12:00-18:00 +rota-cobalt 0:86846e84f9bf 2.91 sofia +rota-cobalt 0:effcc54ba75f 2.91 karol +rota-cobalt 0:5c1e134d2d34 3.02 henrik +rota-cobalt 0:6326e0e8cfda 3.13 lucia +rota-cobalt 0:c235e502637c 3.06 barbacks +rota-cobalt 0:bd558de5f794 3.08 oskar +rota-cobalt 0:4941d6993ee9 3.08 teodor +rota-cobalt 0:1d3d3d6a07bd 3.29 vesna +rota-cobalt 0:59f2ff7c7c70 0.03 timesshownin24-hourformat.shiftc +rota-cobalt 0:594c41ec0506 0.03 quaysidebar|31aug-6sep2026 diff --git a/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv b/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv new file mode 100644 index 000000000..b55a7ea73 --- /dev/null +++ b/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv @@ -0,0 +1,64 @@ +# libreoffice on windows +document engine_pages editor_pages lines matched median p90 over2 +cv-blue_banner 2 2 53 41 0.12 0.20 0 +cv-boxed_sections 2 2 58 55 0.29 0.46 0 +cv-centered_headline 2 2 57 51 0.20 0.59 0 +cv-charcoal_gold 1 1 81 79 2.94 3.28 79 +cv-classic_serif 2 2 56 52 0.24 12.20 8 +cv-compact_mono 1 1 58 50 0.26 0.90 0 +cv-editorial_blue 2 2 81 75 0.41 10.06 9 +cv-engineering_resume 1 1 57 47 0.55 9.12 14 +cv-executive 2 2 60 60 0.24 3.10 15 +cv-midnight_navy 1 1 83 76 3.20 17.12 70 +cv-minimal_underlined 2 2 59 57 0.69 13.40 9 +cv-mint_editorial 2 2 59 59 0.27 0.60 0 +cv-modern_professional 2 2 60 58 0.12 0.54 5 +cv-monogram_sidebar 1 1 53 50 3.57 5.69 50 +cv-navy_sidebar 1 1 68 68 2.82 3.03 68 +cv-nordic_clean 1 1 63 53 0.38 9.61 21 +cv-orange_ops 1 2 107 5 81.97 81.97 5 +cv-panel 1 1 79 69 0.37 0.78 0 +cv-professional_sidebar 1 1 66 60 2.72 2.90 60 +cv-serif_headline 1 1 101 93 0.40 1.47 8 +cv-sidebar_portrait 1 1 49 47 2.78 3.02 47 +cv-slate_orange 1 1 87 84 3.26 3.70 84 +cv-teal_pulse 1 1 57 55 0.22 0.65 0 +cv-terracotta_rail 1 1 97 95 0.49 0.94 0 +cv-timeline_minimal 2 2 89 84 1.40 1.40 0 +cv-violet_grid 1 2 78 74 3.98 21.80 38 +invoice-classic 1 1 52 52 0.47 1.17 0 +invoice-classic_long 2 2 154 154 0.47 0.87 0 +invoice-consulting 1 1 84 84 0.92 1.61 3 +invoice-consulting_long 2 2 119 119 0.72 1.24 3 +invoice-luma_studio 1 1 84 84 0.12 0.55 3 +invoice-luma_studio_long 3 3 120 120 0.22 11.90 23 +invoice-merchant 1 2 80 78 0.21 0.67 0 +invoice-metered 1 1 87 87 0.25 0.65 0 +invoice-modern 1 1 52 52 0.32 0.52 0 +invoice-modern_long 2 2 152 152 0.35 0.52 0 +invoice-obsidian 1 1 74 74 0.29 0.85 0 +invoice-payments 1 1 89 85 0.40 1.06 2 +invoice-platform 1 1 97 97 0.27 0.41 0 +invoice-subscription 1 1 71 71 0.42 0.73 0 +invoice-workspace 1 1 79 79 0.33 1.13 0 +letter-blue_banner 1 1 9 5 0.20 0.42 0 +letter-boxed_sections 1 1 9 9 0.46 0.70 0 +letter-centered_headline 1 1 10 8 0.18 0.25 0 +letter-classic_serif 1 1 9 9 0.13 0.19 0 +letter-compact_mono 1 1 9 7 0.24 0.35 0 +letter-editorial_blue 1 1 11 8 0.15 0.45 1 +letter-engineering_resume 1 1 14 10 0.21 1.40 0 +letter-executive 1 1 11 11 0.18 0.30 0 +letter-mint-editorial-letter 1 1 9 9 0.29 0.29 0 +letter-modern_professional 1 1 11 11 0.43 0.43 0 +letter-monogram_sidebar 1 1 12 12 0.23 0.37 0 +letter-nordic_clean 1 1 14 14 0.18 0.38 0 +letter-panel 1 1 12 12 0.15 0.21 0 +letter-sidebar_portrait 1 1 11 11 0.43 0.51 0 +letter-timeline_minimal 1 1 14 14 1.32 1.52 0 +proposal-editorial 2 2 130 117 43.27 45.15 66 +proposal-indigo 1 1 72 68 0.48 27.88 16 +proposal-modern 1 1 42 42 0.41 0.75 0 +proposal-northline 2 2 130 129 0.87 10.47 34 +receipt-modern 1 1 55 55 0.26 0.30 0 +rota-cobalt 1 1 67 64 2.22 2.91 41 From 13d3783c80294f5e9f0e5e6396729d0c0b9f89c6 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Thu, 1 Oct 2026 17:17:49 +0100 Subject: [PATCH 2/2] test(qa): pair repeated lines nearest-first, refuse a baseline without its lines, and never measure a stale PDF --- CHANGELOG.md | 7 +- .../fidelity/DocxFidelityCorpusTest.java | 21 +- .../fidelity/DocxFidelityGateTest.java | 74 ++- .../templates/fidelity/FidelityBaseline.java | 56 ++- .../fidelity/FidelityMeasurement.java | 92 +++- .../fidelity/LibreOfficeConverter.java | 41 +- .../document/templates/fidelity/PdfLines.java | 61 +-- .../libreoffice-windows-lines.tsv | 468 +++++++++++++++++- .../docx-fidelity/libreoffice-windows.tsv | 96 ++-- 9 files changed, 776 insertions(+), 140 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eba95581f..ff5691996 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1478,9 +1478,10 @@ follow semantic versioning; release dates are ISO 8601. - **The DOCX export is held to its corpus, line by line.** `DocxFidelityCorpusTest` exports every template preset — 62 documents across CVs, cover letters, invoices, proposals, a receipt and a rota — to DOCX, has LibreOffice set each one, and finds each of the page's - lines in it by its letters. Against the committed baseline a document fails when a line is - no longer found (set at other words or on another page), when a line drifts half a point - further from the page, or when it takes a page more. Counts per document would not do: a + lines in it by its letters — lines of the same letters on a page, a rota's shifts, each + paired with the editor's nearest. Against the committed baseline a document fails when a line + is no longer found (set at other words or on another page), when a line drifts more than half + a point further from the page, or when it takes a page more. Counts per document would not do: a sidebar CV that LibreOffice sets about 3pt off throughout lost an indented list without its counts moving, and the line check names the two lines lost and the six set 12pt higher. It runs on request, `-Dgraphcompose.docxFidelity=libreoffice`; a change that moves diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java index 4fcd02651..2d90919f1 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityCorpusTest.java @@ -53,6 +53,9 @@ void everyDocumentStandsNoFurtherFromThePageThanItsBaseline() throws Exception { Path work = Path.of("target", "docx-fidelity").toAbsolutePath(); Path engine = Files.createDirectories(work.resolve("engine")); Path editor = work.resolve(EDITOR); + // LibreOffice can exit cleanly when a file fails to load: a PDF left from an earlier + // run would then be measured in its place. + deleteTree(editor); List corpus = corpus(); List docx = new ArrayList<>(); for (DocxCorpusDocument document : corpus) { @@ -67,16 +70,19 @@ void everyDocumentStandsNoFurtherFromThePageThanItsBaseline() throws Exception { measurements.add(FidelityMeasurement.of(document.stem(), engine.resolve(document.stem() + ".pdf"), converted)); } - String note = EDITOR + " on " + LibreOfficeConverter.platform(); + String note = EDITOR + " " + converter.build() + " on " + LibreOfficeConverter.platform(); FidelityBaseline.write(work.resolve("measured-" + EDITOR + ".tsv"), note, measurements); Path baseline = Path.of("src", "test", "resources", "docx-fidelity", EDITOR + "-" + LibreOfficeConverter.platform() + ".tsv"); + List regressions = FidelityBaseline.read(baseline).regressions(measurements); if (Boolean.getBoolean("graphcompose.docxFidelity.update")) { + // Written all the same: what it lets through is the baseline's diff, shown here first. + regressions.forEach(regression -> System.err.println("baseline rewritten over: " + regression)); FidelityBaseline.write(baseline, note, measurements); return; } - assertThat(FidelityBaseline.read(baseline).regressions(measurements)) + assertThat(regressions) .as("documents set further from the page than %s holds them (measured: %s)", baseline, work.resolve("measured-" + EDITOR + ".tsv")) .isEmpty(); @@ -91,6 +97,17 @@ void everyCorpusDocumentHasAStemOfItsOwn() { assertThat(stems).hasSizeGreaterThanOrEqualTo(60); } + private static void deleteTree(Path dir) throws java.io.IOException { + if (!Files.exists(dir)) { + return; + } + try (var paths = Files.walk(dir)) { + for (Path path : paths.sorted(java.util.Comparator.reverseOrder()).toList()) { + Files.delete(path); + } + } + } + /** Every family's presets. */ static List corpus() { List corpus = new ArrayList<>(); diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java index 1bb05c968..58c7eddd8 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/DocxFidelityGateTest.java @@ -107,7 +107,7 @@ void theBaselineFailsAPageFurtherFromTheEnginesCountAndADocumentItDoesNotHold() assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 2, line(1, "aa", 0.4))))) .singleElement().asString().contains("2 pages"); - assertThat(baseline.regressions(List.of(doc("cv-other", 1, 1, line(1, "aa", 0.4))))) + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 0.4)), doc("cv-other", 1, 1, line(1, "aa", 0.4))))) .singleElement().asString().contains("not in the baseline"); } @@ -130,11 +130,81 @@ void aBaselineIsReadAsItWasWritten() throws Exception { FidelityBaseline.write(file, "probe", rows); assertThat(FidelityBaseline.read(file).regressions(rows)).isEmpty(); - assertThat(FidelityBaseline.read(file).regressions(List.of(doc("cv-b", 2, 3, line(1, "aa", -1.5))))) + assertThat(FidelityBaseline.read(file).regressions(List.of(doc("cv-a", 1, 1, line(1, "aa", 0.86)), + doc("cv-b", 2, 3, line(1, "aa", -1.5), line(2, "cc", 3))))) + .as("a drift read back as written: 0.25 -> 0.86 is further").singleElement().asString().contains("further"); + assertThat(FidelityBaseline.read(file).regressions(List.of(doc("cv-a", 1, 1, line(1, "aa", 0.25)), + doc("cv-b", 2, 3, line(1, "aa", -1.5))))) .as("the line file read back with the document file").singleElement().asString().contains("no longer found"); assertThat(Files.readAllLines(file)).first().isEqualTo("# probe"); } + @Test + void halfAPointFurtherIsRoundingAndMoreIsNot() { + FidelityBaseline baseline = FidelityBaseline.of(List.of(doc("cv-probe", 1, 1, line(1, "aa", 1.0)))); + + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 1.5))))).isEmpty(); + assertThat(baseline.regressions(List.of(doc("cv-probe", 1, 1, line(1, "aa", 1.51))))).hasSize(1); + } + + @Test + void aDocumentTheCorpusNoLongerHasFails() { + FidelityBaseline baseline = FidelityBaseline.of(List.of(doc("cv-gone", 1, 1, line(1, "aa", 0)))); + + assertThat(baseline.regressions(List.of())).singleElement().asString().contains("no longer in the corpus"); + } + + @Test + void aBaselineWithoutItsLinesIsRefused() throws Exception { + Path file = dir.resolve("baseline.tsv"); + FidelityBaseline.write(file, "probe", List.of(doc("cv-a", 1, 1, line(1, "aa", 0.25), line(1, "bb", 0.5)))); + Path lines = dir.resolve("baseline-lines.tsv"); + List rows = Files.readAllLines(lines); + + Files.write(lines, rows.subList(0, rows.size() - 1)); + assertThatThrownBy(() -> FidelityBaseline.read(file)).as("a line missing from the line file") + .isInstanceOf(IllegalStateException.class).hasMessageContaining("cv-a"); + Files.delete(lines); + assertThatThrownBy(() -> FidelityBaseline.read(file)).as("no line file") + .isInstanceOf(IllegalStateException.class).hasMessageContaining("no line file"); + } + + @Test + void aMalformedLineRowIsRefusedByName() { + assertThatThrownBy(() -> FidelityMeasurement.parseLine("cv-a\t1:abc\tfar\tletters", new LinkedHashMap<>())) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("cv-a"); + } + + @Test + void linesOfTheSameLettersArePairedNearestFirst() { + // A rota's two "09:00-18:00" on one page: the editor draws them in the other order and + // loses the first. The one left is the second, where it stood, and the first is lost. + PdfLines page = new PdfLines(List.of(new PdfLines.Line(0, "0900-1800", 40, 100), + new PdfLines.Line(0, "0900-1800", 40, 200)), 1); + PdfLines set = new PdfLines(List.of(new PdfLines.Line(0, "0900-1800", 40, 200.5)), 1); + + FidelityMeasurement measured = FidelityMeasurement.of("rota-probe", page, set); + + assertThat(measured.lines()).isEqualTo(2); + assertThat(measured.matched()).isEqualTo(1); + assertThat(measured.found()).hasSize(1); + var found = measured.found().entrySet().iterator().next(); + assertThat(found.getKey()).endsWith("#1"); + assertThat(found.getValue().drift()).isEqualTo(0.5); + } + + @Test + void twoColumnsOnOneBaselineAreTwoLines() throws Exception { + Path page = pdf("columns", flow -> flow.addRow("Row", row -> row + .columns(com.demcha.compose.document.style.DocumentRowColumn.fixed(180), + com.demcha.compose.document.style.DocumentRowColumn.weight(1)) + .addParagraph("Left") + .addParagraph("Right"))); + + assertThat(PdfLines.of(page).lines()).extracting(PdfLines.Line::key).containsExactly("left", "right"); + } + @Test void aMalformedBaselineRowIsRefusedByName() { assertThatThrownBy(() -> FidelityMeasurement.parse("cv-a\t1\tone\t40\t39\t0.25\t0.5\t1", Map.of())) diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java index bbfe2c712..4d81aff8e 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityBaseline.java @@ -19,10 +19,12 @@ *

A change may move the export nearer the page, never further. Against its baseline a * document fails when the editor sets it on a page count further from the engine's, when a * line the baseline found is no longer found — the editor breaks it at another word, or puts it - * on another page — or when a found line drifts {@value #LINE_SLACK}pt further from the page - * than it did. Line by line, because a document already set a few points off throughout hides a - * new defect in its counts. A document the baseline does not hold fails until the baseline is - * written with it.

+ * on another page — or when a found line drifts more than {@value #LINE_SLACK}pt further from + * the page than it did. Line by line, because a document already set a few points off + * throughout hides a new defect in its counts. A document the baseline does not hold fails + * until the baseline is written with it, and so does one the baseline holds and the corpus no + * longer has. A document whose lines the editor mostly sets at other words is held to the few + * it finds: the gate keeps what an export has, and adds nothing for what it lacks.

* *

The baseline is two files: {@code .tsv}, a row per document, and * {@code -lines.tsv}, a row per found line, named by its page and a digest of its @@ -42,26 +44,38 @@ private FidelityBaseline(Map rows) { this.rows = rows; } + /** + * Reads a baseline: no file at all is an empty baseline, which every document fails + * against; a document file without its line file, or a line file that holds another number + * of a document's lines than its row says it found, is refused rather than read as a + * baseline that holds no lines. + */ static FidelityBaseline read(Path documents) throws IOException { - Map> lines = new LinkedHashMap<>(); + Map rows = new LinkedHashMap<>(); + if (!Files.exists(documents)) { + return new FidelityBaseline(rows); + } Path lineFile = linesOf(documents); - if (Files.exists(lineFile)) { - for (String row : Files.readAllLines(lineFile, StandardCharsets.UTF_8)) { - if (!row.isBlank() && !row.startsWith("#")) { - FidelityMeasurement.parseLine(row, lines); - } + if (!Files.exists(lineFile)) { + throw new IllegalStateException("the baseline " + documents + " has no line file " + lineFile); + } + Map> lines = new LinkedHashMap<>(); + for (String row : Files.readAllLines(lineFile, StandardCharsets.UTF_8)) { + if (!row.isBlank() && !row.startsWith("#")) { + FidelityMeasurement.parseLine(row, lines); } } - Map rows = new LinkedHashMap<>(); - if (Files.exists(documents)) { - for (String row : Files.readAllLines(documents, StandardCharsets.UTF_8)) { - if (row.isBlank() || row.startsWith("#") || row.equals(FidelityMeasurement.HEADER)) { - continue; - } - String stem = row.substring(0, Math.max(0, row.indexOf('\t'))); - FidelityMeasurement measured = FidelityMeasurement.parse(row, lines.getOrDefault(stem, Map.of())); - rows.put(measured.stem(), measured); + for (String row : Files.readAllLines(documents, StandardCharsets.UTF_8)) { + if (row.isBlank() || row.startsWith("#") || row.equals(FidelityMeasurement.HEADER)) { + continue; + } + String stem = row.substring(0, Math.max(0, row.indexOf('\t'))); + FidelityMeasurement measured = FidelityMeasurement.parse(row, lines.getOrDefault(stem, Map.of())); + if (measured.found().size() != measured.matched()) { + throw new IllegalStateException(stem + " found " + measured.matched() + " lines, and " + + lineFile + " holds " + measured.found().size() + " of them"); } + rows.put(measured.stem(), measured); } return new FidelityBaseline(rows); } @@ -90,6 +104,10 @@ static void write(Path documents, String note, Collection m /** What each measurement does worse than its baseline; empty when none does. */ List regressions(Collection measurements) { List found = new ArrayList<>(); + java.util.Set measured = new java.util.HashSet<>(); + measurements.forEach(now -> measured.add(now.stem())); + rows.keySet().stream().filter(stem -> !measured.contains(stem)) + .forEach(stem -> found.add(stem + ": in the baseline, and no longer in the corpus")); for (FidelityMeasurement now : measurements) { FidelityMeasurement was = rows.get(now.stem()); if (was == null) { diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java index f76a9acec..5307d400e 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/FidelityMeasurement.java @@ -17,7 +17,9 @@ * How far an editor's rendering of a document's DOCX stands from the engine's PDF of it. * *

Each line of the page is looked for, by its letters, on the same page of the editor's - * PDF; a line the editor breaks at another word, or puts on another page, is not found. A found + * PDF; a line the editor breaks at another word, or puts on another page, is not found. Lines + * of the same letters on one page — a rota's shifts, a CV's date ranges — are paired each with + * the editor's nearest, so one lost or moved among them is not hidden behind another. A found * line's drift is how far its baseline stands below the page's, above when negative.

* * @param stem the document @@ -28,8 +30,9 @@ * @param median the median of the found lines' drift either way, in points * @param p90 the drift either way nine in ten found lines stay within, in points * @param over2 the found lines drifting more than 2pt either way - * @param found each found line's drift, by its {@link #lineId line id}; empty when read - * from a baseline row + * @param found each found line's drift, by its line id: its page, a digest of its + * letters, and which of the page's lines of those letters it is, in the + * order the page draws them */ record FidelityMeasurement(String stem, int enginePages, int editorPages, int lines, int matched, double median, double p90, int over2, Map found) { @@ -44,48 +47,93 @@ record Found(int page, String preview, double drift) { found = Collections.unmodifiableMap(new LinkedHashMap<>(found)); } - /** The share of the page's lines found in the editor's, from 0 to 1. */ - double matchedShare() { - return lines == 0 ? 1 : (double) matched / lines; - } - /** Measures the editor's PDF of a document against the engine's. */ static FidelityMeasurement of(String stem, Path enginePdf, Path editorPdf) throws IOException { return of(stem, PdfLines.of(enginePdf), PdfLines.of(editorPdf)); } static FidelityMeasurement of(String stem, PdfLines engine, PdfLines editor) { - Map page = engine.byKey(); - Map set = editor.byKey(); + Map> page = grouped(engine); + Map> set = grouped(editor); Map found = new LinkedHashMap<>(); List drifts = new ArrayList<>(); - for (Map.Entry line : page.entrySet()) { - PdfLines.Line there = set.get(line.getKey()); - if (there != null) { - double drift = round(there.baseline() - line.getValue().baseline()); - found.put(lineId(line.getValue()), new Found(line.getValue().page(), preview(line.getValue().key()), drift)); - drifts.add(Math.abs(drift)); + int lines = 0; + for (Map.Entry> group : page.entrySet()) { + List ours = group.getValue(); + lines += ours.size(); + PdfLines.Line[] theirs = paired(ours, set.getOrDefault(group.getKey(), List.of())); + for (int index = 0; index < ours.size(); index++) { + if (theirs[index] != null) { + PdfLines.Line line = ours.get(index); + double drift = round(theirs[index].baseline() - line.baseline()); + found.put(lineId(line, index), new Found(line.page(), preview(line.key()), drift)); + drifts.add(Math.abs(drift)); + } } } Collections.sort(drifts); int over2 = (int) drifts.stream().filter(drift -> drift > 2).count(); - return new FidelityMeasurement(stem, engine.pages(), editor.pages(), page.size(), drifts.size(), + return new FidelityMeasurement(stem, engine.pages(), editor.pages(), lines, drifts.size(), quantile(drifts, 0.5), quantile(drifts, 0.9), over2, found); } - /** A line's identity across runs: its page and a digest of its letters. */ - static String lineId(PdfLines.Line line) { + /** A PDF's lines by page and letters, each group in the order the page draws them. */ + private static Map> grouped(PdfLines pdf) { + Map> groups = new LinkedHashMap<>(); + for (PdfLines.Line line : pdf.lines()) { + groups.computeIfAbsent(line.page() + "/" + line.key(), key -> new ArrayList<>()).add(line); + } + return groups; + } + + /** + * Pairs the page's lines of one group with the editor's, nearest first: each pair is the + * closest of the lines still unpaired, so a group the editor sets in another order, or with + * one line lost, pairs the lines that stand where they did. + */ + private static PdfLines.Line[] paired(List ours, List theirs) { + PdfLines.Line[] pairs = new PdfLines.Line[ours.size()]; + if (ours.size() == 1 && theirs.size() == 1) { + pairs[0] = theirs.get(0); + return pairs; + } + List candidates = new ArrayList<>(); + for (int i = 0; i < ours.size(); i++) { + for (int j = 0; j < theirs.size(); j++) { + candidates.add(new int[]{i, j}); + } + } + candidates.sort(java.util.Comparator.comparingDouble(pair -> distance(ours.get(pair[0]), theirs.get(pair[1])))); + boolean[] taken = new boolean[theirs.size()]; + for (int[] pair : candidates) { + if (pairs[pair[0]] == null && !taken[pair[1]]) { + pairs[pair[0]] = theirs.get(pair[1]); + taken[pair[1]] = true; + } + } + return pairs; + } + + private static double distance(PdfLines.Line a, PdfLines.Line b) { + return Math.hypot(a.x() - b.x(), a.baseline() - b.baseline()); + } + + /** + * A line's identity across runs: its page, a digest of its letters, and which of the page's + * lines of those letters it is. + */ + static String lineId(PdfLines.Line line, int occurrence) { try { byte[] digest = MessageDigest.getInstance("SHA-256").digest(line.key().getBytes(StandardCharsets.UTF_8)); - return line.page() + ":" + HexFormat.of().formatHex(digest, 0, 6); + String id = line.page() + ":" + HexFormat.of().formatHex(digest, 0, 6); + return occurrence == 0 ? id : id + "#" + occurrence; } catch (NoSuchAlgorithmException missing) { throw new IllegalStateException(missing); } } private static String preview(String key) { - String letters = key.replaceAll("[\\t\\r\\n]", ""); - return letters.length() <= 32 ? letters : letters.substring(0, 32); + return key.codePointCount(0, key.length()) <= 32 ? key : key.substring(0, key.offsetByCodePoints(0, 32)); } private static double round(double points) { diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java index 178d11cef..2e9389fa4 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/LibreOfficeConverter.java @@ -42,12 +42,47 @@ static Optional find() { String path = System.getenv("PATH"); if (path != null) { for (String directory : path.split(java.io.File.pathSeparator)) { - candidates.add(Path.of(directory, "soffice").toString()); - candidates.add(Path.of(directory, "soffice.exe").toString()); + candidates.add(directory + "/soffice"); + candidates.add(directory + "/soffice.exe"); } } candidates.add("C:/Program Files/LibreOffice/program/soffice.exe"); - return candidates.stream().map(Path::of).filter(Files::isRegularFile).findFirst().map(LibreOfficeConverter::new); + for (String candidate : candidates) { + try { + Path file = Path.of(candidate); + if (Files.isRegularFile(file)) { + return Optional.of(new LibreOfficeConverter(file)); + } + } catch (java.nio.file.InvalidPathException notAPath) { + // A PATH entry no path can be made of, quotes and all: not a LibreOffice. + } + } + return Optional.empty(); + } + + /** + * The build of LibreOffice converting, as its installation records it beside the program — + * {@code buildid} in {@code version.ini} on Windows, {@code versionrc} elsewhere — or + * {@code unknown}. Read from the file: {@code soffice --version} can wait on a window. + */ + String build() { + Path program = soffice.toAbsolutePath().getParent(); + for (String name : List.of("version.ini", "versionrc")) { + Path file = program.resolve(name); + try { + if (Files.isRegularFile(file)) { + for (String line : Files.readAllLines(file, java.nio.charset.StandardCharsets.ISO_8859_1)) { + if (line.startsWith("buildid=")) { + String id = line.substring("buildid=".length()).strip(); + return "build " + id.substring(0, Math.min(12, id.length())); + } + } + } + } catch (IOException unreadable) { + return "unknown"; + } + } + return "unknown"; } /** Converts each DOCX into a PDF of the same stem in {@code outDir}. */ diff --git a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java index 7cb94b3bb..3324823b5 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/fidelity/PdfLines.java @@ -8,33 +8,35 @@ import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; -import java.util.Map; /** - * The lines of text a PDF draws, each keyed by its page and its letters, with the baseline its - * first letter stands on. + * The lines of text a PDF draws, each with its page, its letters, and where its first letter + * stands. * *

Glyphs are read in the order the page draws them. A line ends where the next glyph stands - * on another baseline, steps back to the left, or stands further off than one and a half of its - * size: two columns on one baseline are two lines, as they are two runs of text. The key is the - * line's letters without white space, lower-cased, so text an editor sets with spaces between - * tracked letters, or with a trailing space, keys as the page's does. Lines of fewer than three - * letters are left out, and only the first line of each key on a page is kept.

+ * on another baseline (more than half its size off), steps back to the left, or stands further + * off than one and a half times its size: two runs of text on one baseline are two lines when + * the second starts that far past the first, as two columns' text does. The key is the line's + * letters without white space, lower-cased, so text an editor sets with spaces between tracked + * letters, or with a trailing space, keys as the page's does. Lines of fewer than three letters + * are left out.

*/ final class PdfLines { - /** A line: its page, its letters, and the baseline of its first letter from the page's top. */ - record Line(int page, String key, double baseline) { + /** + * A line: its page, its letters, and its first letter's left edge and baseline, from the + * page's left and top, in points. + */ + record Line(int page, String key, double x, double baseline) { } private final List lines; private final int pages; - private PdfLines(List lines, int pages) { - this.lines = lines; + PdfLines(List lines, int pages) { + this.lines = List.copyOf(lines); this.pages = pages; } @@ -57,20 +59,12 @@ List lines() { return lines; } - /** The lines by page and key, the first of each kept. */ - Map byKey() { - Map keyed = new LinkedHashMap<>(); - for (Line line : lines) { - keyed.putIfAbsent(line.page() + "/" + line.key(), line); - } - return keyed; - } - private static final class Collector extends PDFTextStripper { private final List lines = new ArrayList<>(); private final StringBuilder key = new StringBuilder(); private int page; + private double x = Double.NaN; private double baseline = Double.NaN; private double lastEnd = Double.NaN; private double lastX = Double.NaN; @@ -88,35 +82,34 @@ protected void startPage(org.apache.pdfbox.pdmodel.PDPage pdPage) throws IOExcep @Override protected void processTextPosition(TextPosition glyph) { double y = glyph.getYDirAdj(); - double x = glyph.getXDirAdj(); + double left = glyph.getXDirAdj(); double size = Math.max(1, glyph.getFontSizeInPt()); boolean sameLine = !Double.isNaN(baseline) && Math.abs(y - baseline) < size * 0.5 - && x >= lastX - 1 - && x - lastEnd < size * 1.5; + && left >= lastX - 1 + && left - lastEnd < size * 1.5; if (!sameLine) { endLine(); baseline = y; + x = left; } String letters = glyph.getUnicode(); if (letters != null) { - for (int i = 0; i < letters.length(); i++) { - char c = letters.charAt(i); - if (!Character.isWhitespace(c) && c != ' ') { - key.append(c); - } - } + letters.codePoints() + .filter(c -> !Character.isWhitespace(c) && !Character.isSpaceChar(c)) + .forEach(key::appendCodePoint); } - lastX = x; - lastEnd = x + glyph.getWidthDirAdj(); + lastX = left; + lastEnd = left + glyph.getWidthDirAdj(); } private void endLine() { String letters = key.toString().toLowerCase(Locale.ROOT); if (letters.codePointCount(0, letters.length()) >= 3) { - lines.add(new Line(page, letters, baseline)); + lines.add(new Line(page, letters, x, baseline)); } key.setLength(0); + x = Double.NaN; baseline = Double.NaN; lastEnd = Double.NaN; lastX = Double.NaN; diff --git a/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv b/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv index af8ae619b..3c6c8438c 100644 --- a/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv +++ b/qa/src/test/resources/docx-fidelity/libreoffice-windows-lines.tsv @@ -1,4 +1,4 @@ -# libreoffice on windows — document, line, drift below the page (pt), letters +# libreoffice build bce0998afefd on windows — document, line, drift below the page (pt), letters cv-blue_banner 0:8f1010120ed6 0.42 jordanrivera cv-blue_banner 0:8d7a2cca3060 -0.20 +442055551000|jordan.rivera@exam cv-blue_banner 0:b944906ed84c -0.20 professionalsummary @@ -11,6 +11,7 @@ cv-blue_banner 0:e7cc1822c6dc -0.17 2021-2024 cv-blue_banner 0:998c1a985022 -0.17 brightleaflabs cv-blue_banner 0:41bb54fbae8d -0.19 backendengineer cv-blue_banner 0:3fa772117260 -0.14 2019-2021 +cv-blue_banner 0:3fa772117260#1 -0.13 2019-2021 cv-blue_banner 0:ef148f221e31 -0.14 helixprintco cv-blue_banner 0:d7119ba1b2b4 -0.13 maintainedahigh-volumeinvoice-pr cv-blue_banner 0:68bf0109c6f8 -0.12 education @@ -110,6 +111,7 @@ cv-centered_headline 0:26671c309eb9 -0.16 •distribution:mavencentral,sonat cv-centered_headline 0:68bf0109c6f8 -0.19 education cv-centered_headline 0:0ad1957d6bab -0.19 msccomputerscience cv-centered_headline 0:3fa772117260 -0.20 2019-2021 +cv-centered_headline 0:3fa772117260#1 0.71 2019-2021 cv-centered_headline 0:47ce0218bbea -0.16 universityofmanchester cv-centered_headline 0:2ffe115b06e5 -0.14 distinction.thesis:composablelay cv-centered_headline 0:b6749d0b616b -0.07 bscsoftwareengineering @@ -168,6 +170,7 @@ cv-charcoal_gold 0:b011cfad056f 2.84 agilemethodologies cv-charcoal_gold 0:6cb574fa10b6 2.82 languages cv-charcoal_gold 0:b6234d2ea0d6 2.91 english cv-charcoal_gold 0:bef32d2c315a 2.91 native +cv-charcoal_gold 0:bef32d2c315a#1 2.91 native cv-charcoal_gold 0:aa304b5d1d72 2.91 russian cv-charcoal_gold 0:21bb36ad0638 2.91 french cv-charcoal_gold 0:23ed645595d6 2.91 b2–upperintermediate @@ -181,6 +184,7 @@ cv-charcoal_gold 0:66cb4ff79ee1 2.93 bscbusinessadministration cv-charcoal_gold 0:8826393fc0f0 2.93 king'scollegelondon cv-charcoal_gold 0:c7d18ae8c50d 2.93 2014–2017 cv-charcoal_gold 0:3acba0d7b5dc 2.61 projectmanager +cv-charcoal_gold 0:3acba0d7b5dc#1 2.86 projectmanager cv-charcoal_gold 0:f54e0195601a 3.01 results-drivenprojectmanagerwith cv-charcoal_gold 0:7a0497cef9c6 3.01 teamsanddeliveringcomplexproject cv-charcoal_gold 0:c38f1902ece8 3.24 skilledinagileandwaterfallmethod @@ -209,9 +213,11 @@ cv-charcoal_gold 0:e831beb04c00 3.06 certifications cv-charcoal_gold 0:93a7ba535da0 3.22 pmp®certification cv-charcoal_gold 0:0f9f6d10bfa3 3.26 projectmanagementinstitute cv-charcoal_gold 0:73a2af8864fc 3.28 2020 +cv-charcoal_gold 0:73a2af8864fc#1 3.34 2020 cv-charcoal_gold 0:043092900ed5 3.25 prince2®foundation cv-charcoal_gold 0:544a764703d6 3.29 axelos cv-charcoal_gold 0:023e33504ab9 3.31 2019 +cv-charcoal_gold 0:023e33504ab9#1 3.34 2019 cv-charcoal_gold 0:83cd2e790f6a 3.28 agilepm®foundation cv-charcoal_gold 0:0005e5872534 3.32 apmginternational cv-charcoal_gold 0:6ee18b42fbf1 3.06 achievements @@ -248,6 +254,7 @@ cv-classic_serif 0:e55664011cda -0.12 builtbackendservicesandproductio cv-classic_serif 0:e80236b6d2b1 -0.13 itexttoacustomlayoutengine,elimi cv-classic_serif 0:41bb54fbae8d 0.24 backendengineer cv-classic_serif 0:3fa772117260 0.21 2019-2021 +cv-classic_serif 0:3fa772117260#1 12.18 2019-2021 cv-classic_serif 0:ef148f221e31 0.22 helixprintco cv-classic_serif 0:9d31a6bfbc69 -0.01 maintainedahigh-volumeinvoice-pr cv-classic_serif 0:03af8a628309 -0.02 change. @@ -353,6 +360,7 @@ cv-editorial_blue 0:a26a92311896 0.32 •maven cv-editorial_blue 0:d1002e9575f5 0.32 •gradle cv-editorial_blue 0:e7b0f50a3bf3 0.32 •githubactions cv-editorial_blue 0:193e87ad43b7 0.32 •jitpack +cv-editorial_blue 0:193e87ad43b7#1 0.41 •jitpack cv-editorial_blue 0:62e29bf5f417 0.32 •docker cv-editorial_blue 0:83844532ef02 0.32 •jmhbenchmarking cv-editorial_blue 0:8a7a4807b03b 0.32 •junit5 @@ -511,6 +519,7 @@ cv-executive 1:dd20ae01c3cf -3.10 opensource:maintainerofgraphcomp cv-executive 1:33c35e9d236d -3.10 speaking:jvmsummit2024,devoxxuk2 cv-midnight_navy 0:21d2636ad3df -16.37 alexmorgan cv-midnight_navy 0:5518402feccc -17.05 marketingmanager +cv-midnight_navy 0:5518402feccc#1 2.33 marketingmanager cv-midnight_navy 0:093e7d5fdbaa -17.12 contact cv-midnight_navy 0:01dcad830244 -16.44 +1(555)123-4567 cv-midnight_navy 0:3eef38c97138 -16.45 alex.morgan@email.com @@ -523,6 +532,7 @@ cv-midnight_navy 0:512afb6c7631 -17.18 administration cv-midnight_navy 0:09b0e2130c1e -16.68 universityofchicagoboothschoolof cv-midnight_navy 0:11d404179596 -16.69 business cv-midnight_navy 0:3b8048983ecc -17.07 2016–2018 +cv-midnight_navy 0:3b8048983ecc#1 2.76 2016–2018 cv-midnight_navy 0:84c2243138f7 -17.20 bachelorofsciencein cv-midnight_navy 0:e2a530e251d3 -17.19 marketing cv-midnight_navy 0:1f676d444ffb -16.99 bostonuniversity @@ -552,6 +562,7 @@ cv-midnight_navy 0:53e5e7c5a884 2.32 experience cv-midnight_navy 0:086c0e036e67 2.39 2021–present cv-midnight_navy 0:009b5b6479fa 2.47 starwavesolutions cv-midnight_navy 0:60cebc1ec80c 2.47 newyork,ny +cv-midnight_navy 0:60cebc1ec80c#1 2.67 newyork,ny cv-midnight_navy 0:e0ee3cbb7b53 1.94 ·manageateamof6marketingprofessi cv-midnight_navy 0:8ba85a74e016 1.96 anddesignteamstodrivecampaignsuc cv-midnight_navy 0:407f710db042 1.97 ·overseedigitalcampaignsacrossse @@ -716,6 +727,7 @@ cv-modern_professional 0:26671c309eb9 -0.12 •distribution:mavencentral,sonat cv-modern_professional 0:68bf0109c6f8 0.02 education cv-modern_professional 0:0ad1957d6bab -0.12 msccomputerscience cv-modern_professional 0:3fa772117260 -0.11 2019-2021 +cv-modern_professional 0:3fa772117260#1 0.60 2019-2021 cv-modern_professional 0:47ce0218bbea -0.17 universityofmanchester cv-modern_professional 0:2ffe115b06e5 -0.11 distinction.thesis:composablelay cv-modern_professional 0:b6749d0b616b -0.02 bscsoftwareengineering @@ -842,6 +854,7 @@ cv-navy_sidebar 0:77915a7314f0 2.95 spanish–advanced cv-navy_sidebar 0:21bb36ad0638 2.95 french cv-navy_sidebar 0:3bc244be050e 2.95 –intermediate cv-navy_sidebar 0:5518402feccc 2.58 marketingmanager +cv-navy_sidebar 0:5518402feccc#1 2.71 marketingmanager cv-navy_sidebar 0:7b5815d7a663 2.99 results-drivenmarketingprofessio cv-navy_sidebar 0:18f8b50d02d8 3.01 developingandexecutingdata-drive cv-navy_sidebar 0:2adca2422cbe 3.03 growth,increaseengagement,anddel @@ -849,6 +862,8 @@ cv-navy_sidebar 0:b3c222da2e1d 3.05 digitalmarketing,marketresearch, cv-navy_sidebar 0:53e5e7c5a884 2.72 experience cv-navy_sidebar 0:8a39b996b27c 2.89 jan2022-present cv-navy_sidebar 0:f97eeb2fe120 2.75 brightwavesolutions,newyork,ny +cv-navy_sidebar 0:f97eeb2fe120#1 2.73 brightwavesolutions,newyork,ny +cv-navy_sidebar 0:f97eeb2fe120#2 2.70 brightwavesolutions,newyork,ny cv-navy_sidebar 0:a4beef0c22d9 2.50 •developandimplementintegratedma cv-navy_sidebar 0:234eaa6417f7 2.50 awarenessby35%andleadgenerationb cv-navy_sidebar 0:dfd245470d6e 2.50 •manageateamof4marketingspeciali @@ -1023,7 +1038,9 @@ cv-professional_sidebar 0:7e7f74200f0e 2.65 problemsolving cv-professional_sidebar 0:d4e16994df90 2.65 communication cv-professional_sidebar 0:68bf0109c6f8 2.62 education cv-professional_sidebar 0:9928b2859b5c 2.58 degreename +cv-professional_sidebar 0:9928b2859b5c#1 2.49 degreename cv-professional_sidebar 0:4dca5f288079 2.55 universityname +cv-professional_sidebar 0:4dca5f288079#1 2.46 universityname cv-professional_sidebar 0:dbbecd8a99c4 2.53 2016–2020 cv-professional_sidebar 0:8789bd1a8f91 2.44 2012–2016 cv-professional_sidebar 0:6cb574fa10b6 2.39 languages @@ -1066,6 +1083,7 @@ cv-professional_sidebar 0:07a0b0962107 2.93 references cv-professional_sidebar 0:5bf64f34444e 2.93 availableuponrequest. cv-serif_headline 0:5f6ca99b67a6 -0.51 alexandermorgan cv-serif_headline 0:daf65306b3b6 -0.32 softwareengineer +cv-serif_headline 0:daf65306b3b6#1 0.21 softwareengineer cv-serif_headline 0:01dcad830244 -0.22 +1(555)123-4567 cv-serif_headline 0:3eef38c97138 -0.18 alex.morgan@email.com cv-serif_headline 0:d5a0d0abdc64 -0.15 newyork,ny,usa @@ -1130,6 +1148,7 @@ cv-serif_headline 0:1cc9a79bdaf0 0.59 mongodb cv-serif_headline 0:7dc785098784 0.61 tools&technologies cv-serif_headline 0:d548c5b83fa6 0.63 docker cv-serif_headline 0:94abcb2d2773 0.67 kubernetes +cv-serif_headline 0:94abcb2d2773#1 1.47 kubernetes cv-serif_headline 0:424e9661130e 0.71 jenkins cv-serif_headline 0:9a881b9b9f23 0.75 git cv-serif_headline 0:7d1507284a57 0.78 aws @@ -1144,7 +1163,7 @@ cv-serif_headline 0:39f98aca30e7 1.47 oraclecertified cv-serif_headline 0:6b5ac810679c 0.83 professional, cv-serif_headline 0:d52585984184 0.95 javase17(oracle) cv-serif_headline 0:72be4e94032e 1.47 dockercertified -cv-serif_headline 0:178b6e061a04 9.83 associate +cv-serif_headline 0:178b6e061a04 0.83 associate cv-serif_headline 0:418860eec88d 0.95 (dca) cv-serif_headline 0:958c81247482 1.47 springprofessional cv-serif_headline 0:b00a6c108553 0.83 certification @@ -1353,7 +1372,9 @@ cv-terracotta_rail 0:4b1ce58ed984 0.37 conceptdevelopment cv-terracotta_rail 0:e8386273ac51 0.37 planningapplications cv-terracotta_rail 0:09033be5db1b 0.37 technicaldrawings cv-terracotta_rail 0:de4e9e607840 0.37 revit +cv-terracotta_rail 0:de4e9e607840#1 0.35 revit cv-terracotta_rail 0:50f08e64c5a6 0.37 autocad +cv-terracotta_rail 0:50f08e64c5a6#1 0.35 autocad cv-terracotta_rail 0:af7c811cbfce 0.37 bimcoordination cv-terracotta_rail 0:531b7caeda92 0.37 designpresentations cv-terracotta_rail 0:bfcd894f9698 0.37 projectdelivery @@ -1379,6 +1400,7 @@ cv-terracotta_rail 0:76a9cead2e9f -0.29 availability: cv-terracotta_rail 0:d14126d0f8f4 -0.30 1monthnotice cv-terracotta_rail 0:0f08c27aab24 0.61 oliverbennett cv-terracotta_rail 0:334d566a27b2 -0.28 seniorarchitect +cv-terracotta_rail 0:334d566a27b2#1 -0.30 seniorarchitect cv-terracotta_rail 0:b944906ed84c -0.16 professionalsummary cv-terracotta_rail 0:bbb25a1ee248 0.10 provenexpertiseindesigndevelopme cv-terracotta_rail 0:bf4ab196cbb6 0.08 strongfocusonsustainability,qual @@ -1393,6 +1415,7 @@ cv-terracotta_rail 0:1d6340aa301d -0.59 •coordinatestructural,m&e,landsc cv-terracotta_rail 0:7062411e212a -0.61 buildablesolutions. cv-terracotta_rail 0:bf75379f5486 -0.63 •prepareandmanageplanningapplica cv-terracotta_rail 0:894e988cdf94 -0.65 documentation. +cv-terracotta_rail 0:894e988cdf94#1 -0.99 documentation. cv-terracotta_rail 0:40c00971356d -0.67 •presentandcommunicatedesignprop cv-terracotta_rail 0:a218287e182e -0.69 anddrivingprojectsforward. cv-terracotta_rail 0:f2e40fc1edb7 -0.49 architect @@ -1405,6 +1428,7 @@ cv-terracotta_rail 0:abba33f53e5a -0.80 construction. cv-terracotta_rail 0:91a14d5e3005 -0.62 •supportedprojectdeliveryonsite, cv-terracotta_rail 0:6b3142466e26 -0.84 •coordinatedwithcontractorsandco cv-terracotta_rail 0:1150d4ba642c -0.86 intent. +cv-terracotta_rail 0:1150d4ba642c#1 -0.95 intent. cv-terracotta_rail 0:2d2cd24f87d7 -0.67 partiiarchitecturalassistant cv-terracotta_rail 0:3b8048983ecc -0.67 2016–2018 cv-terracotta_rail 0:ebd31e5e7505 -0.69 axisdesignworkshop,cardiff,uk @@ -1559,6 +1583,7 @@ cv-violet_grid 0:53e5e7c5a884 0.30 experience cv-violet_grid 0:5a0774260e0c 0.42 2022-present cv-violet_grid 0:204f460767ff 0.38 seniorux/uidesigner|novafin(fint cv-violet_grid 0:318bba211bdc 0.43 sanfrancisco,ca +cv-violet_grid 0:318bba211bdc#1 9.35 sanfrancisco,ca cv-violet_grid 0:3883e88c63c3 0.42 ledend-to-enddesignforapersonalf cv-violet_grid 0:ccc00663f089 2.20 conducteduserresearch,builtperso cv-violet_grid 0:7d0f908c7e5f 3.98 designedwireframes,prototypes,an @@ -1592,12 +1617,15 @@ cv-violet_grid 0:0cf7506cf94a 19.58 bacheloroffineartsingraphicdesig cv-violet_grid 0:00ab7a6aa5f1 19.59 californiacollegeofthearts cv-violet_grid 0:7e2c21bb41db 19.58 sanfrancisco,ca|2014-2018 cv-violet_grid 0:b6234d2ea0d6 21.23 english -cv-violet_grid 0:bef32d2c315a 21.22 native +cv-violet_grid 0:bef32d2c315a 37.97 native +cv-violet_grid 0:bef32d2c315a#1 5.71 native cv-violet_grid 0:9c9b13446cd9 22.46 spanish cv-violet_grid 0:e35242c809c8 23.69 portuguese cv-violet_grid 0:c5d1de4964d6 23.69 conversational invoice-classic 0:c26c22b94338 0.49 graphcomposestudio +invoice-classic 0:c26c22b94338#1 0.30 graphcomposestudio invoice-classic 0:2a08ce5567fb 0.35 18layoutstreet +invoice-classic 0:2a08ce5567fb#1 0.03 18layoutstreet invoice-classic 0:52d6e3de4fa0 0.10 invoice invoice-classic 0:38e9951985e4 0.32 gc-2026-041 invoice-classic 0:20fe884effee 0.32 issued02apr2026 @@ -1621,6 +1649,7 @@ invoice-classic 0:385cfdbc00ec 0.25 unit invoice-classic 0:cf38d95c9c6b 0.25 amount invoice-classic 0:987c6297d0a9 0.47 discoveryworkshop invoice-classic 0:532674c6eb89 0.47 gbp1,450 +invoice-classic 0:532674c6eb89#1 0.47 gbp1,450 invoice-classic 0:08ec6deb1c40 0.47 templatearchitecture2 invoice-classic 0:d2e67c4b1cca 0.47 gbp980 invoice-classic 0:d6cdf6a05754 0.47 gbp1,960 @@ -1629,6 +1658,7 @@ invoice-classic 0:7e7398cbff7c 0.47 gbp320 invoice-classic 0:e23164e940c7 0.47 gbp960 invoice-classic 0:6047df51175c 0.57 developerenablement1 invoice-classic 0:c2ad01ea64ae 0.57 gbp780 +invoice-classic 0:c2ad01ea64ae#1 0.57 gbp780 invoice-classic 0:d6577e95efba 0.82 subtotal invoice-classic 0:50cae0510231 0.82 gbp5,150 invoice-classic 0:a52611c9261b 0.97 vat(20%) @@ -1649,7 +1679,9 @@ invoice-classic 0:1a7b5c840e25 1.17 •latepaymentsmaydelayadditional invoice-classic 0:1631a06d245f 1.17 templatecustomizationwork. invoice-classic 0:e3337beaa171 1.15 thankyouforchoosinggraphcomposef invoice-classic_long 0:c26c22b94338 0.49 graphcomposestudio +invoice-classic_long 0:c26c22b94338#1 0.30 graphcomposestudio invoice-classic_long 0:2a08ce5567fb 0.35 18layoutstreet +invoice-classic_long 0:2a08ce5567fb#1 0.03 18layoutstreet invoice-classic_long 0:52d6e3de4fa0 0.10 invoice invoice-classic_long 0:3594d2085950 0.32 gc-2026-042 invoice-classic_long 0:25851a973edd 0.32 issued04may2026 @@ -1673,6 +1705,7 @@ invoice-classic_long 0:385cfdbc00ec 0.25 unit invoice-classic_long 0:cf38d95c9c6b 0.25 amount invoice-classic_long 0:aa29f2f4fcb4 0.47 discoveryworkshop—sprint1 invoice-classic_long 0:ce4081aef7a1 0.47 gbp180 +invoice-classic_long 0:ce4081aef7a1#1 0.47 gbp180 invoice-classic_long 0:9c9a412f0a45 0.47 designsystemaudit—sprint1 invoice-classic_long 0:7be809cb1590 0.47 gbp217 invoice-classic_long 0:378b363c8601 0.47 gbp434 @@ -1684,6 +1717,7 @@ invoice-classic_long 0:dde0144b97b7 0.47 gbp291 invoice-classic_long 0:457a71636ad9 0.47 gbp1164 invoice-classic_long 0:6fcf7d6dd606 0.47 renderqapass—sprint1 invoice-classic_long 0:dda88f5786f5 0.47 gbp328 +invoice-classic_long 0:dda88f5786f5#1 0.47 gbp328 invoice-classic_long 0:ee18ad3bbb42 0.47 accessibilityreview—sprint1 invoice-classic_long 0:e681b4843ffb 0.47 gbp365 invoice-classic_long 0:1859c20b35dd 0.47 gbp730 @@ -1695,6 +1729,7 @@ invoice-classic_long 0:6109a2c30104 0.47 gbp439 invoice-classic_long 0:87e9fcb6151d 0.47 gbp1756 invoice-classic_long 0:a6bee1ec5e35 0.47 datamapping—sprint1 invoice-classic_long 0:df1f9d4443d8 0.47 gbp476 +invoice-classic_long 0:df1f9d4443d8#1 0.47 gbp476 invoice-classic_long 0:052c9f49a4b8 0.47 paginationhardening—sprint1 invoice-classic_long 0:9fba6332e489 0.47 gbp513 invoice-classic_long 0:6f805c9f78c3 0.47 gbp1026 @@ -1706,6 +1741,7 @@ invoice-classic_long 0:e7b406f24f04 0.47 gbp587 invoice-classic_long 0:74357ca6b30e 0.47 gbp2348 invoice-classic_long 0:9c6cf539f5bc 0.47 stakeholderdemo—sprint1 invoice-classic_long 0:cf79b5cdb735 0.47 gbp624 +invoice-classic_long 0:cf79b5cdb735#1 0.47 gbp624 invoice-classic_long 0:d2bde6642670 0.47 performanceprofiling—sprint1 invoice-classic_long 0:679f017f73c1 0.47 gbp661 invoice-classic_long 0:63985b524723 0.47 gbp1322 @@ -1717,6 +1753,7 @@ invoice-classic_long 0:70b393b5fb10 0.47 gbp735 invoice-classic_long 0:29edf7588a57 0.47 gbp2940 invoice-classic_long 0:82a9218b91ae 0.47 discoveryworkshop—sprint2 invoice-classic_long 0:c313f34b71b9 0.47 gbp772 +invoice-classic_long 0:c313f34b71b9#1 0.47 gbp772 invoice-classic_long 0:7e69fbffe3e2 0.47 designsystemaudit—sprint2 invoice-classic_long 0:e096e4fddf9a 0.47 gbp809 invoice-classic_long 0:c985a0123929 0.47 gbp1618 @@ -1732,6 +1769,7 @@ invoice-classic_long 1:385cfdbc00ec 0.30 unit invoice-classic_long 1:cf38d95c9c6b 0.30 amount invoice-classic_long 1:f12cbb7c274d 0.52 renderqapass—sprint2 invoice-classic_long 1:b813c73bc488 0.52 gbp920 +invoice-classic_long 1:b813c73bc488#1 0.52 gbp920 invoice-classic_long 1:12cd54b50187 0.52 accessibilityreview—sprint2 invoice-classic_long 1:377d92702316 0.52 gbp957 invoice-classic_long 1:e7c66f6cf477 0.52 gbp1914 @@ -1743,6 +1781,7 @@ invoice-classic_long 1:a4c7a6612c99 0.52 gbp1031 invoice-classic_long 1:1c83f0b47e27 0.52 gbp4124 invoice-classic_long 1:00de69c6e70f 0.52 datamapping—sprint2 invoice-classic_long 1:b9d5c56a2cfd 0.52 gbp1068 +invoice-classic_long 1:b9d5c56a2cfd#1 0.52 gbp1068 invoice-classic_long 1:eb628b5ea8ab 0.52 paginationhardening—sprint2 invoice-classic_long 1:db5327b47d0e 0.52 gbp205 invoice-classic_long 1:99d9b3b49da2 0.52 gbp410 @@ -1754,6 +1793,7 @@ invoice-classic_long 1:28ad00e76aef 0.52 gbp279 invoice-classic_long 1:fbb12fed0bbc 0.52 gbp1116 invoice-classic_long 1:5369a2c40ff8 0.52 stakeholderdemo—sprint2 invoice-classic_long 1:16562cbcd318 0.52 gbp316 +invoice-classic_long 1:16562cbcd318#1 0.52 gbp316 invoice-classic_long 1:611b258cb41e 0.52 performanceprofiling—sprint2 invoice-classic_long 1:e391d4e46366 0.52 gbp353 invoice-classic_long 1:7106c00cb009 0.52 gbp706 @@ -1765,6 +1805,7 @@ invoice-classic_long 1:909481a45a34 0.52 gbp427 invoice-classic_long 1:4e58d78d0958 0.52 gbp1708 invoice-classic_long 1:ddce236bccd7 0.52 discoveryworkshop—sprint3 invoice-classic_long 1:f8d17c11d834 0.52 gbp464 +invoice-classic_long 1:f8d17c11d834#1 0.52 gbp464 invoice-classic_long 1:c0986cd7b1d4 0.52 designsystemaudit—sprint3 invoice-classic_long 1:09c7aebd89f6 0.52 gbp501 invoice-classic_long 1:a61c7b6bdd20 0.52 gbp1002 @@ -1776,6 +1817,7 @@ invoice-classic_long 1:f6df6e8e8f30 0.52 gbp575 invoice-classic_long 1:7f7db0f4c1cf 0.52 gbp2300 invoice-classic_long 1:608e31719f07 0.52 renderqapass—sprint3 invoice-classic_long 1:e4fbc626999e 0.52 gbp612 +invoice-classic_long 1:e4fbc626999e#1 0.52 gbp612 invoice-classic_long 1:98bfb4deb0b7 0.52 accessibilityreview—sprint3 invoice-classic_long 1:7915a839b285 0.52 gbp649 invoice-classic_long 1:ca74221d78ad 0.52 gbp1298 @@ -1810,6 +1852,7 @@ invoice-consulting 0:ef0664c1d352 2.81 northpoint.com.au invoice-consulting 0:52d6e3de4fa0 -0.44 invoice invoice-consulting 0:6282391a4cc1 -0.63 invoicenumber: invoice-consulting 0:7d66eb3c1070 -0.19 inv-2025-0478 +invoice-consulting 0:7d66eb3c1070#1 1.61 inv-2025-0478 invoice-consulting 0:89973ab74e1c -0.63 issuedate: invoice-consulting 0:0dee636efa5b -0.19 26may2025 invoice-consulting 0:0e0fb0fc0939 -0.63 duedate: @@ -1834,21 +1877,27 @@ invoice-consulting 0:b28225a1247c 0.92 serviceperiod invoice-consulting 0:32e8369a9c4f 0.92 qty invoice-consulting 0:d1062d072acd 0.91 unitprice invoice-consulting 0:3ff0b4a2706b 0.93 (aud) +invoice-consulting 0:3ff0b4a2706b#1 0.93 (aud) invoice-consulting 0:cf38d95c9c6b 0.91 amount invoice-consulting 0:b344321f5471 1.21 1–10may2025 invoice-consulting 0:a8994a9020c4 1.21 10.00 invoice-consulting 0:4e9682fa850e 1.22 hrs +invoice-consulting 0:4e9682fa850e#1 1.28 hrs invoice-consulting 0:aa92f0e23a97 1.21 250.00 invoice-consulting 0:e48d9b7a2993 1.21 2,500.00 invoice-consulting 0:1bcfde966d94 0.89 strategicconsultation invoice-consulting 0:fd3ca268f319 0.37 leadershipalignmentworkshops invoice-consulting 0:8d93e0c47a8c 1.23 1–15may2025 invoice-consulting 0:cf9dcf6da8a8 1.23 1.00 +invoice-consulting 0:cf9dcf6da8a8#1 1.25 1.00 +invoice-consulting 0:cf9dcf6da8a8#2 1.44 1.00 invoice-consulting 0:97e47b250054 1.23 3,500.00 +invoice-consulting 0:97e47b250054#1 1.23 3,500.00 invoice-consulting 0:5581aef375ff 0.91 market&competitiveanalysis invoice-consulting 0:957080ea09d9 0.39 researchandanalysisreport invoice-consulting 0:47102c31f226 1.25 5–20may2025 invoice-consulting 0:ec6305055be9 1.25 4,800.00 +invoice-consulting 0:ec6305055be9#1 1.25 4,800.00 invoice-consulting 0:53dea97cf116 0.93 digitalroadmapdevelopment invoice-consulting 0:acf357e68297 0.41 strategyandroadmapcreation invoice-consulting 0:c947fb16eab2 1.27 15–22may2025 @@ -1859,6 +1908,7 @@ invoice-consulting 0:fe04037aa850 0.95 stakeholderreviewsessions invoice-consulting 0:4658a1bff292 0.43 facilitationanddocumentation invoice-consulting 0:86f73207c794 1.44 20–25may2025 invoice-consulting 0:55907ef405f6 1.44 1,880.00 +invoice-consulting 0:55907ef405f6#1 1.44 1,880.00 invoice-consulting 0:f2e12ad6cc9f 1.12 presentation&finalreport invoice-consulting 0:50de6dc61b80 0.60 executivepresentationanddelivery invoice-consulting 0:d6577e95efba 0.39 subtotal @@ -1918,33 +1968,104 @@ invoice-consulting_long 0:b28225a1247c 0.92 serviceperiod invoice-consulting_long 0:32e8369a9c4f 0.92 qty invoice-consulting_long 0:d1062d072acd 0.91 unitprice invoice-consulting_long 0:3ff0b4a2706b 0.93 (aud) +invoice-consulting_long 0:3ff0b4a2706b#1 0.93 (aud) invoice-consulting_long 0:cf38d95c9c6b 0.91 amount invoice-consulting_long 0:b344321f5471 1.21 1–10may2025 +invoice-consulting_long 0:b344321f5471#1 1.31 1–10may2025 +invoice-consulting_long 0:b344321f5471#2 1.41 1–10may2025 invoice-consulting_long 0:a8994a9020c4 1.21 10.00 +invoice-consulting_long 0:a8994a9020c4#1 1.31 10.00 +invoice-consulting_long 0:a8994a9020c4#2 1.41 10.00 invoice-consulting_long 0:4e9682fa850e 1.22 hrs +invoice-consulting_long 0:4e9682fa850e#1 1.28 hrs +invoice-consulting_long 0:4e9682fa850e#2 1.32 hrs +invoice-consulting_long 0:4e9682fa850e#3 1.38 hrs +invoice-consulting_long 0:4e9682fa850e#4 1.42 hrs +invoice-consulting_long 0:4e9682fa850e#5 1.48 hrs invoice-consulting_long 0:aa92f0e23a97 1.21 250.00 +invoice-consulting_long 0:aa92f0e23a97#1 1.31 250.00 +invoice-consulting_long 0:aa92f0e23a97#2 1.41 250.00 invoice-consulting_long 0:e48d9b7a2993 1.21 2,500.00 +invoice-consulting_long 0:e48d9b7a2993#1 1.31 2,500.00 +invoice-consulting_long 0:e48d9b7a2993#2 1.41 2,500.00 invoice-consulting_long 0:1bcfde966d94 0.89 strategicconsultation +invoice-consulting_long 0:1bcfde966d94#1 0.99 strategicconsultation +invoice-consulting_long 0:1bcfde966d94#2 1.09 strategicconsultation invoice-consulting_long 0:fd3ca268f319 0.37 leadershipalignmentworkshops +invoice-consulting_long 0:fd3ca268f319#1 0.47 leadershipalignmentworkshops +invoice-consulting_long 0:fd3ca268f319#2 0.57 leadershipalignmentworkshops invoice-consulting_long 0:8d93e0c47a8c 1.23 1–15may2025 +invoice-consulting_long 0:8d93e0c47a8c#1 1.33 1–15may2025 +invoice-consulting_long 0:8d93e0c47a8c#2 1.43 1–15may2025 invoice-consulting_long 0:cf9dcf6da8a8 1.23 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#1 1.25 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#2 1.29 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#3 1.33 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#4 1.35 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#5 1.39 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#6 1.43 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#7 1.45 1.00 +invoice-consulting_long 0:cf9dcf6da8a8#8 1.49 1.00 invoice-consulting_long 0:97e47b250054 1.23 3,500.00 +invoice-consulting_long 0:97e47b250054#1 1.23 3,500.00 +invoice-consulting_long 0:97e47b250054#2 1.33 3,500.00 +invoice-consulting_long 0:97e47b250054#3 1.33 3,500.00 +invoice-consulting_long 0:97e47b250054#4 1.43 3,500.00 +invoice-consulting_long 0:97e47b250054#5 1.43 3,500.00 invoice-consulting_long 0:5581aef375ff 0.91 market&competitiveanalysis +invoice-consulting_long 0:5581aef375ff#1 1.01 market&competitiveanalysis +invoice-consulting_long 0:5581aef375ff#2 1.11 market&competitiveanalysis invoice-consulting_long 0:957080ea09d9 0.39 researchandanalysisreport +invoice-consulting_long 0:957080ea09d9#1 0.49 researchandanalysisreport +invoice-consulting_long 0:957080ea09d9#2 0.59 researchandanalysisreport invoice-consulting_long 0:47102c31f226 1.25 5–20may2025 +invoice-consulting_long 0:47102c31f226#1 1.35 5–20may2025 +invoice-consulting_long 0:47102c31f226#2 1.45 5–20may2025 invoice-consulting_long 0:ec6305055be9 1.25 4,800.00 +invoice-consulting_long 0:ec6305055be9#1 1.25 4,800.00 +invoice-consulting_long 0:ec6305055be9#2 1.35 4,800.00 +invoice-consulting_long 0:ec6305055be9#3 1.35 4,800.00 +invoice-consulting_long 0:ec6305055be9#4 1.45 4,800.00 +invoice-consulting_long 0:ec6305055be9#5 1.45 4,800.00 invoice-consulting_long 0:53dea97cf116 0.93 digitalroadmapdevelopment +invoice-consulting_long 0:53dea97cf116#1 1.03 digitalroadmapdevelopment +invoice-consulting_long 0:53dea97cf116#2 1.13 digitalroadmapdevelopment invoice-consulting_long 0:acf357e68297 0.41 strategyandroadmapcreation +invoice-consulting_long 0:acf357e68297#1 0.51 strategyandroadmapcreation +invoice-consulting_long 0:acf357e68297#2 0.61 strategyandroadmapcreation invoice-consulting_long 0:c947fb16eab2 1.27 15–22may2025 +invoice-consulting_long 0:c947fb16eab2#1 1.37 15–22may2025 +invoice-consulting_long 0:c947fb16eab2#2 1.47 15–22may2025 invoice-consulting_long 0:017144e2271f 1.27 6.00 +invoice-consulting_long 0:017144e2271f#1 1.37 6.00 +invoice-consulting_long 0:017144e2271f#2 1.47 6.00 invoice-consulting_long 0:be6012a47af0 1.27 220.00 +invoice-consulting_long 0:be6012a47af0#1 1.37 220.00 +invoice-consulting_long 0:be6012a47af0#2 1.47 220.00 invoice-consulting_long 0:172c0a785bc7 1.27 1,320.00 +invoice-consulting_long 0:172c0a785bc7#1 1.37 1,320.00 +invoice-consulting_long 0:172c0a785bc7#2 1.47 1,320.00 invoice-consulting_long 0:fe04037aa850 0.95 stakeholderreviewsessions +invoice-consulting_long 0:fe04037aa850#1 1.05 stakeholderreviewsessions +invoice-consulting_long 0:fe04037aa850#2 1.15 stakeholderreviewsessions invoice-consulting_long 0:4658a1bff292 0.43 facilitationanddocumentation +invoice-consulting_long 0:4658a1bff292#1 0.53 facilitationanddocumentation +invoice-consulting_long 0:4658a1bff292#2 0.63 facilitationanddocumentation invoice-consulting_long 0:86f73207c794 1.29 20–25may2025 +invoice-consulting_long 0:86f73207c794#1 1.39 20–25may2025 +invoice-consulting_long 0:86f73207c794#2 1.49 20–25may2025 invoice-consulting_long 0:55907ef405f6 1.29 1,880.00 +invoice-consulting_long 0:55907ef405f6#1 1.29 1,880.00 +invoice-consulting_long 0:55907ef405f6#2 1.39 1,880.00 +invoice-consulting_long 0:55907ef405f6#3 1.39 1,880.00 +invoice-consulting_long 0:55907ef405f6#4 1.49 1,880.00 +invoice-consulting_long 0:55907ef405f6#5 1.49 1,880.00 invoice-consulting_long 0:f2e12ad6cc9f 0.97 presentation&finalreport +invoice-consulting_long 0:f2e12ad6cc9f#1 1.07 presentation&finalreport +invoice-consulting_long 0:f2e12ad6cc9f#2 1.17 presentation&finalreport invoice-consulting_long 0:50de6dc61b80 0.45 executivepresentationanddelivery +invoice-consulting_long 0:50de6dc61b80#1 0.55 executivepresentationanddelivery +invoice-consulting_long 0:50de6dc61b80#2 0.65 executivepresentationanddelivery invoice-consulting_long 0:55ee5fe62c33 0.01 northpointconsultingptyltd|abn12 invoice-consulting_long 0:c843aa25b80f 0.01 page1/2 invoice-consulting_long 1:c9046f7a37ad 0.53 description @@ -1952,33 +2073,79 @@ invoice-consulting_long 1:b28225a1247c 0.53 serviceperiod invoice-consulting_long 1:32e8369a9c4f 0.53 qty invoice-consulting_long 1:d1062d072acd 0.52 unitprice invoice-consulting_long 1:3ff0b4a2706b 0.54 (aud) +invoice-consulting_long 1:3ff0b4a2706b#1 0.54 (aud) invoice-consulting_long 1:cf38d95c9c6b 0.52 amount invoice-consulting_long 1:b344321f5471 0.72 1–10may2025 +invoice-consulting_long 1:b344321f5471#1 0.82 1–10may2025 +invoice-consulting_long 1:b344321f5471#2 1.07 1–10may2025 invoice-consulting_long 1:a8994a9020c4 0.72 10.00 +invoice-consulting_long 1:a8994a9020c4#1 0.82 10.00 +invoice-consulting_long 1:a8994a9020c4#2 1.07 10.00 invoice-consulting_long 1:4e9682fa850e 0.73 hrs +invoice-consulting_long 1:4e9682fa850e#1 0.79 hrs +invoice-consulting_long 1:4e9682fa850e#2 0.83 hrs +invoice-consulting_long 1:4e9682fa850e#3 0.89 hrs +invoice-consulting_long 1:4e9682fa850e#4 1.08 hrs invoice-consulting_long 1:aa92f0e23a97 0.72 250.00 +invoice-consulting_long 1:aa92f0e23a97#1 0.82 250.00 +invoice-consulting_long 1:aa92f0e23a97#2 1.07 250.00 invoice-consulting_long 1:e48d9b7a2993 0.72 2,500.00 +invoice-consulting_long 1:e48d9b7a2993#1 0.82 2,500.00 +invoice-consulting_long 1:e48d9b7a2993#2 1.07 2,500.00 invoice-consulting_long 1:1bcfde966d94 0.40 strategicconsultation +invoice-consulting_long 1:1bcfde966d94#1 0.50 strategicconsultation +invoice-consulting_long 1:1bcfde966d94#2 0.75 strategicconsultation invoice-consulting_long 1:fd3ca268f319 -0.12 leadershipalignmentworkshops +invoice-consulting_long 1:fd3ca268f319#1 -0.02 leadershipalignmentworkshops +invoice-consulting_long 1:fd3ca268f319#2 0.23 leadershipalignmentworkshops invoice-consulting_long 1:8d93e0c47a8c 0.74 1–15may2025 +invoice-consulting_long 1:8d93e0c47a8c#1 0.84 1–15may2025 invoice-consulting_long 1:cf9dcf6da8a8 0.74 1.00 +invoice-consulting_long 1:cf9dcf6da8a8#1 0.76 1.00 +invoice-consulting_long 1:cf9dcf6da8a8#2 0.80 1.00 +invoice-consulting_long 1:cf9dcf6da8a8#3 0.84 1.00 +invoice-consulting_long 1:cf9dcf6da8a8#4 0.86 1.00 +invoice-consulting_long 1:cf9dcf6da8a8#5 0.90 1.00 invoice-consulting_long 1:97e47b250054 0.74 3,500.00 +invoice-consulting_long 1:97e47b250054#1 0.74 3,500.00 +invoice-consulting_long 1:97e47b250054#2 0.84 3,500.00 +invoice-consulting_long 1:97e47b250054#3 0.84 3,500.00 invoice-consulting_long 1:5581aef375ff 0.42 market&competitiveanalysis +invoice-consulting_long 1:5581aef375ff#1 0.52 market&competitiveanalysis invoice-consulting_long 1:957080ea09d9 -0.10 researchandanalysisreport +invoice-consulting_long 1:957080ea09d9#1 0.00 researchandanalysisreport invoice-consulting_long 1:47102c31f226 0.76 5–20may2025 +invoice-consulting_long 1:47102c31f226#1 0.86 5–20may2025 invoice-consulting_long 1:ec6305055be9 0.76 4,800.00 +invoice-consulting_long 1:ec6305055be9#1 0.76 4,800.00 +invoice-consulting_long 1:ec6305055be9#2 0.86 4,800.00 +invoice-consulting_long 1:ec6305055be9#3 0.86 4,800.00 invoice-consulting_long 1:53dea97cf116 0.44 digitalroadmapdevelopment +invoice-consulting_long 1:53dea97cf116#1 0.54 digitalroadmapdevelopment invoice-consulting_long 1:acf357e68297 -0.08 strategyandroadmapcreation +invoice-consulting_long 1:acf357e68297#1 0.02 strategyandroadmapcreation invoice-consulting_long 1:c947fb16eab2 0.78 15–22may2025 +invoice-consulting_long 1:c947fb16eab2#1 0.88 15–22may2025 invoice-consulting_long 1:017144e2271f 0.78 6.00 +invoice-consulting_long 1:017144e2271f#1 0.88 6.00 invoice-consulting_long 1:be6012a47af0 0.78 220.00 +invoice-consulting_long 1:be6012a47af0#1 0.88 220.00 invoice-consulting_long 1:172c0a785bc7 0.78 1,320.00 +invoice-consulting_long 1:172c0a785bc7#1 0.88 1,320.00 invoice-consulting_long 1:fe04037aa850 0.46 stakeholderreviewsessions +invoice-consulting_long 1:fe04037aa850#1 0.56 stakeholderreviewsessions invoice-consulting_long 1:4658a1bff292 -0.06 facilitationanddocumentation +invoice-consulting_long 1:4658a1bff292#1 0.04 facilitationanddocumentation invoice-consulting_long 1:86f73207c794 0.80 20–25may2025 +invoice-consulting_long 1:86f73207c794#1 0.90 20–25may2025 invoice-consulting_long 1:55907ef405f6 0.80 1,880.00 +invoice-consulting_long 1:55907ef405f6#1 0.80 1,880.00 +invoice-consulting_long 1:55907ef405f6#2 0.90 1,880.00 +invoice-consulting_long 1:55907ef405f6#3 0.90 1,880.00 invoice-consulting_long 1:f2e12ad6cc9f 0.48 presentation&finalreport +invoice-consulting_long 1:f2e12ad6cc9f#1 0.58 presentation&finalreport invoice-consulting_long 1:50de6dc61b80 -0.04 executivepresentationanddelivery +invoice-consulting_long 1:50de6dc61b80#1 0.06 executivepresentationanddelivery invoice-consulting_long 1:d6577e95efba 0.02 subtotal invoice-consulting_long 1:6311b1798398 0.46 14,000.00 invoice-consulting_long 1:e370855bde0c 0.02 gst(10%) @@ -2006,12 +2173,15 @@ invoice-consulting_long 1:a6f6e2ddab6d 1.20 paymentisduewithin30daysfromthei invoice-consulting_long 1:55ee5fe62c33 0.01 northpointconsultingptyltd|abn12 invoice-consulting_long 1:1bed6052d9b3 0.01 page2/2 invoice-luma_studio 0:ac5742bfd7c4 -9.14 &co. -invoice-luma_studio 0:1583c0f92f86 -104.93 luma&co.studio +invoice-luma_studio 0:1583c0f92f86 -0.38 luma&co.studio +invoice-luma_studio 0:1583c0f92f86#1 0.28 luma&co.studio invoice-luma_studio 0:b2b5b83cc26d -0.07 branding.design.digital. invoice-luma_studio 0:c9ed0a9b9c8d 0.02 studio3.02,theloom invoice-luma_studio 0:0a7d7e43c5de 0.00 14gowerstreet invoice-luma_studio 0:b87f5fb5bcfa -0.02 londonwc1e6bt invoice-luma_studio 0:2474519f77a9 -0.04 unitedkingdom +invoice-luma_studio 0:2474519f77a9#1 -0.22 unitedkingdom +invoice-luma_studio 0:2474519f77a9#2 -0.22 unitedkingdom invoice-luma_studio 0:89b5eccb38ff 0.12 +44(0)2079460832 invoice-luma_studio 0:ea8232890494 0.07 hello@lumaandco.studio invoice-luma_studio 0:374d89493adc 0.03 www.lumaandco.studio @@ -2029,6 +2199,7 @@ invoice-luma_studio 0:466e5b9cd57f 0.12 currency invoice-luma_studio 0:54f8e1b3fe44 0.19 gbp invoice-luma_studio 0:aeba3a7b3598 0.04 billto invoice-luma_studio 0:212254716728 -0.06 northfieldconsultingltd +invoice-luma_studio 0:212254716728#1 -0.06 northfieldconsultingltd invoice-luma_studio 0:bcb7024f74fe -0.10 attn:sarahmitchell invoice-luma_studio 0:13dd937d2fe6 -0.14 21jubileeway invoice-luma_studio 0:f9bab6a0b45b -0.18 londonse13ss @@ -2042,21 +2213,30 @@ invoice-luma_studio 0:d1062d072acd 0.04 unitprice invoice-luma_studio 0:7c512b48ba8a 0.04 vat invoice-luma_studio 0:cf38d95c9c6b 0.04 amount invoice-luma_studio 0:7b420577e50f 0.07 £1,200.00 +invoice-luma_studio 0:7b420577e50f#1 0.07 £1,200.00 invoice-luma_studio 0:dc934fe30a94 0.07 20% +invoice-luma_studio 0:dc934fe30a94#1 0.08 20% +invoice-luma_studio 0:dc934fe30a94#2 0.08 20% +invoice-luma_studio 0:dc934fe30a94#3 0.09 20% +invoice-luma_studio 0:dc934fe30a94#4 0.10 20% invoice-luma_studio 0:d8f4e3a46d2d 0.01 brandstrategyworkshop invoice-luma_studio 0:be624d692600 -0.56 discoverysession,research&brand invoice-luma_studio 0:40ca2aad940f -0.55 positioning. invoice-luma_studio 0:07bcffc86e95 0.08 £2,650.00 +invoice-luma_studio 0:07bcffc86e95#1 0.08 £2,650.00 invoice-luma_studio 0:e302dd04d528 0.02 visualidentitydesign invoice-luma_studio 0:40e412f627fb -0.55 logosuite,colourpalette,typograp invoice-luma_studio 0:9c17d116fe08 -0.54 &guidelines. invoice-luma_studio 0:a20d66947acc 0.08 £3,200.00 +invoice-luma_studio 0:a20d66947acc#1 0.08 £3,200.00 invoice-luma_studio 0:b25ac9cd66bd 0.03 websitedesign(upto8pages) invoice-luma_studio 0:dab758788e6f -0.19 ux/uidesignfordesktopandmobile. invoice-luma_studio 0:f916278cb74c 0.09 £850.00 +invoice-luma_studio 0:f916278cb74c#1 0.09 £850.00 invoice-luma_studio 0:4a1359f78476 0.04 copywriting invoice-luma_studio 0:69afea703455 -0.18 websitecopy&keymessaging. invoice-luma_studio 0:07b417914317 0.10 £600.00 +invoice-luma_studio 0:07b417914317#1 0.10 £600.00 invoice-luma_studio 0:340455fbac25 0.05 projectmanagement invoice-luma_studio 0:72534f9863ad -0.52 planning,coordination&client invoice-luma_studio 0:4df00f9a2b20 -0.52 liaison. @@ -2090,12 +2270,15 @@ invoice-luma_studio 0:543a2e86433f 0.24 thankyouforchoosingluma&co.studi invoice-luma_studio 0:7111b3fcbf69 -0.07 paymentisdueby19june2024. invoice-luma_studio 0:7b14b8d2c5c4 0.01 page1of1 invoice-luma_studio_long 0:ac5742bfd7c4 -9.14 &co. -invoice-luma_studio_long 0:1583c0f92f86 -104.93 luma&co.studio +invoice-luma_studio_long 0:1583c0f92f86 -0.38 luma&co.studio +invoice-luma_studio_long 0:1583c0f92f86#1 0.28 luma&co.studio invoice-luma_studio_long 0:b2b5b83cc26d -0.07 branding.design.digital. invoice-luma_studio_long 0:c9ed0a9b9c8d 0.02 studio3.02,theloom invoice-luma_studio_long 0:0a7d7e43c5de 0.00 14gowerstreet invoice-luma_studio_long 0:b87f5fb5bcfa -0.02 londonwc1e6bt invoice-luma_studio_long 0:2474519f77a9 -0.04 unitedkingdom +invoice-luma_studio_long 0:2474519f77a9#1 -0.22 unitedkingdom +invoice-luma_studio_long 0:2474519f77a9#2 -0.22 unitedkingdom invoice-luma_studio_long 0:89b5eccb38ff 0.12 +44(0)2079460832 invoice-luma_studio_long 0:ea8232890494 0.07 hello@lumaandco.studio invoice-luma_studio_long 0:374d89493adc 0.03 www.lumaandco.studio @@ -2113,6 +2296,7 @@ invoice-luma_studio_long 0:466e5b9cd57f 0.12 currency invoice-luma_studio_long 0:54f8e1b3fe44 0.19 gbp invoice-luma_studio_long 0:aeba3a7b3598 0.04 billto invoice-luma_studio_long 0:212254716728 -0.06 northfieldconsultingltd +invoice-luma_studio_long 0:212254716728#1 -0.06 northfieldconsultingltd invoice-luma_studio_long 0:bcb7024f74fe -0.10 attn:sarahmitchell invoice-luma_studio_long 0:13dd937d2fe6 -0.14 21jubileeway invoice-luma_studio_long 0:f9bab6a0b45b -0.18 londonse13ss @@ -2126,22 +2310,46 @@ invoice-luma_studio_long 0:d1062d072acd 0.04 unitprice invoice-luma_studio_long 0:7c512b48ba8a 0.04 vat invoice-luma_studio_long 0:cf38d95c9c6b 0.04 amount invoice-luma_studio_long 0:7b420577e50f 0.07 £1,200.00 +invoice-luma_studio_long 0:7b420577e50f#1 0.07 £1,200.00 +invoice-luma_studio_long 0:7b420577e50f#2 0.12 £1,200.00 +invoice-luma_studio_long 0:7b420577e50f#3 0.12 £1,200.00 invoice-luma_studio_long 0:dc934fe30a94 0.07 20% +invoice-luma_studio_long 0:dc934fe30a94#1 0.08 20% +invoice-luma_studio_long 0:dc934fe30a94#2 0.09 20% +invoice-luma_studio_long 0:dc934fe30a94#3 0.10 20% +invoice-luma_studio_long 0:dc934fe30a94#4 0.11 20% +invoice-luma_studio_long 0:dc934fe30a94#5 0.12 20% +invoice-luma_studio_long 0:dc934fe30a94#6 0.13 20% +invoice-luma_studio_long 0:dc934fe30a94#7 0.14 20% invoice-luma_studio_long 0:d8f4e3a46d2d 0.01 brandstrategyworkshop +invoice-luma_studio_long 0:d8f4e3a46d2d#1 0.06 brandstrategyworkshop invoice-luma_studio_long 0:be624d692600 -0.56 discoverysession,research&brand +invoice-luma_studio_long 0:be624d692600#1 -0.51 discoverysession,research&brand invoice-luma_studio_long 0:d6def76ba3d1 -0.55 positioning.phase1. invoice-luma_studio_long 0:07bcffc86e95 0.08 £2,650.00 +invoice-luma_studio_long 0:07bcffc86e95#1 0.08 £2,650.00 +invoice-luma_studio_long 0:07bcffc86e95#2 0.13 £2,650.00 +invoice-luma_studio_long 0:07bcffc86e95#3 0.13 £2,650.00 invoice-luma_studio_long 0:e302dd04d528 0.02 visualidentitydesign +invoice-luma_studio_long 0:e302dd04d528#1 0.07 visualidentitydesign invoice-luma_studio_long 0:40e412f627fb -0.55 logosuite,colourpalette,typograp +invoice-luma_studio_long 0:40e412f627fb#1 -0.50 logosuite,colourpalette,typograp invoice-luma_studio_long 0:270a9e26d2e0 -0.54 &guidelines.phase1. invoice-luma_studio_long 0:a20d66947acc 0.09 £3,200.00 +invoice-luma_studio_long 0:a20d66947acc#1 0.09 £3,200.00 +invoice-luma_studio_long 0:a20d66947acc#2 0.14 £3,200.00 +invoice-luma_studio_long 0:a20d66947acc#3 0.14 £3,200.00 invoice-luma_studio_long 0:b25ac9cd66bd 0.03 websitedesign(upto8pages) +invoice-luma_studio_long 0:b25ac9cd66bd#1 0.08 websitedesign(upto8pages) invoice-luma_studio_long 0:dab758788e6f -0.54 ux/uidesignfordesktopandmobile. +invoice-luma_studio_long 0:dab758788e6f#1 -0.49 ux/uidesignfordesktopandmobile. invoice-luma_studio_long 0:bb1a79cda1ae -0.53 phase1. invoice-luma_studio_long 0:f916278cb74c 0.10 £850.00 +invoice-luma_studio_long 0:f916278cb74c#1 0.10 £850.00 invoice-luma_studio_long 0:4a1359f78476 0.04 copywriting invoice-luma_studio_long 0:e6a181326fc9 -0.53 websitecopy&keymessaging.phase invoice-luma_studio_long 0:07b417914317 0.11 £600.00 +invoice-luma_studio_long 0:07b417914317#1 0.11 £600.00 invoice-luma_studio_long 0:340455fbac25 0.05 projectmanagement invoice-luma_studio_long 0:72534f9863ad -0.52 planning,coordination&client invoice-luma_studio_long 0:8f09113ca513 -0.51 liaison.phase1. @@ -2155,24 +2363,68 @@ invoice-luma_studio_long 1:d1062d072acd 0.18 unitprice invoice-luma_studio_long 1:7c512b48ba8a 0.18 vat invoice-luma_studio_long 1:cf38d95c9c6b 0.18 amount invoice-luma_studio_long 1:f916278cb74c 0.21 £850.00 +invoice-luma_studio_long 1:f916278cb74c#1 0.21 £850.00 +invoice-luma_studio_long 1:f916278cb74c#2 0.26 £850.00 +invoice-luma_studio_long 1:f916278cb74c#3 0.26 £850.00 +invoice-luma_studio_long 1:f916278cb74c#4 0.31 £850.00 +invoice-luma_studio_long 1:f916278cb74c#5 0.31 £850.00 invoice-luma_studio_long 1:dc934fe30a94 0.21 20% +invoice-luma_studio_long 1:dc934fe30a94#1 0.22 20% +invoice-luma_studio_long 1:dc934fe30a94#2 0.23 20% +invoice-luma_studio_long 1:dc934fe30a94#3 0.24 20% +invoice-luma_studio_long 1:dc934fe30a94#4 0.25 20% +invoice-luma_studio_long 1:dc934fe30a94#5 0.26 20% +invoice-luma_studio_long 1:dc934fe30a94#6 0.27 20% +invoice-luma_studio_long 1:dc934fe30a94#7 0.28 20% +invoice-luma_studio_long 1:dc934fe30a94#8 0.29 20% +invoice-luma_studio_long 1:dc934fe30a94#9 0.30 20% +invoice-luma_studio_long 1:dc934fe30a94#10 0.31 20% +invoice-luma_studio_long 1:dc934fe30a94#11 0.32 20% invoice-luma_studio_long 1:4a1359f78476 0.15 copywriting +invoice-luma_studio_long 1:4a1359f78476#1 0.20 copywriting +invoice-luma_studio_long 1:4a1359f78476#2 0.25 copywriting invoice-luma_studio_long 1:e6a181326fc9 -0.41 websitecopy&keymessaging.phase +invoice-luma_studio_long 1:e6a181326fc9#1 -0.36 websitecopy&keymessaging.phase +invoice-luma_studio_long 1:e6a181326fc9#2 -0.31 websitecopy&keymessaging.phase invoice-luma_studio_long 1:07b417914317 0.22 £600.00 +invoice-luma_studio_long 1:07b417914317#1 0.22 £600.00 +invoice-luma_studio_long 1:07b417914317#2 0.27 £600.00 +invoice-luma_studio_long 1:07b417914317#3 0.27 £600.00 +invoice-luma_studio_long 1:07b417914317#4 0.32 £600.00 +invoice-luma_studio_long 1:07b417914317#5 0.32 £600.00 invoice-luma_studio_long 1:340455fbac25 0.16 projectmanagement +invoice-luma_studio_long 1:340455fbac25#1 0.21 projectmanagement +invoice-luma_studio_long 1:340455fbac25#2 0.26 projectmanagement invoice-luma_studio_long 1:72534f9863ad -0.40 planning,coordination&client +invoice-luma_studio_long 1:72534f9863ad#1 -0.35 planning,coordination&client +invoice-luma_studio_long 1:72534f9863ad#2 -0.30 planning,coordination&client invoice-luma_studio_long 1:ad05c4b80bfe -0.40 liaison.phase2. invoice-luma_studio_long 1:7b420577e50f 0.23 £1,200.00 +invoice-luma_studio_long 1:7b420577e50f#1 0.23 £1,200.00 +invoice-luma_studio_long 1:7b420577e50f#2 0.28 £1,200.00 +invoice-luma_studio_long 1:7b420577e50f#3 0.28 £1,200.00 invoice-luma_studio_long 1:d8f4e3a46d2d 0.17 brandstrategyworkshop +invoice-luma_studio_long 1:d8f4e3a46d2d#1 0.22 brandstrategyworkshop invoice-luma_studio_long 1:be624d692600 -0.39 discoverysession,research&brand +invoice-luma_studio_long 1:be624d692600#1 -0.34 discoverysession,research&brand invoice-luma_studio_long 1:b95a82d5055c -0.39 positioning.phase3. invoice-luma_studio_long 1:07bcffc86e95 0.24 £2,650.00 +invoice-luma_studio_long 1:07bcffc86e95#1 0.24 £2,650.00 +invoice-luma_studio_long 1:07bcffc86e95#2 0.29 £2,650.00 +invoice-luma_studio_long 1:07bcffc86e95#3 0.29 £2,650.00 invoice-luma_studio_long 1:e302dd04d528 0.18 visualidentitydesign +invoice-luma_studio_long 1:e302dd04d528#1 0.23 visualidentitydesign invoice-luma_studio_long 1:40e412f627fb -0.38 logosuite,colourpalette,typograp +invoice-luma_studio_long 1:40e412f627fb#1 -0.33 logosuite,colourpalette,typograp invoice-luma_studio_long 1:708bc0c2e87c -0.38 &guidelines.phase3. invoice-luma_studio_long 1:a20d66947acc 0.25 £3,200.00 +invoice-luma_studio_long 1:a20d66947acc#1 0.25 £3,200.00 +invoice-luma_studio_long 1:a20d66947acc#2 0.30 £3,200.00 +invoice-luma_studio_long 1:a20d66947acc#3 0.30 £3,200.00 invoice-luma_studio_long 1:b25ac9cd66bd 0.19 websitedesign(upto8pages) +invoice-luma_studio_long 1:b25ac9cd66bd#1 0.24 websitedesign(upto8pages) invoice-luma_studio_long 1:dab758788e6f -0.37 ux/uidesignfordesktopandmobile. +invoice-luma_studio_long 1:dab758788e6f#1 -0.32 ux/uidesignfordesktopandmobile. invoice-luma_studio_long 1:155500f32e83 -0.37 phase3. invoice-luma_studio_long 1:82f971bee7f8 -0.35 liaison.phase3. invoice-luma_studio_long 1:7affbd48dd15 -0.34 positioning.phase4. @@ -2212,19 +2464,23 @@ invoice-luma_studio_long 2:bc6d215b63ee 0.01 page3of3 invoice-merchant 0:0dffa3b5d008 -0.01 coastline invoice-merchant 0:52d6e3de4fa0 0.08 invoice invoice-merchant 0:9422e2aeb800 0.08 coastlinecommerceinc. +invoice-merchant 0:9422e2aeb800#1 0.65 coastlinecommerceinc. invoice-merchant 0:8bb83c0c3efb 0.10 150elginstreet,8thfloor invoice-merchant 0:cf0df3462e70 0.09 ottawa,onk2p1l4 invoice-merchant 0:408c7c5887a0 0.09 canada invoice-merchant 0:0d9b94d29fc9 0.01 www.coastline.example invoice-merchant 0:76957649b8a8 -0.02 billing@coastline.example +invoice-merchant 0:76957649b8a8#1 0.68 billing@coastline.example invoice-merchant 0:0b44bf19dd44 -0.05 +1613-555-0142 invoice-merchant 0:884004f21362 -0.03 vatid:ca8139020285rt0001 invoice-merchant 0:6282391a4cc1 0.23 invoicenumber: invoice-merchant 0:a6e01b979f55 0.23 inv-2026-000789 +invoice-merchant 0:a6e01b979f55#1 0.68 inv-2026-000789 invoice-merchant 0:8d05f5d55191 0.20 invoicedate: invoice-merchant 0:dc9696f61d36 0.20 27may2026 invoice-merchant 0:0e0fb0fc0939 0.18 duedate: invoice-merchant 0:93059e9a1c07 0.18 26june2026 +invoice-merchant 0:93059e9a1c07#1 0.85 26june2026 invoice-merchant 0:d39366fa1423 0.16 billingperiod: invoice-merchant 0:ec215645f61e 0.16 01may2026–31may2026 invoice-merchant 0:18e2cca1098e 0.14 paymentterms: @@ -2233,9 +2489,12 @@ invoice-merchant 0:967e0b6ca4b9 0.12 currency: invoice-merchant 0:d60fbd8718ec 0.12 usd invoice-merchant 0:aeba3a7b3598 -0.03 billto invoice-merchant 0:45fe04dbae24 -0.07 brightfutureltd. +invoice-merchant 0:45fe04dbae24#1 -0.07 brightfutureltd. invoice-merchant 0:65405af34bf9 -0.08 45kingstreet invoice-merchant 0:1f8da9c4e269 -0.07 manchester,m24wu +invoice-merchant 0:1f8da9c4e269#1 -0.06 manchester,m24wu invoice-merchant 0:2474519f77a9 -0.06 unitedkingdom +invoice-merchant 0:2474519f77a9#1 -0.06 unitedkingdom invoice-merchant 0:c7a9cfdd1c55 -0.07 vatid:gb987654321 invoice-merchant 0:725a8f5062e7 -0.03 shipto invoice-merchant 0:5895c7cd8d5b -0.08 warehouse7 @@ -2249,10 +2508,15 @@ invoice-merchant 0:fe6b34582738 0.27 coastlineadvanced invoice-merchant 0:46f3b0cea3bc 0.23 monthlysubscription invoice-merchant 0:71738eb7126d 0.24 advancedplan invoice-merchant 0:7b969356782c 0.24 399.00 +invoice-merchant 0:7b969356782c#1 0.24 399.00 invoice-merchant 0:0a9acaea6477 0.26 paymentprocessing invoice-merchant 0:91809142f08f 0.21 transactionfee invoice-merchant 0:358a7392afe6 0.22 asperusage invoice-merchant 0:561b2814d3c0 0.22 0.00 +invoice-merchant 0:561b2814d3c0#1 0.22 0.00 +invoice-merchant 0:561b2814d3c0#2 0.19 0.00 +invoice-merchant 0:561b2814d3c0#3 0.19 0.00 +invoice-merchant 0:561b2814d3c0#4 0.64 0.00 invoice-merchant 0:3f9fea8c0fc5 0.24 additionalstaffaccounts invoice-merchant 0:fbf7948d004d 0.20 staffaccount invoice-merchant 0:7b476727faf3 0.21 additional @@ -2290,15 +2554,19 @@ invoice-merchant 0:aaa4b5e2074f 0.27 ifyouhaveanyquestionsaboutthisin invoice-metered 0:8a80987c409a 0.23 northwindcloud invoice-metered 0:52d6e3de4fa0 0.20 invoice invoice-metered 0:41305d2c2d3b -0.19 northwindcloudservicesltd. +invoice-metered 0:41305d2c2d3b#1 0.29 northwindcloudservicesltd. invoice-metered 0:c3f5f4cc9def -0.18 120riversideway invoice-metered 0:5be08c6bee4c -0.19 bristol,bs16qt invoice-metered 0:2474519f77a9 -0.20 unitedkingdom +invoice-metered 0:2474519f77a9#1 -0.12 unitedkingdom +invoice-metered 0:2474519f77a9#2 -0.16 unitedkingdom invoice-metered 0:ec6d474a1bfc -0.21 vatid: invoice-metered 0:b03c22d79b17 -0.21 gb412883027 invoice-metered 0:83e16ec72a3f -0.23 phone: invoice-metered 0:bff9aeb5400b -0.23 +44(0)1174962280 invoice-metered 0:439961205ae6 -0.25 email: invoice-metered 0:228e0a39fe6e -0.25 billing@northwind.example +invoice-metered 0:228e0a39fe6e#1 0.16 billing@northwind.example invoice-metered 0:294ed2cfe15e -0.26 website:https://northwind.exampl invoice-metered 0:6282391a4cc1 -0.08 invoicenumber: invoice-metered 0:0edf022238f1 -0.07 inv-2026-00041882 @@ -2306,6 +2574,7 @@ invoice-metered 0:8d05f5d55191 -0.05 invoicedate: invoice-metered 0:52c8b7a9ee5f -0.04 31july2026 invoice-metered 0:0e0fb0fc0939 -0.05 duedate: invoice-metered 0:6a077b4f161e -0.04 30august2026 +invoice-metered 0:6a077b4f161e#1 0.75 30august2026 invoice-metered 0:aa1e9c8092ab -0.05 billperiod: invoice-metered 0:3e380076ca84 -0.04 01jul2026–31jul2026 invoice-metered 0:18e2cca1098e -0.04 paymentterms: @@ -2314,8 +2583,10 @@ invoice-metered 0:967e0b6ca4b9 -0.04 currency: invoice-metered 0:54f8e1b3fe44 -0.04 gbp invoice-metered 0:aeba3a7b3598 0.01 billto invoice-metered 0:45fe04dbae24 -0.05 brightfutureltd. +invoice-metered 0:45fe04dbae24#1 -0.05 brightfutureltd. invoice-metered 0:65405af34bf9 -0.04 45kingstreet invoice-metered 0:1f8da9c4e269 -0.08 manchester,m24wu +invoice-metered 0:1f8da9c4e269#1 -0.12 manchester,m24wu invoice-metered 0:c7a9cfdd1c55 -0.16 vatid:gb987654321 invoice-metered 0:725a8f5062e7 0.01 shipto invoice-metered 0:5895c7cd8d5b -0.04 warehouse7 @@ -2328,7 +2599,10 @@ invoice-metered 0:cf38d95c9c6b 0.28 amount invoice-metered 0:f13d9c7c6f89 0.49 computeinstances invoice-metered 0:d08426b31521 0.46 on-demandusage invoice-metered 0:05313a23f706 0.50 london(eu-west) +invoice-metered 0:05313a23f706#1 0.48 london(eu-west) +invoice-metered 0:05313a23f706#2 0.47 london(eu-west) invoice-metered 0:6e477a22f840 0.50 744hrs +invoice-metered 0:6e477a22f840#1 0.47 744hrs invoice-metered 0:352967434b63 0.50 gbp0.0710 invoice-metered 0:eec5f520909e 0.50 gbp52.82 invoice-metered 0:721ffa554e56 0.48 objectstorage @@ -2343,12 +2617,14 @@ invoice-metered 0:baad0db43ed6 0.47 gbp122.76 invoice-metered 0:444858f5bf18 0.45 egresstraffic invoice-metered 0:8b72bb875a83 0.42 datatransferout invoice-metered 0:8001c2743965 0.45 global +invoice-metered 0:8001c2743965#1 0.69 global invoice-metered 0:847eb4cbbb42 0.45 310gb invoice-metered 0:d651e46704f7 0.45 gbp0.0900 invoice-metered 0:4ecaa7313375 0.45 gbp27.90 invoice-metered 0:efa8771baad9 0.69 supportplan invoice-metered 0:9e81cd6e653a 0.65 standardresponse invoice-metered 0:a0443240c5ed 0.69 gbp0.91 +invoice-metered 0:a0443240c5ed#1 0.69 gbp0.91 invoice-metered 0:3c7ade679fdf 0.30 paymentdetails invoice-metered 0:0ecb5847ffa7 0.29 accountname: invoice-metered 0:944d398aea60 0.27 bankname: @@ -2398,6 +2674,7 @@ invoice-modern 0:385cfdbc00ec 0.10 unit invoice-modern 0:cf38d95c9c6b 0.10 amount invoice-modern 0:987c6297d0a9 0.32 discoveryworkshop invoice-modern 0:532674c6eb89 0.32 gbp1,450 +invoice-modern 0:532674c6eb89#1 0.32 gbp1,450 invoice-modern 0:08ec6deb1c40 0.32 templatearchitecture2 invoice-modern 0:d2e67c4b1cca 0.32 gbp980 invoice-modern 0:d6cdf6a05754 0.32 gbp1,960 @@ -2406,6 +2683,7 @@ invoice-modern 0:7e7398cbff7c 0.32 gbp320 invoice-modern 0:e23164e940c7 0.32 gbp960 invoice-modern 0:6047df51175c 0.32 developerenablement1 invoice-modern 0:c2ad01ea64ae 0.32 gbp780 +invoice-modern 0:c2ad01ea64ae#1 0.32 gbp780 invoice-modern 0:d6577e95efba 0.32 subtotal invoice-modern 0:50cae0510231 0.32 gbp5,150 invoice-modern 0:a52611c9261b 0.32 vat(20%) @@ -2449,6 +2727,7 @@ invoice-modern_long 0:385cfdbc00ec 0.13 unit invoice-modern_long 0:cf38d95c9c6b 0.13 amount invoice-modern_long 0:aa29f2f4fcb4 0.35 discoveryworkshop—sprint1 invoice-modern_long 0:ce4081aef7a1 0.35 gbp180 +invoice-modern_long 0:ce4081aef7a1#1 0.35 gbp180 invoice-modern_long 0:9c9a412f0a45 0.35 designsystemaudit—sprint1 invoice-modern_long 0:7be809cb1590 0.35 gbp217 invoice-modern_long 0:378b363c8601 0.35 gbp434 @@ -2460,6 +2739,7 @@ invoice-modern_long 0:dde0144b97b7 0.35 gbp291 invoice-modern_long 0:457a71636ad9 0.35 gbp1164 invoice-modern_long 0:6fcf7d6dd606 0.35 renderqapass—sprint1 invoice-modern_long 0:dda88f5786f5 0.35 gbp328 +invoice-modern_long 0:dda88f5786f5#1 0.35 gbp328 invoice-modern_long 0:ee18ad3bbb42 0.35 accessibilityreview—sprint1 invoice-modern_long 0:e681b4843ffb 0.35 gbp365 invoice-modern_long 0:1859c20b35dd 0.35 gbp730 @@ -2471,6 +2751,7 @@ invoice-modern_long 0:6109a2c30104 0.35 gbp439 invoice-modern_long 0:87e9fcb6151d 0.35 gbp1756 invoice-modern_long 0:a6bee1ec5e35 0.35 datamapping—sprint1 invoice-modern_long 0:df1f9d4443d8 0.35 gbp476 +invoice-modern_long 0:df1f9d4443d8#1 0.35 gbp476 invoice-modern_long 0:052c9f49a4b8 0.35 paginationhardening—sprint1 invoice-modern_long 0:9fba6332e489 0.35 gbp513 invoice-modern_long 0:6f805c9f78c3 0.35 gbp1026 @@ -2482,6 +2763,7 @@ invoice-modern_long 0:e7b406f24f04 0.35 gbp587 invoice-modern_long 0:74357ca6b30e 0.35 gbp2348 invoice-modern_long 0:9c6cf539f5bc 0.35 stakeholderdemo—sprint1 invoice-modern_long 0:cf79b5cdb735 0.35 gbp624 +invoice-modern_long 0:cf79b5cdb735#1 0.35 gbp624 invoice-modern_long 0:d2bde6642670 0.35 performanceprofiling—sprint1 invoice-modern_long 0:679f017f73c1 0.35 gbp661 invoice-modern_long 0:63985b524723 0.35 gbp1322 @@ -2493,6 +2775,7 @@ invoice-modern_long 0:70b393b5fb10 0.35 gbp735 invoice-modern_long 0:29edf7588a57 0.35 gbp2940 invoice-modern_long 0:82a9218b91ae 0.35 discoveryworkshop—sprint2 invoice-modern_long 0:c313f34b71b9 0.35 gbp772 +invoice-modern_long 0:c313f34b71b9#1 0.35 gbp772 invoice-modern_long 0:7e69fbffe3e2 0.35 designsystemaudit—sprint2 invoice-modern_long 0:e096e4fddf9a 0.35 gbp809 invoice-modern_long 0:c985a0123929 0.35 gbp1618 @@ -2508,6 +2791,7 @@ invoice-modern_long 1:385cfdbc00ec 0.30 unit invoice-modern_long 1:cf38d95c9c6b 0.30 amount invoice-modern_long 1:f12cbb7c274d 0.52 renderqapass—sprint2 invoice-modern_long 1:b813c73bc488 0.52 gbp920 +invoice-modern_long 1:b813c73bc488#1 0.52 gbp920 invoice-modern_long 1:12cd54b50187 0.52 accessibilityreview—sprint2 invoice-modern_long 1:377d92702316 0.52 gbp957 invoice-modern_long 1:e7c66f6cf477 0.52 gbp1914 @@ -2519,6 +2803,7 @@ invoice-modern_long 1:a4c7a6612c99 0.52 gbp1031 invoice-modern_long 1:1c83f0b47e27 0.52 gbp4124 invoice-modern_long 1:00de69c6e70f 0.52 datamapping—sprint2 invoice-modern_long 1:b9d5c56a2cfd 0.52 gbp1068 +invoice-modern_long 1:b9d5c56a2cfd#1 0.52 gbp1068 invoice-modern_long 1:eb628b5ea8ab 0.52 paginationhardening—sprint2 invoice-modern_long 1:db5327b47d0e 0.52 gbp205 invoice-modern_long 1:99d9b3b49da2 0.52 gbp410 @@ -2530,6 +2815,7 @@ invoice-modern_long 1:28ad00e76aef 0.52 gbp279 invoice-modern_long 1:fbb12fed0bbc 0.52 gbp1116 invoice-modern_long 1:5369a2c40ff8 0.52 stakeholderdemo—sprint2 invoice-modern_long 1:16562cbcd318 0.52 gbp316 +invoice-modern_long 1:16562cbcd318#1 0.52 gbp316 invoice-modern_long 1:611b258cb41e 0.52 performanceprofiling—sprint2 invoice-modern_long 1:e391d4e46366 0.52 gbp353 invoice-modern_long 1:7106c00cb009 0.52 gbp706 @@ -2541,6 +2827,7 @@ invoice-modern_long 1:909481a45a34 0.52 gbp427 invoice-modern_long 1:4e58d78d0958 0.52 gbp1708 invoice-modern_long 1:ddce236bccd7 0.52 discoveryworkshop—sprint3 invoice-modern_long 1:f8d17c11d834 0.52 gbp464 +invoice-modern_long 1:f8d17c11d834#1 0.52 gbp464 invoice-modern_long 1:c0986cd7b1d4 0.52 designsystemaudit—sprint3 invoice-modern_long 1:09c7aebd89f6 0.52 gbp501 invoice-modern_long 1:a61c7b6bdd20 0.52 gbp1002 @@ -2552,6 +2839,7 @@ invoice-modern_long 1:f6df6e8e8f30 0.52 gbp575 invoice-modern_long 1:7f7db0f4c1cf 0.52 gbp2300 invoice-modern_long 1:608e31719f07 0.52 renderqapass—sprint3 invoice-modern_long 1:e4fbc626999e 0.52 gbp612 +invoice-modern_long 1:e4fbc626999e#1 0.52 gbp612 invoice-modern_long 1:98bfb4deb0b7 0.52 accessibilityreview—sprint3 invoice-modern_long 1:7915a839b285 0.52 gbp649 invoice-modern_long 1:ca74221d78ad 0.52 gbp1298 @@ -2582,6 +2870,7 @@ invoice-obsidian 0:07f15cde5b18 0.14 kestrel invoice-obsidian 0:52d6e3de4fa0 0.12 invoice invoice-obsidian 0:5d1d1b79af09 0.02 invoicenumber invoice-obsidian 0:3e62d1fbe5ec 0.06 inv-2026-1048 +invoice-obsidian 0:3e62d1fbe5ec#1 0.14 inv-2026-1048 invoice-obsidian 0:8feaf8016bab 0.02 issuedate invoice-obsidian 0:4d49cb78b810 0.02 27august2026 invoice-obsidian 0:ac10f8c16320 -0.05 duedate @@ -2592,10 +2881,14 @@ invoice-obsidian 0:466e5b9cd57f -0.19 currency invoice-obsidian 0:54f8e1b3fe44 -0.19 gbp invoice-obsidian 0:75857a458999 -0.26 from invoice-obsidian 0:7d7385ecfbd9 -0.29 kestrelbusiness +invoice-obsidian 0:7d7385ecfbd9#1 0.17 kestrelbusiness +invoice-obsidian 0:7d7385ecfbd9#2 0.48 kestrelbusiness invoice-obsidian 0:5f51304df361 -0.27 7harboursidewalk invoice-obsidian 0:895a6b59f677 -0.29 bristolbs15ty invoice-obsidian 0:2474519f77a9 -0.29 unitedkingdom +invoice-obsidian 0:2474519f77a9#1 -0.29 unitedkingdom invoice-obsidian 0:70ec69d2102f -0.31 ar@kestrel.example +invoice-obsidian 0:70ec69d2102f#1 0.48 ar@kestrel.example invoice-obsidian 0:aeba3a7b3598 -0.26 billto invoice-obsidian 0:7bfc2b791f41 -0.29 northlineconsultingltd invoice-obsidian 0:13dd937d2fe6 -0.27 21jubileeway @@ -2604,11 +2897,13 @@ invoice-obsidian 0:c9046f7a37ad -1.75 description invoice-obsidian 0:32e8369a9c4f -1.75 qty invoice-obsidian 0:d1062d072acd -1.75 unitprice invoice-obsidian 0:a52611c9261b -1.75 vat(20%) +invoice-obsidian 0:a52611c9261b#1 0.53 vat(20%) invoice-obsidian 0:cf38d95c9c6b -1.75 amount invoice-obsidian 0:15345cbad705 -0.17 subscriptionsetup invoice-obsidian 0:5100476d46bb -0.17 one-offaccountandworkspacesetup invoice-obsidian 0:507f9f133059 -0.21 £150.00 invoice-obsidian 0:893d7480f763 -0.21 £30.00 +invoice-obsidian 0:893d7480f763#1 -0.38 £30.00 invoice-obsidian 0:629184210581 -0.21 £180.00 invoice-obsidian 0:3e8060178bc4 -0.21 internationalpaymentsupport invoice-obsidian 0:33e4ab51097e -0.21 monthlysupportforcross-borderpay @@ -2655,10 +2950,13 @@ invoice-obsidian 0:7b14b8d2c5c4 -0.03 page1of1 invoice-payments 0:b6c4ac412ac8 -0.02 meridian invoice-payments 0:52d6e3de4fa0 0.41 invoice invoice-payments 0:c0cc75b9cfdc -0.22 meridianpaymentsltd. +invoice-payments 0:c0cc75b9cfdc#1 0.74 meridianpaymentsltd. invoice-payments 0:5eeaa101da6c -0.19 1harbourexchange invoice-payments 0:e3f6090f249b -0.23 canarywharf invoice-payments 0:1bb9adbf32ff -0.26 londone149ge invoice-payments 0:2474519f77a9 -0.30 unitedkingdom +invoice-payments 0:2474519f77a9#1 0.04 unitedkingdom +invoice-payments 0:2474519f77a9#2 0.04 unitedkingdom invoice-payments 0:e89d810f7944 -0.32 companyno.09048900 invoice-payments 0:a3052fe78c6e -0.32 vatno.gb123456789 invoice-payments 0:5d1d1b79af09 -0.07 invoicenumber @@ -2669,6 +2967,7 @@ invoice-payments 0:fb854bac39c8 -0.16 paymentterms invoice-payments 0:ac10f8c16320 -0.19 duedate invoice-payments 0:073c1634c496 -0.21 status invoice-payments 0:052ff4dff688 -0.04 inv-2025-05-10472 +invoice-payments 0:052ff4dff688#1 0.54 inv-2025-05-10472 invoice-payments 0:23a4c624cbda -0.01 10may2025 invoice-payments 0:7b052c343b27 0.02 1-30april2025 invoice-payments 0:018052c1dd59 0.04 acct_4q8xtb2mkp @@ -2677,6 +2976,7 @@ invoice-payments 0:1ade0cb4877f 0.10 14june2025 invoice-payments 0:e66d03af0bf1 0.09 unpaid invoice-payments 0:aeba3a7b3598 0.13 billto invoice-payments 0:98997fb707ef 0.05 northwindltd. +invoice-payments 0:98997fb707ef#1 0.05 northwindltd. invoice-payments 0:834834123752 0.13 attention:financeteam invoice-payments 0:76b6fd2080ed 0.10 42bridgewaterstreet invoice-payments 0:e031db0583eb 0.07 manchesterm154qt @@ -2692,15 +2992,24 @@ invoice-payments 0:7c512b48ba8a 0.24 vat invoice-payments 0:2da123241332 0.24 amount(gbp) invoice-payments 0:3ab6c1099bcc 5.43 subscriptionbilling invoice-payments 0:96d6b62c061d 0.40 £250.00 +invoice-payments 0:96d6b62c061d#1 0.41 £250.00 invoice-payments 0:dc934fe30a94 0.40 20% +invoice-payments 0:dc934fe30a94#1 0.40 20% +invoice-payments 0:dc934fe30a94#2 0.42 20% +invoice-payments 0:dc934fe30a94#3 0.41 20% +invoice-payments 0:dc934fe30a94#4 0.40 20% +invoice-payments 0:dc934fe30a94#5 0.59 20% invoice-payments 0:0a9acaea6477 5.43 paymentprocessing invoice-payments 0:351704ebff51 0.40 £1,180.00 +invoice-payments 0:351704ebff51#1 0.41 £1,180.00 invoice-payments 0:b3bc34f90a55 0.42 fraudscreening invoice-payments 0:ed051c6a1942 0.46 advancedfraudscreeningandrules invoice-payments 0:a0a787efd867 0.42 £320.00 +invoice-payments 0:a0a787efd867#1 0.43 £320.00 invoice-payments 0:34b75c1d0234 0.41 companyformation invoice-payments 0:bf45c494a8dc 0.45 incorporationandcompliancefiling invoice-payments 0:629184210581 0.41 £180.00 +invoice-payments 0:629184210581#1 0.42 £180.00 invoice-payments 0:9427a01801d2 0.40 in-personterminals invoice-payments 0:882be821cf2e 0.44 terminalrentalandfirmwareupdates invoice-payments 0:3c4459a5e4ec 0.40 £39.00 @@ -2708,6 +3017,7 @@ invoice-payments 0:5d16afda896e 0.41 £156.00 invoice-payments 0:0036ebf2cfb2 0.59 prioritysupport invoice-payments 0:7ef1d2ff5e3a 0.63 namedengineer,one-hourresponse invoice-payments 0:cf02270203a4 0.59 £100.00 +invoice-payments 0:cf02270203a4#1 0.60 £100.00 invoice-payments 0:3c7ade679fdf 0.77 paymentdetails invoice-payments 0:182748d2fece 0.81 bankname invoice-payments 0:758f4a6f175f 0.82 accountname @@ -2738,13 +3048,17 @@ invoice-payments 0:5b88ed40a689 1.07 support@meridianpayments.example invoice-payments 0:2e3891f6ba2f 1.08 39661900 invoice-payments 0:7b14b8d2c5c4 -0.04 page1of1 invoice-platform 0:9817f28442bf 0.04 auroracloud +invoice-platform 0:9817f28442bf#1 -0.56 auroracloud invoice-platform 0:52d6e3de4fa0 0.61 invoice invoice-platform 0:1cf61cdc6464 0.06 auroracloudinc. +invoice-platform 0:1cf61cdc6464#1 -0.10 auroracloudinc. +invoice-platform 0:1cf61cdc6464#2 -0.53 auroracloudinc. invoice-platform 0:43315277b007 -0.40 500harbourstreet invoice-platform 0:d9065bfb8f59 -0.40 vancouver,bcv6c2w2 invoice-platform 0:408c7c5887a0 -0.41 canada invoice-platform 0:88a643f14708 0.18 aurora.example invoice-platform 0:f2cfc804c0f3 0.18 billing@aurora.example +invoice-platform 0:f2cfc804c0f3#1 -0.07 billing@aurora.example invoice-platform 0:799715f2b96e 0.19 +1604-555-0180 invoice-platform 0:719c55c7e988 -0.44 vatid:cabn842137755 invoice-platform 0:6282391a4cc1 -0.31 invoicenumber: @@ -2753,6 +3067,7 @@ invoice-platform 0:8d05f5d55191 -0.34 invoicedate: invoice-platform 0:52c8b7a9ee5f -0.34 31july2026 invoice-platform 0:0e0fb0fc0939 -0.36 duedate: invoice-platform 0:6a077b4f161e -0.36 30august2026 +invoice-platform 0:6a077b4f161e#1 -0.27 30august2026 invoice-platform 0:e26e182e1141 -0.39 billingaccountid: invoice-platform 0:6d4b27b68226 -0.39 7c2d9e-b1f4a8-3k6m0p invoice-platform 0:d39366fa1423 -0.41 billingperiod: @@ -2763,9 +3078,12 @@ invoice-platform 0:967e0b6ca4b9 -0.46 currency: invoice-platform 0:2afe5e26e9c8 -0.46 cad invoice-platform 0:aeba3a7b3598 -0.39 billto invoice-platform 0:45fe04dbae24 -0.41 brightfutureltd. +invoice-platform 0:45fe04dbae24#1 -0.40 brightfutureltd. invoice-platform 0:65405af34bf9 -0.37 45kingstreet invoice-platform 0:1f8da9c4e269 -0.39 manchester,m24wu +invoice-platform 0:1f8da9c4e269#1 -0.40 manchester,m24wu invoice-platform 0:2474519f77a9 -0.41 unitedkingdom +invoice-platform 0:2474519f77a9#1 -0.41 unitedkingdom invoice-platform 0:c7a9cfdd1c55 -0.43 vatid:gb987654321 invoice-platform 0:725a8f5062e7 -0.41 shipto invoice-platform 0:5895c7cd8d5b -0.36 warehouse7 @@ -2778,8 +3096,12 @@ invoice-platform 0:965711fdf178 -0.22 unitprice(cad) invoice-platform 0:1742adf77d8c -0.22 amount(cad) invoice-platform 0:b04a12f6483e -0.26 compute invoice-platform 0:a2cd33d50126 -0.26 ca-central1 +invoice-platform 0:a2cd33d50126#1 -0.27 ca-central1 +invoice-platform 0:a2cd33d50126#2 -0.27 ca-central1 invoice-platform 0:ff5f15700bca -0.26 744.00 +invoice-platform 0:ff5f15700bca#1 -0.27 744.00 invoice-platform 0:404314b1f4bd -0.27 hours +invoice-platform 0:404314b1f4bd#1 -0.27 hours invoice-platform 0:456fa3bce642 -0.26 0.0685 invoice-platform 0:4249970361b2 -0.26 50.96 invoice-platform 0:f13d9c7c6f89 -0.32 computeinstances @@ -2797,6 +3119,7 @@ invoice-platform 0:8152fd217e12 -0.32 manageddatabase invoice-platform 0:3500adb3c8a1 -0.30 postgresqlinstance invoice-platform 0:3009be769fb8 -0.27 network invoice-platform 0:8001c2743965 -0.27 global +invoice-platform 0:8001c2743965#1 -0.27 global invoice-platform 0:3f6ae649df50 -0.27 260.00 invoice-platform 0:7775158f6d3a -0.27 0.0860 invoice-platform 0:f7650feb3574 -0.27 22.36 @@ -2804,6 +3127,7 @@ invoice-platform 0:444858f5bf18 -0.32 egresstraffic invoice-platform 0:8b72bb875a83 -0.30 datatransferout invoice-platform 0:a18603086e5b -0.27 support invoice-platform 0:561b2814d3c0 -0.27 0.00 +invoice-platform 0:561b2814d3c0#1 -0.27 0.00 invoice-platform 0:efa8771baad9 -0.33 supportplan invoice-platform 0:9e81cd6e653a -0.30 standardresponse invoice-platform 0:13000a5d442c -0.25 paymentinformation @@ -2840,11 +3164,14 @@ invoice-subscription 0:0a36c1665b7e 0.28 halsteadsoftwareltd. invoice-subscription 0:6bc2056359b7 0.20 18chandlerrow invoice-subscription 0:776a7e9eb92a 0.22 leedsls14qt invoice-subscription 0:2474519f77a9 0.24 unitedkingdom +invoice-subscription 0:2474519f77a9#1 -0.70 unitedkingdom +invoice-subscription 0:2474519f77a9#2 -0.70 unitedkingdom invoice-subscription 0:bfdec553b85a 0.24 billing@halstead.example invoice-subscription 0:78acb3cb907b 0.27 www.halstead.example invoice-subscription 0:f1c030eb4329 0.29 vatnogb418227603 invoice-subscription 0:77ead61b5875 0.29 invoiceno invoice-subscription 0:0b0c0ee24de8 0.26 hs-inv-2026-0417 +invoice-subscription 0:0b0c0ee24de8#1 0.43 hs-inv-2026-0417 invoice-subscription 0:8feaf8016bab 0.34 issuedate invoice-subscription 0:4d49cb78b810 0.32 27august2026 invoice-subscription 0:ac10f8c16320 0.39 duedate @@ -2855,6 +3182,7 @@ invoice-subscription 0:466e5b9cd57f 0.50 currency invoice-subscription 0:54f8e1b3fe44 0.47 gbp invoice-subscription 0:aeba3a7b3598 0.51 billto invoice-subscription 0:7bfc2b791f41 -0.76 northlineconsultingltd +invoice-subscription 0:7bfc2b791f41#1 -0.76 northlineconsultingltd invoice-subscription 0:bcb7024f74fe -0.75 attn:sarahmitchell invoice-subscription 0:13dd937d2fe6 -0.73 21jubileeway invoice-subscription 0:f9bab6a0b45b -0.72 londonse13ss @@ -2870,14 +3198,20 @@ invoice-subscription 0:cf38d95c9c6b -0.61 amount invoice-subscription 0:86705447c73d -0.32 halsteadworkspacepremium(10seats invoice-subscription 0:0c8dc980db3f -0.32 £18.00 invoice-subscription 0:dc934fe30a94 -0.32 20% +invoice-subscription 0:dc934fe30a94#1 -0.20 20% +invoice-subscription 0:dc934fe30a94#2 -0.08 20% +invoice-subscription 0:dc934fe30a94#3 0.04 20% +invoice-subscription 0:dc934fe30a94#4 0.16 20% invoice-subscription 0:629184210581 -0.32 £180.00 invoice-subscription 0:59df1d2b0f69 -0.20 hostedplatformservices invoice-subscription 0:44c1ce3394d2 -0.20 £420.00 +invoice-subscription 0:44c1ce3394d2#1 -0.20 £420.00 invoice-subscription 0:217bada1d20f -0.08 analyticsprolicences(5seats) invoice-subscription 0:599cd58953ce -0.08 £8.40 invoice-subscription 0:756b8c62fe05 -0.08 £42.00 invoice-subscription 0:b055bcc305ed 0.04 prioritysupportplan invoice-subscription 0:1077d7cede59 0.04 £275.00 +invoice-subscription 0:1077d7cede59#1 0.04 £275.00 invoice-subscription 0:361537ef6a11 0.16 voiceadd-on(5seats) invoice-subscription 0:8bf9ac7b27bd 0.16 £6.00 invoice-subscription 0:893d7480f763 0.16 £30.00 @@ -2906,14 +3240,18 @@ invoice-subscription 0:354ffeb2bbc3 0.47 paymentisdueby10september2026.if invoice-subscription 0:7f7d98088133 0.48 foranyqueries,pleasecontactbilli invoice-subscription 0:7b14b8d2c5c4 0.00 page1of1 invoice-workspace 0:07f15cde5b18 0.15 kestrel +invoice-workspace 0:07f15cde5b18#1 1.76 kestrel invoice-workspace 0:52d6e3de4fa0 -0.16 invoice invoice-workspace 0:091019880d88 -0.37 kestrelcollaboration,inc. +invoice-workspace 0:091019880d88#1 1.17 kestrelcollaboration,inc. +invoice-workspace 0:091019880d88#2 1.36 kestrelcollaboration,inc. invoice-workspace 0:9167e0470dae -0.31 500howardstreet,6thfloor invoice-workspace 0:efa5e1529794 -0.28 sanfrancisco,ca94105 invoice-workspace 0:fd7321c405f8 -0.24 unitedstates invoice-workspace 0:d3c6f273c22d -0.24 vatid:us77-0560185 invoice-workspace 0:6282391a4cc1 -0.31 invoicenumber: invoice-workspace 0:b13757c9a6fc -0.30 inv-2024-0003521 +invoice-workspace 0:b13757c9a6fc#1 0.98 inv-2024-0003521 invoice-workspace 0:8d05f5d55191 -0.29 invoicedate: invoice-workspace 0:8da43dd45024 -0.27 27may2024 invoice-workspace 0:d39366fa1423 -0.26 billingperiod: @@ -2924,11 +3262,14 @@ invoice-workspace 0:18e2cca1098e -0.21 paymentterms: invoice-workspace 0:98ec3d1fd5b9 -0.20 net30 invoice-workspace 0:0e0fb0fc0939 -0.19 duedate: invoice-workspace 0:f1e2a60122bd -0.18 26june2024 +invoice-workspace 0:f1e2a60122bd#1 0.12 26june2024 invoice-workspace 0:aeba3a7b3598 -0.18 billto invoice-workspace 0:45fe04dbae24 -0.22 brightfutureltd. +invoice-workspace 0:45fe04dbae24#1 -0.22 brightfutureltd. invoice-workspace 0:65405af34bf9 -0.17 45kingstreet invoice-workspace 0:494f1a937311 -0.16 manchesterm27az invoice-workspace 0:2474519f77a9 -0.16 unitedkingdom +invoice-workspace 0:2474519f77a9#1 -0.16 unitedkingdom invoice-workspace 0:c7a9cfdd1c55 -0.13 vatid:gb987654321 invoice-workspace 0:725a8f5062e7 -0.18 shipto invoice-workspace 0:6d835e737af6 -0.17 unit4,riversidepark @@ -2948,14 +3289,18 @@ invoice-workspace 0:3007667b4e18 0.29 enterprisekeymanagement invoice-workspace 0:162e9c93c528 0.34 customer-managedencryptionkeys invoice-workspace 0:a33a54a73112 0.35 add-on invoice-workspace 0:d66c66a96157 0.35 100.00 +invoice-workspace 0:d66c66a96157#1 0.35 100.00 invoice-workspace 0:0036ebf2cfb2 0.27 prioritysupport invoice-workspace 0:51833276172f 0.32 namedengineerandresponsetarget invoice-workspace 0:fe6d3468cf5c 0.33 standard invoice-workspace 0:a99210875f11 0.33 50.00 +invoice-workspace 0:a99210875f11#1 0.33 50.00 invoice-workspace 0:14209e8ccd53 0.45 workflowautomation invoice-workspace 0:31be3ff05457 0.50 templatesandscheduledruns invoice-workspace 0:7f0f70e643bc 0.51 included invoice-workspace 0:561b2814d3c0 0.51 0.00 +invoice-workspace 0:561b2814d3c0#1 0.51 0.00 +invoice-workspace 0:561b2814d3c0#2 0.76 0.00 invoice-workspace 0:3c7ade679fdf 1.12 paymentdetails invoice-workspace 0:944d398aea60 1.21 bankname: invoice-workspace 0:a18e9fdf120e 1.21 bayunionbank,n.a. @@ -2985,11 +3330,13 @@ invoice-workspace 0:3c72ba0e1eb8 1.33 500howardstreet,6thfloor,sanfran invoice-workspace 0:9e2917e23527 1.32 kestrel.example invoice-workspace 0:7b14b8d2c5c4 -0.05 page1of1 letter-blue_banner 0:8f1010120ed6 0.42 jordanrivera +letter-blue_banner 0:8f1010120ed6#1 -0.02 jordanrivera letter-blue_banner 0:8d7a2cca3060 -0.20 +442055551000|jordan.rivera@exam letter-blue_banner 0:bef81b541365 -0.21 dearhiringteamatnorthwindsystems letter-blue_banner 0:a71e98216baa -0.08 iwouldwelcometheopportunitytobri letter-blue_banner 0:80a6a628ad52 -0.05 sincerely, letter-boxed_sections 0:8f1010120ed6 0.46 jordanrivera +letter-boxed_sections 0:8f1010120ed6#1 -0.37 jordanrivera letter-boxed_sections 0:8d7a2cca3060 -0.12 +442055551000|jordan.rivera@exam letter-boxed_sections 0:bef81b541365 -0.41 dearhiringteamatnorthwindsystems letter-boxed_sections 0:ab54410ead82 -0.71 iamexcitedtosharemyinterestinthe @@ -2999,6 +3346,7 @@ letter-boxed_sections 0:dab2d688b7ab -0.69 adoptioneasierfortherestofthetea letter-boxed_sections 0:a71e98216baa -0.39 iwouldwelcometheopportunitytobri letter-boxed_sections 0:80a6a628ad52 -0.38 sincerely, letter-centered_headline 0:8f1010120ed6 -0.50 jordanrivera +letter-centered_headline 0:8f1010120ed6#1 -0.06 jordanrivera letter-centered_headline 0:2d58f0cadc2d -0.18 platformengineer letter-centered_headline 0:8d7a2cca3060 -0.23 +442055551000|jordan.rivera@exam letter-centered_headline 0:bef81b541365 -0.25 dearhiringteamatnorthwindsystems @@ -3007,6 +3355,7 @@ letter-centered_headline 0:dab2d688b7ab 0.14 adoptioneasierfortherestofthetea letter-centered_headline 0:a71e98216baa -0.12 iwouldwelcometheopportunitytobri letter-centered_headline 0:80a6a628ad52 -0.09 sincerely, letter-classic_serif 0:8f1010120ed6 -0.15 jordanrivera +letter-classic_serif 0:8f1010120ed6#1 0.02 jordanrivera letter-classic_serif 0:8d7a2cca3060 0.19 +442055551000|jordan.rivera@exam letter-classic_serif 0:bef81b541365 0.20 dearhiringteamatnorthwindsystems letter-classic_serif 0:ab54410ead82 -0.08 iamexcitedtosharemyinterestinthe @@ -3016,6 +3365,7 @@ letter-classic_serif 0:dd474e249222 -0.15 makeadoptioneasierfortherestofth letter-classic_serif 0:a71e98216baa 0.07 iwouldwelcometheopportunitytobri letter-classic_serif 0:80a6a628ad52 0.05 sincerely, letter-compact_mono 0:8f1010120ed6 0.31 jordanrivera +letter-compact_mono 0:8f1010120ed6#1 -0.13 jordanrivera letter-compact_mono 0:f9e4560bd641 -0.24 london,uk/+442055551000/jordan.r letter-compact_mono 0:bef81b541365 -0.08 dearhiringteamatnorthwindsystems letter-compact_mono 0:1382a6e37675 -0.35 ienjoytranslatingfuzzyworkflowre @@ -3023,6 +3373,7 @@ letter-compact_mono 0:d8e633770b49 -0.38 easierfortherestoftheteam. letter-compact_mono 0:a71e98216baa -0.13 iwouldwelcometheopportunitytobri letter-compact_mono 0:80a6a628ad52 -0.12 sincerely, letter-editorial_blue 0:8f1010120ed6 0.45 jordanrivera +letter-editorial_blue 0:8f1010120ed6#1 8.86 jordanrivera letter-editorial_blue 0:2d58f0cadc2d 0.22 platformengineer letter-editorial_blue 0:1b28eb6a9a2e 0.14 +442055551000-london,uk letter-editorial_blue 0:8817bf9310b6 0.11 jordan.rivera@example.com|linked @@ -3031,6 +3382,7 @@ letter-editorial_blue 0:0c42fe9f3491 -0.15 ienjoytranslatingfuzzyworkflowre letter-editorial_blue 0:dda41d31bb3c -0.15 thatmakeadoptioneasierfortherest letter-editorial_blue 0:80a6a628ad52 8.86 sincerely, letter-engineering_resume 0:8f1010120ed6 0.15 jordanrivera +letter-engineering_resume 0:8f1010120ed6#1 -1.41 jordanrivera letter-engineering_resume 0:2d58f0cadc2d -0.25 platformengineer letter-engineering_resume 0:fbeea547d99e -0.21 london,uk letter-engineering_resume 0:89674e6f130e -0.20 +442055551000 @@ -3041,6 +3393,7 @@ letter-engineering_resume 0:bef81b541365 -1.40 dearhiringteamatnorthwindsystems letter-engineering_resume 0:a71e98216baa -1.40 iwouldwelcometheopportunitytobri letter-engineering_resume 0:80a6a628ad52 -1.41 sincerely, letter-executive 0:8f1010120ed6 -0.50 jordanrivera +letter-executive 0:8f1010120ed6#1 -0.10 jordanrivera letter-executive 0:89ff05847e96 -0.28 london,uk|+442055551000 letter-executive 0:8817bf9310b6 -0.30 jordan.rivera@example.com|linked letter-executive 0:bef81b541365 -0.20 dearhiringteamatnorthwindsystems @@ -3052,6 +3405,7 @@ letter-executive 0:7c5a9817c868 0.18 iwouldwelcometheopportunitytobri letter-executive 0:4012eb4b05db 0.18 group. letter-executive 0:80a6a628ad52 -0.10 sincerely, letter-mint-editorial-letter 0:8f1010120ed6 -1.30 jordanrivera +letter-mint-editorial-letter 0:8f1010120ed6#1 -0.16 jordanrivera letter-mint-editorial-letter 0:2d58f0cadc2d -0.27 platformengineer letter-mint-editorial-letter 0:bef81b541365 -0.16 dearhiringteamatnorthwindsystems letter-mint-editorial-letter 0:ab54410ead82 0.29 iamexcitedtosharemyinterestinthe @@ -3061,6 +3415,7 @@ letter-mint-editorial-letter 0:dd474e249222 0.29 makeadoptioneasierfortherestoft letter-mint-editorial-letter 0:a71e98216baa -0.16 iwouldwelcometheopportunitytobri letter-mint-editorial-letter 0:80a6a628ad52 -0.16 sincerely, letter-modern_professional 0:8f1010120ed6 0.00 jordanrivera +letter-modern_professional 0:8f1010120ed6#1 -0.13 jordanrivera letter-modern_professional 0:89ff05847e96 0.14 london,uk|+442055551000 letter-modern_professional 0:8817bf9310b6 0.11 jordan.rivera@example.com|linked letter-modern_professional 0:bef81b541365 -0.13 dearhiringteamatnorthwindsystems @@ -3084,6 +3439,7 @@ letter-monogram_sidebar 0:a71e98216baa -0.23 iwouldwelcometheopportunitytobri letter-monogram_sidebar 0:80a6a628ad52 -0.23 sincerely, letter-monogram_sidebar 0:8f1010120ed6 -0.23 jordanrivera letter-nordic_clean 0:8f1010120ed6 0.15 jordanrivera +letter-nordic_clean 0:8f1010120ed6#1 -0.11 jordanrivera letter-nordic_clean 0:2d58f0cadc2d -0.20 platformengineer letter-nordic_clean 0:fbeea547d99e -0.20 london,uk letter-nordic_clean 0:89674e6f130e -0.18 +442055551000 @@ -3098,6 +3454,7 @@ letter-nordic_clean 0:27c5581ffbbc -0.39 restoftheteam. letter-nordic_clean 0:a71e98216baa -0.14 iwouldwelcometheopportunitytobri letter-nordic_clean 0:80a6a628ad52 -0.14 sincerely, letter-panel 0:8f1010120ed6 -0.40 jordanrivera +letter-panel 0:8f1010120ed6#1 0.16 jordanrivera letter-panel 0:2d58f0cadc2d 0.12 platformengineer letter-panel 0:89ff05847e96 0.19 london,uk|+442055551000 letter-panel 0:8817bf9310b6 0.21 jordan.rivera@example.com|linked @@ -3110,6 +3467,7 @@ letter-panel 0:7c5a9817c868 -0.09 iwouldwelcometheopportunitytobri letter-panel 0:4012eb4b05db -0.07 group. letter-panel 0:80a6a628ad52 0.15 sincerely, letter-sidebar_portrait 0:8f1010120ed6 -0.73 jordanrivera +letter-sidebar_portrait 0:8f1010120ed6#1 -0.13 jordanrivera letter-sidebar_portrait 0:2d58f0cadc2d -0.23 platformengineer letter-sidebar_portrait 0:8d7a2cca3060 -0.22 +442055551000|jordan.rivera@exam letter-sidebar_portrait 0:bef81b541365 -0.28 dearhiringteamatnorthwindsystems @@ -3121,6 +3479,7 @@ letter-sidebar_portrait 0:7c5a9817c868 -0.43 iwouldwelcometheopportunitytobri letter-sidebar_portrait 0:4012eb4b05db -0.41 group. letter-sidebar_portrait 0:80a6a628ad52 -0.14 sincerely, letter-timeline_minimal 0:8f1010120ed6 0.15 jordanrivera +letter-timeline_minimal 0:8f1010120ed6#1 1.52 jordanrivera letter-timeline_minimal 0:2d58f0cadc2d -0.40 platformengineer letter-timeline_minimal 0:fbeea547d99e -0.19 london,uk letter-timeline_minimal 0:89674e6f130e -0.19 +442055551000 @@ -3199,13 +3558,15 @@ proposal-editorial 1:c51faa148557 -45.06 focus proposal-editorial 1:caa79af4db67 -45.06 duration proposal-editorial 1:e0ee8bb50685 -45.06 output proposal-editorial 1:9a5c531db125 -44.88 01discover -proposal-editorial 1:99b15ca862e5 -44.88 1week +proposal-editorial 1:99b15ca862e5 32.62 1week +proposal-editorial 1:99b15ca862e5#1 -122.18 1week proposal-editorial 1:7817fa5085e2 -43.65 research,audit,insights,and proposal-editorial 1:73dff70e25ad -45.15 strategy proposal-editorial 1:ddfbc608570a -43.65 discoveryreport&creative proposal-editorial 1:93c4abe27cf1 -45.15 direction proposal-editorial 1:9285b279249c -44.78 02design -proposal-editorial 1:b183847fe9f8 -44.78 2weeks +proposal-editorial 1:b183847fe9f8 25.92 2weeks +proposal-editorial 1:b183847fe9f8#1 -115.15 2weeks proposal-editorial 1:1e0716635ae3 -43.55 brandrefinementandwebsite proposal-editorial 1:80f5fb36f074 -45.05 ux/uidesign proposal-editorial 1:ad5e8a376247 -43.55 designsystem&high-fidelity @@ -3344,9 +3705,11 @@ proposal-modern 0:02195b8e9896 -0.47 phase proposal-modern 0:caa79af4db67 -0.47 duration proposal-modern 0:41ffd8b76afc -0.47 details proposal-modern 0:fa44132b238e -0.25 discovery +proposal-modern 0:fa44132b238e#1 0.25 discovery proposal-modern 0:b183847fe9f8 -0.25 2weeks proposal-modern 0:4b20bfb69ca7 -0.25 stakeholderinterviews+audit proposal-modern 0:44575cf5b285 -0.15 build +proposal-modern 0:44575cf5b285#1 0.25 build proposal-modern 0:5a6b4bf425f2 -0.15 6weeks proposal-modern 0:7a802048127d -0.15 engine+templatemigration proposal-modern 0:f9b21c4bda58 0.09 investment @@ -3437,12 +3800,14 @@ proposal-northline 1:caa79af4db67 0.11 duration proposal-northline 1:e0ee8bb50685 0.11 output proposal-northline 1:9a5c531db125 0.29 01discover proposal-northline 1:99b15ca862e5 0.29 1week +proposal-northline 1:99b15ca862e5#1 0.49 1week proposal-northline 1:7817fa5085e2 0.87 research,audit,insights,and proposal-northline 1:73dff70e25ad 0.17 strategy proposal-northline 1:ddfbc608570a 0.87 discoveryreport&creative proposal-northline 1:93c4abe27cf1 0.17 direction proposal-northline 1:9285b279249c 0.39 02design proposal-northline 1:b183847fe9f8 0.39 2weeks +proposal-northline 1:b183847fe9f8#1 0.72 2weeks proposal-northline 1:1e0716635ae3 0.97 brandrefinementandwebsite proposal-northline 1:80f5fb36f074 0.27 ux/uidesign proposal-northline 1:ad5e8a376247 0.97 designsystem&high-fidelity @@ -3496,6 +3861,8 @@ receipt-modern 0:e885a92f5bb7 0.18 generatedon09august2026 receipt-modern 0:c288dd6df716 0.19 referencenwp-4821-0067 receipt-modern 0:9de2a2d7cd7a 0.18 amountcollected receipt-modern 0:465691680b99 0.03 £66.62 +receipt-modern 0:465691680b99#1 0.29 £66.62 +receipt-modern 0:465691680b99#2 0.29 £66.62 receipt-modern 0:4260e5ae365d 0.20 directdebitcollectedbyharbourfin receipt-modern 0:4ddb3e96801a 0.18 completed receipt-modern 0:a22e6dacae05 0.24 valuedate07jul2026 @@ -3567,7 +3934,42 @@ rota-cobalt 0:cc96b22615e5 1.42 pianist19:00 rota-cobalt 0:bc14a4ce6407 2.17 statuslegend rota-cobalt 0:1f58b9145b24 2.23 request rota-cobalt 0:b4dc66dde806 2.23 off +rota-cobalt 0:b4dc66dde806#1 2.24 off +rota-cobalt 0:b4dc66dde806#2 2.24 off +rota-cobalt 0:b4dc66dde806#3 2.35 off +rota-cobalt 0:b4dc66dde806#4 2.35 off +rota-cobalt 0:b4dc66dde806#5 2.40 off +rota-cobalt 0:b4dc66dde806#6 2.40 off +rota-cobalt 0:b4dc66dde806#7 2.40 off +rota-cobalt 0:b4dc66dde806#8 2.60 off +rota-cobalt 0:b4dc66dde806#9 2.60 off +rota-cobalt 0:b4dc66dde806#10 2.81 off +rota-cobalt 0:b4dc66dde806#11 2.81 off +rota-cobalt 0:b4dc66dde806#12 2.92 off +rota-cobalt 0:b4dc66dde806#13 3.03 off +rota-cobalt 0:b4dc66dde806#14 3.03 off +rota-cobalt 0:b4dc66dde806#15 3.13 off +rota-cobalt 0:b4dc66dde806#16 3.13 off +rota-cobalt 0:b4dc66dde806#17 3.13 off +rota-cobalt 0:b4dc66dde806#18 3.08 off +rota-cobalt 0:b4dc66dde806#19 3.09 off +rota-cobalt 0:b4dc66dde806#20 3.09 off rota-cobalt 0:cdc2def9aec4 2.23 hol +rota-cobalt 0:cdc2def9aec4#1 2.91 hol +rota-cobalt 0:cdc2def9aec4#2 2.91 hol +rota-cobalt 0:cdc2def9aec4#3 2.91 hol +rota-cobalt 0:cdc2def9aec4#4 2.91 hol +rota-cobalt 0:cdc2def9aec4#5 2.91 hol +rota-cobalt 0:cdc2def9aec4#6 2.91 hol +rota-cobalt 0:cdc2def9aec4#7 2.92 hol +rota-cobalt 0:cdc2def9aec4#8 3.03 hol +rota-cobalt 0:cdc2def9aec4#9 3.08 hol +rota-cobalt 0:cdc2def9aec4#10 3.08 hol +rota-cobalt 0:cdc2def9aec4#11 3.08 hol +rota-cobalt 0:cdc2def9aec4#12 3.09 hol +rota-cobalt 0:cdc2def9aec4#13 3.30 hol +rota-cobalt 0:cdc2def9aec4#14 3.30 hol +rota-cobalt 0:cdc2def9aec4#15 3.30 hol rota-cobalt 0:08c4242b5f58 2.23 stock rota-cobalt 0:f8f8922da592 2.23 standby rota-cobalt 0:c2fb788c7dee 2.23 training @@ -3583,22 +3985,74 @@ rota-cobalt 0:1b4471920f01 2.22 l72/d83 rota-cobalt 0:288965a1f2c8 2.12 management rota-cobalt 0:6a61eb7383e8 2.23 rosa rota-cobalt 0:3bb0f0bb5552 2.24 09:00-18:00 +rota-cobalt 0:3bb0f0bb5552#1 2.40 09:00-18:00 +rota-cobalt 0:3bb0f0bb5552#2 2.40 09:00-18:00 +rota-cobalt 0:3bb0f0bb5552#3 2.92 09:00-18:00 rota-cobalt 0:9fff4d6be39d 2.24 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#1 2.24 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#2 1.67 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#3 2.35 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#4 2.35 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#5 2.81 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#6 2.81 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#7 2.92 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#8 3.03 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#9 3.13 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#10 3.13 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#11 3.13 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#12 2.41 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#13 2.41 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#14 2.41 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#15 3.09 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#16 2.41 16:00-01:00 +rota-cobalt 0:9fff4d6be39d#17 2.41 16:00-01:00 rota-cobalt 0:1017e02ccc77 2.24 08:00-18:00 rota-cobalt 0:e669544e9895 1.45 08:00-16:00 +rota-cobalt 0:e669544e9895#1 2.23 08:00-16:00 rota-cobalt 0:19c30663e8ef 1.51 16:00-21:00 +rota-cobalt 0:19c30663e8ef#1 2.30 16:00-21:00 rota-cobalt 0:c9affe7f7587 2.34 tomas rota-cobalt 0:6d43df86fe4b 2.35 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#1 2.35 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#2 2.40 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#3 2.60 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#4 2.60 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#5 2.24 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#6 3.03 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#7 2.35 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#8 3.13 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#9 3.09 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#10 2.62 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#11 3.30 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#12 3.30 16:00-00:00 +rota-cobalt 0:6d43df86fe4b#13 2.62 16:00-00:00 rota-cobalt 0:5a5f719aae11 1.65 11:00-16:00 rota-cobalt 0:df9ba122242c 2.27 bartenders rota-cobalt 0:dbaf86dd80e3 2.39 nadia rota-cobalt 0:0cdd9d9e75dc 1.60 09:00-16:00 +rota-cobalt 0:0cdd9d9e75dc#1 1.81 09:00-16:00 +rota-cobalt 0:0cdd9d9e75dc#2 2.01 09:00-16:00 +rota-cobalt 0:0cdd9d9e75dc#3 2.01 09:00-16:00 rota-cobalt 0:f1e2ce9aa575 1.67 16:00-22:00 +rota-cobalt 0:f1e2ce9aa575#1 1.87 16:00-22:00 +rota-cobalt 0:f1e2ce9aa575#2 1.87 16:00-22:00 +rota-cobalt 0:f1e2ce9aa575#3 2.08 16:00-22:00 +rota-cobalt 0:f1e2ce9aa575#4 2.08 16:00-22:00 rota-cobalt 0:de7ee76e7373 2.60 elias rota-cobalt 0:61587c4c0d6d 2.60 09:00-17:00 rota-cobalt 0:7195a8ed72b9 1.81 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#1 2.22 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#2 2.33 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#3 2.39 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#4 2.39 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#5 2.39 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#6 2.40 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#7 2.40 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#8 2.60 12:00-16:00 +rota-cobalt 0:7195a8ed72b9#9 2.60 12:00-16:00 rota-cobalt 0:953cb9ba8128 2.80 mirela rota-cobalt 0:c1298a6e85c2 2.81 12:00-18:00 +rota-cobalt 0:c1298a6e85c2#1 2.92 12:00-18:00 rota-cobalt 0:86846e84f9bf 2.91 sofia rota-cobalt 0:effcc54ba75f 2.91 karol rota-cobalt 0:5c1e134d2d34 3.02 henrik diff --git a/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv b/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv index b55a7ea73..005c38990 100644 --- a/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv +++ b/qa/src/test/resources/docx-fidelity/libreoffice-windows.tsv @@ -1,64 +1,64 @@ -# libreoffice on windows +# libreoffice build bce0998afefd on windows document engine_pages editor_pages lines matched median p90 over2 -cv-blue_banner 2 2 53 41 0.12 0.20 0 +cv-blue_banner 2 2 54 42 0.12 0.20 0 cv-boxed_sections 2 2 58 55 0.29 0.46 0 -cv-centered_headline 2 2 57 51 0.20 0.59 0 -cv-charcoal_gold 1 1 81 79 2.94 3.28 79 -cv-classic_serif 2 2 56 52 0.24 12.20 8 +cv-centered_headline 2 2 58 52 0.20 0.62 0 +cv-charcoal_gold 1 1 85 83 2.94 3.29 83 +cv-classic_serif 2 2 57 53 0.24 12.20 9 cv-compact_mono 1 1 58 50 0.26 0.90 0 -cv-editorial_blue 2 2 81 75 0.41 10.06 9 +cv-editorial_blue 2 2 82 76 0.41 10.06 9 cv-engineering_resume 1 1 57 47 0.55 9.12 14 cv-executive 2 2 60 60 0.24 3.10 15 -cv-midnight_navy 1 1 83 76 3.20 17.12 70 +cv-midnight_navy 1 1 86 79 3.16 17.11 73 cv-minimal_underlined 2 2 59 57 0.69 13.40 9 cv-mint_editorial 2 2 59 59 0.27 0.60 0 -cv-modern_professional 2 2 60 58 0.12 0.54 5 +cv-modern_professional 2 2 61 59 0.12 0.59 5 cv-monogram_sidebar 1 1 53 50 3.57 5.69 50 -cv-navy_sidebar 1 1 68 68 2.82 3.03 68 +cv-navy_sidebar 1 1 71 71 2.81 3.03 71 cv-nordic_clean 1 1 63 53 0.38 9.61 21 -cv-orange_ops 1 2 107 5 81.97 81.97 5 +cv-orange_ops 1 2 108 5 81.97 81.97 5 cv-panel 1 1 79 69 0.37 0.78 0 -cv-professional_sidebar 1 1 66 60 2.72 2.90 60 -cv-serif_headline 1 1 101 93 0.40 1.47 8 +cv-professional_sidebar 1 1 68 62 2.72 2.90 62 +cv-serif_headline 1 1 103 95 0.40 1.47 7 cv-sidebar_portrait 1 1 49 47 2.78 3.02 47 cv-slate_orange 1 1 87 84 3.26 3.70 84 cv-teal_pulse 1 1 57 55 0.22 0.65 0 -cv-terracotta_rail 1 1 97 95 0.49 0.94 0 +cv-terracotta_rail 1 1 102 100 0.49 0.94 0 cv-timeline_minimal 2 2 89 84 1.40 1.40 0 -cv-violet_grid 1 2 78 74 3.98 21.80 38 -invoice-classic 1 1 52 52 0.47 1.17 0 -invoice-classic_long 2 2 154 154 0.47 0.87 0 -invoice-consulting 1 1 84 84 0.92 1.61 3 -invoice-consulting_long 2 2 119 119 0.72 1.24 3 -invoice-luma_studio 1 1 84 84 0.12 0.55 3 -invoice-luma_studio_long 3 3 120 120 0.22 11.90 23 -invoice-merchant 1 2 80 78 0.21 0.67 0 -invoice-metered 1 1 87 87 0.25 0.65 0 -invoice-modern 1 1 52 52 0.32 0.52 0 -invoice-modern_long 2 2 152 152 0.35 0.52 0 -invoice-obsidian 1 1 74 74 0.29 0.85 0 -invoice-payments 1 1 89 85 0.40 1.06 2 -invoice-platform 1 1 97 97 0.27 0.41 0 -invoice-subscription 1 1 71 71 0.42 0.73 0 -invoice-workspace 1 1 79 79 0.33 1.13 0 -letter-blue_banner 1 1 9 5 0.20 0.42 0 -letter-boxed_sections 1 1 9 9 0.46 0.70 0 -letter-centered_headline 1 1 10 8 0.18 0.25 0 -letter-classic_serif 1 1 9 9 0.13 0.19 0 -letter-compact_mono 1 1 9 7 0.24 0.35 0 -letter-editorial_blue 1 1 11 8 0.15 0.45 1 -letter-engineering_resume 1 1 14 10 0.21 1.40 0 -letter-executive 1 1 11 11 0.18 0.30 0 -letter-mint-editorial-letter 1 1 9 9 0.29 0.29 0 -letter-modern_professional 1 1 11 11 0.43 0.43 0 +cv-violet_grid 1 2 80 76 5.71 21.81 40 +invoice-classic 1 1 56 56 0.47 1.17 0 +invoice-classic_long 2 2 166 166 0.47 0.87 0 +invoice-consulting 1 1 92 92 0.93 1.61 3 +invoice-consulting_long 2 2 236 236 0.88 1.41 3 +invoice-luma_studio 1 1 97 97 0.12 0.52 2 +invoice-luma_studio_long 3 3 192 192 0.24 11.83 22 +invoice-merchant 1 2 94 90 0.21 0.67 0 +invoice-metered 1 1 99 99 0.25 0.69 0 +invoice-modern 1 1 54 54 0.32 0.52 0 +invoice-modern_long 2 2 162 162 0.35 0.52 0 +invoice-obsidian 1 1 81 81 0.29 0.84 0 +invoice-payments 1 1 104 100 0.41 0.91 2 +invoice-platform 1 1 111 111 0.27 0.43 0 +invoice-subscription 1 1 81 81 0.42 0.73 0 +invoice-workspace 1 1 90 90 0.35 1.17 0 +letter-blue_banner 1 1 10 6 0.20 0.42 0 +letter-boxed_sections 1 1 10 10 0.46 0.70 0 +letter-centered_headline 1 1 11 9 0.14 0.25 0 +letter-classic_serif 1 1 10 10 0.13 0.19 0 +letter-compact_mono 1 1 10 8 0.24 0.35 0 +letter-editorial_blue 1 1 12 9 0.15 8.86 2 +letter-engineering_resume 1 1 15 11 0.21 1.41 0 +letter-executive 1 1 12 12 0.18 0.30 0 +letter-mint-editorial-letter 1 1 10 10 0.29 0.29 0 +letter-modern_professional 1 1 12 12 0.43 0.43 0 letter-monogram_sidebar 1 1 12 12 0.23 0.37 0 -letter-nordic_clean 1 1 14 14 0.18 0.38 0 -letter-panel 1 1 12 12 0.15 0.21 0 -letter-sidebar_portrait 1 1 11 11 0.43 0.51 0 -letter-timeline_minimal 1 1 14 14 1.32 1.52 0 -proposal-editorial 2 2 130 117 43.27 45.15 66 +letter-nordic_clean 1 1 15 15 0.16 0.38 0 +letter-panel 1 1 13 13 0.15 0.21 0 +letter-sidebar_portrait 1 1 12 12 0.43 0.51 0 +letter-timeline_minimal 1 1 15 15 1.32 1.52 0 +proposal-editorial 2 2 132 119 43.27 45.18 68 proposal-indigo 1 1 72 68 0.48 27.88 16 -proposal-modern 1 1 42 42 0.41 0.75 0 -proposal-northline 2 2 130 129 0.87 10.47 34 -receipt-modern 1 1 55 55 0.26 0.30 0 -rota-cobalt 1 1 67 64 2.22 2.91 41 +proposal-modern 1 1 44 44 0.41 0.75 0 +proposal-northline 2 2 132 131 0.78 10.47 34 +receipt-modern 1 1 57 57 0.26 0.29 0 +rota-cobalt 1 1 154 151 2.39 3.09 124