{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.TimerTrigger$TimerTriggerCause",
          "shortDescription" : "Started by timer"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 730,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
            "branch" : [
              {
                "SHA1" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
            "branch" : [
              {
                "SHA1" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
        "branch" : [
          {
            "SHA1" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
            "name" : "refs/remotes/origin/dev"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/younex1/erp-nuxt-frontend.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#730",
  "duration" : 64433,
  "estimatedDuration" : 71602,
  "executor" : None,
  "fullDisplayName" : "build-logship-frontend #730",
  "id" : "730",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 730,
  "queueId" : 5649,
  "result" : "SUCCESS",
  "timestamp" : 1788825600272,
  "url" : "https://jenkins.younex.de/view/all/job/build-logship-frontend/730/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/banking-lexoffice/eBay Payments_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv",
          "reference/banking-lexoffice/leitfaden_fuer_die_buchhaltung.pdf"
        ],
        "commitId" : "09cf3a9f16c449a1b1d2a51178b035a7eda02cc6",
        "timestamp" : 1788783186000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Tune Amazon Bezahlabgleich\u000a",
        "date" : "2026-09-07 14:13:06 +0200",
        "id" : "09cf3a9f16c449a1b1d2a51178b035a7eda02cc6",
        "msg" : "Tune Amazon Bezahlabgleich",
        "paths" : [
          {
            "editType" : "add",
            "file" : "reference/banking-lexoffice/eBay Payments_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv"
          },
          {
            "editType" : "add",
            "file" : "reference/banking-lexoffice/leitfaden_fuer_die_buchhaltung.pdf"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/utils/amazonLexoffice.ts",
          "app/components/accounting/SettlementGridFilters.vue",
          "server/utils/ebayFinancesApi.ts",
          "reference/banking-lexoffice/Amazon_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv",
          "app/components/accounting/SettlementToolbar.vue",
          "server/api/accounting/incoming-invoices/[id]/confirm.post.ts",
          "app/pages/accounting/amazon-settlements.vue",
          "app/composables/useLexofficeSettlementExport.ts",
          "app/utils/amazonFeeCodes.ts",
          "app/components/accounting/SettlementPeriodList.vue",
          "server/utils/amazonSpApi.ts",
          "app/components/accounting/SettlementSummaryStrip.vue",
          "app/utils/settlementViews.ts",
          "app/components/accounting/SettlementViewSwitch.vue",
          "app/utils/ebayLexoffice.ts",
          "app/utils/settlementGridFilter.ts",
          "app/components/accounting/SettlementSourceFields.vue",
          "app/pages/accounting/ebay-settlements.vue",
          "app/components/MainNavigationMenu.vue",
          "app/components/accounting/LexofficeHintsPanel.vue",
          "app/composables/menu/admin/accounting.ts"
        ],
        "commitId" : "ef7d4221f72b123c18900fe104eb9b44608eb18c",
        "timestamp" : 1788787440000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "add amazon settlement\u000a",
        "date" : "2026-09-07 15:24:00 +0200",
        "id" : "ef7d4221f72b123c18900fe104eb9b44608eb18c",
        "msg" : "add amazon settlement",
        "paths" : [
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementPeriodList.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementGridFilters.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MainNavigationMenu.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/amazonSpApi.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/LexofficeHintsPanel.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementSourceFields.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementSummaryStrip.vue"
          },
          {
            "editType" : "add",
            "file" : "app/utils/amazonLexoffice.ts"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useLexofficeSettlementExport.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/accounting/ebay-settlements.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/accounting.ts"
          },
          {
            "editType" : "add",
            "file" : "app/utils/amazonFeeCodes.ts"
          },
          {
            "editType" : "add",
            "file" : "app/utils/settlementViews.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/accounting/incoming-invoices/[id]/confirm.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/utils/ebayLexoffice.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementViewSwitch.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementToolbar.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/accounting/amazon-settlements.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/ebayFinancesApi.ts"
          },
          {
            "editType" : "add",
            "file" : "app/utils/settlementGridFilter.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/banking-lexoffice/Amazon_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/accounting/SettlementViewSwitch.vue",
          "app/components/accounting/SettlementGridFilters.vue",
          "app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue",
          "app/utils/settlementGridFilter.ts",
          "app/components/accounting/SettlementLexofficeActions.vue",
          "app/pages/accounting/amazon-settlements.vue",
          "server/api/invoices/lexoffice-reset.post.ts",
          "server/api/invoices/lexoffice-upload.post.ts",
          "app/composables/useLexofficeSettlementExport.ts",
          "server/utils/lexofficeCsvExportMark.ts",
          "server/api/accounting/amazon/settlement.get.ts",
          "server/api/accounting/lexoffice-csv-export.post.ts"
        ],
        "commitId" : "c2c7b9c16220cd0b336b5d3d7dbef95248c9c69e",
        "timestamp" : 1788790692000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Amazon settlements: Lexoffice upload/reset + CSV-export marker\u000a\u000aNach Order-ID view of /accounting/amazon-settlements can now upload the\u000ainvoices of the selected or all visible (filtered) orders to Lexoffice,\u000areset their upload status, and shows per order whether an invoice exists,\u000awhether it was uploaded to Lexoffice and whether the order already went out\u000ain a settlement CSV.\u000a\u000a- Checkbox row selection (pinned selection column, group selects filtered\u000a  descendants, header selects all filtered rows)\u000a- SettlementLexofficeActions: \"Lexoffice Upload\" (Auswahl / Alle sichtbaren)\u000a  and \"Zurücksetzen\" (upload status + CSV marker, both scopes); chunked\u000a  requests with progress, category modal reused from /sales/invoices\u000a- New grid columns \"Lexoffice\" and \"CSV-Export\" (AgLexofficeSyncStatus,\u000a  status shown on collapsed group rows, click = single upload/reset)\u000a- Filter card: new Lexoffice section (Rechnung / Lexoffice-Upload / CSV-Export)\u000a- CSV export marks all matched orders of the exported periods via new\u000a  onExported hook in useLexofficeSettlementExport\u000a- settlement.get.ts returns invoice upload status + order CSV marker;\u000a  C_Order columns isLexofficeCsvExported / lexofficeCsvExportDate are\u000a  optional (fail-soft retry without them until created in iDempiere)\u000a- lexoffice-upload/-reset now return uploadedIds / skippedIds / resetIds\u000a- New route accounting/lexoffice-csv-export (mark / reset orders)\u000a",
        "date" : "2026-09-07 16:18:12 +0200",
        "id" : "c2c7b9c16220cd0b336b5d3d7dbef95248c9c69e",
        "msg" : "Amazon settlements: Lexoffice upload/reset + CSV-export marker",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/accounting/SettlementGridFilters.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/invoices/lexoffice-reset.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/accounting/SettlementViewSwitch.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/accounting/SettlementLexofficeActions.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/accounting/amazon-settlements.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/invoices/lexoffice-upload.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useLexofficeSettlementExport.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/accounting/amazon/settlement.get.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/accounting/lexoffice-csv-export.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/lexofficeCsvExportMark.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/utils/settlementGridFilter.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/accounting/bank-reconciliation/index.vue"
        ],
        "commitId" : "269ecf4f253329ab9533a693ce3103ac4359f80a",
        "timestamp" : 1788791097000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Bank reconciliation: auto-complete statement when the last line is matched\u000a\u000aWhen a match (invoice, charge or linked payment) resolves the last open\u000aline of a Drafted C_BankStatement, the page now re-reads the lines from\u000athe server and, if all are matched, sends the Complete doc-action\u000aautomatically. The statement posts and its payments are marked\u000areconciled without a separate manual step.\u000a\u000a- completion logic extracted into runCompletion(); the manual\u000a  \"Auszug abschließen\" button keeps its confirm dialog and remains as a\u000a  retry if the automatic completion is rejected by iDempiere\u000a- on failure the alert states that all lines are matched but the\u000a  statement could not be closed automatically, with the backend reason\u000a- after completion the next oldest draft is auto-selected\u000a- progress hint tells the user the statement closes automatically once\u000a  the last position is matched\u000a",
        "date" : "2026-09-07 16:24:57 +0200",
        "id" : "269ecf4f253329ab9533a693ce3103ac4359f80a",
        "msg" : "Bank reconciliation: auto-complete statement when the last line is matched",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/accounting/bank-reconciliation/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/public/sign/[token]/document/[key].get.ts",
          "server/utils/offers/contractPackage.ts",
          ".gitignore",
          "app/composables/menu/admin/settings.ts",
          "server/api/legal-documents/[key]/index.put.ts",
          "app/components/offers/QuoteModal.vue",
          "CLAUDE.md",
          "server/api/legal-documents/[key]/pdf.get.ts",
          "app/composables/useOfferContract.ts",
          "server/utils/offers/staticAnnexes.ts",
          "server/utils/offers/offerAttachments.ts",
          "reference/contracts/DSLV-ADSp-2017.pdf",
          "server/api/offers/contract/signing-cancel.post.ts",
          "server/utils/offers/offerConditions.ts",
          "server/api/legal-documents/[key]/version/[id].get.ts",
          "server/api/offers/contract/sections.get.ts",
          "server/api/public/sign/[token]/request-renewal.post.ts",
          "reference/contracts/Logistik-AGB_2019_dt.pdf",
          "server/utils/legalDocsDb.ts",
          "server/utils/offers/agbPdf.ts",
          "app/pages/users/leads/[id]/edit.vue",
          "reference/contracts/KFP_DSVGO_2026.pdf",
          "reference/recipes.md",
          "server/api/public/sign/[token]/index.get.ts",
          "reference/README.md",
          "app/assets/langs/shared.js",
          "reference/ci/deploy-production.sh",
          "server/api/offers/contract/send.post.ts",
          "server/utils/offers/agbDefault.ts",
          "app/pages/settings/legal-documents/index.vue",
          "server/api/legal-documents/[key]/index.get.ts",
          "reference/ci/README.md",
          "app/pages/sign/[token].vue",
          "server/utils/offers/contractSigning.ts",
          "server/api/offers/last-offer.get.ts",
          "server/api/public/sign/[token]/index.post.ts",
          "server/api/offers/contract/signing-status.get.ts",
          "server/assets/offers/DSLV-ADSp-2017.pdf",
          "server/utils/offers/contractPdf.ts",
          "server/utils/offers/contractTexts.ts",
          "server/assets/offers/Logistik-AGB_2019_dt.pdf",
          "app/components/MainNavigationMenu.vue",
          "app/components/offers/ContractModal.vue",
          "app/components/sign/DocThumb.vue",
          "server/utils/offers/contractSigningDb.ts"
        ],
        "commitId" : "6b69cc2fe98bb650b6a1459eef13b9bdc8277e0c",
        "timestamp" : 1788794153000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Add new contract-offer system with online signing\u000a",
        "date" : "2026-09-07 17:15:53 +0200",
        "id" : "6b69cc2fe98bb650b6a1459eef13b9bdc8277e0c",
        "msg" : "Add new contract-offer system with online signing",
        "paths" : [
          {
            "editType" : "add",
            "file" : "reference/contracts/DSLV-ADSp-2017.pdf"
          },
          {
            "editType" : "add",
            "file" : "server/api/legal-documents/[key]/index.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/legal-documents/[key]/index.put.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/contracts/Logistik-AGB_2019_dt.pdf"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/contract/sections.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/recipes.md"
          },
          {
            "editType" : "add",
            "file" : "server/api/public/sign/[token]/index.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/offerConditions.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/agbPdf.ts"
          },
          {
            "editType" : "edit",
            "file" : ".gitignore"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/legal-documents/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/contract/signing-cancel.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferContract.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/agbDefault.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/last-offer.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/legalDocsDb.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/ci/README.md"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/contractSigning.ts"
          },
          {
            "editType" : "edit",
            "file" : "CLAUDE.md"
          },
          {
            "editType" : "add",
            "file" : "server/api/public/sign/[token]/request-renewal.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/contract/signing-status.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/public/sign/[token]/document/[key].get.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/ci/deploy-production.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/contracts/KFP_DSVGO_2026.pdf"
          },
          {
            "editType" : "add",
            "file" : "app/pages/sign/[token].vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/public/sign/[token]/index.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractPdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/settings.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/README.md"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/Logistik-AGB_2019_dt.pdf"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/staticAnnexes.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/offerAttachments.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/contractPackage.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/contractSigningDb.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MainNavigationMenu.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/ContractModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/legal-documents/[key]/version/[id].get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/legal-documents/[key]/pdf.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/contract/send.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractTexts.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/sign/DocThumb.vue"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/DSLV-ADSp-2017.pdf"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/offers/contract/send.post.ts",
          "server/utils/offers/contractPdf.ts",
          "server/utils/offers/contractTexts.ts",
          "app/components/offers/ContractModal.vue",
          "app/composables/useOfferContract.ts",
          "server/utils/offers/offerConditions.ts",
          "app/pages/sign/[token].vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "12f40ea2a7a75561d477750382f56b35924124ff",
        "timestamp" : 1788796254000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Contract modal: 0-month notice default, aligned rows, checkbox spacing, opt-in PDF attachments on signing mail\u000a\u000a- Kündigungsfrist defaults to 0; termination clause adapts (no notice / 1 month / N months + special right)\u000a- Parameter rows bottom-align inputs; shorter cure-period label\u000a- Spacing for contract-part, annex and signing checkboxes\u000a- New 'attach PDFs to link e-mail' option (default off); link-only mail text; persisted with conditions\u000a- Signing page: VAT hint now says German VAT ID may follow later but is required before shipping into Germany\u000a",
        "date" : "2026-09-07 17:50:54 +0200",
        "id" : "12f40ea2a7a75561d477750382f56b35924124ff",
        "msg" : "Contract modal: 0-month notice default, aligned rows, checkbox spacing, opt-in PDF attachments on signing mail",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferContract.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/contract/send.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractPdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractTexts.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/ContractModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sign/[token].vue"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/offerConditions.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/invoices/lexoffice-upload.post.ts",
          "server/utils/lexofficeClient.ts"
        ],
        "commitId" : "2a68c6e0f83f7e930afc900ceef1304612462a26",
        "timestamp" : 1788796819000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lexoffice upload: pipeline invoices concurrently, throttle Lexware calls\u000a\u000aThe upload processed invoices strictly one after another with two fixed 500 ms\u000asleeps per invoice (~4.7 s each on prod: 1.0 s sleeps, 1.2 s iDempiere PDF\u000arender, ~2.5 s Lexware calls). Lexware's upload endpoints return 202 before their\u000aasynchronous OCR, so there was never anything to wait for — the time was purely\u000aserial latency.\u000a\u000a- lexofficeClient.ts: new `lexFetch` — the single gateway for all Lexware traffic.\u000a  Process-wide pacing (>= 520 ms between call starts), max 2 calls in flight and\u000a  429/503 retry with backoff (honours Retry-After). All client helpers use it.\u000a- lexoffice-upload.post.ts: 3 invoices are worked on concurrently (worker pool),\u000a  so PDF rendering overlaps the Lexware round-trips; the hard-coded sleeps are\u000a  replaced by the throttle. Per-partner contact resolution is memoised for the\u000a  run so concurrent invoices of one partner can't create duplicate contacts.\u000a  Per-invoice logs are prefixed with the invoice id; result id lists keep the\u000a  caller's input order. Response contract unchanged.\u000a\u000aExpected: ~4.7 s -> ~1.5 s per invoice on bulk uploads.\u000a",
        "date" : "2026-09-07 18:00:19 +0200",
        "id" : "2a68c6e0f83f7e930afc900ceef1304612462a26",
        "msg" : "Lexoffice upload: pipeline invoices concurrently, throttle Lexware calls",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/invoices/lexoffice-upload.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/lexofficeClient.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/accounting/amazon-settlements.vue"
        ],
        "commitId" : "f409dbb222ee4bbe9fbf05ab0777df7eb128779a",
        "timestamp" : 1788796831000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Amazon settlements: show/filter Lexoffice + CSV status immediately after actions\u000a\u000aAfter uploading invoices or exporting a settlement CSV the row status was patched\u000ain place, but the \"Lexoffice\" / \"CSV-Export\" column set filters kept the value\u000alist they built from the initially loaded rows. A period that started with only\u000a\"Nein\" never offered \"Ja\", so filtering on the just-uploaded / just-exported rows\u000aonly worked after a full page reload.\u000a\u000a- refreshLexCells now refreshes both set filters' value lists\u000a  (getColumnFilterInstance -> refreshFilterValues) before re-running the filter,\u000a  and updates the filtered row count + lexStats in the same pass.\u000a- Both columns get `filterParams: { refreshValuesOnOpen: true }` as a safety net.\u000a",
        "date" : "2026-09-07 18:00:31 +0200",
        "id" : "f409dbb222ee4bbe9fbf05ab0777df7eb128779a",
        "msg" : "Amazon settlements: show/filter Lexoffice + CSV status immediately after actions",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/accounting/amazon-settlements.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/accounting/amazon-settlements.vue",
          "app/pages/sales/invoices/index.vue"
        ],
        "commitId" : "3dd6009da7e593917e3ea5287f39c505a6b94c09",
        "timestamp" : 1788796841000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lexoffice upload: send invoices in chunks of 20 per request\u000a\u000aThe sales invoices list sent every selected invoice id in a single request, so a\u000alarge selection became one very long HTTP request that could hit the proxy\u000atimeout. It now uploads in chunks of 20 ids sequentially and aggregates\u000auploaded / skipped / error counts into one toast. The Amazon settlements page\u000aalready chunked (10) — raised to 20 to match the faster concurrent server path\u000awhile keeping progress visible.\u000a",
        "date" : "2026-09-07 18:00:41 +0200",
        "id" : "3dd6009da7e593917e3ea5287f39c505a6b94c09",
        "msg" : "Lexoffice upload: send invoices in chunks of 20 per request",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/sales/invoices/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/accounting/amazon-settlements.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/recipes.md"
        ],
        "commitId" : "5049cd1e61d80ce33abfb9226f9a4fcf225ccd20",
        "timestamp" : 1788797057000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Recipes: Lexware uploads are async, lexFetch throttle, settlement grid set-filter refresh\u000a",
        "date" : "2026-09-07 18:04:17 +0200",
        "id" : "5049cd1e61d80ce33abfb9226f9a4fcf225ccd20",
        "msg" : "Recipes: Lexware uploads are async, lexFetch throttle, settlement grid set-filter refresh",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "reference/recipes.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/invoices/lexoffice-upload.post.ts"
        ],
        "commitId" : "e7af7d902afd9c8b492f5aae928dd5fd3ca0b1ff",
        "timestamp" : 1788797129000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lexoffice upload: guard against double uploads of the same invoice\u000a\u000a- Dedupe the requested ids: with concurrent workers a duplicated id could be\u000a  picked up by two workers at once (serial processing used to mask this).\u000a- Process-local in-progress set: overlapping requests (double-click, two tabs,\u000a  two users) that both pass the isUploadToLexoffice check before either has\u000a  marked the invoice now skip it with \"already being uploaded by another\u000a  request\" instead of uploading it twice.\u000a",
        "date" : "2026-09-07 18:05:29 +0200",
        "id" : "e7af7d902afd9c8b492f5aae928dd5fd3ca0b1ff",
        "msg" : "Lexoffice upload: guard against double uploads of the same invoice",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/invoices/lexoffice-upload.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/assets/offers/flyer/logos/amazon_icon.png",
          "server/assets/offers/flyer/warehouse_scanning_p.jpg",
          "server/assets/offers/flyer/barcode_scanner_t.jpg",
          "server/api/offers/flyer.get.ts",
          "server/assets/offers/flyer/forklift_aisle_p.jpg",
          "server/assets/offers/flyer/logyou-logo.png",
          "server/assets/offers/flyer/warehouse_scanning.jpg",
          "server/assets/offers/flyer/packing_station_p.jpg",
          "server/assets/offers/flyer/logos/xentral_logo.png",
          "server/assets/offers/flyer/delivery_truck_t.jpg",
          "server/assets/offers/flyer/screen-returns.png",
          "server/assets/offers/flyer/logos/shopify.png",
          "server/assets/offers/flyer/delivery_truck_p.jpg",
          "server/assets/offers/flyer/logship-logo-dark.png",
          "app/composables/useOfferQuote.ts",
          "server/assets/offers/flyer/delivery_truck.jpg",
          "server/assets/offers/flyer/forklift_aisle.jpg",
          "server/assets/offers/flyer/warehouse_shelves.jpg",
          "server/assets/offers/flyer/logos/dhlexpress.png",
          "server/assets/offers/flyer/logos/temu.png",
          "server/utils/offers/flyerTexts.ts",
          "server/assets/offers/flyer/ecommerce_packages.jpg",
          "server/utils/offers/contractSigning.ts",
          "server/assets/offers/flyer/warehouse_shelves_p.jpg",
          "server/assets/offers/flyer/forklift_aisle_t.jpg",
          "app/pages/flyer-demo/[screen].vue",
          "server/assets/offers/flyer/screen-orders.png",
          "server/assets/offers/flyer/barcode_scanner_p.jpg",
          "server/assets/offers/flyer/cardboard_boxes_t.jpg",
          "server/assets/offers/flyer/barcode_scanner.jpg",
          "reference/contracts/Monkatech x Hive - 20240701 - Angebot.pdf",
          "server/assets/offers/flyer/laptop_analytics_w.jpg",
          "server/assets/offers/flyer/packing_station.jpg",
          "server/utils/offers/flyerPdf.ts",
          "server/utils/offers/contractPackage.ts",
          "server/assets/offers/flyer/logos/dpd_logo_small.png",
          "app/components/offers/QuoteModal.vue",
          "server/assets/offers/flyer/logos/plentyone_logo.png",
          "server/assets/offers/flyer/cardboard_boxes.jpg",
          "app/composables/useOfferContract.ts",
          "server/assets/offers/flyer/logos/gls_logo_small.svg",
          "server/assets/offers/flyer/logos/jtl.png",
          "server/assets/offers/flyer/mobile_warehouse_p.jpg",
          "server/assets/offers/flyer/screen-dashboard.png",
          "reference/recipes.md",
          "app/assets/langs/shared.js",
          "server/assets/offers/flyer/logyou-logo-dark.png",
          "server/assets/offers/flyer/logos/shopware.png",
          "server/assets/offers/flyer/screen-shipments.png",
          "server/assets/offers/flyer/warehouse_scanning_w.jpg",
          "server/assets/offers/flyer/cardboard_boxes_p.jpg",
          "server/assets/offers/flyer/ecommerce_packages_w.jpg",
          "server/assets/offers/flyer/mobile_warehouse.jpg",
          "server/assets/offers/flyer/laptop_analytics.jpg",
          "server/assets/offers/flyer/screen-stock.png",
          "server/assets/offers/flyer/logship-logo-light.png",
          "server/assets/offers/flyer/logos/dhl_logo_small.png",
          "server/assets/offers/flyer/screen-mobile.png",
          "server/assets/offers/flyer/screen-tracking.png",
          "app/components/offers/ContractModal.vue",
          "server/assets/offers/flyer/logos/ebay.svg",
          "server/assets/offers/flyer/conveyor_packages_p.jpg",
          "server/assets/offers/flyer/conveyor_packages.jpg",
          "server/api/offers/quote/send.post.ts",
          "server/assets/offers/flyer/warehouse_shelves_t.jpg",
          "server/assets/offers/flyer/logship-mark.png",
          "server/assets/offers/flyer/logos/one_logo_small.png"
        ],
        "commitId" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
        "timestamp" : 1788798488000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Marketing flyer LogYou x LogShip: 16:9 PDF, opt-in attachment on quote/contract, dummy-data demo screens\u000a\u000a- server/utils/offers/flyerPdf.ts + flyerTexts.ts (DE/EN), assets under server/assets/offers/flyer\u000a- GET /api/offers/flyer (preview/download), contractPackage 'flyer' key (explicit opt-in), quote send attachment\u000a- Checkboxes (default off) in ContractModal and QuoteModal with preview link\u000a- /flyer-demo/* public dummy-data screens used for the app screenshots\u000a- ci: deploy script preserves new SQLite stores + signing PDFs; ci/README convention; recipes\u000a",
        "date" : "2026-09-07 18:28:08 +0200",
        "id" : "2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f",
        "msg" : "Marketing flyer LogYou x LogShip: 16:9 PDF, opt-in attachment on quote/contract, dummy-data demo screens",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferQuote.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/barcode_scanner_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/dpd_logo_small.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/plentyone_logo.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-mobile.png"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/ContractModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/conveyor_packages.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/conveyor_packages_p.jpg"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractSigning.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/recipes.md"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/quote/send.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/forklift_aisle_t.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/warehouse_scanning_w.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logyou-logo-dark.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/laptop_analytics_w.jpg"
          },
          {
            "editType" : "add",
            "file" : "app/pages/flyer-demo/[screen].vue"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/xentral_logo.png"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/flyer.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/delivery_truck.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-tracking.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/warehouse_shelves_t.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-returns.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/forklift_aisle.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/delivery_truck_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/cardboard_boxes.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/warehouse_shelves.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/cardboard_boxes_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-orders.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logyou-logo.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/packing_station_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "reference/contracts/Monkatech x Hive - 20240701 - Angebot.pdf"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/packing_station.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logship-mark.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/forklift_aisle_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/warehouse_shelves_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/warehouse_scanning_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/flyerTexts.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/barcode_scanner_t.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/shopify.png"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/gls_logo_small.svg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/jtl.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/ecommerce_packages.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/dhl_logo_small.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/laptop_analytics.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/mobile_warehouse_p.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-dashboard.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/shopware.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/warehouse_scanning.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/delivery_truck_t.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/ecommerce_packages_w.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/ebay.svg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/mobile_warehouse.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/one_logo_small.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/cardboard_boxes_t.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-stock.png"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferContract.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/barcode_scanner.jpg"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/amazon_icon.png"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractPackage.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/flyerPdf.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logship-logo-light.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/dhlexpress.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logos/temu.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/screen-shipments.png"
          },
          {
            "editType" : "add",
            "file" : "server/assets/offers/flyer/logship-logo-dark.png"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}