Tuesday, May 5, 2026
26 changes · saas-19.3
Enhancements to existing features
This update adjusts the reporting of COA and TB data to align with Mexican government specifications. This ensures compliance with tax regulations and reduces the risk of reporting errors. The changes are focused on data formatting for improved accuracy.
Original PR description
Reordered COA and TB attributes to be more according on what government expects on those reports task-5422228
This update enhances the website builder's flexibility by allowing users to define custom ratios for background and image shape speeds. Additionally, it automatically sets a default animation speed for image shapes, resolving a previous issue where the minimum speed was applied by default. This improves the user experience and allows for more precise control over visual elements.
Original PR description
This PR makes the following changes:
1. Add support of custom ratio in builderRange
- Earlier, the values in `BuilderRange` component were normalized between 0 and 100 (when `displayNormalizedValue` prop is true) and did not support custom ratios.
- This PR adds support for custom ratios by introducing the `convertorRatio` object prop.
- This is used for background and image shape speed, where values are normalized between 0.33 and 3.
2. Set default animation speed on image shapes
- Previously, when an animated shape was applied to image, the animation speed dataset was not initialized until the user modified it via the sidebar. This caused a fallback to apply the minimum speed value.
- This PR ensures that the animation speed dataset is initialized to "0" by default when an animated shape is applied to an image.
task-6138981Resolved issues and error corrections
This update resolves an issue where IoT-connected printers weren't correctly configured within Odoo's Point of Sale (PoS) system. Previously, these printers were unusable. This fix ensures that IoT printers are properly loaded, allowing for seamless operation within the PoS workflow.
Original PR description
preparation printers were not loaded in PoS as IoT devices making them unusable. Forward-Port-Of: odoo/enterprise#115826 Forward-Port-Of: odoo/enterprise#115768
This update fixes an issue where invoices created in a branch environment with tax-included prices didn't correctly calculate the price after applying a fiscal position. Previously, the unit price remained at the full tax-included amount. This change ensures accurate price recalculation and tax handling for multi-company branch operations, improving financial reporting.
Original PR description
When operating in a multi-company branch environment, the unit price of a product with price-included taxes is not correctly recalculated when applying a fiscal position. Steps to reproduce: - Create a tax that is included in the price (e.g., 10% incl). - Assign this tax to a product (e.g., Product A). - Create a fiscal position that maps this 10% tax to a different tax. - Create a branch (child company) of your main company. - Create an invoice in the new branch using the fiscal position and add an invoice line for Product A. Issue: The unit price of the product on the invoice line remains the full tax-included amount rather than being reduced to exclude the original 10% tax. opw-5931302 Forward-Port-Of: odoo/odoo#262190 Forward-Port-Of: odoo/odoo#256897
This update resolves an issue preventing the successful import of Winbooks data for Belgian companies. The fix allows Odoo to correctly recognize a specific tax account (411000) used in Winbooks, ensuring accurate data import and avoiding an error message. This improves the reliability of the Winbooks import process.
Original PR description
Steps to reproduce: ------------------- 1. Install account_winbooks_import, and switch to a Belgian company 2. Open Accounting > Configuration > Settings and click "Import", then click "Import WBK"…
Steps to reproduce: ------------------- 1. Install account_winbooks_import, and switch to a Belgian company 2. Open Accounting > Configuration > Settings and click "Import", then click "Import WBK" 3. Upload a Winbooks zip whose chart of accounts uses 411000 typed as asset_current (Winbooks default for "VAT Recoverable") 4. Confirm the import The import fails with: "You must select a receivable account for 'Tax Receivable Account'." Why the issue ------------- In Winbooks, account 411000 is the V01 central account (tax receivable). In Odoo, 411000 comes from l10n_be (account "a411") with type "asset_current", not "asset_receivable". When the import wizard sets it on the existing tax groups via `manage_centralid` in import_wizard.py, the constraint `_constrains_payable_receivable_account` on account.tax.group rejects the write because the account is not "asset_receivable" + "non_trade". This case was already handled in 20804db6d87: we bypassed the constraints on accounts coming from Winbooks, as those are imported in draft anw and the user finishes the configuration after. However later, [2a38e771a826](https://github.com/odoo/odoo/commit/2a38e771a826) and ff5dee81080 removed the initial constraint and the code that bypassed it for account_winbooks_import. Finally, [746a06fab485](https://github.com/odoo/odoo/commit/746a06fab485) added back a similar constraint "_constrains_payable_receivable_account" to fix a NL issue (same account used as both payable and receivable on a tax group). The Winbooks bypass however was not added back, so the original Winbooks issue appeared again. The fix ------- Add back the same bypass originally introduced in 20804db6d87. opw-6092464 Forward-Port-Of: odoo/enterprise#115291
This update corrects a bug that occurred when manually creating vendor bills and DIAN commercial events were rejected. The fix ensures that retries work correctly, preventing errors related to outdated data and improving the reliability of DIAN integration for our Colombian users. This resolves a specific issue that only appears in standard testing environments.
Original PR description
This commit fixes an error when retrying a rejected DIAN commercial event on manually created Vendor Bills. This is a tricky error as it only happens when the vendor bill is manually created and the…
This commit fixes an error when retrying a rejected DIAN commercial event on manually created Vendor Bills. This is a tricky error as it only happens when the vendor bill is manually created and the event is rejected (missing/incomplete info or servers down which is common). To add more to this, this error can only be reproduced without demo mode as it forces the acceptance, forcing the need of valid testing or production DIAN credentials How to reproduce it: - Install l10n_co_dian module - On CO company with all required DIAN configuration set - Create a vendor bill manually with enough information to send to the DIAN but causing it to be rejected. - Click on acknowledge receipt, it should be rejected - Complete information to be accepted and again click on acknowledge receipt - A traceback appear Code expects the last document to be the most current one created when triggering commercial event, but this is not true when a rejected document exists since this is unlinked and cache invalidated causing the recordset to be invalidated and retrieved again by ORM with default order, so now the last document is the oldest one without an attachment causing the traceback opw-6104541 Forward-Port-Of: odoo/enterprise#114758
This update optimizes appointment scheduling by only calculating availability for the current month, rather than pre-computing all slots. This change significantly reduces the system's workload and improves response times when users are booking appointments, leading to a smoother user experience. It's a performance enhancement focused on the appointment module.
Original PR description
Generate all slots and compute only availabilities for the display month instead of pre-computing all slots for the whole booking period. task-4144524 Forward-Port-Of: odoo/enterprise#115986
This update fixes a bug preventing the correct import of PINT invoices (Australia, Japan, Myanmarese, Singapore) by adding logic to identify the document type. It also corrects a previous issue where tax amounts were incorrectly processed for JP PINT invoices, ensuring accurate financial reporting.
Original PR description
## PINT modules (`l10n_*_ubl_pint`)
The UBL module wasn't able to import PINT documents because there was no logic to detect the type of UBL document for PINT invoices (`urn:peppol:pint:billing-1@{anz, jp, my, sg}-1`). This PR adds the methods to detect PINT UBL documents and provide appropriate EDI decoder model names. Along with the fix, test cases are added to verify proper import of the said UBL's.
## Base EDI module (`account_edi_ubl_cii`)
Additionally, `_correct_invoice_tax_amount` in the base UBL import is fixed to only process TaxSubtotal nodes in the document currency. Previously it iterated over all `TaxTotal/TaxSubtotal` nodes regardless of currency, which caused the JP PINT import to pick up the company-currency tax amount instead of the document-currency one. JP PINT is the only format that includes TaxSubtotal in both TaxTotal nodes.
Forward-Port-Of: odoo/odoo#262010
Forward-Port-Of: odoo/odoo#258017This update resolves an issue where users lacked access to equity information for partners associated with different companies within their Odoo Enterprise setup. The change adds a company identifier to equity records, ensuring accurate reporting and access to all relevant partner data, regardless of company affiliation.
Original PR description
Before this commit, if you had some holders only visible to a company you don't have access to, the cap table would show an access error. This commit introduces multi-company logic to equity models by adding a new company_id field related to the company_id of the partner_id. Other partners (holder, seller, subscriber) will have their companies checked against that company. task-6018771 Forward-Port-Of: odoo/enterprise#110724
This update corrects a bug in the invoice cancellation process for the ECPay integration. Previously, non-administrator users couldn't properly cancel invoices due to a permission issue with the staging mode setting. This change ensures all users can cancel invoices through the wizard, improving the user experience and preventing disruptions to the accounting workflow.
Original PR description
Before this commit, the invoice cancellation wizard failed when clicking "Request Cancel" because l10n_tw_edi_ecpay_staging_mode lacked sudo access, while similar fields had it. The cancel wizard (l10n_tw_edi.invoice.cancel) needs to read this field to determine the API endpoint, but non-superuser accounts couldn't access it, causing a permission error. This commit adds sudo() when accessing staging_mode, consistent with other ECPay API configuration fields. Steps to reproduce: - Install l10n_tw modules with ECPay staging credentials (MerchantID: 2000132) - Use valid Tax ID (10430481) to create and send invoice - As Accounting/Administrator user, cancel the invoice - Access error occurs on button_request_cancel opw-6101478 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260962
This update fixes an issue where the Swedish EC Sales Report exported to KVR (a key reporting format) displayed values with decimal places, which is not permitted by Swedish regulations. The fix ensures that all sales report values are rounded to integers, guaranteeing accurate reporting for Swedish businesses. This improves data integrity and compliance.
Original PR description
**PROBLEM** EC Sales Report in Sweden needs to be reported with integer values. **STEP TO REPRODUCE** 1. Install l10n_se 2. On the se company, create a invoice with lines with EU tax and confirm it. 3. Go to Accounting/Reporting/EC Sale List and export to KVR. 4. Notices the KVR uses numbers with decimals places. opw-6045289 Forward-Port-Of: odoo/enterprise#116056 Forward-Port-Of: odoo/enterprise#114292
This update resolves an issue where payroll XML files were incorrectly rejecting due to missing 'TotalPercepciones' when only 'OtrosPagos' (other payments) were present. This change ensures compliance with Mexican tax regulations (LISR) and avoids rejection by the SAT, improving payroll processing accuracy.
Original PR description
When a payslip contains only OtrosPagos (no perceptions), the SAT rejects with NOM36 because TotalPercepciones must not exist per the nomina12 XSD. This is a valid scenario under LISR articles 93 and 94, where certain payments (e.g., viáticos, becas, fondo de ahorro patronal) do not constitute taxable salary income. Apply the same 'or None' pattern already used for TotalDeducciones, so format_float(None) returns None and the attribute is omitted from the XML. Forward-Port-Of: odoo/enterprise#115923
This update resolves an issue where image options weren't consistently applying to new images within the HTML Builder. By restoring sequential execution of key handlers, the system now correctly transfers and applies all image shape and hover effect options, ensuring consistent visual results. This improves the functionality of image editing within the builder.
Original PR description
[FIX] html_builder, *: execute handler sequentially *: html_editor, website Since [1], shape and hover effect options are transferred to the new image in `on_will_save_media_dialog_handlers` within `AnimateOptionPlugin` and `ImageShapeOptionPlugin`. Because the resource was called sequentially, options were correctly applied to the new image. The problem is that since [2], the media plugin does not call `on_will_save_media_dialog_handlers` sequentially. As a result, `processImage` may run before the transfer from the old image options to the new one is complete causing some options to be missing. This commit restores sequential execution of `on_will_save_media_dialog_handlers` to ensure all options are properly applied. [1]: https://github.com/odoo/odoo/commit/137a6d7e59e1d788745c3b796a14839e52a8c5bc [2]: https://github.com/odoo/odoo/commit/b966432e85a7e19c0e4e4bfbb34f673b64fc84e6 task-6186063
This update streamlines bank reconciliation within the Odoo Enterprise system. It now automatically allows users to match statement lines from a parent company with related payments and invoices from its branches, improving the accuracy and efficiency of bank reconciliation processes. This change resolves a previous issue where matching was limited.
Original PR description
The aim of this commit is allowing in the automatic reconciliation of bank reconciliation widget the possibility to reconcile statement lines from a parent company with moves (payments and invoices) from a branch. To do that, we are not only checking that the company between the AML and the statement line is the same, we are checking that there is a parent relation between the company of the AML and the statement line. opw-6056320 Forward-Port-Of: odoo/enterprise#115267 Forward-Port-Of: odoo/enterprise#114850
This update resolves issues related to how tracking messages are generated and displayed within Odoo. Specifically, it ensures accurate formatting of tracking data, corrects inconsistencies in test cases, and improves the handling of various tracking field types, ultimately enhancing the reliability of tracked communications.
Original PR description
Since [1] trackings are embed in message body. This PR provides various fixes and improvements following the merge of the revamped implementation. See commits for more details. Task-6128706 [1] See odoo/odoo#235719 and odoo/enterprise#99500
This update resolves issues related to how tracking information is embedded within messages, primarily impacting notification displays and test reliability. The changes ensure tracking values are correctly formatted and accessible, improving the overall user experience and fixing inconsistencies in tracking data.
Original PR description
Since [1] trackings are embed in message body. This PR provides various fixes and improvements following the merge of the revamped implementation. See commits for more details. Task-6128706 [1] See odoo/odoo#235719 and odoo/enterprise#99500
This update fixes an issue where the COGS calculation was incorrectly inflated when multiple lines of the same product were invoiced separately from a single Sale Order. The change ensures that COGS are accurately attributed to each individual invoice, preventing inaccurate profitability reporting. This improves the reliability of sales data and financial reporting.
Original PR description
### Issue: When a Sale Order has multiple lines for the same FIFO-costed product and each line is invoiced separately, the COGS posted on the second (and any subsequent) invoice is incorrectly…
### Issue: When a Sale Order has multiple lines for the same FIFO-costed product and each line is invoiced separately, the COGS posted on the second (and any subsequent) invoice is incorrectly inflated, causing the sale to appear less profitable or even at a loss in the accounting records. ### Steps to reproduce: 1. Set a product as storable with FIFO costing and real-time valuation. 2. Create a Sale Order with two lines for the same product at different prices. 3. Confirm the SO and validate the two deliveries (each consumes a different FIFO layer). 4. Invoice the first SO line and post the invoice. 5. Invoice the second SO line and post the invoice. 6. Observe that the COGS on the second invoice is higher than the actual cost of the stock move linked to that line. ### Root Cause: _get_cogs_qty() and _get_posted_cogs_value() in sale_stock filtered already-posted COGS lines by product_id. This caused them to aggregate quantities and values across ALL SO lines sharing the same product. However, _get_cogs_price_unit() derives the unit cost only from the current line's stock move. The mismatch results in: (unit_cost_of_line_2 * total_qty_of_both_lines) - cogs_already_posted ### Fix: Replace the product_id filter with a sale-line-scoped filter using cogs_origin_id. By checking cogs_origin_id.sale_line_ids & sale_lines, only COGS originating from the same SO line(s) as the current invoice line are considered, correctly isolating each line's COGS from the others. opw-6004810 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257868
This update resolves an issue where mail tracking functionality was unreliable due to timezone dependencies. The fix prevents message type changes during copying and introduces a user error to maintain data consistency, ensuring accurate tracking of messages and improving overall system stability. This addresses potential data inconsistencies and enhances the reliability of our messaging features.
Original PR description
- avoid company timezone dependency to prevent traceback without resource module.
- prevent message_type change when copying tracked messages
Raise a UserError when copying a message with tracking values and changing message_type to avoid inconsistent chatter data.
task-5260614A recent update resolves an issue where manufacturing orders were only processing the first 40 components of a Bill of Materials (BoM). This change ensures that all components, regardless of quantity, are correctly accounted for in the manufacturing process, preventing errors and ensuring accurate production tracking. This fix improves the reliability of manufacturing order creation.
Original PR description
Bug introduced in: https://github.com/odoo/odoo/pull/256655/changes/c5f0e5685b0d08fb85f723ba13e2795a06bbcfea Steps to reproduce the bug: - Create a BoM with more than 40 components - Create a manufacturing order with this BoM Problem: Only the first 40 components are taken into account and their moves are created; the remaining ones are not created. opw-6186544 Forward-Port-Of: odoo/odoo#262692
This update fixes an issue where analytic accounting wasn't correctly linking partners to journal entries during internal stock transfers. The fix ensures that the correct partner information is associated with the journal entry, improving the accuracy of financial reporting related to inventory movements. This resolves a discrepancy in how analytic distributions were applied.
Original PR description
**Steps to reproduce**: - Activate analytic accounting on the settings - Create an Analytic distribution models for a partner - Create a product P with a cost and Inventory Valuation set to Perpetual…
**Steps to reproduce**: - Activate analytic accounting on the settings - Create an Analytic distribution models for a partner - Create a product P with a cost and Inventory Valuation set to Perpetual - Create a location L with a Location Type set to Inventory Loss and a Loss Account - Create an internal transfer from Stock to location L for product P - Confirm it - Check the associated journal entry: -> The analytic distribution is not set of the move lines **Cause**: While validating the picking: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/stock/models/stock_picking.py#L1426 An account move is created without specifying `partner_id`: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/stock_account/models/stock_move.py#L178 https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/stock_account/models/stock_move.py#L200-L205 This leads to the creation of account move lines, triggering `_inverse_analytic_distribution`: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/account/models/account_move_line.py#L1416-L1417 The method accesses `analytic_distribution` of the `move_line`: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/account/models/account_move_line.py#L1410 which triggers its associate compute method: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/account/models/account_move_line.py#L1213 To retrieve the right `analytic_distribution`: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/account/models/account_move_line.py#L1224 By defining this search domain: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/analytic/models/analytic_distribution_model.py#L85 if `partner_id` is not in the `vals`, it falls back to False: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/analytic/models/analytic_distribution_model.py#L79 As a result, the distribution linked to the `partner_id!` is not found, since the `partner_id` of the vals is determined from the `account.move.line`: https://github.com/odoo/odoo/blob/ae63688e869148ad62ef107bd8f35c4cdb33a190/addons/account/models/account_move_line.py#L1237 which is False since it is not specified while creating the account move. opw-5918058 Forward-Port-Of: odoo/odoo#261713
This update resolves an issue where the system was prematurely skipping remuneration declarations, particularly when employees had periods without worked days but still received payments like end-of-year bonuses. The fix ensures accurate calculation of all declared remuneration amounts, improving payroll reporting for our Belgian clients.
Original PR description
Forward-Port-Of: odoo/enterprise#115998 Forward-Port-Of: odoo/enterprise#106689
A bug in the Odoo spreadsheet functionality was causing the user interface to freeze when a specific function was used. This update fixes an infinite loop that occurred within the ODOO.LIST.HEADER function, ensuring the spreadsheet remains responsive and stable. This resolves a potential disruption to users creating and managing spreadsheets.
Original PR description
When using `ODOO.LIST.HEADER(1, <empty_cell_ref>)`, the spreadsheet enters an infinite evaluation loop, causing the UI to freeze. Task: 6171185 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262037 Forward-Port-Of: odoo/odoo#261724
This update resolves an issue where discounts weren't being imported correctly, leading to incorrect subtotal calculations for imported invoices. The fix prevents rounding of discounts during import, ensuring the imported invoice's subtotal matches Odoo's calculation. This improves data accuracy for IT VAT invoices.
Original PR description
**PROBLEM** When importing an invoice, we don't want to round the discounts, to avoid discrepancy between the subtotal computed by Odoo, and the subtotal of the file we import. To do this, we change the decimal precision of discount to 100 digits when importing files. However, float_round wasn't built with this in mind, in float round, we add a small epsilon to fix some rounding issue. This small epsilon changes the amount of the discount (50.0 -> 0.5000000000004) and this changes the subtotal. **STEP TO REPRODUCE** 1. Install l10n_edi_it. 2. Change the VAT number of IT Company to 05098540288 (to match the one on the file to import). 3. Import the file present in the bug ticket. 4. Notice the subtotal of the line doesn't match what's in the invoice. **FIX** We skip rounding of the discount on import. Ticket [link](https://www.odoo.com/odoo/project.task/6046324) opw-6046324 Forward-Port-Of: odoo/odoo#262562 Forward-Port-Of: odoo/odoo#256037
This update resolves an issue where the 'PayableRoundingAmount' was incorrectly calculated as a cash rounding. The fix creates the invoice first and then applies post-fix adjustments to the untaxed amount, aligning with existing tax calculation processes. This ensures accurate invoice generation and reporting related to UBL imports.
Original PR description
PayableRoundingAmount is not necessarily a cash rounding. It might also be the difference between the untaxed amount per line regarding the global untaxed amount due to the global tax rounding method. The idea in this commit is to create the invoice first and then, just like the code fixing the taxes, to post fix the untaxed amount after. opw-6151984 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260992
This update ensures that barcode validations during stock receipt creation correctly check if a destination has been scanned, even if it's the default location. Previously, the system didn't verify this, leading to potential issues. This change enhances the reliability of the barcode scanning process for stock management.
Original PR description
### Steps to reproduce: - In the settings: Enable "Storage Locations" - Inventory > Configuration > Warehouse Management > Operation Types - On receipts, in the Barcode App tab enable: "Force a…
### Steps to reproduce: - In the settings: Enable "Storage Locations" - Inventory > Configuration > Warehouse Management > Operation Types - On receipts, in the Barcode App tab enable: "Force a destination on all products" - Open the barcode app, create a new receipt - Scan a product > Validate #### > You are not blocked by the fact that you did not scan any destination even just to validate the default one ### Cause of the issue: The `barcode_validation_after_dest_location` operation type setting is not used at any point in the barcode app. ### Note: Line in the barcode app are always created a with a `location_dest_id`: https://github.com/odoo/enterprise/blob/a220fc61d9076decdb987421df9330a1c2c20546/stock_barcode/static/src/models/barcode_picking_model.js#L1310-L1322 In particular, even if the setting says: Force a destination on all products. It should rather be interpreted as force a destination scan before validation. Note that a destination scan will not necessarily update a single line but rather all concerned lines at once: https://github.com/odoo/enterprise/blob/a220fc61d9076decdb987421df9330a1c2c20546/stock_barcode/static/src/models/barcode_picking_model.js#L1558-L1576 It is therefore a valid call to check if a location dest was scanned to determine if the a destination was set on each product before validation of the picking, even if it is just to confirm the default destination. ### Note 2: We modify the `_get_barcode_config` to only provide a `barcode_validation_after_dest_location` if locations re enabled otherwise users enabling the option without the ability to scan locations would be soft lock and unable to validate their picking. That same logic already being applied to the `restrict_scan_dest_location` config parameter: https://github.com/odoo/enterprise/blob/6afe02e3e836df2822d7cae8aebbd5bdde6b34cc/stock_barcode/models/stock_picking_type.py#L109 opw-6110690 Forward-Port-Of: odoo/enterprise#115723 Forward-Port-Of: odoo/enterprise#114429
This update ensures correct processing of invoices from KSeF (a Polish tax system). It now requires vendors, even those based outside Poland (like Luxembourg), to use the Polish NIP number format when issuing invoices. This is a regulatory requirement for KSeF compliance, ensuring accurate tax reporting.
Original PR description
When we import bills from KSeF, the vendor (`Podmiot1`) XML tag must include a Polish `NIP` number XML tag. The `NIP` is the base number composing a polish `vat` number, but without the prefix `PL`.…
When we import bills from KSeF, the vendor (`Podmiot1`) XML tag must include a Polish `NIP` number XML tag. The `NIP` is the base number composing a polish `vat` number, but without the prefix `PL`. This is true even if the vendor is from another country like Luxembourg: if they have a stable organization in Poland and sells in Poland - then they have to use a polish `NIP` to use the KSeF and issue their invoices. Two issues: - We search the vendor by `NIP` as it was a `vat` number, but we add the `vendor_country` code as prefix instead of `PL`. I.e. we search for `LU012345678` instead of `PL012345678`. - When we don't find the vendor in the database, we create one using the `NIP` number coming straight from the tag, as it was a `vat` number. I.e. for a partner in Luxembourg, `vat` will become `LU012345678` instead of `PL012345678` ref: https://ksef.podatki.gov.pl/media/4u1bmhx4/information-sheet-on-the-fa-3-logical-structure.pdf Ticket [link](https://www.odoo.com/odoo/project.task/6148039) opw-6148039 Forward-Port-Of: odoo/odoo#262339 Forward-Port-Of: odoo/odoo#261964