diff --git a/dataset/bcbench.jsonl b/dataset/bcbench.jsonl index 806e9d9b7..292686e9e 100644 --- a/dataset/bcbench.jsonl +++ b/dataset/bcbench.jsonl @@ -102,3 +102,4 @@ {"metadata": {"area": "subscription billing", "image_count": 0, "persona": null}, "instance_id": "microsoft__BCApps-7070", "created_at": "2026-03-10T14:23:07Z", "environment_setup_version": "29.0", "project_paths": ["src\\Apps\\W1\\Subscription Billing\\App", "src\\Apps\\W1\\Subscription Billing\\Test"], "repo": "microsoft/BCApps", "base_commit": "3288a97957b975aa384de543a9741769300c1a51", "patch": "diff --git a/src/Apps/W1/Subscription Billing/App/Service Commitments/Tables/SubscriptionLine.Table.al b/src/Apps/W1/Subscription Billing/App/Service Commitments/Tables/SubscriptionLine.Table.al\nindex 40f4b62d41e..9f3c60d70f2 100644\n--- a/src/Apps/W1/Subscription Billing/App/Service Commitments/Tables/SubscriptionLine.Table.al\n+++ b/src/Apps/W1/Subscription Billing/App/Service Commitments/Tables/SubscriptionLine.Table.al\n@@ -880,7 +880,7 @@ table 8059 \"Subscription Line\"\n OnAfterCalculateServiceAmount(Rec, CalledByFieldNo);\n end;\n \n- local procedure SetUpdateRequiredOnBillingLines()\n+ internal procedure SetUpdateRequiredOnBillingLines()\n var\n BillingLine: Record \"Billing Line\";\n begin\n@@ -1339,7 +1339,9 @@ table 8059 \"Subscription Line\"\n repeat\n #pragma warning disable AA0214\n ServiceCommitment.ResetAmountsAndCurrencyFromLCY();\n- ServiceCommitment.Modify(true);\n+ ServiceCommitment.SetUpdateRequiredOnBillingLines();\n+ ServiceCommitment.ArchiveServiceCommitment();\n+ ServiceCommitment.Modify(false);\n #pragma warning restore AA0214\n until ServiceCommitment.Next() = 0;\n end;\n@@ -1363,7 +1365,9 @@ table 8059 \"Subscription Line\"\n CurrencyCode := ServiceCommitment.\"Currency Code\";\n ServiceCommitment.SetCurrencyData(CurrencyFactor, CurrencyFactorDate, CurrencyCode);\n ServiceCommitment.RecalculateAmountsFromCurrencyData();\n- ServiceCommitment.Modify(true);\n+ ServiceCommitment.SetUpdateRequiredOnBillingLines();\n+ ServiceCommitment.ArchiveServiceCommitment();\n+ ServiceCommitment.Modify(false);\n until ServiceCommitment.Next() = 0;\n end;\n \ndiff --git a/src/Apps/W1/Subscription Billing/App/Service Objects/Tables/SubscriptionHeader.Table.al b/src/Apps/W1/Subscription Billing/App/Service Objects/Tables/SubscriptionHeader.Table.al\nindex 2ee59e69418..eb2c839e1b6 100644\n--- a/src/Apps/W1/Subscription Billing/App/Service Objects/Tables/SubscriptionHeader.Table.al\n+++ b/src/Apps/W1/Subscription Billing/App/Service Objects/Tables/SubscriptionHeader.Table.al\n@@ -1909,9 +1909,10 @@ table 8057 \"Subscription Header\"\n if FieldCaption(Quantity) <> ChangedFieldName then\n ServiceCommitment.CalculateCalculationBaseAmount();\n ServiceCommitment.Validate(\"Calculation Base Amount\");\n- if SkipArchiving then\n- ServiceCommitment.SetSkipArchiving(true);\n- ServiceCommitment.Modify(true);\n+ ServiceCommitment.SetUpdateRequiredOnBillingLines();\n+ if not SkipArchiving then\n+ ServiceCommitment.ArchiveServiceCommitment();\n+ ServiceCommitment.Modify(false);\n until ServiceCommitment.Next() = 0;\n end else\n if (not Confirmed) and (FieldCaption(\"Variant Code\") = ChangedFieldName) then\n", "FAIL_TO_PASS": [{"codeunitID": 148155, "functionName": ["ChangeSellToCustomerOnContractWithClosedSubscriptionLines"]}], "PASS_TO_PASS": [], "test_patch": "diff --git a/src/Apps/W1/Subscription Billing/Test/Customer Contracts/ContractsTest.Codeunit.al b/src/Apps/W1/Subscription Billing/Test/Customer Contracts/ContractsTest.Codeunit.al\nindex ee7e5f1e36f..161775f5fd9 100644\n--- a/src/Apps/W1/Subscription Billing/Test/Customer Contracts/ContractsTest.Codeunit.al\n+++ b/src/Apps/W1/Subscription Billing/Test/Customer Contracts/ContractsTest.Codeunit.al\n@@ -2049,6 +2049,44 @@ codeunit 148155 \"Contracts Test\"\n Assert.AreEqual(TestDesc, ServiceCommitment.Description, StrSubstNo(SubscLineDescErr, TestDesc));\n end;\n \n+ [Test]\n+ procedure ChangeSellToCustomerOnContractWithClosedSubscriptionLines()\n+ var\n+ Customer: Record Customer;\n+ CustomerContract: Record \"Customer Subscription Contract\";\n+ CustomerContractLine: Record \"Cust. Sub. Contract Line\";\n+ NewCustomer: Record Customer;\n+ ServiceCommitment: Record \"Subscription Line\";\n+ ServiceObject: Record \"Subscription Header\";\n+ begin\n+ // [SCENARIO] Changing the Sell-to Customer on a contract that has closed subscription lines should succeed without error.\n+ Initialize();\n+\n+ // [GIVEN] A customer contract with a service commitment linked to a contract line.\n+ SetupServiceObjectForNewItemWithServiceCommitment(Customer, ServiceObject, false, false);\n+ ContractTestLibrary.CreateCustomerContractAndCreateContractLinesForItems(CustomerContract, ServiceObject, Customer.\"No.\");\n+\n+ // [GIVEN] The contract line and its subscription line are both marked as closed (as done by UpdateServiceCommitmentAndCloseCustomerContractLine).\n+ CustomerContractLine.SetRange(\"Subscription Contract No.\", CustomerContract.\"No.\");\n+ CustomerContractLine.SetRange(\"Contract Line Type\", Enum::\"Contract Line Type\"::Item);\n+ CustomerContractLine.FindFirst();\n+ CustomerContractLine.GetServiceCommitment(ServiceCommitment);\n+ ServiceCommitment.Closed := true;\n+ ServiceCommitment.Modify(false);\n+ CustomerContractLine.Closed := true;\n+ CustomerContractLine.Modify(false);\n+\n+ // [GIVEN] A second customer to change the contract to.\n+ ContractTestLibrary.CreateCustomerInLCY(NewCustomer);\n+\n+ // [WHEN] Changing the Sell-to Customer - should not throw an error even though closed subscription lines exist.\n+ CustomerContract.SetHideValidationDialog(true);\n+ CustomerContract.Validate(\"Sell-to Customer No.\", NewCustomer.\"No.\");\n+\n+ // [THEN] The customer is changed successfully.\n+ CustomerContract.TestField(\"Sell-to Customer No.\", NewCustomer.\"No.\");\n+ end;\n+\n #endregion Tests\n \n #region Procedures\n"} {"metadata": {"area": "service", "image_count": 0, "persona": null}, "instance_id": "microsoft__BCApps-10345", "created_at": "2026-08-18T09:57:36Z", "environment_setup_version": "30.0", "project_paths": ["src\\Layers\\W1\\BaseApp", "src\\Layers\\W1\\Tests\\SCM-Service"], "repo": "microsoft/BCApps", "base_commit": "99b78dced4332c93d5c58105cb3acd11d96a763d", "patch": "diff --git a/src/Layers/W1/BaseApp/Service/Document/ServiceHeader.Table.al b/src/Layers/W1/BaseApp/Service/Document/ServiceHeader.Table.al\nindex 6f920e56dd9..3461c3aed1e 100644\n--- a/src/Layers/W1/BaseApp/Service/Document/ServiceHeader.Table.al\n+++ b/src/Layers/W1/BaseApp/Service/Document/ServiceHeader.Table.al\n@@ -5609,13 +5609,33 @@ table 5900 \"Service Header\"\n var\n ServiceLedgerEntry: Record \"Service Ledger Entry\";\n ServContractMgt: Codeunit ServContractManagement;\n+ OriginalServiceLedgerEntryNos: List of [Integer];\n+ ReversedServiceLedgerEntryNos: Dictionary of [Integer, Boolean];\n+ OriginalServiceLedgerEntryNo: Integer;\n+ InvoicedServiceLedgerEntryExists: Boolean;\n begin\n- ServiceLedgerEntry.SetCurrentKey(\"Service Contract No.\");\n+ ServiceLedgerEntry.SetLoadFields(\"Entry No.\", \"Applies-to Entry No.\");\n+ ServiceLedgerEntry.SetCurrentKey(\"Service Contract No.\", \"Service Item No. (Serviced)\", \"Entry Type\", \"Applies-to Entry No.\");\n ServiceLedgerEntry.SetRange(\"Service Contract No.\", ServiceContractLine.\"Contract No.\");\n ServiceLedgerEntry.SetRange(\"Service Item No. (Serviced)\", ServiceContractLine.\"Service Item No.\");\n ServiceLedgerEntry.SetRange(\"Entry Type\", ServiceLedgerEntry.\"Entry Type\"::Sale);\n ServiceLedgerEntry.SetFilter(\"Document No.\", '<>%1', ExcludeDocNo);\n- if ServiceLedgerEntry.IsEmpty() then\n+ if ServiceLedgerEntry.FindSet() then\n+ repeat\n+ if ServiceLedgerEntry.\"Applies-to Entry No.\" = 0 then\n+ OriginalServiceLedgerEntryNos.Add(ServiceLedgerEntry.\"Entry No.\")\n+ else\n+ if not ReversedServiceLedgerEntryNos.ContainsKey(ServiceLedgerEntry.\"Applies-to Entry No.\") then\n+ ReversedServiceLedgerEntryNos.Add(ServiceLedgerEntry.\"Applies-to Entry No.\", true);\n+ until ServiceLedgerEntry.Next() = 0;\n+\n+ foreach OriginalServiceLedgerEntryNo in OriginalServiceLedgerEntryNos do\n+ if not ReversedServiceLedgerEntryNos.ContainsKey(OriginalServiceLedgerEntryNo) then begin\n+ InvoicedServiceLedgerEntryExists := true;\n+ break;\n+ end;\n+\n+ if not InvoicedServiceLedgerEntryExists then\n ServiceContractLine.\"Invoiced to Date\" := 0D\n else\n ServContractMgt.CalcInvoicedToDate(ServiceContractLine, ServiceContractLine.\"Starting Date\", ServiceContractHeader.\"Next Invoice Period Start\" - 1);\ndiff --git a/src/Layers/W1/BaseApp/Service/Ledger/ServiceLedgerEntry.Table.al b/src/Layers/W1/BaseApp/Service/Ledger/ServiceLedgerEntry.Table.al\nindex c253a3bd0a3..8959e8fa9ad 100644\n--- a/src/Layers/W1/BaseApp/Service/Ledger/ServiceLedgerEntry.Table.al\n+++ b/src/Layers/W1/BaseApp/Service/Ledger/ServiceLedgerEntry.Table.al\n@@ -483,6 +483,9 @@ table 5907 \"Service Ledger Entry\"\n key(Key9; \"Service Register No.\")\n {\n }\n+ key(Key10; \"Service Contract No.\", \"Service Item No. (Serviced)\", \"Entry Type\", \"Applies-to Entry No.\")\n+ {\n+ }\n }\n \n fieldgroups\n", "FAIL_TO_PASS": [{"codeunitID": 136145, "functionName": ["InvoicedToDateResetAfterDeletingRecreatedRetrospectiveInvoiceSecondTime"]}], "PASS_TO_PASS": [], "test_patch": "diff --git a/src/Layers/W1/Tests/SCM-Service/ServiceContractsII.Codeunit.al b/src/Layers/W1/Tests/SCM-Service/ServiceContractsII.Codeunit.al\nindex 076a109c3f9..849c82fb4b4 100644\n--- a/src/Layers/W1/Tests/SCM-Service/ServiceContractsII.Codeunit.al\n+++ b/src/Layers/W1/Tests/SCM-Service/ServiceContractsII.Codeunit.al\n@@ -63,6 +63,7 @@ codeunit 136145 \"Service Contracts II\"\n DescriptionMustMatchErr: Label 'Description must match.';\n WrongCountErr: Label 'Worong number of Service Line are created';\n ServiceLineStartDateErr: Label 'Service line for item C must start on its own starting date (03/01), not on the earliest new line date (02/01)';\n+ ItemAInvoicedToDateErr: Label 'Item A \"Invoiced to Date\" must retain the posted invoice period end date after deleting the retrospective invoice.';\n ItemBInvoicedToDateErr: Label 'Item B \"Invoiced to Date\" must be 0D after deleting the retrospective invoice.';\n ItemCInvoicedToDateErr: Label 'Item C \"Invoiced to Date\" must be 0D after deleting the retrospective invoice.';\n \n@@ -2341,7 +2342,7 @@ codeunit 136145 \"Service Contracts II\"\n end;\n \n [Test]\n- [HandlerFunctions('DequeueReplyConfirmHandler,MessageHandler')]\n+ [HandlerFunctions('DequeueReplyConfirmHandler')]\n [Scope('OnPrem')]\n procedure RetrospectiveServiceLineStartDateIsPerLineNotEarliestForPrepaidContract()\n var\n@@ -2371,19 +2372,20 @@ codeunit 136145 \"Service Contracts II\"\n MarEnd := CalcDate('', MarFirst);\n WorkDate(JanFirst);\n LibraryVariableStorage.Enqueue(false); // \"Create contract using template?\" No (to allow Prepaid=true)\n- CreatePrepaidQuarterlyContractAndSignForBug629850(ServiceContractHeader, ServiceContractLineA);\n+ CreatePrepaidQuarterlyContractAndSignForBug629850(ServiceContractHeader, ServiceContractLineA, false);\n \n // [GIVEN] Item B added at 02/01, user declines to create an invoice.\n WorkDate(FebFirst);\n- LibraryVariableStorage.Enqueue(true); // \"Do you want to open service contract...?\" Yes\n LibraryVariableStorage.Enqueue(true); // \"New lines have been added...\" Yes\n LibraryVariableStorage.Enqueue(true); // \"Next Planned Service Date is 0D\" Yes\n LibraryVariableStorage.Enqueue(false); // \"Create invoice for period...?\" No\n AddLineAndLockPrepaidContractForBug629850(ServiceContractHeader, ServiceContractLineB);\n \n // [GIVEN] Item C added at 03/01, user declines to create an invoice.\n- // Note: Contract remains Open after declining invoice, so no confirms fire for Item C\n WorkDate(MarFirst);\n+ LibraryVariableStorage.Enqueue(true); // \"New lines have been added...\" Yes\n+ LibraryVariableStorage.Enqueue(true); // \"Next Planned Service Date is 0D\" Yes\n+ LibraryVariableStorage.Enqueue(false); // \"Create invoice for period...?\" No\n AddLineAndLockPrepaidContractForBug629850(ServiceContractHeader, ServiceContractLineC);\n \n // [WHEN] At 04/01 the retrospective invoice is created covering 02/01..03/31.\n@@ -2395,6 +2397,7 @@ codeunit 136145 \"Service Contracts II\"\n ServiceContractHeader.Modify();\n end;\n ServContractManagement.InitCodeUnit();\n+ LibraryVariableStorage.Enqueue(true); // \"Create service invoice for period...?\" Yes\n ServContractManagement.CreateInvoice(ServiceContractHeader);\n \n // [THEN] The service line for item C has description '03/01 - 03/31', not '02/01 - 03/31'.\n@@ -2415,7 +2418,7 @@ codeunit 136145 \"Service Contracts II\"\n end;\n \n [Test]\n- [HandlerFunctions('DequeueReplyConfirmHandler,MessageHandler')]\n+ [HandlerFunctions('DequeueReplyConfirmHandler')]\n [Scope('OnPrem')]\n procedure InvoicedToDateResetForNewPrepaidContractItemsAfterDeletingRetrospectiveInvoice()\n var\n@@ -2444,19 +2447,20 @@ codeunit 136145 \"Service Contracts II\"\n MarEnd := CalcDate('', MarFirst);\n WorkDate(JanFirst);\n LibraryVariableStorage.Enqueue(false); // \"Create contract using template?\" No (to allow Prepaid=true)\n- CreatePrepaidQuarterlyContractAndSignForBug629850(ServiceContractHeader, ServiceContractLineA);\n+ CreatePrepaidQuarterlyContractAndSignForBug629850(ServiceContractHeader, ServiceContractLineA, false);\n \n // [GIVEN] Item B added at 02/01, user declines to create an invoice.\n WorkDate(FebFirst);\n- LibraryVariableStorage.Enqueue(true); // \"Do you want to open service contract...?\" Yes\n LibraryVariableStorage.Enqueue(true); // \"New lines have been added...\" Yes\n LibraryVariableStorage.Enqueue(true); // \"Next Planned Service Date is 0D\" Yes\n LibraryVariableStorage.Enqueue(false); // \"Create invoice for period...?\" No\n AddLineAndLockPrepaidContractForBug629850(ServiceContractHeader, ServiceContractLineB);\n \n // [GIVEN] Item C added at 03/01, user declines to create an invoice.\n- // Note: Contract remains Open after declining invoice, so no confirms fire for Item C\n WorkDate(MarFirst);\n+ LibraryVariableStorage.Enqueue(true); // \"New lines have been added...\" Yes\n+ LibraryVariableStorage.Enqueue(true); // \"Next Planned Service Date is 0D\" Yes\n+ LibraryVariableStorage.Enqueue(false); // \"Create invoice for period...?\" No\n AddLineAndLockPrepaidContractForBug629850(ServiceContractHeader, ServiceContractLineC);\n \n // [GIVEN] At 04/01 the retrospective invoice is created covering 02/01..03/31.\n@@ -2468,6 +2472,7 @@ codeunit 136145 \"Service Contracts II\"\n ServiceContractHeader.Modify();\n end;\n ServContractManagement.InitCodeUnit();\n+ LibraryVariableStorage.Enqueue(true); // \"Create service invoice for period...?\" Yes\n ServContractManagement.CreateInvoice(ServiceContractHeader);\n \n // [WHEN] The retrospective invoice is deleted.\n@@ -2491,6 +2496,99 @@ codeunit 136145 \"Service Contracts II\"\n LibraryVariableStorage.AssertEmpty();\n end;\n \n+ [Test]\n+ [HandlerFunctions('DequeueReplyConfirmHandler')]\n+ [Scope('OnPrem')]\n+ procedure InvoicedToDateResetAfterDeletingRecreatedRetrospectiveInvoiceSecondTime()\n+ var\n+ ServiceContractHeader: Record \"Service Contract Header\";\n+ ServiceContractLineA: Record \"Service Contract Line\";\n+ ServiceContractLineB: Record \"Service Contract Line\";\n+ ServiceContractLineC: Record \"Service Contract Line\";\n+ ServiceHeader: Record \"Service Header\";\n+ ServContractManagement: Codeunit ServContractManagement;\n+ RetrospectiveInvoiceNo: Code[20];\n+ Year: Integer;\n+ JanFirst: Date;\n+ FebFirst: Date;\n+ MarFirst: Date;\n+ MarEnd: Date;\n+ begin\n+ // [FEATURE] [AI test]\n+ // [SCENARIO 647165] Deleting the retrospective invoice a second time, after it was deleted and recreated, still resets \"Invoiced to Date\" to 0D for newly added prepaid contract items.\n+\n+ Initialize();\n+\n+ // [GIVEN] Quarterly prepaid contract starting Jan 1, with item A, signed silently.\n+ Year := Date2DMY(WorkDate(), 3);\n+ JanFirst := DMY2Date(1, 1, Year);\n+ FebFirst := DMY2Date(1, 2, Year);\n+ MarFirst := DMY2Date(1, 3, Year);\n+ MarEnd := CalcDate('', MarFirst);\n+ WorkDate(JanFirst);\n+ LibraryVariableStorage.Enqueue(false); // \"Create contract using template?\" No (to allow Prepaid=true)\n+ CreatePrepaidQuarterlyContractAndSignForBug629850(ServiceContractHeader, ServiceContractLineA, true);\n+\n+ // [GIVEN] The initial Q1 invoice for item A is posted.\n+ ServiceHeader.SetRange(\"Document Type\", ServiceHeader.\"Document Type\"::Invoice);\n+ ServiceHeader.SetRange(\"Contract No.\", ServiceContractHeader.\"Contract No.\");\n+ ServiceHeader.FindFirst();\n+ LibraryService.PostServiceOrder(ServiceHeader, true, false, true);\n+\n+ // [GIVEN] Item B added at 02/01, user declines to create an invoice.\n+ WorkDate(FebFirst);\n+ LibraryVariableStorage.Enqueue(true); // \"New lines have been added...\" Yes\n+ LibraryVariableStorage.Enqueue(true); // \"Next Planned Service Date is 0D\" Yes\n+ LibraryVariableStorage.Enqueue(false); // \"Create invoice for period...?\" No\n+ AddLineAndLockPrepaidContractForBug629850(ServiceContractHeader, ServiceContractLineB);\n+\n+ // [GIVEN] Item C added at 03/01, user declines to create an invoice.\n+ WorkDate(MarFirst);\n+ LibraryVariableStorage.Enqueue(true); // \"New lines have been added...\" Yes\n+ LibraryVariableStorage.Enqueue(true); // \"Next Planned Service Date is 0D\" Yes\n+ LibraryVariableStorage.Enqueue(false); // \"Create invoice for period...?\" No\n+ AddLineAndLockPrepaidContractForBug629850(ServiceContractHeader, ServiceContractLineC);\n+\n+ // [GIVEN] At 04/01 the retrospective invoice covering 02/01..03/31 is created and then deleted (dates restored correctly the first time).\n+ WorkDate(CalcDate('', MarEnd));\n+ ServiceContractHeader.Find();\n+ if ServiceContractHeader.\"Change Status\" = ServiceContractHeader.\"Change Status\"::Open then begin\n+ ServiceContractHeader.\"Change Status\" := ServiceContractHeader.\"Change Status\"::Locked;\n+ ServiceContractHeader.Modify();\n+ end;\n+ ServContractManagement.InitCodeUnit();\n+ LibraryVariableStorage.Enqueue(true); // \"Create service invoice for period...?\" Yes\n+ RetrospectiveInvoiceNo := ServContractManagement.CreateInvoice(ServiceContractHeader);\n+\n+ ServiceHeader.Get(ServiceHeader.\"Document Type\"::Invoice, RetrospectiveInvoiceNo);\n+ LibraryVariableStorage.Enqueue(true); // \"Deleting will restore previous invoice dates...\" Yes\n+ ServiceHeader.Delete(true);\n+\n+ // [GIVEN] The invoice is created a second time (Feb & Mar recalculated for items B and C).\n+ ServiceContractHeader.Find();\n+ ServContractManagement.InitCodeUnit();\n+ LibraryVariableStorage.Enqueue(true); // \"Create service invoice for period...?\" Yes\n+ RetrospectiveInvoiceNo := ServContractManagement.CreateInvoice(ServiceContractHeader);\n+\n+ // [WHEN] This second, recreated retrospective invoice is also deleted.\n+ ServiceHeader.Get(ServiceHeader.\"Document Type\"::Invoice, RetrospectiveInvoiceNo);\n+ LibraryVariableStorage.Enqueue(true); // \"Deleting will restore previous invoice dates...\" Yes\n+ ServiceHeader.Delete(true);\n+\n+ // [THEN] Item A retains its posted Q1 \"Invoiced to Date\".\n+ ServiceContractLineA.Get(ServiceContractLineA.\"Contract Type\", ServiceContractLineA.\"Contract No.\", ServiceContractLineA.\"Line No.\");\n+ Assert.AreEqual(MarEnd, ServiceContractLineA.\"Invoiced to Date\", ItemAInvoicedToDateErr);\n+\n+ // [THEN] Items B and C have \"Invoiced to Date\" = 0D (previously stuck at 03/31).\n+ ServiceContractLineB.Get(ServiceContractLineB.\"Contract Type\", ServiceContractLineB.\"Contract No.\", ServiceContractLineB.\"Line No.\");\n+ Assert.AreEqual(0D, ServiceContractLineB.\"Invoiced to Date\", ItemBInvoicedToDateErr);\n+\n+ ServiceContractLineC.Get(ServiceContractLineC.\"Contract Type\", ServiceContractLineC.\"Contract No.\", ServiceContractLineC.\"Line No.\");\n+ Assert.AreEqual(0D, ServiceContractLineC.\"Invoiced to Date\", ItemCInvoicedToDateErr);\n+\n+ LibraryVariableStorage.AssertEmpty();\n+ end;\n+\n local procedure Initialize()\n var\n LibraryERMCountryData: Codeunit \"Library - ERM Country Data\";\n@@ -3686,7 +3784,8 @@ codeunit 136145 \"Service Contracts II\"\n \n local procedure CreatePrepaidQuarterlyContractAndSignForBug629850(\n var ServiceContractHeader: Record \"Service Contract Header\";\n- var ServiceContractLine: Record \"Service Contract Line\")\n+ var ServiceContractLine: Record \"Service Contract Line\";\n+ CreateInitialInvoice: Boolean)\n var\n ServiceItem: Record \"Service Item\";\n begin\n@@ -3712,6 +3811,8 @@ codeunit 136145 \"Service Contracts II\"\n \n UpdateAnnualAmountInServiceContract(ServiceContractHeader);\n ServiceContractHeader.Validate(\"Starting Date\");\n+ if CreateInitialInvoice then\n+ ServiceContractHeader.\"Next Invoice Date\" := CalcDate('', WorkDate());\n ServiceContractHeader.Modify(true);\n \n SignContractSilent(ServiceContractHeader);\n"} {"metadata": {"area": "finance", "image_count": 0, "persona": null}, "instance_id": "microsoft__BCApps-10808", "created_at": "2026-08-31T08:42:46Z", "environment_setup_version": "30.0", "project_paths": ["src\\Layers\\W1\\BaseApp", "src\\Layers\\W1\\Tests\\ERM-Finance"], "repo": "microsoft/BCApps", "base_commit": "9e586f9b8ff30b005316445d8659e196c0e8a0a6", "patch": "diff --git a/src/Layers/W1/BaseApp/Finance/Currency/ExchRateAdjmtProcess.Codeunit.al b/src/Layers/W1/BaseApp/Finance/Currency/ExchRateAdjmtProcess.Codeunit.al\nindex 16ffddd2649..5766dfff2f2 100644\n--- a/src/Layers/W1/BaseApp/Finance/Currency/ExchRateAdjmtProcess.Codeunit.al\n+++ b/src/Layers/W1/BaseApp/Finance/Currency/ExchRateAdjmtProcess.Codeunit.al\n@@ -2863,7 +2863,7 @@ codeunit 699 \"Exch. Rate Adjmt. Process\"\n TempExchRateAdjmtLedgEntry.\"Currency Factor\" := CustLedgerEntry.\"Adjusted Currency Factor\";\n TempExchRateAdjmtLedgEntry.\"Base Amount\" := CustLedgerEntry.\"Remaining Amount\";\n TempExchRateAdjmtLedgEntry.\"Base Amount (LCY)\" := CustLedgerEntry.\"Remaining Amt. (LCY)\";\n- TempExchRateAdjmtLedgEntry.\"Adjustment Amount\" := CurrAdjAmount;\n+ TempExchRateAdjmtLedgEntry.\"Adjustment Amount\" := DetailedCustLedgEntry2.\"Amount (LCY)\";\n TempExchRateAdjmtLedgEntry.Insert();\n end;\n \n@@ -2884,7 +2884,7 @@ codeunit 699 \"Exch. Rate Adjmt. Process\"\n TempExchRateAdjmtLedgEntry.\"Currency Factor\" := VendorLedgerEntry.\"Adjusted Currency Factor\";\n TempExchRateAdjmtLedgEntry.\"Base Amount\" := VendorLedgerEntry.\"Remaining Amount\";\n TempExchRateAdjmtLedgEntry.\"Base Amount (LCY)\" := VendorLedgerEntry.\"Remaining Amt. (LCY)\";\n- TempExchRateAdjmtLedgEntry.\"Adjustment Amount\" := CurrAdjAmount;\n+ TempExchRateAdjmtLedgEntry.\"Adjustment Amount\" := DetailedVendorLedgEntry2.\"Amount (LCY)\";\n TempExchRateAdjmtLedgEntry.Insert();\n end;\n \n@@ -2905,7 +2905,7 @@ codeunit 699 \"Exch. Rate Adjmt. Process\"\n TempExchRateAdjmtLedgEntry.\"Currency Factor\" := Currency.\"Currency Factor\";\n TempExchRateAdjmtLedgEntry.\"Base Amount\" := EmplLedgEntry.\"Remaining Amount\";\n TempExchRateAdjmtLedgEntry.\"Base Amount (LCY)\" := EmplLedgEntry.\"Remaining Amt. (LCY)\";\n- TempExchRateAdjmtLedgEntry.\"Adjustment Amount\" := CurrAdjAmount;\n+ TempExchRateAdjmtLedgEntry.\"Adjustment Amount\" := DtldEmplLedgEntry.\"Amount (LCY)\";\n TempExchRateAdjmtLedgEntry.Insert();\n end;\n \n", "FAIL_TO_PASS": [{"codeunitID": 134883, "functionName": ["VendorGainReversedToHigherLossLedgerAmountsMatchDetailedEntries"]}], "PASS_TO_PASS": [], "test_patch": "diff --git a/src/Layers/W1/Tests/ERM-Finance/ERMExchRateAdjustment.Codeunit.al b/src/Layers/W1/Tests/ERM-Finance/ERMExchRateAdjustment.Codeunit.al\nindex 8c039bbac87..a6ea5d5260e 100644\n--- a/src/Layers/W1/Tests/ERM-Finance/ERMExchRateAdjustment.Codeunit.al\n+++ b/src/Layers/W1/Tests/ERM-Finance/ERMExchRateAdjustment.Codeunit.al\n@@ -17,7 +17,9 @@ codeunit 134883 \"ERM Exch. Rate Adjustment\"\n LibraryInventory: Codeunit \"Library - Inventory\";\n LibraryPurchase: Codeunit \"Library - Purchase\";\n LibrarySales: Codeunit \"Library - Sales\";\n+ LibraryUtility: Codeunit \"Library - Utility\";\n IsInitialized: Boolean;\n+ AdjustmentAmountMismatchErr: Label 'Adjustment Amount %1 must equal Amount (LCY) %2 for detailed vendor ledger entry %3.', Comment = '%1 = Adjustment Amount, %2 = Amount (LCY), %3 = Detailed Vendor Ledger Entry No.';\n ExpectNoAdjustmentErr: Label 'Expect no adjustment for entries before %1';\n ExchangeRateAdjmtTxt: Label 'Exchange Rate Adjmt. of %1 %2';\n \n@@ -171,6 +173,40 @@ codeunit 134883 \"ERM Exch. Rate Adjustment\"\n VerifyExchRateAdjmtRegisterSync(CurrencyExchangeRate.\"Currency Code\");\n end;\n \n+ [Test]\n+ procedure VendorGainReversedToHigherLossLedgerAmountsMatchDetailedEntries()\n+ var\n+ CurrencyExchangeRate: Record \"Currency Exchange Rate\";\n+ Vendor: Record Vendor;\n+ CurrencyCode: Code[10];\n+ PostingDate: Date;\n+ begin\n+ // [FEATURE] [AI test 0.4] [Purchase]\n+ // [SCENARIO 643352] When an unrealized gain reverses into a higher loss, each vendor ledger entry Adjustment Amount matches its own detailed ledger entry Amount (LCY).\n+ Initialize();\n+\n+ // [GIVEN] Create Currency with exchange rate and Vendor.\n+ CreateCurrencyWithExchangeRate(CurrencyExchangeRate);\n+ UpdateExchangeRate(CurrencyExchangeRate, 1, 1);\n+ CurrencyCode := CurrencyExchangeRate.\"Currency Code\";\n+ PostingDate := WorkDate();\n+ CreateVendorWithCurrency(Vendor, CurrencyCode);\n+\n+ // [GIVEN] Posted purchase invoice with exchange rate.\n+ PostVendorInvoice(Vendor.\"No.\", CurrencyCode, PostingDate, -1000);\n+\n+ // [GIVEN] Exchange rate lowered to create an unrealized gain and the adjustment is run.\n+ UpdateExchangeRate(CurrencyExchangeRate, 1, 0.8);\n+ RunExchRateAdjustmentForVendor(CurrencyCode, Vendor.\"No.\");\n+\n+ // [WHEN] Exchange rate raised to reverse the gain into a higher loss and the adjustment is run again.\n+ UpdateExchangeRate(CurrencyExchangeRate, 1, 1.4);\n+ RunExchRateAdjustmentForVendor(CurrencyCode, Vendor.\"No.\");\n+\n+ // [THEN] Verify Each ledger entry shows the amount of its own linked detailed ledger entry.\n+ VerifyVendorAdjustmentAmountsMatchDetailedEntries(Vendor.\"No.\");\n+ end;\n+\n local procedure Initialize()\n var\n LibraryERMCountryData: Codeunit \"Library - ERM Country Data\";\n@@ -387,5 +423,62 @@ codeunit 134883 \"ERM Exch. Rate Adjustment\"\n until ExchRateAdjmtReg.Next() = 0;\n end;\n \n+ local procedure CreateVendorWithCurrency(var Vendor: Record Vendor; CurrencyCode: Code[10])\n+ begin\n+ LibraryPurchase.CreateVendor(Vendor);\n+ Vendor.Validate(\"Currency Code\", CurrencyCode);\n+ Vendor.Modify(true);\n+ end;\n+\n+ local procedure PostVendorInvoice(VendorNo: Code[20]; CurrencyCode: Code[10]; PostingDate: Date; Amount: Decimal)\n+ var\n+ GenJournalLine: Record \"Gen. Journal Line\";\n+ GenJournalBatch: Record \"Gen. Journal Batch\";\n+ begin\n+ LibraryERM.SelectGenJnlBatch(GenJournalBatch);\n+ LibraryERM.ClearGenJournalLines(GenJournalBatch);\n+ LibraryERM.CreateGeneralJnlLine(\n+ GenJournalLine, GenJournalBatch.\"Journal Template Name\", GenJournalBatch.Name,\n+ GenJournalLine.\"Document Type\"::Invoice, GenJournalLine.\"Account Type\"::Vendor, VendorNo, Amount);\n+ GenJournalLine.Validate(\"Currency Code\", CurrencyCode);\n+ GenJournalLine.Validate(\"Posting Date\", PostingDate);\n+ GenJournalLine.Modify(true);\n+ LibraryERM.PostGeneralJnlLine(GenJournalLine);\n+ end;\n+\n+ local procedure RunExchRateAdjustmentForVendor(CurrencyCode: Code[10]; VendorNo: Code[20])\n+ var\n+ Currency: Record Currency;\n+ Vendor: Record Vendor;\n+ ExchRateAdjustment: Report \"Exch. Rate Adjustment\";\n+ begin\n+ Currency.SetRange(Code, CurrencyCode);\n+ Vendor.SetRange(\"No.\", VendorNo);\n+ ExchRateAdjustment.SetTableView(Currency);\n+ ExchRateAdjustment.SetTableView(Vendor);\n+ ExchRateAdjustment.InitializeRequest2(0D, WorkDate(), 'Test', WorkDate(), LibraryUtility.GenerateGUID(), true, false);\n+ ExchRateAdjustment.UseRequestPage(false);\n+ ExchRateAdjustment.SetHideUI(true);\n+ ExchRateAdjustment.Run();\n+ end;\n+\n+ local procedure VerifyVendorAdjustmentAmountsMatchDetailedEntries(VendorNo: Code[20])\n+ var\n+ DetailedVendorLedgEntry: Record \"Detailed Vendor Ledg. Entry\";\n+ ExchRateAdjmtLedgEntry: Record \"Exch. Rate Adjmt. Ledg. Entry\";\n+ begin\n+ ExchRateAdjmtLedgEntry.SetRange(\"Account Type\", ExchRateAdjmtLedgEntry.\"Account Type\"::Vendor);\n+ ExchRateAdjmtLedgEntry.SetRange(\"Account No.\", VendorNo);\n+ Assert.IsTrue(ExchRateAdjmtLedgEntry.FindSet(), 'Expected exch. rate adjmt. ledger entries for the vendor.');\n+ repeat\n+ DetailedVendorLedgEntry.Get(ExchRateAdjmtLedgEntry.\"Detailed Ledger Entry No.\");\n+ Assert.AreEqual(\n+ DetailedVendorLedgEntry.\"Amount (LCY)\", ExchRateAdjmtLedgEntry.\"Adjustment Amount\",\n+ StrSubstNo(\n+ AdjustmentAmountMismatchErr, ExchRateAdjmtLedgEntry.\"Adjustment Amount\",\n+ DetailedVendorLedgEntry.\"Amount (LCY)\", DetailedVendorLedgEntry.\"Entry No.\"));\n+ until ExchRateAdjmtLedgEntry.Next() = 0;\n+ end;\n+\n }\n \n"} +{"metadata": {"area": "sales and purchase", "image_count": 0, "persona": null}, "instance_id": "microsoft__BCApps-11274", "created_at": "2026-09-09T14:22:40Z", "environment_setup_version": "30.0", "project_paths": ["src\\Layers\\W1\\BaseApp", "src\\Layers\\W1\\Tests\\SCM-Reservation"], "repo": "microsoft/BCApps", "base_commit": "02a78bb78b0a299592d5d709a3d29f8ce2e3812e", "patch": "diff --git a/src/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al b/src/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al\nindex cc3d1749295..76389e5399e 100644\n--- a/src/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al\n+++ b/src/Layers/W1/BaseApp/Purchases/History/UndoPurchaseReceiptLine.Codeunit.al\n@@ -294,6 +294,7 @@ codeunit 5813 \"Undo Purchase Receipt Line\"\n ItemJnlLine.\"Shortcut Dimension 2 Code\" := PurchRcptLine.\"Shortcut Dimension 2 Code\";\n ItemJnlLine.\"Dimension Set ID\" := PurchRcptLine.\"Dimension Set ID\";\n ItemJnlLine.Description := PurchRcptLine.Description;\n+ ItemJnlLine.\"Drop Shipment\" := (PurchRcptLine.\"Sales Order No.\" <> '') and (PurchRcptLine.\"Sales Order Line No.\" <> 0);\n \n if PurchRcptLine.\"Job No.\" = '' then begin\n ItemJnlLine.Correction := true;\ndiff --git a/src/Layers/W1/BaseApp/Sales/History/UndoSalesShipmentLine.Codeunit.al b/src/Layers/W1/BaseApp/Sales/History/UndoSalesShipmentLine.Codeunit.al\nindex ec5c33edf11..e07edd74be9 100644\n--- a/src/Layers/W1/BaseApp/Sales/History/UndoSalesShipmentLine.Codeunit.al\n+++ b/src/Layers/W1/BaseApp/Sales/History/UndoSalesShipmentLine.Codeunit.al\n@@ -410,6 +410,7 @@ codeunit 5815 \"Undo Sales Shipment Line\"\n ItemJournalLine.\"Document Date\" := SalesShipmentHeader.\"Document Date\";\n ItemJournalLine.\"Unit of Measure Code\" := SalesShipmentLine2.\"Unit of Measure Code\";\n ItemJournalLine.Description := SalesShipmentLine2.Description;\n+ ItemJournalLine.\"Drop Shipment\" := SalesShipmentLine2.\"Drop Shipment\";\n \n OnAfterCopyItemJnlLineFromSalesShpt(ItemJournalLine, SalesShipmentHeader, SalesShipmentLine2, TempWarehouseJournalLine, WhseUndoQuantity, ItemLedgEntryNo, NextLineNo, TempGlobalItemLedgerEntry, TempGlobalItemEntryRelation, IsHandled);\n if IsHandled then\n", "FAIL_TO_PASS": [{"codeunitID": 137059, "functionName": ["UndoDropShipmentWithBlankBinAtBinMandatoryLocation"]}], "PASS_TO_PASS": [], "test_patch": "diff --git a/src/Layers/W1/Tests/SCM-Reservation/SCMRTAMItemTrackingII.Codeunit.al b/src/Layers/W1/Tests/SCM-Reservation/SCMRTAMItemTrackingII.Codeunit.al\nindex 4afd386d18e..76e52c7ea4b 100644\n--- a/src/Layers/W1/Tests/SCM-Reservation/SCMRTAMItemTrackingII.Codeunit.al\n+++ b/src/Layers/W1/Tests/SCM-Reservation/SCMRTAMItemTrackingII.Codeunit.al\n@@ -4471,6 +4471,78 @@ codeunit 137059 \"SCM RTAM Item Tracking-II\"\n VerifyUndoneSalesShipmentLine(SalesHeader.\"No.\", Item.\"No.\", Quantity);\n end;\n \n+ [Test]\n+ [HandlerFunctions('SalesListPageHandler,ConfirmHandler')]\n+ procedure UndoDropShipmentWithBlankBinAtBinMandatoryLocation()\n+ var\n+ Item: Record Item;\n+ ItemLedgerEntry: Record \"Item Ledger Entry\";\n+ Location: Record Location;\n+ PurchaseHeader: Record \"Purchase Header\";\n+ PurchaseLine: Record \"Purchase Line\";\n+ PurchRcptHeader: Record \"Purch. Rcpt. Header\";\n+ PurchRcptLine: Record \"Purch. Rcpt. Line\";\n+ SalesHeader: Record \"Sales Header\";\n+ SalesLine: Record \"Sales Line\";\n+ SalesShipmentHeader: Record \"Sales Shipment Header\";\n+ SalesShipmentLine: Record \"Sales Shipment Line\";\n+ WarehouseEntry: Record \"Warehouse Entry\";\n+ Quantity: Decimal;\n+ begin\n+ // [FEATURE] [AI test 0.4] [Undo Shipment]\n+ // [SCENARIO 649618] A drop shipment with a blank bin can be undone at a bin-mandatory location.\n+ Initialize();\n+\n+ // [GIVEN] A bin-mandatory location with a bin but no default bin for the item.\n+ CreateLocationWithBinMandatory(Location);\n+\n+ // [GIVEN] A drop-shipment sales order and linked purchase order have blank bin codes.\n+ Quantity := LibraryRandom.RandInt(50);\n+ CreateItemWithVendorNo(Item);\n+ CreateSalesOrderWithPurchasingCode(SalesHeader, SalesLine, Item.\"No.\", '', Quantity, false);\n+ SalesLine.Validate(\"Location Code\", Location.Code);\n+ SalesLine.Validate(\"Drop Shipment\", true);\n+ SalesLine.Modify(true);\n+ SalesLine.TestField(\"Bin Code\", '');\n+\n+ CreatePurchaseHeaderAndGetDropShipment(PurchaseHeader, SalesHeader.\"Sell-to Customer No.\");\n+ PurchaseLine.SetRange(\"Document Type\", PurchaseHeader.\"Document Type\");\n+ PurchaseLine.SetRange(\"Document No.\", PurchaseHeader.\"No.\");\n+ FindPurchaseLine(PurchaseLine, Item.\"No.\");\n+ PurchaseLine.TestField(\"Location Code\", Location.Code);\n+ PurchaseLine.TestField(\"Bin Code\", '');\n+\n+ // [GIVEN] The purchase order is received, creating linked receipt and shipment lines with blank bins.\n+ PostPurchaseDocument(PurchaseHeader.\"Document Type\", PurchaseHeader.\"No.\", true, false);\n+ FindSalesShipmentHeader(SalesShipmentHeader, SalesHeader.\"No.\");\n+ SalesShipmentLine.SetRange(\"Document No.\", SalesShipmentHeader.\"No.\");\n+ SalesShipmentLine.FindFirst();\n+ SalesShipmentLine.TestField(\"Bin Code\", '');\n+\n+ PurchRcptHeader.SetRange(\"Order No.\", PurchaseHeader.\"No.\");\n+ PurchRcptHeader.FindFirst();\n+ PurchRcptLine.SetRange(\"Document No.\", PurchRcptHeader.\"No.\");\n+ PurchRcptLine.FindFirst();\n+ PurchRcptLine.TestField(\"Bin Code\", '');\n+\n+ // [WHEN] The sales shipment is undone.\n+ UndoSalesShipment(SalesHeader.\"No.\");\n+\n+ // [THEN] Both orders are restored and all corrective item entries retain drop-shipment semantics.\n+ VerifyQuantityForDropShipmentInSalesLine(SalesHeader, Item.\"No.\", 0, Quantity);\n+ VerifyQuantityForDropShipmentInPurchaseLine(PurchaseHeader, Item.\"No.\", 0, Quantity);\n+ VerifyUndoneSalesShipmentLine(SalesHeader.\"No.\", Item.\"No.\", Quantity);\n+ VerifyUndonePurchRcptLine(PurchaseHeader.\"No.\", Item.\"No.\", Quantity);\n+ ItemLedgerEntry.SetRange(\"Item No.\", Item.\"No.\");\n+ ItemLedgerEntry.SetRange(\"Drop Shipment\", true);\n+ Assert.RecordCount(ItemLedgerEntry, 4);\n+\n+ // [THEN] No physical warehouse-bin movement is created.\n+ WarehouseEntry.SetRange(\"Item No.\", Item.\"No.\");\n+ WarehouseEntry.SetRange(\"Location Code\", Location.Code);\n+ Assert.RecordIsEmpty(WarehouseEntry);\n+ end;\n+\n local procedure Initialize()\n var\n LibraryERMCountryData: Codeunit \"Library - ERM Country Data\";\n@@ -6349,6 +6421,18 @@ codeunit 137059 \"SCM RTAM Item Tracking-II\"\n Assert.RecordIsNotEmpty(PurchRcptLine);\n end;\n \n+ local procedure CreateLocationWithBinMandatory(var Location: Record Location)\n+ var\n+ Bin: Record Bin;\n+ begin\n+ LibraryWarehouse.CreateLocationWithInventoryPostingSetup(Location);\n+ Location.Validate(\"Bin Mandatory\", true);\n+ Location.Validate(\"Default Bin Selection\", Location.\"Default Bin Selection\"::\"Fixed Bin\");\n+ Location.Modify(true);\n+ LibraryWarehouse.CreateBin(\n+ Bin, Location.Code, LibraryUtility.GenerateRandomCode(Bin.FieldNo(Code), Database::Bin), '', '');\n+ end;\n+\n [ModalPageHandler]\n [Scope('OnPrem')]\n procedure QuantityToCreatePageHandler(var EnterQuantityToCreate: TestPage \"Enter Quantity to Create\")\n"} diff --git a/dataset/problemstatement/microsoft__BCApps-11274/README.md b/dataset/problemstatement/microsoft__BCApps-11274/README.md new file mode 100644 index 000000000..aba5dd9b4 --- /dev/null +++ b/dataset/problemstatement/microsoft__BCApps-11274/README.md @@ -0,0 +1,33 @@ +# Undo Shipment fails for a drop shipment with a blank bin code + +## Description + +**Undo Shipment** fails for an uninvoiced drop shipment when the posted sales shipment and linked purchase receipt have a blank **Bin Code** at a bin-mandatory location. + +## Steps to reproduce + +1. Create location `DOCKZILLA` with: + - **Bin Mandatory** enabled; + - **Default Bin Selection** set to **Fixed Bin**; + - directed put-away and pick disabled; + - warehouse receive, warehouse shipment, put-away, and pick requirements disabled. +2. Create a bin at `DOCKZILLA`, but do not configure a default bin for the test item. +3. Create a **Purchasing Code** with **Drop Shipment** enabled. +4. Create a sales order with one item line: + - **Quantity** = `1`; + - **Location Code** = `DOCKZILLA`; + - the drop-shipment purchasing code. +5. Verify that **Bin Code** remains blank. +6. Create the linked purchase order and verify that **Location Code** is `DOCKZILLA` and **Bin Code** remains blank. +7. Post the purchase order as **Receive** only. Do not invoice the purchase receipt or linked sales shipment. +8. Open the posted sales shipment, select the item line, and run **Undo Shipment**. + +## Expected behavior + +Business Central creates the corrective shipment and receipt entries, restores the outstanding quantities on both orders, preserves the drop-shipment applications, and creates no warehouse-bin movement. + +## Actual behavior + +Undo Shipment fails with: + +> The Bin does not exist. Identification fields and values: Location Code='DOCKZILLA', Code='' diff --git a/pyproject.toml b/pyproject.toml index 4efdafc4c..6865e92d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bcbench" -version = "0.13.0" +version = "0.14.0" description = "Benchmarking tool for Business Central (AL) ecosystem, inspired by SWE-Bench" readme = "README.md" requires-python = ">=3.13,<3.14" diff --git a/uv.lock b/uv.lock index 294917ea2..93120aab0 100644 --- a/uv.lock +++ b/uv.lock @@ -245,7 +245,7 @@ wheels = [ [[package]] name = "bcbench" -version = "0.13.0" +version = "0.14.0" source = { editable = "." } dependencies = [ { name = "jinja2" },