Skip to content

243.9 - Release Notes - Jumpmind Commerce

Announcing

Point Of Sale

243.9.10

Fixed

  • Client-v1 | Repeating error message in logs (JMC-8369)
  • CustomerNew CustomerTyping in email field causes page to become unresponsive (JMC-8371)
  • Inventory Count is not updated properly in Product Details screen (JMC-7659)
  • Usability | Postal code not preserved when entering billing/shipping info after clicking "edit" on validate address dialog (JMC-8367)

243.9.9

Fixed

  • i18n | French Canadian stores can show . instead of , in money fields (JMC-8326)
  • Returns | Return policies that are "not-allowed for employees" can return as match when employee linked (JMC-8319)
  • Shrug | Entering an unknown user for any Manager Override results in a shrug (JMC-7668)

243.9.8

Fixed

  • Item | Item inquiry buddy-store/availability can flicker & disappear when changing item options (JMC-8295)

243.9.7

Fixed

  • Client v1 | Field validators don't consistently update when different language is selected (JMC-8239)
  • Usability | Default configs from base profile get pulled in when customer stops overriding them (JMC-8261)

243.9.6

New + Improved

  • Orders | Enhance ReserveItemRequest to take in the entire SaleSession and pass it back in the response (JMC-8187)

Fixed

  • Client V1 | Cannot switch out of single app mode (JMC-8220)
  • Customer | Creating loyalty customer from Clienteling or outside transaction with a customer display linked can cause a transaction to be created when signup is finished (JMC-8182)
  • Returns | Positive discount calculated when excludeReturnedItemsFromTotalDiscountAmount is true and returning item with price-override (JMC-8170)
  • Returns | Return item promotion calculations do not consider identifier items (JMC-8144)
  • Usability | Cancel / "X" button overlaps dialog title for dialogs with long titles (JMC-8124)

Upgrade Considerations

  • Customers overriding the endpoint /ordersmgmt/reserveItem will need to update how they access the deliveryGroup from the ReserveItemRequest request object. (JMC-8187)

243.9.5

Fixed

  • Clicking "Add New Customer" during signup when possible match found just rebuilds the screen (JMC-7959)
  • Returns | Cross border returns showing empty transaction selection instead of 'Cannot accept a cross border return' message (JMC-8026)
  • Some prompts with required input allow no input and shrug when entered (JMC-8003)
  • Usability | Subtotal, Discount, and Tax on the Customer Display Should Match Associate Display (JMC-8007)

Upgrade Considerations

  • Custom overrides that may have been applied relating to openpos.sell.sellItemActionHandlers.itemPriceOverride.isDisplayedAsDiscount or the subtotal or discount display in DefaultTransRenderer, TransactionDetailsState, SaleTotalsDisplayHelper, DefaultSaleScreenBuilder, or CustomerDisplaySaleScreenBuilder may need to be re-evaluated or removed. (JMC-8007)

243.9.4

New + Improved

  • Technical | Publisher Performance Improvements (JMC-7750)
  • Upgrade JMC to symmetric 3.15.18 to fix bug with setting maxFormKeys (JMC-7871)

Fixed

  • Clicking "Edit" on validate billing address prompt does not re-populate billing address form (JMC-7921)
  • Clientelling | Transaction data is not written to ctx_consultation_item table (JMC-7931)
  • Close Till | Close till amounts incorrect when comma is present (JMC-7913)
  • Customer with cross-border address has state pre-populated in billing address form (JMC-7922)
  • Different customer lookup/signup experience when CXConnect paired (JMC-7886)
  • Printing | JavaPOS print failure status not correctly being reflected on UI (JMC-7847)
  • Technical | ClientLocalService does not read supportedLocales from config/context service. Only reads from environment properties (JMC-7479)
  • Transaction data is not saved correctly on an exchange transaction causing the published JSON to be incorrect (JMC-7884)
  • Usability | Subtotal, Discount, and Tax should match Total and be uniform between Sell Screen and Transaction Details Screen (JMC-7898)

Upgrade Considerations

  • Custom overrides that may have been applied relating to openpos.sell.sellItemActionHandlers.itemPriceOverride.isDisplayedAsDiscount or the subtotal or discount display in DefaultTransRenderer, TransactionDetailsState, SaleTotalsDisplayHelper, or DefaultSaleScreenBuilder may need to be re-evaluated or removed. (JMC-7898)

243.9.3

New + Improved

  • Till Reconciliation | Create Configuration to Control Default View (Summary or Detail) for both Open and Close Till (JMC-7756)

Fixed

  • Close Reconciliation | Device inaccurately reflecting active status preventing store closing (JMC-7794)
  • Customer | When multiple matches found on customer signup phase 1, add-new-customer button causes errant behavior (JMC-7791)
  • Reporting | Calculations for Sales Amount and Return Amount Incorrect for Some Reports (JMC-7726)
  • Reporting | Cashier Exception Report is appearing blank on the 'Location Summary Report' (JMC-7819)
  • Shrug| When clicking the x dialog button on the "Required Price Entry" (JMC-7785)
  • Technical | BarcodeConfig settings from the yaml file are not being honored. (JMC-7617)
  • Technical | Setting of DBSession queryTimeouts by query is broken (JMC-7776)
  • Technical | The dialog that doesn't allow the point of sale to start because there is an initial load going on sometimes can take several hours to disappear (JMC-7740)
  • Vertex Integration| Vertex Integration job rte2JMC is failing with Binding errors (JMC-7816)

Upgrade Considerations

  • The configuration openpos.ops.till.showReconcileDetailCountScreen previously determined whether the Detail Count view was displayed by default during open store bank, create till, open till, reconcile till, and close store bank operations.That configuration has been removed in favor of individual configurations per operation:These are all flags/booleans, and are false by default.When upgrading, a previous setting of openpos.ops.till.showReconcileDetailCountScreen: true is logically equivalent to setting all the new configurations to true, though openpos.ops.till.showDetailCountScreen.reconcileTill is the equivalent new configuration in name and intent. (JMC-7756)

Security

  • From null nullnullAny project that parses untrusted Protocol Buffers data containing an arbitrary number of nested groups / series of SGROUP tags can corrupted by exceeding the stack limit i.e. StackOverflow. Parsing nested groups as unknown fields with DiscardUnknownFieldsParser or Java Protobuf Lite parser, or against Protobuf map fields, creates unbounded recursions that can be abused by an attacker. (CVE-2024-7254protobuf: StackOverflow vulnerability in Protocol Buffers)

243.9.2

Fixed

  • Add Penny to Even Exchange Throwing Null Pointer When Tax Authority is Null (JMC-7707)
  • Publisher | Publisher is locking eagerly and not releasing if unable to continue processing queued items. (JMC-7646)
  • Sales Tax | TAX amounts (State Tax, PIF, RSF) discrepancies on CO store (JMC-6076)

Security

  • From nullA special BeanIntrospector class was added in version 1.9.2. This can be used to stop attackers from using the declared class property of Java enum objects to get access to the classloader. However this protection was not enabled by default. PropertyUtilsBean (and consequently BeanUtilsBean) now disallows declared class level property access by default.Releases 1.11.0 and 2.0.0-M2 address a potential security issue when accessing enum properties in an uncontrolled way. If an application using Commons BeanUtils passes property paths from an external source directly to the getProperty() method of PropertyUtilsBean, an attacker can access the enum's class loader via the "declaredClass" property available on all Java "enum" objects. Accessing the enum's "declaredClass" allows remote attackers to access the ClassLoader and execute arbitrary code. The same issue exists with PropertyUtilsBean.getNestedProperty(). Starting in versions 1.11.0 and 2.0.0-M2 a special BeanIntrospector suppresses the "declaredClass" property. Note that this new BeanIntrospector is enabled by default, but you can disable it to regain the old behavior; see section 2.5 of the users guide and the unit tests.This issue affects Apache Commons BeanUtils 1.x before 1.11.0, and 2.x before 2.0.0-M2.Users of the artifact commons-beanutils:commons-beanutils1.x are recommended to upgrade to version 1.11.0, which fixes the issue.Users of the artifact org.apache.commons:commons-beanutils22.x are recommended to upgrade to version 2.0.0-M2, which fixes the issue. (CVE-2025-48734 Improper Access Control vulnerability in Apache Commons.)

243.9.1

New + Improved

  • Matrix Scanning | Implement MatrixScan with the Zebra DS9308 scanner for a fixed register (JMC-7258)
  • Matrix Scanning | Implement MatrixScan Count using native iOS SDK (JMC-7015)
  • Technical | Add API for IContextService to enable/disable a button (JMC-7478)

Fixed

  • Legacy Wrapper | Service fails to start due to missing dependency (JMC-7597)
  • Printing | When a list of documents is printed, and all prints error besides the last one, no prompt to retry print (JMC-7462)
  • Reporting | Queries used for Some Custom Sales Reporting Returning Incorrectly Calculated Data (JMC-7599)
  • Tax | Taxes in certain states (AL, PA) calculate incorrectly for non-receipted returns (JMC-7618)
  • Technical | [no response] from server is not treated as error or success during personalization, failure to failover occurs (JMC-7533)
  • Technical | Issue instantiating models when generating Deposit Worksheet Report Audit Summary (JMC-7612)
  • Technical | SqlPurgeJob takes up a lot of memory when there are a lot of rows to purge (JMC-7362)

Upgrade Considerations

  • This change updates AutoPersonalizationStartupTask.personalizeUsingDeviceNameto fail/throw after 5 attempts to either getPersonalizationParameters or personalize with those parameters, where it previously would continue trying indefinitely. This allows personalizationStartupSequence to move to the next prioritized personalization startup task. This affects both EnterpriseConfigPersonalizationStartupTask and QueryParamsPersonalization as they both use AutoPersonalizationStartupTask.personalizeUsingDeviceName. (JMC-7533)
  • for pk based purging jobs, addednullopenpos.jobs.config.[jobName].batchSize, to control the fetch size and commit size. default is 1000 (JMC-7362)

Security

  • (CVE-2025-22235 org.springframework.boot:spring-boot (spring-boot-3.4.4.jar))

243.9.0

New + Improved

  • Add support to ctx_button for making a button invisible (JMC-7432)
  • Adyen | Add new Payment Variants to support Debit Optimization (JMC-7107)
  • Architecture | Add flow service endpoint to get the current status of a device (JMC-7399)
  • Customer | Provide the ability to look up or create a customer outside of transaction (JMC-3601)
  • Employee Discount | Provide the ability to allow different levels of employee discount promotions by employee classification (JMC-6946)
  • Enhance Commerce's H2 implementation to allow for external connections to be made. Default to off. (JMC-7434)
  • Manage Tills | Provide the ability to indicate if a till was fast opened/closed (JMC-6643)
  • Matrix Scanning | Implement MatrixScan with the Zebra DS9308 scanner for a fixed register (JMC-7258)
  • Matrix Scanning | Implement MatrixScan Count using native iOS SDK (JMC-7015)
  • Provide ability to override Shrug UI message based on Exception type or other logic (JMC-7243)
  • Remove deprecated columns from dev_device_personalization (JMC-7430)
  • Self Checkout | Provide ability to add a placeholder on the receipt option selection screen to display an image (JMC-7389)
  • Self Checkout | Provide the ability to show split tenders on the Tender screen when paying with multiple tenders and prevent customers from removing tenders (JMC-6771)
  • Technical | Add default logback masking for OAuth client secrets and scandit license (JMC-7169)
  • Technical | Gift card items are added to transaction with hard-coded itemTaxable = false which bypasses item taxGroup logic (JMC-7364)
  • Technical | ReconcileTillAcceptAmountCountedState needs to format money correctly in the prompt text (JMC-6871)
  • Technical | Update SymmetricDS to 3.15.14 (JMC-6764)
  • Usability | Increase the touch area of the BACK < and the CLOSE X (JMC-7039)

Fixed

  • Authentication | Password failed requirements prompt no longer appears when you attempt to change your password to an invalid one (JMC-6652)
  • Authentication | UserID not printing on Password Failed Requirements prompt correctly (JMC-7269)
  • Central | GenerateCustomerIdEndpoint should use different prefix value for central instance (JMC-7014)
  • Customer | Disable Customer Display Loyalty Barcode Scan (JMC-7153)
  • Customer | The phone number opt into marketing preferences screen is not displaying if address is first modified then both phone and address are modified. (JMC-7232)
  • CX Connect | Charity donation screen does not reappear if the cashier goes back to sale and hits pay again (JMC-7164)
  • CX Connect | Customer details screen does not get pulled into an edit session when cashier clicks on "Send to Customer" (JMC-7120)
  • Gift Cards | Giftcard issue, add-value and balance inquiry throw error and do not work (JMC-7403)
  • Gift Cards | Reloading gift card that hasn't been activated allows customer to be charged without the gift card actually being loaded. (JMC-6382)
  • Initial Load | Client starts personalization too soon after initial load completes (JMC-7312)
  • Manage | Rare exception when opening till (JMC-6816)
  • Manage | Shrug guy when leaving amount blank during Closing the Till (JMC-7460)
  • Orders | Customer Information dialog tabbing through fields skips Postal Code (JMC-7328)
  • Orders | If you mark a single BOPIS Item as 'cannot fulfill', the order reappears (JMC-7270)
  • Orders | Shrug when trying to remove a shipping box from the selection (JMC-7250)
  • Personalization | dev_device_personalization table should not include tag columns in its primary key (JMC-7260)
  • Printer and Cash Drawer | Failure to claim device causes release to fail, which causes close device to not execute (JMC-7133)
  • Promote | discountCodeDetails are not displayed for Category Rewards (JMC-6345)
  • Promote | If you enter a pound sign only (#) we do not reserve the pattern (JMC-6315)
  • Promote | Search issues in Promote UI (JMC-6281)
  • Promote | When using unique code you should not be able to enter a pound sign only (#) since the pattern field should only be prefix (JMC-6314)
  • Promotions | Bounce back promotions are not honoring the max uses setting if only one reward is desired (JMC-7333)
  • Promotions | Discount total incorrect on return of item with a price override to a higher price (JMC-7027)
  • Promotions | First promotion calculated after the calcInBackground flag evaluates to true does not make it to the UX (JMC-7305)
  • Publisher | Duplicate transactions are published when there are multiple instances of Publisher running. (JMC-7173)
  • Reports | Tills reports are inaccurate after "fast opening" till (JMC-7003)
  • Return | Shrug when attempting to activate already active gift card during return tender process (JMC-7144)
  • Returns | Returns should not include price override in discount total when isDisplayedAsDiscount=false (JMC-7030)
  • Self Checkout | Fix styling on tender screen split while paying with multiple tenders (JMC-7320)
  • Self Checkout | Loyalty points balance does not display on Tender tile in Self-checkout customer mode (JMC-6903)
  • Self Checkout | On-screen keyboard is overlapping various dialogs on the SCO Tender screen (JMC-6772)
  • Self Checkout | Revert changes for On-screen keyboard is overlapping various dialogs on the SCO Tender screen (JMC-7330)
  • Self Checkout | Zero balance does not show the continue button on the tender screen (JMC-7385)
  • Shared Cash Drawer | Shrug when attempting to perform 'Close Till' on a shared cash drawer from Manage Tills (JMC-7316)
  • Tax | Even exchange rounding adjustment needs to handle differences > $0.01 (JMC-6778)
  • Techincal | OpenStoreState, onYes should openStoreBank instead of openStore directly (JMC-6864)
  • Technical | Add shutdown hook to mark devices hosted by the server as disconnected (JMC-7370)
  • Technical | Changes to dev_device_personalization do not take effect until a server restart. It should not be cached. Also add it to sync down to the fixed registers by default. (JMC-7401)
  • Technical | ERROR when looking up an item for the first time (JMC-7289)
  • Technical | If a pod is restarted while it is running a cluster locked job, then that job can be locked until it times out. Add listener that cleans up locks on a clean shutdown. (JMC-7365)
  • Technical | ITaxService.findTaxGroup is broken (JMC-7183)
  • Technical | Make readPromotions more robust if there is mismatching data (JMC-7123)
  • Technical | PHONE_LIST form field doesn't update CustomerModel (JMC-7115)
  • Technical | RestVertexCalculateTaxEndpoint.taxRestTemplate never gets initialized, thus a NullPointerException is thrown (JMC-7207)
  • Technical | When database scripts have the same prefix and different descriptions the order they are applied in can be indeterminate when executed in a container (JMC-7275)

Upgrade Considerations

  • Customer ID was generated using the format: "1" + deviceId + customer sequence number.nullNew Approach:Customer ID is now generated as a 22-digit Base64 encoded UUID. (JMC-7014)
  • The openpos.sale.userActionTrans.enabled config was updated to be defaulted to TRUE instead of FALSE. This means that SLS_TRANS and SLS_TRANS_USER_ACTION records will be created on logout. (JMC-3601)
  • Because the primary key was removed from dev_device_personalization there is the opportunity for the alter to fail if there are duplicate rows. Make sure to clean up any duplicate rows before upgrading. (JMC-7260)
  • If any projects have a custom IIncidentService , implementors may need to adjust their code to use a custom IIncidentUIMessageBuilder instead. (JMC-7243)
  • This PR deprecates openpos.tax.andPennyToExchangeEnabled and adds the following configuration instead:openpos: tax: roundupOnExchange: enabled: true maxAmountToAdjustBy: 0.01This allows for rounding on exchanges to occur up to the configured amount. The default amount in $0.01. (JMC-6778)

Security

  • (CVE-2025-27363 found in POS, vertex, symDS, and Clienteling LB 243.6.6 imagesFreeType < 2.13.0)

Retail Core (Shared core by store applications)

243.9.3

Security

  • (CVE-2024-7254StackOverflow vulnerability in Protocol Buffers)

243.9.0

New + Improved

  • Technical | Integrate the AWS Aurora Postgres JDBC Driver with Commerce (JMC-7022)

Fixed

  • Backwards Compatibility | Send_Sale was removed from line item type code and replaced with Ship_Sale (JMC-7161)

Upgrade Considerations

  • The following line from /headless/point-of-sale/base/build.gradle:rename { fileName -> fileName.contains('wrapper') ? 'openpos-wrapper.jar' : fileName }will need to be changed to:rename { fileName -> fileName.startsWith('legacy-wrapper') ? 'openpos-wrapper.jar' : fileName }This is due to the name of the new AWS advanced JDBC driver – aws-advanced-jdbc-wrapper.jar – which also contains the substring of wrapper. Absent the requisite change, builds will fail because of the attempt to rename the AWS driver to openpos-wrapper.jar. (JMC-7022)

Clientelling

243.9.4

Fixed

  • Clientelling | Transaction data is not written to ctx_consultation_item table (JMC-7931)