From 462a863d8bdca1ea932c31a63ec9ff35b597f6b2 Mon Sep 17 00:00:00 2001 From: MOON Date: Tue, 9 Jun 2026 16:16:15 -0400 Subject: [PATCH] fix(usps): declare usps_rate_indicator option and price_type connection config - usps_rate_indicator is read in the label request but was never declared in ShippingOption, so shipping_options_initializer's items_filter silently dropped it and labels always used the hardcoded DR indicator. - price_type is read from connection_config in rate.py but was never declared in ConnectionConfig, so config {"price_type": "CONTRACT"} was silently dropped and rate requests always fell back to RETAIL. - Default label rateIndicator changed DR -> SP (single piece). Contract (NSA) pricing typically covers SP, and the DR default caused USPS to answer 'Contract rate not found for request. Published rate returned.' and bill published rates instead of the account's contract rates. --- .../connectors/usps/karrio/providers/usps/shipment/create.py | 2 +- modules/connectors/usps/karrio/providers/usps/units.py | 1 + modules/connectors/usps/karrio/providers/usps/utils.py | 1 + modules/connectors/usps/tests/usps/test_shipment.py | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/connectors/usps/karrio/providers/usps/shipment/create.py b/modules/connectors/usps/karrio/providers/usps/shipment/create.py index 067a67093f..191403fb30 100644 --- a/modules/connectors/usps/karrio/providers/usps/shipment/create.py +++ b/modules/connectors/usps/karrio/providers/usps/shipment/create.py @@ -265,7 +265,7 @@ def shipment_request( width=package.width.IN, girth=package.girth.value, mailClass=mail_class, - rateIndicator=package.options.usps_rate_indicator.state or "DR", + rateIndicator=package.options.usps_rate_indicator.state or "SP", processingCategory=lib.identity( package.options.usps_processing_category.state or "NON_MACHINABLE" ), diff --git a/modules/connectors/usps/karrio/providers/usps/units.py b/modules/connectors/usps/karrio/providers/usps/units.py index f09aa5529d..af60b8d963 100644 --- a/modules/connectors/usps/karrio/providers/usps/units.py +++ b/modules/connectors/usps/karrio/providers/usps/units.py @@ -247,6 +247,7 @@ class ShippingOption(lib.Enum): usps_carrier_release = lib.OptionEnum("carrierRelease", bool, meta=dict(category="DELIVERY_OPTIONS")) usps_physical_signature_required = lib.OptionEnum("physicalSignatureRequired", bool, meta=dict(category="SIGNATURE")) usps_price_type = lib.OptionEnum("priceType", lib.units.create_enum("priceType", ["RETAIL", "COMMERCIAL", "CONTRACT"])) + usps_rate_indicator = lib.OptionEnum("rateIndicator") usps_destination_entry_facility_type = lib.OptionEnum("destinationEntryFacilityType", lib.units.create_enum("destinationEntryFacilityType", ["NONE", "DESTINATION_NETWORK_DISTRIBUTION_CENTER", "DESTINATION_SECTIONAL_CENTER_FACILITY", "DESTINATION_DELIVERY_UNIT", "DESTINATION_SERVICE_HUB"])) usps_extra_services = lib.OptionEnum("extraServices", list) usps_shipping_filter = lib.OptionEnum("shippingFilter", lib.units.create_enum("shippingFilter", ["PRICE", "SERVICE_STANDARDS"])) diff --git a/modules/connectors/usps/karrio/providers/usps/utils.py b/modules/connectors/usps/karrio/providers/usps/utils.py index 2563372919..99261d6172 100644 --- a/modules/connectors/usps/karrio/providers/usps/utils.py +++ b/modules/connectors/usps/karrio/providers/usps/utils.py @@ -45,6 +45,7 @@ def connection_config(self) -> lib.units.Options: class ConnectionConfig(lib.Enum): permit_ZIP = lib.OptionEnum("permit_ZIP") + price_type = lib.OptionEnum("price_type") permit_number = lib.OptionEnum("permit_number") shipping_options = lib.OptionEnum("shipping_options", list) shipping_services = lib.OptionEnum("shipping_services", list) diff --git a/modules/connectors/usps/tests/usps/test_shipment.py b/modules/connectors/usps/tests/usps/test_shipment.py index 5839aaa404..26507d337e 100644 --- a/modules/connectors/usps/tests/usps/test_shipment.py +++ b/modules/connectors/usps/tests/usps/test_shipment.py @@ -253,7 +253,7 @@ def test_parse_shipment_response_sample2(self): "mailClass": "LIBRARY_MAIL", "mailingDate": "2024-07-28", "processingCategory": "NON_MACHINABLE", - "rateIndicator": "DR", + "rateIndicator": "SP", "weight": 44.1, "weightUOM": "lb", "width": 4.72,