<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>772</buildNumber><marked><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><branch><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><branch><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><branch><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</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/772/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/build-logship-frontend/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/build-logship-frontend/772/</displayUrl><testsUrl>https://jenkins.younex.de/job/build-logship-frontend/772/testReport</testsUrl></action><building>false</building><displayName>#772</displayName><duration>70041</duration><estimatedDuration>60620</estimatedDuration><fullDisplayName>build-logship-frontend #772</fullDisplayName><id>772</id><inProgress>false</inProgress><keepLog>false</keepLog><number>772</number><queueId>5845</queueId><result>SUCCESS</result><timestamp>1792454400766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/772/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env-prod</affectedPath><commitId>7eae76b2eb0c791c727151350a321cfa9b1c7570</commitId><timestamp>1792394169000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Click-to-dial: originate agent leg via logship-ctd-agent so desk phone and Sangoma Talk both ring

ASTERISK_ORIGINATE_CHANNEL / NUXT_ASTERISK_CHANNEL_TEMPLATE were only set on the prod box
by hand and got wiped by every deploy (.env is regenerated from .env-prod).
</comment><date>2026-10-19 09:16:09 +0200</date><id>7eae76b2eb0c791c727151350a321cfa9b1c7570</id><msg>Click-to-dial: originate agent leg via logship-ctd-agent so desk phone and Sangoma Talk both ring</msg><path><editType>edit</editType><file>.env-prod</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/price-list-versions/available.get.ts</affectedPath><affectedPath>app/components/HeaderAction.vue</affectedPath><affectedPath>server/api/materials/products/quick-store.post.ts</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/components/materials/ProductQuickAddModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e0481abd4cad3d6b8d47df60af38b2524b844514</commitId><timestamp>1792402319000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quick product modal on the products list: name + image + price in one step, defaults Standard/Each/Standard, price into every active price list version with optional per-version override; staff can pick org and category, merchants get the plain form; the toolbar "+" now opens the modal
</comment><date>2026-10-19 11:31:59 +0200</date><id>e0481abd4cad3d6b8d47df60af38b2524b844514</id><msg>Quick product modal on the products list: name + image + price in one step, defaults Standard/Each/Standard, price into every active price list version with optional per-version override; staff can pick org and category, merchants get the plain form; the toolbar "+" now opens the modal</msg><path><editType>add</editType><file>app/components/materials/ProductQuickAddModal.vue</file></path><path><editType>add</editType><file>server/api/materials/products/quick-store.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/HeaderAction.vue</file></path><path><editType>add</editType><file>server/api/materials/price-list-versions/available.get.ts</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>server/api/materials/products/[id]/bom/lines.get.ts</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>app/components/materials/ProductBomModal.vue</affectedPath><affectedPath>app/components/materials/ProductBomCard.vue</affectedPath><affectedPath>server/api/materials/products/[id]/flags.put.ts</affectedPath><affectedPath>server/api/materials/products/[id]/bom/lines.put.ts</affectedPath><affectedPath>server/api/materials/products/[id]/bom/ensure.post.ts</affectedPath><affectedPath>server/api/materials/products/[id]/bom/flag.put.ts</affectedPath><commitId>90f2903c36133dfc34afbb6f63c6b119da78d16b</commitId><timestamp>1792402319000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product BOM editor: IsBOM toggle + components card in the form, modal with order-line product search, qty stepper and drag-and-drop ordering, BOM header auto-created like the WebUI prefill, batch line save; product form: checkbox auto-save, Status/Organization split, status tooltips, tenant name fix, Quantities beside Identifier
</comment><date>2026-10-19 11:31:59 +0200</date><id>90f2903c36133dfc34afbb6f63c6b119da78d16b</id><msg>Product BOM editor: IsBOM toggle + components card in the form, modal with order-line product search, qty stepper and drag-and-drop ordering, BOM header auto-created like the WebUI prefill, batch line save; product form: checkbox auto-save, Status/Organization split, status tooltips, tenant name fix, Quantities beside Identifier</msg><path><editType>add</editType><file>app/components/materials/ProductBomCard.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/lines.get.ts</file></path><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/materials/ProductBomModal.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/ensure.post.ts</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/lines.put.ts</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/flags.put.ts</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/flag.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductDetailRecordCost.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordConversion.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordPartner.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordReplenish.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordReservedQtyLog.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordBom.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordOrderedQtyLog.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordPrice.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordTransaction.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordSubstitute.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordAccounting.vue</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordTranslation.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordPurchasing.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordRelated.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordComponents.vue</affectedPath><commitId>d9b04034730e3fd6cbf9e0e2ca5f891ddfbd186f</commitId><timestamp>1792402487000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product edit page off tedir: ProductForm + all ProductDetailRecord tabs use the Nuxt UI SelectBox wrapper, DateInputDe replaces tedir-calendar, UFileUpload replaces the tedir-dropzone gallery uploader
</comment><date>2026-10-19 11:34:47 +0200</date><id>d9b04034730e3fd6cbf9e0e2ca5f891ddfbd186f</id><msg>Product edit page off tedir: ProductForm + all ProductDetailRecord tabs use the Nuxt UI SelectBox wrapper, DateInputDe replaces tedir-calendar, UFileUpload replaces the tedir-dropzone gallery uploader</msg><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordCost.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordComponents.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordTranslation.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordPurchasing.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordReservedQtyLog.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordAccounting.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordRelated.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordReplenish.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordBom.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordSubstitute.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordPrice.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordConversion.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordPartner.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordOrderedQtyLog.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordTransaction.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><commitId>db89dca3a091af1372d3d6fa32f3057da7922e96</commitId><timestamp>1792402612000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product form: Fulfillment card 2/3 wide with Weight over Dimensions in the free third; right column keeps Organization &amp; Status and BOM
</comment><date>2026-10-19 11:36:52 +0200</date><id>db89dca3a091af1372d3d6fa32f3057da7922e96</id><msg>Product form: Fulfillment card 2/3 wide with Weight over Dimensions in the free third; right column keeps Organization &amp; Status and BOM</msg><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.gitignore</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/utils/leads/leadAssessment.ts</affectedPath><affectedPath>app/components/leads/AssessmentModal.vue</affectedPath><affectedPath>server/api/leads/[id]/assessment/draft.post.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/leads/[id]/assessment/index.get.ts</affectedPath><affectedPath>package.json</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/api/leads/[id]/assessment/index.post.ts</affectedPath><affectedPath>.env-prod</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>33007b3a142e9ec5dd110fcca59044f522893fc9</commitId><timestamp>1792405722000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: "KI-Analyse" — Claude assessment of the whole lead history with editable, sendable e-mail draft

New purple CTA + toolbar icon on /edit/lead-&lt;id&gt; opens &lt;LeadsAssessmentModal&gt;: a background job collects
the AD_User record, contact activities, saved offer/contract/forecast/questionnaire conditions, signing
links, attachment names, every mailpiler mail with its body and the FreePBX recordings with their whisper
transcripts (optionally transcribing missing ones first), sends the dossier to Claude (claude-opus-5-5,
server-side fallbacks, cached system prompt) and renders the structured result: closing probability,
stage, summary, prioritised next steps, proposal, positives/risks, needs, pricing, open questions,
timeline, data gaps. DE default with EN switch, copy-as-text, last result reopens instantly.

The proposed e-mail draft is an editable form (subject/body, save) that can be sent to the lead's
server-resolved address via the local MTA, from info@logyou.de with the sender's name, Reply-To the
sender, with a branded table-layout signature (logo colours, LogYou logo, legal footer) and a
C_ContactActivity (EM) entry.

Server: server/utils/leads/leadAssessment.ts (job state in data/lead-assessments, 202 + polling across
PM2 workers), routes server/api/leads/[id]/assessment/{index.get,index.post,draft.post}.ts,
runtimeConfig.anthropic (ANTHROPIC_API_KEY / ANTHROPIC_WORKSPACE_ID / ANTHROPIC_MODEL),
@anthropic-ai/sdk dependency, translations de/en/es, recipe .claude/rules/leads/ai-assessment.md.
</comment><date>2026-10-19 12:28:42 +0200</date><id>33007b3a142e9ec5dd110fcca59044f522893fc9</id><msg>Lead page: "KI-Analyse" — Claude assessment of the whole lead history with editable, sendable e-mail draft</msg><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>add</editType><file>server/api/leads/[id]/assessment/draft.post.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>add</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>add</editType><file>server/api/leads/[id]/assessment/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>server/utils/leads/leadAssessment.ts</file></path><path><editType>add</editType><file>app/components/leads/AssessmentModal.vue</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/leads/[id]/assessment/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>f016197e7fb65ab60a2d1dd84f5cf073fb1e90ba</commitId><timestamp>1792405982000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: new standard defaults — no free pick, goods receipt by time, shelf L 5.50, service fee 99, DHL ≤ 1 kg 3.79, pallet 12.90; quote PDF and contract documents attached to the mail by default

QUOTE_LIST_PRICES (useOfferQuote.ts): qtyPickfree 1 → 0, monthlyFee 89.90 → 99 (also the &lt; 1000 orders
volume-tier recommendations), shelfLargePrice 6.50 → 5.50 (floor lowered alike so the default no longer
warns), palletPrice 9.50 → 12.90, dhlTiers.kg1 3.49 → 3.79; inbound.mode default 'included' → 'hourly'.
confirmation.attachPdf (quote) and signing.attachDocuments (contract) default to true; saved conditions
with an explicit false are still respected on reopen.
</comment><date>2026-10-19 12:33:02 +0200</date><id>f016197e7fb65ab60a2d1dd84f5cf073fb1e90ba</id><msg>Offers: new standard defaults — no free pick, goods receipt by time, shelf L 5.50, service fee 99, DHL ≤ 1 kg 3.79, pallet 12.90; quote PDF and contract documents attached to the mail by default</msg><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>app/components/fulfillment/FulfillmentGenerateOrdersModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>a0ec3adad64debd862d0fc1b26c533f704506e54</commitId><timestamp>1792410833000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fulfillment invoices: separate "Nachbelastung DHL Paket" position for shipping fees DHL invoiced after accounting

logship-scripts now writes shipping fee lines with fulfillmentpricingrule
SHIPPINGFEE_NACHBELASTUNG (surcharges / late DHL invoices for shipments whose
shipping fee was already accounted, dated with the detection date so the current
month's run picks them up). The generator gathers them per product like the
regular shipping fee but as their own order line "Nachbelastung DHL Paket
(Zuschläge lt. DHL-Rechnung): N Sendungen" in order lines, preview, response and
fee report; the preview details list each shipment with the DHL fee breakdown
from the fee line description. Labels in all four languages.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</comment><date>2026-10-19 13:53:53 +0200</date><id>a0ec3adad64debd862d0fc1b26c533f704506e54</id><msg>Fulfillment invoices: separate "Nachbelastung DHL Paket" position for shipping fees DHL invoiced after accounting</msg><path><editType>edit</editType><file>app/components/fulfillment/FulfillmentGenerateOrdersModal.vue</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit></freeStyleBuild>