Skip to content

Chemicals web admin: W5 settings and digest preview - #1434

Merged
renemadsen merged 33 commits into
stablefrom
feat/chemicals-web-settings
Oct 15, 2026
Merged

renemadsen merged 33 commits into
stablefrom
feat/chemicals-web-settings

Conversation

@renemadsen

@renemadsen renemadsen commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

flutter-chemistry Plan E, PR E2 (rollout step 10): the Kemi web admin "Indstillinger" screen and the digest preview. Builds on PR E1 (#1430, merged).

What E2 delivers

  • Task 6, base package and TS port. Microting.EformBackendConfigurationBase 10.0.56 -> 10.0.57 (Plan D's ChemicalAlertRules), pinned by ChemicalAlertRulesAvailabilityTests. A TypeScript port of the rule (chemical-alert-rules.helper.ts) with Plan D's C1 vectors (thresholds, calendar-month clamping, severity, governing deadline).
  • Task 7, digest preview backend. GET api/backend-configuration-pn/chemicals/properties/{id}/digest-preview (ChemicalDigestController, first-user only until GA, TODO(chemistry-GA)). ChemicalDigestPreviewBuilder rebuilds Plan D's four sections for one property: open placements only, thresholds evaluated at the NEXT e-mail slot (Monday 07:00 Europe/Copenhagen), IsoWeek of that slot, new registrations since the most recent slot (moves excluded), Plan D's ordering (deadline date, then name; ordinal, case-insensitive), recipients read through Plan A's MapSettings. Typed outcomes are not sent to Sentry (ChemicalsController.FailureResult).
  • Task 8, W5 settings page and menu entry. "Ejendomsindstillinger - Kemi": stock toggle, digest recipients (e-mail chips, server-compatible validation), the four fixed thresholds of spec section 9, and the digest preview ("Naeste e-mail (uge N)"). Load/failed/saving states, unsaved-changes confirm and beforeunload shared with W4, preview failure state. New menu child "Indstillinger" (backend-configuration-pn-chemicals-settings, position 3) under the Kemi group; new Kemi i18n keys in all 26 locales.

Menu migration for existing tenants

PluginMenuSyncService (unchanged from E1) adds the new child at the next pod start: it is idempotent (keyed on the menu template E2EId), re-checks inside the transaction, only runs for an enabled plugin, and does not recreate a Kemi group an admin deleted. A tenant that got Kemi with "Rettigheder" in E1 gets "Indstillinger" under the existing group, once. The sync is one-shot: if it fails at startup, an admin can add the entry by hand (Advanced > Navigation menu). Admins other than the first user still get the "not available yet" notice.

Tests

  • C#: ChemicalDigestPreviewBuilderTests (sections, closed placements, moves, ordering, next-slot thresholds, ISO weeks incl. week 53 and DST), ChemicalDigestControllerTests (route/policy, gate, Sentry), ChemicalsMenuTests, PluginMenuSyncServiceTests (E1 -> E2 upgrade), registration tests.
  • Jest: alert-rules helper, recipients helper, settings page component, shared unsaved-changes helpers, routing and i18n coverage.
  • Playwright: e/chemicals-settings.spec.ts (shard e).

Red -> green CI runs (TDD via CI)

  • Task 6: red https://github.com/microting/eform-backendconfiguration-plugin/actions/runs/38690173181 -> green .../runs/38691334106
  • Task 7: red .../runs/38693852574 -> green .../runs/38694467048; fix round red .../runs/38697624073 -> green .../runs/38703197481
  • Task 8: red .../runs/38711569665 -> green .../runs/38712840511; fix round red .../runs/38718151047 -> green .../runs/38722953935
  • Final fix wave: red .../runs/38726809155 -> green .../runs/38727702672; last run on the branch .../runs/38730429693

Parked (not in E2)

  • M-3: deadline lines in the preview carry no deadline kind (salgsfrist / brugs- og besiddelsesfrist); to be done in E3 with the W2 labels.
  • M-4: the preview does not say "no e-mail is sent" when a property has no recipients, or only new registrations.
  • M-7: hasActionItems is not asserted at the JSON boundary in the e2e; E3 will assert it when W1 seeds placements.

🤖 Generated with Claude Code

https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy

renemadsen and others added 19 commits October 15, 2026 08:02
…ors (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…ript port

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…g C# vectors in the spec

Behaviour-neutral: pad as a function, requiresAction via actionSeverity,
adds the C# vector rows and the governingDeadline tie-break test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…stration tests (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
First-user gated (TODO chemistry-GA), Sentry only for unexpected failures,
ISO week of the next digest slot, recipients through MapSettings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…lot thresholds, week-53 and DST vectors (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…-slot thresholds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…lt, key list, loops)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…xt cannot save concurrently)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
… fixed old date

With UtcNow-30d the placements fell into the fixed Wednesday window from
2026-11-25.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…and e2e (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…est preview and Indstillinger menu child

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…atible recipients, e2e waits (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…recipients, a11y and property wording

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…stream with the beforeEach page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
… and W5 and tidy W5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
… load reset (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…ranslations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
…tate style, i18n comments by screen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
@renemadsen
renemadsen marked this pull request as ready for review October 15, 2026 12:16
Copilot AI balanced review requested due to automatic review settings October 15, 2026 12:16

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Recipient handling can lose input, and superseded responses can overwrite settings edits or the current preview.

4 open findings
What changed in this PR

Extends the existing Kemi administration module with property settings and a preview of the next weekly chemical digest.

Changes:

  • Adds the digest-preview API, shared alert rules and backend registration.
  • Adds settings controls, recipient validation, navigation and unsaved-change protection.
  • Adds translations across 26 locales and backend, frontend and browser tests.
File Description
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Services/​ChemicalReporting/​IChemicalDigestPreviewBuilder.cs Defines preview builder contract.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Services/​ChemicalReporting/​ChemicalReportingServiceCollectionExtensions.cs Registers reporting services.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Services/​ChemicalReporting/​ChemicalDigestPreviewBuilder.cs Builds next-slot digest sections.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Services/​ChemicalInventoryService/​ChemicalInventoryService.Admin.cs Shares settings mapping internally.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Resources/​localization.json Localizes preview errors.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Infrastructure/​Models/​Chemicals/​ChemicalLocalizationKeys.cs Registers preview error key.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Infrastructure/​Models/​Chemicals/​ChemicalDigestModels.cs Defines digest response models.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​EformBackendConfigurationPlugin.cs Registers reporting and settings navigation.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Controllers/​ChemicalsController.cs Shares exception-result handling.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​Controllers/​ChemicalDigestController.cs Exposes gated preview endpoint.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn/​BackendConfiguration.Pn.csproj Updates base package to 10.0.57.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Test/​Services/​ChemicalReportingServiceCollectionExtensionsTests.cs Tests reporting registration.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Test/​Services/​ChemicalAlertRulesAvailabilityTests.cs Checks shared rule availability.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Test/​Controllers/​ChemicalDigestControllerTests.cs Tests routing, gate and errors.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Test/​ChemicalsMenuTests.cs Tests settings menu entry.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Integration.Test/​PluginMenuSyncServiceTests.cs Tests existing-tenant menu upgrade.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Integration.Test/​ChemicalTestBase.cs Supports fixed registration timestamps.
eFormAPI/​Plugins/​BackendConfiguration.Pn/​BackendConfiguration.Pn.Integration.Test/​ChemicalDigestPreviewBuilderTests.cs Tests digest content and scheduling.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​services/​backend-configuration-pn-chemicals.service.ts Adds preview API client.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​services/​backend-configuration-pn-chemicals.service.spec.ts Tests preview request routing.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​helpers/​index.ts Exports new helpers.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​helpers/​chemical-recipients.helper.ts Parses and normalizes recipients.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​helpers/​chemical-recipients.helper.spec.ts Tests recipient parsing.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​helpers/​chemical-alert-rules.helper.ts Ports shared alert rules.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​helpers/​chemical-alert-rules.helper.spec.ts Tests alert-rule vectors.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​index.ts Exports settings component.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.ts Implements settings and preview state.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.spec.ts Tests settings interactions and failures.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.scss Styles settings and preview.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.html Renders settings and digest sections.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-permissions-page/​chemical-permissions-page.component.ts Reuses unsaved-change helpers.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​chemicals.routing.spec.ts Tests settings screen registration.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​chemicals.module.ts Registers settings UI dependencies.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​chemicals-unsaved-changes.ts Shares discard and unload protection.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​chemicals-unsaved-changes.spec.ts Tests shared protection helpers.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​chemicals-screens.ts Registers settings route metadata.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​chemicals-i18n-keys.ts Registers settings translation keys.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​models/​chemicals/​index.ts Exports reporting models.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​models/​chemicals/​chemical-reporting.model.ts Defines frontend digest types.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​ukUA.ts Adds Ukrainian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​svSE.ts Adds Swedish settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​slSL.ts Adds Slovenian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​skSK.ts Adds Slovak settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​roRO.ts Adds Romanian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​ptPT.ts Adds European Portuguese settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​ptBR.ts Adds Brazilian Portuguese settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​plPL.ts Adds Polish settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​noNO.ts Adds Norwegian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​nlNL.ts Adds Dutch settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​lvLV.ts Adds Latvian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​ltLT.ts Adds Lithuanian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​itIT.ts Adds Italian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​isIS.ts Adds Icelandic settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​huHU.ts Adds Hungarian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​hrHR.ts Adds Croatian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​frFR.ts Adds French settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​fiFI.ts Adds Finnish settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​etET.ts Adds Estonian settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​esES.ts Adds Spanish settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​enUS.ts Adds English settings text.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​elGR.ts Adds Greek settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​deDE.ts Adds German settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​da.ts Adds Danish settings text.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​csCZ.ts Adds Czech settings translations.
eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​bgBG.ts Adds Bulgarian settings translations.
eform-client/​playwright/​e2e/​plugins/​backend-configuration-pn/​e/​chemicals-settings.spec.ts Tests navigation, preview and persistence.
eform-client/​playwright/​e2e/​plugins/​backend-configuration-pn/​BackendConfigurationChemicals.page.ts Adds settings browser-test helpers.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Pending recipient text is unsaved, superseded settings/preview responses
are ignored, mixed plain and named address paste keeps every address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
Copilot AI balanced review requested due to automatic review settings October 15, 2026 12:37
Pending recipient text counts as unsaved; settings and preview answers
carry a request generation so superseded ones are ignored; a plain address
before a named one in a mixed paste is kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Several localized labels and alert explanations misrepresent setting states and the conditions for repeated notifications.

4 open findings
Previously missed (2)

In code that hasn't changed since last review

Medium severity Passed-deadline hints use incorrect medical terminology

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​ptPT.ts:1009

The passed-deadline hint uses medical terms instead of a chemical inventory placement: curativo (dressing) in ptPT and ptBR, pleister (bandage) in nlNL, and implant/implantation terms in plPL, ltLT and huHU. The Portuguese and Dutch text also reads as an instruction to repeat a procedure. These hints should explain that deadline alerts repeat weekly until the chemical placement is removed. Correct this key in all six locales using consistent inventory terminology.

Medium severity Stock-disabled labels incorrectly describe disability

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​ukUA.ts:993

The stock toggle uses Chemicals: Disabled when stock management is off, but 13 locales translate disability rather than an inactive feature. Replace these values with software-state labels: ukUA: Вимкнено; svSE: Inaktiverad; roRO: Dezactivat; noNO: Deaktivert; nlNL: Uitgeschakeld; lvLV: Atspējots; ltLT: Išjungta; itIT: Disabilitato; huHU: Letiltva; fiFI: Ei käytössä; etET: Välja lülitatud; elGR: Απενεργοποιημένο; bgBG: Деактивирано. This makes the visible toggle label describe the actual setting.

🧠 Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 15, 2026 12:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Blur-time validation reflow can prevent a direct Save click from completing.

0 open findings

Previously missed (2)

In code that hasn't changed since last review

Medium severity Keep validation layout stable when saving corrected recipients

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.html:51

After a user clears a rejected recipient draft and clicks Save, the input's blur handler clears invalidRecipients. Removing this row moves Save before the click completes, which can prevent the save. The new persistence test explicitly blurs first to avoid this layout shift, but the user-facing interaction is unchanged. Keep the validation layout stable during the click or change when validation updates the layout, and cover clicking Save directly after correcting the draft.

Low severity Clarify that failed-save edits are not persisted

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​skSK.ts:897

“Zmeny sa uložili” says the changes were saved, but this message appears after a failed save. The edits remain only in the form, not in persisted settings. Say that explicitly so users know they must retry.

🧠 Review effort: Balanced

…clicked straight after clearing a draft

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
Copilot AI balanced review requested due to automatic review settings October 15, 2026 15:34

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Eight failed-save translations contradict the newly added meaning assertions and would fail those test cases.

3 open findings

🧠 Review effort: Balanced

Comment thread eform-client/src/app/plugins/modules/backend-configuration-pn/i18n/csCZ.ts Outdated
Comment thread eform-client/src/app/plugins/modules/backend-configuration-pn/i18n/skSK.ts Outdated
…p edits in form

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
Copilot AI balanced review requested due to automatic review settings October 15, 2026 15:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-repository digest integration and localized warning semantics need final human validation.

3 open findings
Previously missed (2)

In code that hasn't changed since last review

Low severity Clarify warnings repeat until the product placement is removed

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​i18n/​esES.ts:1009

This hint says warnings repeat until the location (“ubicación”) is removed. The ptBR and ptPT versions likewise say “localização”. The preview instead excludes closed chemical placements, not locations. Clarify that the product's placement must be removed: for example, “Se repite cada semana hasta que se retire la colocación del producto” in esES, and “até o registro de colocação do produto ser removido” (ptBR) / “até o registo de colocação do produto ser removido” (ptPT).

Low severity Correct Chemicals: Push translations to mean push notifications

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.html:80

The Chemicals: Push translations name pressing or physical pushing rather than push notifications. For example, German shows “Drücken”, French “Pousser”, and Portuguese “Empurrar”, obscuring the warning-delivery channel. Correct this key in bgBG, deDE, elGR, esES, etET, fiFI, frFR, hrHR, huHU, isIS, itIT, ltLT, lvLV, nlNL, noNO, plPL, ptBR, ptPT, roRO, slSL, svSE and ukUA. Use notification labels such as “Push-Benachrichtigungen”, “Notifications push” and “Notificações push”, and add focused translation-meaning coverage.

🧠 Review effort: Balanced

…nt wording in es/pt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
Copilot AI balanced review requested due to automatic review settings October 15, 2026 16:22

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The supplied translations contradict 27 new localization assertions and misdescribe notification channels and placement removal.

5 open findings

🧠 Review effort: Balanced

Comment thread eform-client/src/app/plugins/modules/backend-configuration-pn/i18n/bgBG.ts Outdated
Comment thread eform-client/src/app/plugins/modules/backend-configuration-pn/i18n/esES.ts Outdated
…ing in es/pt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0122jmSDSB5HSHQK36Bnt5Wy
Copilot AI balanced review requested due to automatic review settings October 15, 2026 16:28

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The stock-management switch lacks an accessible name identifying the setting it controls.

0 open findings

5 resolved since last review
Previously missed (1)

In code that hasn't changed since last review

Medium severity Associate switch with Stock management setting name

eform-client/​src/​app/​plugins/​modules/​backend-configuration-pn/​modules/​chemicals/​components/​chemical-settings-page/​chemical-settings-page.component.html:16

The switch's accessible name is only “Enabled” or “Disabled”; the adjacent “Stock management” heading is not associated with it. Screen-reader users navigating directly between controls cannot identify which setting it changes. Add the translated setting name to its accessible label while retaining the visible on/off text.

🧠 Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 15, 2026 16:50

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The stock toggle lacks a descriptive accessible label required by the new browser-test assertion.

1 open finding

🧠 Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 15, 2026 17:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

No unresolved blocking issues remain, prior feedback is addressed, and the referenced final CI run completed successfully.

0 open findings

1 resolved since last review

🧠 Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants