{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-release-notes/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","cards","card","inline-svg"]},"redocly_category":"Release Notes","type":"markdown"},"seo":{"title":"Release Notes - November '26","description":"Our release communication aims to inform you early of upcoming releases. The scope of a release may change prior to the production release date.","siteUrl":"https://docs.findock.com"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"release-notes---november-26","__idx":0},"children":["Release Notes - November '26"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Our release communications inform you early of upcoming changes. The scope may change prior to production. We update release notes accordingly during the sandbox period."]}]},{"$$mdtype":"Tag","name":"Cards","attributes":{"columns":2,"cardMinWidth":240},"children":[{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Important dates","imagePosition":"start","iconPosition":"auto","layout":"horizontal","align":"start","variant":"ghost"},"children":[{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["To sandbox:"]}," October 25, 2026",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Release webinar:"]}," October 30, 2026",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["To production:"]}," November 22, 2026"]}]}]},{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Release Webinar","image":"/assets/video-orange-with-dot.1c0084b97e49afbf96ed642a7139791296fc834ad5e00fa59d4898a5956873a1.c5aff763.png","imagePosition":"start","iconPosition":"auto","layout":"horizontal","align":"center","variant":"filled"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Coming soon..."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"new-pilot-inline-card-payments","__idx":1},"children":["NEW PILOT: Inline card payments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, Stripe, WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We are happy to announce a major new capability for accepting payments with FinDock: inline payments. What are inline payments? This is a new payment experience that greatly reduces friction and simplifies the payer experience. Rather than redirecting the payer to a hosted payment page (HPP) served by a PSP, often with limited customization options, to enter payment method details. payers stay “inline” with your own fully branded digital experience."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The first iteration of inline payments comes with support for card payments through Stripe. You can accept both one-time and recurring card payments without redirects using FinDock Payment Experiences or custom front-end integrations to the Payment API. Payer authentication challenges, like 3D Secure (3DS) are automatically handled based on merchant accounts settings at the PSP."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you would like to test inline card payments, please contact ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"mailto:support@findock.com"},"children":["FinDock Support"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"agentforce-in-reconciliation","__idx":2},"children":["Agentforce in reconciliation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Agentforce, Core, MIDAS"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Guided Matching provides a number of rule types to help you improve matching success and enrich Salesforce data. With Agentforce, you can take your reconciliation process even further, both to maximize matching success and solve complex use cases."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For instance, incoming payment data may not be structured as you would need to meet your reconciliation requirements. Key data could be split across multiple incoming records, requiring customization, such as Flow logic, to prepare that data for reconciliation."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["That’s where Salesforce AI and the new Prompt Template rule type for Guided Matching comes into play. The new rule type runs the  Salesforce Flex prompt template you define and returns the text of the prompt answer. The Prompt Template rule type executes Flex prompt templates from Apex directly within the Guided Matching context, allowing you to do things like normalize data using AI, summarize results, and much more."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Due to the dependency on Agentforce licensing, the Prompt Template rule type is not included in the standard FinDock (Core) package. It is visible from the rule type selector in the Guided Matching setup. When you open the rule type, you are prompted to install the Agentforce for FinDock package. Just click the install link and follow the normal package installation process."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once the package is installed, you can create new Prompt Template rules, selecting from a dropdown list of templates available in your org. FinDock includes two Flex templates to get you started:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["FinDock: Get Payment Reference from unstructured data:"]}," reads the free-text remittance and description fields from the inbound record and returns the single most likely payment, invoice, mandate or installment reference, verbatim as it appears, stripped of surrounding words."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["FinDock: Find and clean account holder name:"]}," returns the payer's name in a clean, searchable form, removing, for example, legal-form suffixes and bank-specific markers."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both templates come with recommended entry criteria. They should only be executed after the standard, deterministic Guided Matching rules have not succeeded on the given field."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"findock-payments-experience-to-beta","__idx":3},"children":["FinDock Payments Experience to beta"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Thanks to everyone involved in the piloting of FinDock Payments Experiences, we are now ready to move to beta, meaning the feature is open to all customers and partners. For those of you involved in the pilot phase, please make note of the changes included in the November '26 release notes and documentation."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"improved-template-deployment","__idx":4},"children":["Improved template deployment"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["FinDock Payments Experience templates are now even easier to deploy from FinDock Labs. We consolidated the previously separate template repositories for specific use cases and contexts into a ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/FinDockLabs/payment-experiences-templates"},"children":["single monorepo"]},", The previous deployment through a third party tool is replaced with an installation process: the template variant is built and installed as an unlocked package."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"embedded-payment-experiences-with-lightning-out-20","__idx":5},"children":["Embedded Payment Experiences with Lightning Out 2.0"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We are pleased to announce that FinDock Payment Experiences can be embedded in external websites using ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://developer.salesforce.com/docs/platform/lwc/guide/lightning-out-intro.html"},"children":["Lightning Out 2.0"]}," right out of the box. Part of Salesforce ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://developer.salesforce.com/docs/platform/lwr/overview"},"children":["Lightning Web Runtime"]}," (LWR), Lightning Out 2.0 enables you to use LWCs outside Salesforce."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Why is this important? With the right integration partner and/or internal developer expertise, you can dramatically extend your digital payment experiences beyond what you host directly on Salesforce. Lightning Out 2.0 means you can use your Salesforce-native digital experiences anywhere. Embed in Salesforce multi-framework sites (based on React), external apps, host sites on your own server or through a hosting service, etc."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We’ve put together a step-by-step configuration guide for Payment Experiences with Lighting Out 2.0 to help you get going building your next-level digital experiences."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"support-for-sepa-e-mandates","__idx":6},"children":["Support for SEPA e-mandates"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, SEPA"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["FinDock Payment Experiences now supports e-mandates for SEPA Direct Debit payments processed through FinDock."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.findock.com/docs/payment-processors/e-mandates-for-sepa-direct-debit"},"children":["SEPA e-mandates"]}," configured, FinDock’s Payment Experiences components include additional configuration options for e-mandates. Complete these new settings, and your digital payment experience automatically presents the e-mandate authorization flow to the payer when the SEPA Direct Debit payment method is selected."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Please note that the SEPA e-mandates is a paid add-on feature currently in pilot and limited to the Netherlands with e-mandates signed through Incassomachtigen."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"currency-for-paying-existing-installment","__idx":7},"children":["Currency for paying existing installment"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," When using the PayButton component to pay an existing installment, the resulting payment intent may use the wrong currency in multi-currency orgs. This would lead to failed installment collection."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue was caused by how Payment Experiences identifies the default currency if a payment intent does not specify currency. For paying existing installments, the generated request now uses the currency from the Installment record instead of the default currency of the Guest User."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"targets-for-payment-intent","__idx":8},"children":["Targets for payment intent"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," The payment intent callout built by Payment Experiences did not include the configured target (merchant account) in the payment method block, causing issues with payment collection tests if there was no default target available for fallback."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," We identified and fixed the bug causing the target to not be included in the payment intent callout so that multi-merchant configurations and default fallbacks now behave as expected. We also unified naming conventions across components to make the use of “target” and “merchant account” more transparent."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"paya-to-ga","__idx":9},"children":["Paya to GA"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We are happy to announce the FinDock integration with Paya (Nuvei) is now generally available for all FinDock customers. This change includes the enhancements and fixes outlined in the following sections."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"idempotency-hardening","__idx":10},"children":["Idempotency hardening"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Paya"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," FinDock currently uses Order Id to ensure idempotency when making capture callouts to Paya. However, this is not a reliable indicator of uniqueness if connection timeouts or other delays extend the capture process beyond a certain period."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["**Solution:**As we work towards a proper idempotency key definition with Nuvei, we have implemented an additional Order Id check in the payment capture process. This additional check is used before retrying an installment collection that experiences a callout timeout with the previous capture."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"improved-callout-logging","__idx":11},"children":["Improved callout logging"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Paya"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To make troubleshooting easier, we have added more details to logs generated by callouts to Paya. We can improve logging in Paya to have proper error messages. Installment updates from callout events now have details Transaction Id, Order Id and status-related information."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"large-transaction-amounts","__idx":12},"children":["Large transaction amounts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Paya"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With this release, we improved how FinDock handles commas in the JSON payload of Paya settlements to correctly interpret amounts above 999 USD. Larger amounts use commas to indicate, for instance, thousands. These commas are now excluded from the value separation logic when FinDock parses the settlement."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"refunding-voided-transactions","__idx":13},"children":["Refunding voided transactions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Paya"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Prior to this release, if a transaction is immediately refunded, FinDock attempted to reverse the payment before it is settled at Paya. The service agent’s action results in the error ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ProcessingError: An error occurred on our system while processing this request. Please contact our developer support team."]},", causing a delay in returning money to the payer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["FinDock now supports voiding (unsettled) payments. This is a separate process at Paya that is automatically triggered by the refund action. FinDock handles Salesforce data for voided payments the same as for refunds."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"extended-logging-removed","__idx":14},"children":["Extended logging removed"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, Paya"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Extended Logging (x-Verbose Header for Nuvei API) is no longer available with the new Nuvei Middleware API. FinDock was using the logging details to enrich payment profiles for ACH with the payer’s bank routing number."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With this release, we have removed use of Extended Logging in the FinDock integration with Salesforce and are exploring alternatives for getting the routing number required for ACH payments."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"open-amount-collection-and-disbursement-to-beta","__idx":15},"children":["Open amount collection and disbursement to beta"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, SEPA"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With FinDock as native processor, you can use the Amount field or the Amount Open field in payment schedules for SEPA Direct Debit and SEPA Credit Transfer. This option has been in closed pilot and is now available for all customers for beta testing. Please note, enabling the open amount logic is a one-way migration and cannot be reverted once enabled."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"refunds-from-salesforce-to-ga","__idx":16},"children":["Refunds from Salesforce to GA"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We are happy to announce the Refunds from Salesforce feature is now generally available for all FinDock customers."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"connected-apps","__idx":17},"children":["Connected apps"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"external-client-app-migration","__idx":18},"children":["External Client App migration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, MIDAS, ProcessingHub, WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With the November '26 release, we are happy to announce that we have completed our development work for migrating FinDock connected apps (CAs), including ProcessingHub, WebHub and MIDAS, to the new ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&type=5"},"children":["External Client App (ECA) framework"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["While we have completed internal testing of FinDock’s new ECA packages, the overall timeline for migration remains open at Salesforce. Nonetheless, we are preparing for multiple rollout scenarios and have implemented fallback mechanisms to ensure both CA and ECA approaches continue to work."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the ECA migration falls outside FinDock’s normal release cycle, we will communicate the changes through our standard FinDock Status and FinDock Knowledge Base channels."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"enhanced-app-monitoring","__idx":19},"children":["Enhanced app monitoring"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With ongoing development at Salesforce around app security hardening, app connection stability has been a challenge. This is the case for existing Connected Apps (CAs), and a question moving forward with External Client Apps (ECAs)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["As part of our preparation for migrating to ECAs, as well as to further improve our response times to connection issues, we are rolling out enhanced, pro-active connection monitoring for ProcessingHub and WebHub. The improved and streamlined alert system does not impact customer orgs. These are backend changes to FinDock’s internal tooling for our customer support and product development teams."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"core","__idx":20},"children":["Core"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"findock-setup-connection-status","__idx":21},"children":["FinDock Setup connection status"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," If there is an error during the initial setup of the connection to ProcessingHub or WebHub, the failure is not clear. The user can end up on an unrelated Salesforce page or back to the FinDock Setup with an incorrect connection status."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["**Solution:**The issue can arise when, for example, app permissions block the OAuth flow. We have updated the connection handling for both ProcessingHub and WebHub, to properly capture connection failures. A failed attempt takes the user back back to the right setup page where the error reason is presented."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"new-option-for-recurring-paylinks","__idx":22},"children":["New option for recurring PayLinks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We’ve added a new option to hide the frequency and amount for a recurring payment PayLink. The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Hide amount and frequency for recurring"]}," is off by default and does not appear in the Payment Form setup for one-time PayLinks."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When using this new option, please keep in mind that some payment methods require you to communicate the amount and frequency when collecting recurring payments. Ensure these details are clearly communicated via other channels if they are not present on your PayLink page."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"paylinks-due-date-not-visible","__idx":23},"children":["PayLinks Due Date not visible"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," After the September '26 release, the Due Date on PayLinks payment forms appeared blank, confusing payers."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue was caused by a new coding capitalization requirement in the updated version of Vue rolled out with the September ‘26 release, where the bug failed silently. We’ve now updated backend Due Date configuration setting to comply with the new requirement."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"transaction-set-layout-enhancement","__idx":24},"children":["Transaction Set layout enhancement"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," On the Transaction Set layout (Lightning record page), the Unmatched Transactions related list doesn't show Transactions with a Failed status."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," We’ve updated the filter for the Unmatched Transactions related list to include Failed status since these are also relevant to users who need to investigate unsuccessful reconciliation."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"enhanced-setup-for-guided-matching-process-installment-rule","__idx":25},"children":["Enhanced setup for Guided Matching Process Installment rule"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With this release, we are enhancing the search capabilities within the Guided Review component of the Process Installment rule. The default search behavior prior to this release could leave reconciliation users uncertain if the queried installment was in fact correct and/or eligible."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To make the search function more transparent, we introduce new filters in the Guided Review portion of the Process Installment rule configuration. You can now adjust the searchbox behavior and search results with new filters that address relevance (does the installment belong to the same payer as the inbound record) and eligibility (can the queried installment be processed)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With these new filters, users can be certain they are searching and selecting the right installments for allocation during the review process."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"guided-review-for-multiple-installments","__idx":26},"children":["Guided Review for multiple installments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," If Guided Matching finds multiple installments that go to Guided Review, the review interface does not show the Ids of all matched installments, but rather repeats the first installment Id. This creates addition manual work during review and may lead to incorrect payment remainder handling."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," There was a bug in the way FinDock determines when to read the Multiple Installment Ids field in the Transaction or Inbound Report. We resolved the logic issue so that Guided Review displays all Ids of the matched installments as expected."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"guided-matching-query-rule-return","__idx":27},"children":["Guided Matching Query rule return"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," A custom Query rule can return incorrect results when used on the Installment field of Inbound Report or Transaction. With the Take All strategy, the queried object record Ids are returned instead of the configured Return Field id. The incorrect Ids are written to the Multiple Installments Ids field, causing the Process Installment rule to fall."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," We identified and fixed the bug causing the issue. The Take All strategy now behaves as expected, similar to the the single-result and Take First strategies. Installment Ids are written to the Multiple Installments Ids field, with empty or repeated values removed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"where-clause-in-guided-matching-rule-setups","__idx":28},"children":["Where-clause in Guided Matching rule setups"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," In certain conditions, when editing a Guided Matching rule setup, the Where-clause does not appear in the setup UI. Closing and re-opening the setup model would usually fix the issue."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["**Solution:**The issue was caused by how the setup data is fetched and displayed in relation to how the setup page is refreshed. This has now been resolved so the setup page always shows the latest available data."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"guided-matching-create-record-rule-update","__idx":29},"children":["Guided Matching Create Record rule update"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," When an object doesn’t have a Name field, such as the Case object, FinDock writes a log about the issue each time the rule setup is viewed, leading to excessive and unneeded log data. The rule execution plan would also display an incomplete or unusual name for the rule on the missing field."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," We identified and fixed the issue leading to fields appearing in a rule setup that are not available for the selected object. Additional filtering was added to support the object-specific alternatives to Name, like Case Number on Case."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"processinghub","__idx":30},"children":["ProcessingHub"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"identity-url-error","__idx":31},"children":["Identity URL error"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," Running processes fail the \"Update Config data if outdated\" step if Salesforce returns a 403 error when FinDock checks the Salesforce Identity URL."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue was caused by a conflict between the scheduled token renewal logic introduced in the September ‘26 release and existing auto-retry logic on ProcessingHub. ProcessingHub did not merely log the temporary 403 error and retry the job again. Instead, the error was handled strictly as a failure, causing the impacted process to fail. We’ve now updated the auto-retry logic to treat 403 errors the same as temporary 401 errors, allowing ProcessingHub to retry a job after a new access token is acquired."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"xml-parser-enhancement","__idx":32},"children":["XML parser enhancement"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," In some cases, ProcessingHub may reject or return an invalid XML error when a file is first uploaded. Retrying the job, however, results in successful extraction."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue was caused by inefficiencies in error buffering on ProcessingHub. We have improved several areas of XML file handling to eliminate the buffer issue. In addition, we have extended error responses to provide more specific information when XML file handling issues arise."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"enhanced-heroku-processing-management","__idx":33},"children":["Enhanced Heroku processing management"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," Heroku automatically restarts dynos every 24 hours. If this occurs while a ProcessingHub worker is processing a job, the job may be interrupted or left in a state that needs manual intervention to recover."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," We have implemented a new, proactive worker reset cycle to help avoid jobs being impacted by dyno restarts. If the worker is handling a job that runs beyond the FinDock reset cycle, the job is allowed to run as long as needed. Please note, however, that if the job needs more than 24 hours, the job may still be impacted by the Heroku dyno restart schedule."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"fundraising","__idx":34},"children":["Fundraising"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"sepa-mandates-for-one-time-gifts","__idx":35},"children":["SEPA mandates for one-time gifts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, Fundraising"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," When a Gift Transaction record is created (not linked to Gift Commitment and Gift Commitment Schedule) for a SEPA Direct Debit donation, FinDock for Fundraising creates a Mandate record with Type Recurring instead of One-Off. This can lead to a risk of double-collection for one-time gifts."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue was caused by a missing Type declaration in the mandate creation call to FinDock Core from the source package. Core defaults to Recurring if Type is not specified for the mandate. This has now been fixed so the mandate Type correctly reflects whether the gift transaction is a one-time payment or part of a new recurring gift commitment."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"findock-for-fundraising-flows-updated","__idx":36},"children":["FinDock for Fundraising flows updated"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," N/A"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We’ve updated the FinDock for Fundraising flows on ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/FinDockLabs/findock-for-fundraising-flows"},"children":["FinDock Labs"]}," so they are fully compatible with the Salesforce Winter ‘27 release. We also made a few adjustments to further improve the Flows. The changes include:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Upgraded Salesforce API version to 68.0 for Manage Gift Commitment Schedules and Update Recurring Gift Commitment Schedule flows"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updated validation to allow non-negative transaction amounts below 1"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a bug in the Campaign lookup where updating schedule dates would lead to an object-type mismatch error"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added Campaign and Source Code lookup pre-fills during upgrade/downgrade (Campaign was only shown in the summary before)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Applied custom schedule screen styling"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Please also note that we have changed how Fundraising Flows are deployed. They are now included in an org-dependent unlocked package to simplify installation and future updates (now through package versions). ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["For existing customers:"]}," installing over a source deployment updates matching components and brings them under package ownership. Local customizations can be overwritten, and uninstalling can remove those components, so ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["we recommend testing this update in a sandbox first"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"gift-aid","__idx":37},"children":["Gift Aid"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"new-data-quality-rule-for-postal-code","__idx":38},"children":["New Data Quality rule for postal code"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Gift Aid"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," HMRC rejects Gift Aid Declarations that have an incorrectly formatted postal code, and certain cases were not caught by the existing validation rules used by FinDock."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," We have expanded ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.findock.com/docs/payments/data-quality-requirements"},"children":["Data Quality rules"]}," to validate the format of postal codes end-to-end on Gift Aid Declaration records (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["gaid__Postalcode__c"]},"). Rather than checking for a specific pattern in the field, the entire postal code value is checked to ensure it conforms to HMRC expectations."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"npsp","__idx":39},"children":["NPSP"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rejected-payments-for-collected-installments","__idx":40},"children":["Rejected payments for collected installments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","NPSP"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," If a collected installment is later rejected, FinDock does not create a corresponding negative Opportunity Payment record to offset the existing positive Opportunity Payment record. This leads to incorrect data for the linked opportunity."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["**Solution:**The issue arose from changes made in the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.findock.com/release-notes/release-notes-march-26"},"children":["March '26 release"]},". While those changes correctly handled the target context (payment rejected before installment is collected), the update was overly broad and eliminated logic to check collected installments for existing opportunity payments.  We have now implemented logic so that FinDock correctly checks for existing positive payments and creates negative opportunity payments when a collected installment is rejected, as was the case prior to the March '26 release."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authorizenet","__idx":41},"children":["Authorize.net"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"improved-timeout-handling","__idx":42},"children":["Improved timeout handling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Authorize.net"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," Installments in large payment schedule runs may fail with the error ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Exceeded maximum time allotted for callout (120000 ms)"]},". Failed installments required manual corrective action from FinDock Support."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The timeout is a cumulative callout limit from Salesforce, and sufficiently large payment schedules may hit this limit. To reduce the risk of this issue occurring, we have improved the queueable framework for Authorize.net payment schedules with optimized job sizes, better debouncing, and more transparent logging to better support reconciliation of installments that fail due technical errors."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"refunding-unsettled-transactions","__idx":43},"children":["Refunding unsettled transactions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Authorize.net"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Prior to this release, if a transaction is immediately refunded, FinDock attempted to reverse the payment before it is settled at Authorize.net. This could lead to a processing error and cause a delay in returning money to the payer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["FinDock now supports voiding unsettled payments. This is a separate technical process that is automatically triggered by the refund action. However, FinDock handles Salesforce data for voided payments the same as for refunds."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"payment-schedules-and-installment-status","__idx":44},"children":["Payment schedules and Installment status"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Authorize.net, Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," With some payment schedule runs, processed installments continue to have status New. The status of these installments may later be correctly updated by notifications from Authorize.net, but some remain unchanged without manual intervention."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue is caused by race conditions between payment schedule processing jobs and the timing of notifications from Authorize.net. To counter these race conditions, we have added new processing checks and additional logic around status locking and updating. In addition, we have added new, more transparent error handling to better surface errors that may arise from race conditions."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"stripe","__idx":45},"children":["Stripe"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"support-for-pay-by-bank","__idx":46},"children":["Support for Pay by Bank"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core, Stripe"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["FinDock now supports one-time payments with Pay by Bank in the FinDock integration to Stripe. An online banking payment method that uses Open Banking standards, Pay by Bank delivers secure account-to-account transactions. This payment method needs by enabled at Stripe (merchant dashboard) before it can be used by FinDock."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no additional FinDock configuration required to take this payment method into use other than activating the method in the Stripe payment extension setup. Once activated, the method is available through the Payment API, Giving Pages and PayLinks. FinDock currently only supports one-time payments when Pay by Bank is the selected payment method."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"new-bank-account-validation-option-for-pad","__idx":47},"children":["New bank account validation option for PAD"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Stripe"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We have added a new option, Skip verification, to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["PAD Verification Method"]}," setting for Stripe merchant accounts. When enabled, FinDock explicitly sends Stipe a skip request as part of the payment intent callout. However, please note that this skip option only works if the merchant account has passed  Stripe's compliance process. Using the skip option without prior approval from Stripe will cause every new PAD payment intent to fail."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"swish","__idx":48},"children":["Swish"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"installments-stuck-in-pending-state","__idx":49},"children":["Installments stuck in pending state"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Notification Gateway, Swish"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," In some payment schedule run scenarios, installments that are in fact collected appear to be stuck with Pending processing status."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," The issue can arise when the paid notification (inbound report subtype ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Payment PAID"]},") arrives and is processed before the payment schedule has finished. This creates a race condition, causing the installment status to change from New to Collected, then back to Pending processing. To avoid this, we have reduced the number of sequential payment requests to Swish per batch job. In addition, we added a mechanism to prevent closed states like Collected from getting changed back to Pending processing."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"vipps","__idx":50},"children":["Vipps"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"expanded-data-for-vipps-donations","__idx":51},"children":["Expanded data for Vipps Donations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Vipps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Vipps Donations payment reports can include details about the donor, classified as “GDPR sensitive data” as explained ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://developer.vippsmobilepay.com/docs/APIs/donations-api/faq/#what-data-is-included-in-the-payment-report"},"children":["this FAQ"]},". The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payer"]}," elements provide information that can be used, for example, to personalize follow-up actions."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To support this information source, the FinDock integration with Vipps Donations now supports collection the information in those elements of the payment report. The data is added to the RAW XML Entry field of the Inbound Report record (sub-type DONATIONS_PAYMENT_CAPTURED), so you can create custom Guided Matching rules to enrich Salesforce records with that data."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"worldpay","__idx":52},"children":["Worldpay"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"paying-with-existing-card","__idx":53},"children":["Paying with existing card"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Worldpay"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issue:"]}," If a card payment is completed with a card that has a single-digit expiration month, the inbound report for the payment intent fails in Guided Matching with duplicate value error."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution:"]}," This issue was caused by how FinDock builds the Unique Identifier for the payment event. The identifier uses the expiration month returned by Worldpay, which is a single digit for January through September. This breaks the Payment Profile lookup during Guided Matching. To resolve the issue, FinDock now applies a two-digit format during the Payment Profile matching process, adding zero-padding, e.g. returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1"]}," for January becomes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["01"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"general-maintenance","__idx":54},"children":["General maintenance"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"description-updates-across-findock","__idx":55},"children":["Description updates across FinDock"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We completed a major round of updates to a wide range of FinDock object and field-level descriptions. This work closes gaps and improves many existing texts to help users better understand FinDock."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"salesforce-api-version-bumping","__idx":56},"children":["Salesforce API version bumping"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","Core"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To ensure compatibility with the latest features in the Salesforce Winter '27 release, we have updated the FinDock Core package Apex classes and other components to use Salesforce API version 68."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"heroku-app-maintenance","__idx":57},"children":["Heroku app maintenance"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"InlineSvg","attributes":{"class":"inline-svg-size","file":"/assets/package.svg","fileRawContent":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg width=\"100%\" height=\"100%\" viewBox=\"0 0 52 52\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g transform=\"matrix(0.1,0,0,0.1,0,0)\"><path d=\"M444,240L365,240L332,280L440,280L440,340L80,340L80,280L187,280L154,240L76,240C56,240 40,256 40,276L40,470C40,486.458 53.542,500 70,500L450,500C466.458,500 480,486.458 480,470L480,276C480,256 464,240 444,240ZM230,35L230,160L161,160C151,160 146,169 152,174L252,297C256,300 262,300 266,297L366,174C372,168 367,160 357,160L290,160L290,35C290,27 283,20 275,20L245,20C237,20 230,27 230,35Z\" style=\"fill:rgb(130,130,252);fill-rule:nonzero;\"/></g></svg>"},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Package(s):"]}," ","ProcessingHub, WebHub"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This release includes version upgrades for software components used in FinDock apps on Heroku. These updates apply to FinDock apps and related access management frameworks. The Heroku stack itself was also updated."]}]},"headings":[{"value":"Release Notes - November '26","id":"release-notes---november-26","depth":1},{"value":"NEW PILOT: Inline card payments","id":"new-pilot-inline-card-payments","depth":2},{"value":"Agentforce in reconciliation","id":"agentforce-in-reconciliation","depth":2},{"value":"FinDock Payments Experience to beta","id":"findock-payments-experience-to-beta","depth":2},{"value":"Improved template deployment","id":"improved-template-deployment","depth":3},{"value":"Embedded Payment Experiences with Lightning Out 2.0","id":"embedded-payment-experiences-with-lightning-out-20","depth":3},{"value":"Support for SEPA e-mandates","id":"support-for-sepa-e-mandates","depth":3},{"value":"Currency for paying existing installment","id":"currency-for-paying-existing-installment","depth":3},{"value":"Targets for payment intent","id":"targets-for-payment-intent","depth":3},{"value":"Paya to GA","id":"paya-to-ga","depth":2},{"value":"Idempotency hardening","id":"idempotency-hardening","depth":3},{"value":"Improved callout logging","id":"improved-callout-logging","depth":3},{"value":"Large transaction amounts","id":"large-transaction-amounts","depth":3},{"value":"Refunding voided transactions","id":"refunding-voided-transactions","depth":3},{"value":"Extended logging removed","id":"extended-logging-removed","depth":3},{"value":"Open amount collection and disbursement to beta","id":"open-amount-collection-and-disbursement-to-beta","depth":2},{"value":"Refunds from Salesforce to GA","id":"refunds-from-salesforce-to-ga","depth":2},{"value":"Connected apps","id":"connected-apps","depth":2},{"value":"External Client App migration","id":"external-client-app-migration","depth":3},{"value":"Enhanced app monitoring","id":"enhanced-app-monitoring","depth":3},{"value":"Core","id":"core","depth":2},{"value":"FinDock Setup connection status","id":"findock-setup-connection-status","depth":3},{"value":"New option for recurring PayLinks","id":"new-option-for-recurring-paylinks","depth":3},{"value":"PayLinks Due Date not visible","id":"paylinks-due-date-not-visible","depth":3},{"value":"Transaction Set layout enhancement","id":"transaction-set-layout-enhancement","depth":3},{"value":"Enhanced setup for Guided Matching Process Installment rule","id":"enhanced-setup-for-guided-matching-process-installment-rule","depth":3},{"value":"Guided Review for multiple installments","id":"guided-review-for-multiple-installments","depth":3},{"value":"Guided Matching Query rule return","id":"guided-matching-query-rule-return","depth":3},{"value":"Where-clause in Guided Matching rule setups","id":"where-clause-in-guided-matching-rule-setups","depth":3},{"value":"Guided Matching Create Record rule update","id":"guided-matching-create-record-rule-update","depth":3},{"value":"ProcessingHub","id":"processinghub","depth":2},{"value":"Identity URL error","id":"identity-url-error","depth":3},{"value":"XML parser enhancement","id":"xml-parser-enhancement","depth":3},{"value":"Enhanced Heroku processing management","id":"enhanced-heroku-processing-management","depth":3},{"value":"Fundraising","id":"fundraising","depth":2},{"value":"SEPA mandates for one-time gifts","id":"sepa-mandates-for-one-time-gifts","depth":3},{"value":"FinDock for Fundraising flows updated","id":"findock-for-fundraising-flows-updated","depth":3},{"value":"Gift Aid","id":"gift-aid","depth":2},{"value":"New Data Quality rule for postal code","id":"new-data-quality-rule-for-postal-code","depth":3},{"value":"NPSP","id":"npsp","depth":2},{"value":"Rejected payments for collected installments","id":"rejected-payments-for-collected-installments","depth":3},{"value":"Authorize.net","id":"authorizenet","depth":2},{"value":"Improved timeout handling","id":"improved-timeout-handling","depth":3},{"value":"Refunding unsettled transactions","id":"refunding-unsettled-transactions","depth":3},{"value":"Payment schedules and Installment status","id":"payment-schedules-and-installment-status","depth":3},{"value":"Stripe","id":"stripe","depth":2},{"value":"Support for Pay by Bank","id":"support-for-pay-by-bank","depth":3},{"value":"New bank account validation option for PAD","id":"new-bank-account-validation-option-for-pad","depth":3},{"value":"Swish","id":"swish","depth":2},{"value":"Installments stuck in pending state","id":"installments-stuck-in-pending-state","depth":3},{"value":"Vipps","id":"vipps","depth":2},{"value":"Expanded data for Vipps Donations","id":"expanded-data-for-vipps-donations","depth":3},{"value":"Worldpay","id":"worldpay","depth":2},{"value":"Paying with existing card","id":"paying-with-existing-card","depth":3},{"value":"General maintenance","id":"general-maintenance","depth":2},{"value":"Description updates across FinDock","id":"description-updates-across-findock","depth":3},{"value":"Salesforce API version bumping","id":"salesforce-api-version-bumping","depth":3},{"value":"Heroku app maintenance","id":"heroku-app-maintenance","depth":3}],"frontmatter":{"seo":{"title":"Release Notes - November '26","description":"Our release communication aims to inform you early of upcoming releases. The scope of a release may change prior to the production release date."},"markdown":{"toc":{"depth":2},"lastUpdatedBlock":{"hide":false,"format":"iso"}},"packages":{"adyn":"Adyen","agnt":"Agentforce","auth":"Authorize.net","axrv":"Axerve","bacs":"Bacs","buck":"Buckaroo","chck":"Checkout.com","core":"Core","fund":"Fundraising","gift":"Gift Aid","gocd":"GoCardless","inst":"Installer","moll":"Mollie","mids":"MIDAS","ntfg":"Notification Gateway","nord":"Nordic Payments","npsp":"NPSP","paya":"Paya","pypl":"PayPal","phub":"ProcessingHub","rdss":"Redsys","sfrp":"Saferpay","sepa":"SEPA","strp":"Stripe","swsh":"Swish","swss":"Swiss Payments","tikk":"Tikkie","vipp":"Vipps","whub":"WebHub","wrld":"Worldpay"}},"lastModified":"2026-10-21T09:58:27.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/release-notes/release-notes-november-26","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}