<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.TimerTrigger$TimerTriggerCause'><shortDescription>Started by timer</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigindev _class='hudson.plugins.git.util.Build'><buildNumber>743</buildNumber><marked><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/erp-nuxt-frontend.git</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.younex.de/job/build-logship-frontend/743/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/build-logship-frontend/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/build-logship-frontend/743/</displayUrl><testsUrl>https://jenkins.younex.de/job/build-logship-frontend/743/testReport</testsUrl></action><building>false</building><displayName>#743</displayName><duration>67622</duration><estimatedDuration>61503</estimatedDuration><fullDisplayName>build-logship-frontend #743</fullDisplayName><id>743</id><inProgress>false</inProgress><keepLog>false</keepLog><number>743</number><queueId>5760</queueId><result>SUCCESS</result><timestamp>1789948800765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/743/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>app/components/DateInputDe.vue</affectedPath><affectedPath>server/utils/inbox/inboxDb.ts</affectedPath><affectedPath>server/utils/inbox/processDocument.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/defaults.get.ts</affectedPath><affectedPath>server/utils/inbox/extractPipeline.ts</affectedPath><affectedPath>app/utils/inboxTaxRate.ts</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>server/utils/inbox/vendorDefaults.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/match-vendor.get.ts</affectedPath><affectedPath>server/utils/inbox/layoutFingerprint.ts</affectedPath><affectedPath>server/utils/inbox/vendorProfile.ts</affectedPath><affectedPath>server/utils/bankReconciliationSuggestions.ts</affectedPath><affectedPath>server/utils/inbox/fieldExtractors.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e5fb5e19ca99490429a576155ff11950f17eb139</commitId><timestamp>1789891865000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Incoming invoices: searchable vendor picker, amount-based tax detection, learning that actually applies

Review screen
- vendor picker is a real searchable selection (remembered -&gt; scored candidates -&gt; all vendors of
  the org + org *); "use existing" is never disabled; same-named partners show VAT id / id
- vendor matching scored in Node (VAT id, fuzzy name, partner name tokens on the letterhead,
  e-mail domain) instead of contains(Name, &lt;letterhead line&gt;); own organization is never suggested;
  non-vendor partners are offered and flagged IsVendor on confirm
- learned defaults are resolved LIVE (new GET .../[id]/defaults): document fingerprint -&gt; VAT id /
  IBAN -&gt; layout tokens -&gt; profiles of the selected partner -&gt; the partner's last AP invoice;
  re-resolved when another partner is picked, manually changed fields are never overwritten.
  Fixes: e-invoices never got their profile, documents uploaded before the first confirmation
  never saw it, vat:/layout: key mismatch
- doc type / currency / tax are never empty (document currency, 381 -&gt; AP credit memo, generic
  fallbacks); new cost type (charge) field, learned per vendor
- tax rate: only an e-invoice breakdown is authoritative, otherwise the amounts decide
  (gross == net -&gt; 0 %); no more invented "19 % detected"; warning only when the rate is certain;
  a contradicting tax amount (misread year) is replaced; learned tax preferred among same-rate taxes
- dates shown and entered as dd.mm.yyyy (new DateInputDe), vendor match no longer blocks the page

Confirm
- gross == net means no VAT (a bogus tax amount no longer yields an 810 % rate); the chosen tax is
  kept when its RATE fits instead of being replaced by the first tax of that rate
- learns the EFFECTIVE doc type / currency, and VAT id / IBAN / partner name also in reuse mode
- new vendor address: country from the e-invoice ISO code, else the default country

Extraction
- no guessed tax rate; rate only next to a tax label or when consistent with the amounts;
  section 19 UStG / reverse charge / intra-community phrases -&gt; 0 %; "Steuernummer"/"Tax ID" are
  no tax amounts
- tier 0 (ZUGFeRD/XRechnung) gets a layout signature too; signature tokens extended by file-name
  pattern and e-invoice XMP markers (fuzzy tokens only - learned layout hashes keep matching)
- sha256 file signature + duplicate-upload badge in list and review

Inbox list
- list view and the "ready to review" filter are the default
- action icons sit in fixed slots, a missing action leaves its slot empty
- period filter uses dd.mm.yyyy
</comment><date>2026-09-20 10:11:05 +0200</date><id>e5fb5e19ca99490429a576155ff11950f17eb139</id><msg>Incoming invoices: searchable vendor picker, amount-based tax detection, learning that actually applies</msg><path><editType>edit</editType><file>server/utils/inbox/fieldExtractors.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/vendorProfile.ts</file></path><path><editType>add</editType><file>server/utils/inbox/vendorDefaults.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/match-vendor.get.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/processDocument.ts</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>edit</editType><file>server/utils/inbox/layoutFingerprint.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/extractPipeline.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>add</editType><file>app/components/DateInputDe.vue</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>add</editType><file>server/api/accounting/incoming-invoices/[id]/defaults.get.ts</file></path><path><editType>add</editType><file>app/utils/inboxTaxRate.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/inboxDb.ts</file></path><path><editType>edit</editType><file>server/utils/bankReconciliationSuggestions.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/incoming-invoices/next-review.get.ts</affectedPath><affectedPath>app/composables/useInboxBookedToast.ts</affectedPath><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>app/components/SelectBox.vue</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>10b0c575f7a675c2b8f21559877718a2f9bc874f</commitId><timestamp>1789893719000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Incoming invoices review: Nuxt UI selects, complete &amp; next / back, review browsing, booked toast + animated counts

- review screen no longer uses tedir-select / ComboBox: doc type, currency, tax, cost type and the
  vendor picker run on the global SelectBox wrapper (USelectMenu); vendor options show VAT id /
  partner id as searchable subtext, cost type is clearable; triggers aligned with the Bulma inputs
- SelectBox wrapper: opt-in filterProps (search more than the label) and virtualize
- two booking buttons: "Complete &amp; Back" (return to the inbox) and "Complete &amp; Next" (rightmost,
  continues with the next document waiting for review; falls back to the inbox when none is left);
  reject is an icon button so the bar stays on one row
- browsing bar on top of the review (inbox / previous / position / next) - pure navigation, nothing
  is saved; new GET next-review returns the open ids in inbox order + the next id
- after booking the inbox shows a success toast (warning toast when completion failed / booked
  net) with an "open invoice" action; shared useInboxBookedToast, hand-off via useInboxJustBooked
- inbox status chips tween their counts and pulse with a floating +1 / -1 on every change
  (upload -&gt; processing -&gt; ready to review -&gt; booked); the kept-alive inbox now refetches on
  re-activation; the just-booked row flashes; prefers-reduced-motion respected
</comment><date>2026-09-20 10:41:59 +0200</date><id>10b0c575f7a675c2b8f21559877718a2f9bc874f</id><msg>Incoming invoices review: Nuxt UI selects, complete &amp; next / back, review browsing, booked toast + animated counts</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/accounting/incoming-invoices/next-review.get.ts</file></path><path><editType>edit</editType><file>app/components/SelectBox.vue</file></path><path><editType>add</editType><file>app/composables/useInboxBookedToast.ts</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>server/utils/inbox/vendorProfile.ts</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>app/utils/inboxVendor.ts</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>server/utils/inbox/extractPipeline.ts</affectedPath><affectedPath>app/utils/inboxTaxRate.ts</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>285b6c4dd798b3b06091c9a7012d476762217e0a</commitId><timestamp>1789896144000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Incoming invoices: vendor filter / sort / grouping with review working set, meaningful confidence score, amount reconciliation

Inbox list
- vendor facet filter with counts (same vendor = first segment of the letterhead line, ignoring
  case / punctuation / legal form; a learned profile name wins), sort select (last uploaded,
  invoice date, vendor, amount, recognition %) with direction, group-by-vendor headers
- default = no vendor filter, no grouping, last uploaded on top; sort/group are not remembered
  across visits; rows show the short vendor label
- opening a review from a filtered / re-sorted list stores that result set as the WORKING SET
  (useInboxReviewQueue + sessionStorage): the review's previous / next, the position counter and
  "complete &amp; next" walk exactly that set in that order; a chip shows it and clears it; booked
  documents leave the set, an exhausted set returns to the inbox

Confidence badge
- was a plain average over ALL stored confidences, including internal helper keys with fixed
  heuristic values (currency 0.6, taxBasisTotal 0.5, taxes, isTaxIncluded 0.7) - a perfectly read
  document could not get past ~85-90 %. Now weighted over the fields a reviewer checks (number,
  date, vendor, net / tax / gross); amounts that add up are trusted, amounts that do not pull the
  score down, a missing key field counts as zero

Amounts
- net + tax must equal gross: when a value read from a LEARNED position breaks that (totals block
  floats with the number of line items - easybell: the "Netto" box landed on the VAT line and
  read 3,29 instead of 17,29 with confidence 1.0), the label-based reading is used or the odd one
  out is derived; done in the pipeline for new uploads and in the review for stored documents;
  hint under the totals when the amounts really do not add up
- such a position is forgotten on confirm and not learned again for the vendor (hint.floating);
  re-drawing the box by hand re-enables it
- learned regions yield the VALUE, not label + value: VAT id / IBAN by pattern
  ("USTIDDE249984363" -&gt; DE249984363, "IBAN:DE35..." -&gt; DE35...), money = last amount token
</comment><date>2026-09-20 11:22:24 +0200</date><id>285b6c4dd798b3b06091c9a7012d476762217e0a</id><msg>Incoming invoices: vendor filter / sort / grouping with review working set, meaningful confidence score, amount reconciliation</msg><path><editType>edit</editType><file>server/utils/inbox/extractPipeline.ts</file></path><path><editType>edit</editType><file>app/utils/inboxTaxRate.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/vendorProfile.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.vue</file></path><path><editType>add</editType><file>app/utils/inboxVendor.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>33a4d37b433bc59301ed746093ec6b7216ee91d0</commitId><timestamp>1789896422000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: incoming invoices inbox — live learned defaults, vendor matching, tax/amount rules, review flow, testing without booking
</comment><date>2026-09-20 11:27:02 +0200</date><id>33a4d37b433bc59301ed746093ec6b7216ee91d0</id><msg>Recipes: incoming invoices inbox — live learned defaults, vendor matching, tax/amount rules, review flow, testing without booking</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/banking/camt052Parser.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>app/components/accounting/banking/BankFileImportModal.vue</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>package.json</affectedPath><affectedPath>server/api/accounting/bank-file-import/import.post.ts</affectedPath><affectedPath>server/utils/banking/bankFileImport.ts</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>server/api/accounting/bank-file-import/preview.post.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/statements.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ae5839cc12876467da2bc3b4c76a80a5fdda2f70</commitId><timestamp>1789902433000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Banking: manual CAMT.052 file import for periods before EBICS

Adds "Datei importieren (CAMT.052)" to the Import tab of /accounting/banking:
upload the online-banking export (ZIP or XML) -&gt; dry-run preview -&gt; chunked
import with progress. Nuxt-only, no Laravel staging: statements are created
Drafted directly in iDempiere and appear in step 2 (reconcile).

- camt052Parser: fflate + fast-xml-parser, ISO-8859-1 aware, camt.052/053 in
  any .001.xx version; unpacks ZIPs completely (sub-folders, nested ZIPs,
  extension-less XML, macOS resource forks ignored). The Volksbank export is
  ONE report paginated over the whole period, so entries are split into one
  statement per booking day with a derived balance chain (verified against the
  daily closings of the MT940 export of the same period).
- bankFileImport: duplicate detection by the bank reference (AcctSvcrRef &lt;-&gt;
  C_BankStatementLine.EftTrxID, the column the EBICS import fills), fallback
  date+amount+memo multiset; foreign same-day statements are never modified
  (conflict), own Drafted ones are resumed; balance-chain check against existing
  iDempiere statements; plan recomputed live before every write.
- Routes accounting/bank-file-import/{preview,import}; parsed uploads parked in
  data/bank-file-import (git-ignored, 24 h), originals archived on import.
- Reconcile statements list: $top 100 -&gt; 500 (history imports).
- fast-xml-parser declared as a direct dependency (was optional transitive).
- MT940 / CSV / PDF deliberately unsupported (MT940 discontinued by DK 11/2025).
- Translations banking_file_* (en/de/es); sample bank exports git-ignored.
</comment><date>2026-09-20 13:07:13 +0200</date><id>ae5839cc12876467da2bc3b4c76a80a5fdda2f70</id><msg>Banking: manual CAMT.052 file import for periods before EBICS</msg><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>add</editType><file>server/api/accounting/bank-file-import/import.post.ts</file></path><path><editType>add</editType><file>server/utils/banking/camt052Parser.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-file-import/preview.post.ts</file></path><path><editType>add</editType><file>server/utils/banking/bankFileImport.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankFileImportModal.vue</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/statements.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>package.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>1c1bdadaece0a9a3cc7e3814ae7a17e6c915f739</commitId><timestamp>1789903987000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: keep Angebot + Vertrag visible, move the rest into a "Mehr" menu

The hero CTA row showed six coloured buttons. Only Angebot and Vertrag stay
visible; a "Mehr" dropdown on the right holds Fragebogen, Prognose, SEPA and
Onboarding (in that order, each with its icon/colour). Closes on outside
click, Escape and after picking an entry; full-width under the buttons on
small screens. The compact icon toolbar at the top is unchanged.
</comment><date>2026-09-20 13:33:07 +0200</date><id>1c1bdadaece0a9a3cc7e3814ae7a17e6c915f739</id><msg>Lead page: keep Angebot + Vertrag visible, move the rest into a "Mehr" menu</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/generate-shipments.vue</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>app/utils/picklistPdf.ts</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>app/composables/usePicklistPdf.ts</affectedPath><commitId>2ac713011b72609ee4c067905a6f7bf9bb0f10f9</commitId><timestamp>1789922611000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Picklist report: larger type, ~double row height, bordered X/Y/Z locator chips, bold qty — one shared layout for normal, reprint, desktop and mobile
</comment><date>2026-09-20 18:43:31 +0200</date><id>2ac713011b72609ee4c067905a6f7bf9bb0f10f9</id><msg>Picklist report: larger type, ~double row height, bordered X/Y/Z locator chips, bold qty — one shared layout for normal, reprint, desktop and mobile</msg><path><editType>edit</editType><file>app/pages/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/composables/usePicklistPdf.ts</file></path><path><editType>add</editType><file>app/utils/picklistPdf.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/NewBreadCrumb.vue</affectedPath><affectedPath>app/assets/css/fonts.css</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/dashboard/TerminalGreeting.vue</affectedPath><affectedPath>public/fonts/vt323-regular.woff2</affectedPath><commitId>fd3f01982dcc34d670b3373940f185198e8fd139</commitId><timestamp>1789926482000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: WarGames-style terminal greeting (time-of-day salutation + user name, VT323, type-in + blinking cursor) for admin roles, aligned with the first card
</comment><date>2026-09-20 19:48:02 +0200</date><id>fd3f01982dcc34d670b3373940f185198e8fd139</id><msg>Dashboard: WarGames-style terminal greeting (time-of-day salutation + user name, VT323, type-in + blinking cursor) for admin roles, aligned with the first card</msg><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/components/NewBreadCrumb.vue</file></path><path><editType>edit</editType><file>app/assets/css/fonts.css</file></path><path><editType>add</editType><file>app/components/dashboard/TerminalGreeting.vue</file></path><path><editType>add</editType><file>public/fonts/vt323-regular.woff2</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/TerminalGreeting.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>server/api/idempiere-auth/session-key.get.ts</affectedPath><commitId>3cc7c5852471fdc5dab977c1a3168b3311d2a79b</commitId><timestamp>1789926710000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard greeting: for all roles, no background, animation once per login (type-in + 10 s cursor, then static)
</comment><date>2026-09-20 19:51:50 +0200</date><id>3cc7c5852471fdc5dab977c1a3168b3311d2a79b</id><msg>Dashboard greeting: for all roles, no background, animation once per login (type-in + 10 s cursor, then static)</msg><path><editType>edit</editType><file>app/components/dashboard/TerminalGreeting.vue</file></path><path><editType>add</editType><file>server/api/idempiere-auth/session-key.get.ts</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/TerminalGreeting.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ec04cbef07291cc963ea8a6bf90d032d9ee5a286</commitId><timestamp>1789928205000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard greeting: salutation in the app language (en/de/es/ne), breadcrumb trail hidden on mobile
</comment><date>2026-09-20 20:16:45 +0200</date><id>ec04cbef07291cc963ea8a6bf90d032d9ee5a286</id><msg>Dashboard greeting: salutation in the app language (en/de/es/ne), breadcrumb trail hidden on mobile</msg><path><editType>edit</editType><file>app/components/dashboard/TerminalGreeting.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/partners/partners/create.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/view.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/utils/pickCode.ts</affectedPath><affectedPath>server/api/partners/partners/store.post.ts</affectedPath><affectedPath>server/utils/pickIdentifier.ts</affectedPath><affectedPath>server/api/partners/partners/update.put.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>bf39545a21ccb81dd95647742beae472333d64ed</commitId><timestamp>1789941163000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Business partner: Pick Code identifier (C_BPartner.PickProductIdentifier) — Nuxt UI select on the Fulfillment Customer tab, create/edit/view + store/update routes, shared pick-code resolver
</comment><date>2026-09-20 23:52:43 +0200</date><id>bf39545a21ccb81dd95647742beae472333d64ed</id><msg>Business partner: Pick Code identifier (C_BPartner.PickProductIdentifier) — Nuxt UI select on the Fulfillment Customer tab, create/edit/view + store/update routes, shared pick-code resolver</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>add</editType><file>server/utils/pickIdentifier.ts</file></path><path><editType>add</editType><file>app/utils/pickCode.ts</file></path><path><editType>edit</editType><file>server/api/partners/partners/update.put.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/view.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/create.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/store.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/generate-shipments.vue</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>server/api/processes/inouts/[id]/index.get.ts</affectedPath><affectedPath>app/utils/picklistPdf.ts</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><commitId>248df14cced048bc3f6139214a8684929db8e0aa</commitId><timestamp>1789941163000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Picklists: merchant pick code — lines carry the org partner's identifier; PDF gets Org / Locator / Qty / Pick Code / Name order with a large pick code, whitespace-only org wrapping and smaller reference columns; digital lists highlight the partner code first, product PickListCode as fallback
</comment><date>2026-09-20 23:52:43 +0200</date><id>248df14cced048bc3f6139214a8684929db8e0aa</id><msg>Picklists: merchant pick code — lines carry the org partner's identifier; PDF gets Org / Locator / Qty / Pick Code / Name order with a large pick code, whitespace-only org wrapping and smaller reference columns; digital lists highlight the partner code first, product PickListCode as fallback</msg><path><editType>edit</editType><file>server/api/processes/inouts/[id]/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>edit</editType><file>app/utils/picklistPdf.ts</file></path><path><editType>edit</editType><file>app/pages/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/admin/users/leads.get.ts</affectedPath><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</commitId><timestamp>1789941438000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: search + column filters, offer/contract filters, created / last activity / offer / contract columns (German dates), URL opens in a new tab; newest-first default kept
</comment><date>2026-09-20 23:57:18 +0200</date><id>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</id><msg>Leads list: search + column filters, offer/contract filters, created / last activity / offer / contract columns (German dates), URL opens in a new tab; newest-first default kept</msg><path><editType>edit</editType><file>server/api/admin/users/leads.get.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit></freeStyleBuild>