bcquality/microsoft/knowledge/data-modeling
Michael Dieringer fd59919778
Some checks failed
Validate knowledge index / validate-index (push) Has been cancelled
Validate AL review fixtures / validate-review-fixtures (push) Has been cancelled
Validate skill index and report schemas / validate-contract (push) Has been cancelled
Validate frontmatter and structure / validate (push) Has been cancelled
9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175)
* Add 5 AL/BC patterns: document distribution (Report Selections, Document Sending Profile, Find Entries, TransferFields)

Five rules about Business Central's document distribution architecture,
verified against BCApps source and Microsoft Learn.

- custom-document-dispatch-must-not-bypass-report-selections
- document-print-and-email-actions-call-report-selections-directly
- extend-find-entries-navigate-for-new-document-types
- extend-report-selection-usage-for-new-document-types
- transferfields-mirrored-fields-must-match-type-and-length

Wired into al-data-modeling-review.md's worklist cues. Added a
disambiguation note on the TransferFields article distinguishing it from
the existing transferfields-skip-type-mismatch-can-drop-data.md
(type-mismatch skipping vs. length mismatch, which SkipFieldsNotMatchingType
does not affect).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix four merge-critical blockers from Jesper's review; add 4 more patterns

Addresses microsoft/BCQuality#175 review feedback:
- Extend al-data-modeling-review's entry gate/relevance scope and token
  list to recognize document actions, Navigate subscribers, Report
  Selection registration, price-calculation/price-source extensibility,
  TransferFields posting-cascade mirroring, and barcode font-provider
  usage - previously excluded before any worklist cue could run.
- Fix document-print-and-email-actions-call-report-selections-directly:
  permit the legitimate stateless DocumentSendingProfile.TrySendToPrinter/
  TrySendToEMail path; rework the bad fixture to load a configured
  profile instead of demonstrating a trivial blank-record no-op.
- Fix extend-report-selection-usage-for-new-document-types: scope to the
  applicable single counterparty (ReportSelectionHandlerCZZ partitions
  strictly; only genuinely two-sided usages like Compensation need both),
  and add the page-facing usage-enum map/validate events alongside the
  filter-event subscription for full Document Layouts support.
- Fix a stale field-citation in custom-document-dispatch-must-not-bypass-
  report-selections (Custom Report Layout Code is field 7, not part of
  the 19-26 email-configuration range).
- Add deterministic positive/clean evaluation coverage (review-fixtures.json
  additionalArticles + Test-ReviewFixtures.ps1 support) so all 9 new
  good/bad pairs are actually exercised, not just present.
- Add 4 new patterns: activate-new-price-calculation-handler-via-
  onfindsupportedsetup, extend-price-source-type-must-sync-document-
  subset-enum, new-price-source-must-add-candidate-and-trigger-
  recalculation, report-barcodes-must-use-barcode-module-and-production-
  font-name.

All claims verified against live microsoft/BCApps source and Microsoft
Learn. Validators: frontmatter 0/0, review-fixtures 52 cases/17 domains
PASSED, knowledge-index 309 articles PASSED.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix 5 merge-critical issues from Jesper's 2026-09-24 review round

- activate-new-price-calculation-handler-via-onfindsupportedsetup: Default
  := true is required only for the fallback branch of PriceCalculationMgt's
  two-stage FindSetup - a handler reachable via a specific Dtld. Price
  Calculation Setup row needs no Default. Softened the article and its
  worklist cue accordingly. Also fixed an undefined "Sample Price Calc -
  Special" codeunit referenced but never declared in the eval fixtures -
  added a real implementation of interface "Price Calculation" with stub
  methods.
- new-price-source-must-add-candidate-and-trigger-recalculation: the good
  fixture called UpdateUnitPriceByField directly, which is a silent no-op
  without a prior PlanPriceCalcByField call (FieldCausedPriceCalculation
  gating, verified against SalesLine.Table.al). Switched to the public
  UpdateUnitPrice wrapper, matching real BCApps usage in
  ItemReferenceManagement.Codeunit.al.
- report-barcodes-must-use-barcode-module-and-production-font-name: split
  the 1D (ValidateInput + EncodeFont) and 2D (EncodeFont only) Barcode Font
  Provider interfaces, which the article previously conflated. Reframed the
  Code 39 anti-pattern around demonstrable encoding/checksum mismatch
  (verified against IDA1DCode39Encoder.Codeunit.al's real '(value)' output)
  rather than rejecting all manual delimiter use, since '*' is a legitimate
  Code 39 start/stop character. Also fixed extend-find-entries-navigate-
  for-new-document-types' eval fixtures, which referenced an undefined
  "Sample Posted Document Header" table/page - declared both.

All claims re-verified against live microsoft/BCApps source. Validators:
frontmatter 0/0, review-fixtures 126/20 domains PASSED, knowledge-index
342/575 PASSED, skill-index 19 leaves PASSED.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Align price-source and barcode routing cues with corrected articles

- Price-source cue now accepts UpdateUnitPrice, or the explicit
  PlanPriceCalcByField + UpdateUnitPriceByField sequence; bare
  UpdateUnitPriceByField does not count. Both APIs added to tokens.
- Barcode cue no longer flags manual delimiters as a category; routes
  only demonstrably invalid/provider-font-mismatched hand encoding, and
  requires ValidateInput + EncodeFont for 1D, EncodeFont only for 2D.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Make barcode bad fixture self-contained: 1D EncodeFont without ValidateInput

The previous bad fixture (literal '*' delimiters, no layout/font/provider
evidence) no longer matched the narrowed routing cue. It now shows an
IDAutomation 1D provider path that calls EncodeFont without ValidateInput,
which is visible in AL alone. Article Anti Pattern and Source updated to
describe this variant (verified: IDAutomation 1D Provider's EncodeFont
does not call IsValidInput).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Fix three merge-critical items from Jesper's 2026-09-29 review

- Barcode: drop the false claim that '*value*' is mismatched with the
  IDAutomation Code 39 font; '*' is a documented start/stop form and
  '(' / ')' an accepted alternative. Cue and article now route only
  independently provable validation/checksum/font-binding defects.
- Dispatch good samples (and matching bad samples) now pass a
  Sales Invoice Header with the S.Invoice usage, matching the record
  the selected report (1306 "Standard Sales - Invoice") expects.
- custom-document-dispatch rule made disjunctive: a hardcoded report
  or a hand-built email is each a bypass on its own; scoped to
  customer/vendor-facing documents. Bad fixture shows the hardcoded
  report alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Clarify TrySendToEMail comment in print/email good sample

Make explicit that TrySendToEMail is also correct *because* it never
reads the customer's assigned profile (local record, E-Mail option set
by the helper itself), and name Get/GetDefaultForCustomer + Send as the
anti-pattern. Matches the article's Best Practice and BaseApp's own
Sales Invoice Header.EmailRecords.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 13:22:38 +02:00
..
activate-new-price-calculation-handler-via-onfindsupportedsetup.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
activate-new-price-calculation-handler-via-onfindsupportedsetup.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
activate-new-price-calculation-handler-via-onfindsupportedsetup.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
check-blocked-in-referencing-code-not-in-master.bad.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
check-blocked-in-referencing-code-not-in-master.good.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
check-blocked-in-referencing-code-not-in-master.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
check-post-line-batch-pattern.bad.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
check-post-line-batch-pattern.good.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
check-post-line-batch-pattern.md 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
code-must-not-change-workdate.bad.al 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
code-must-not-change-workdate.good.al 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
code-must-not-change-workdate.md 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
custom-document-dispatch-must-not-bypass-report-selections.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
custom-document-dispatch-must-not-bypass-report-selections.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
custom-document-dispatch-must-not-bypass-report-selections.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
dimension-management-wiring.bad.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
dimension-management-wiring.good.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
dimension-management-wiring.md 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
do-not-change-primary-key.bad.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
do-not-change-primary-key.good.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
do-not-change-primary-key.md 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
document-print-and-email-actions-call-report-selections-directly.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
document-print-and-email-actions-call-report-selections-directly.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
document-print-and-email-actions-call-report-selections-directly.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-find-entries-navigate-for-new-document-types.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-find-entries-navigate-for-new-document-types.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-find-entries-navigate-for-new-document-types.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-price-source-type-must-sync-document-subset-enum.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-price-source-type-must-sync-document-subset-enum.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-price-source-type-must-sync-document-subset-enum.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-report-selection-usage-for-new-document-types.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-report-selection-usage-for-new-document-types.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
extend-report-selection-usage-for-new-document-types.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
initialize-document-defaults-in-initrecord.bad.al Add foundational AL developer knowledge (#195) 2026-09-21 10:15:39 +02:00
initialize-document-defaults-in-initrecord.good.al Add foundational AL developer knowledge (#195) 2026-09-21 10:15:39 +02:00
initialize-document-defaults-in-initrecord.md Add foundational AL developer knowledge (#195) 2026-09-21 10:15:39 +02:00
insert-only-transfer-may-rely-on-caller-cleanup.md knowledge: three false-positive guards from BCApps PR 10277, 10278 and 10346 (#146) 2026-09-02 11:25:19 +02:00
item-ledger-entry-document-no-follows-last-shipping-no.bad.al 3 AL/BC patterns from CURABIS's internal automated-testing training material (#158) 2026-09-29 12:49:11 +02:00
item-ledger-entry-document-no-follows-last-shipping-no.good.al 3 AL/BC patterns from CURABIS's internal automated-testing training material (#158) 2026-09-29 12:49:11 +02:00
item-ledger-entry-document-no-follows-last-shipping-no.md 3 AL/BC patterns from CURABIS's internal automated-testing training material (#158) 2026-09-29 12:49:11 +02:00
master-table-no-from-number-series-in-oninsert.bad.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
master-table-no-from-number-series-in-oninsert.good.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
master-table-no-from-number-series-in-oninsert.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
new-price-source-must-add-candidate-and-trigger-recalculation.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
new-price-source-must-add-candidate-and-trigger-recalculation.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
new-price-source-must-add-candidate-and-trigger-recalculation.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
owning-table-must-delete-dependents-in-ondelete.bad.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
owning-table-must-delete-dependents-in-ondelete.good.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
owning-table-must-delete-dependents-in-ondelete.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
pictures-must-use-media-not-blob.bad.al 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
pictures-must-use-media-not-blob.good.al 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
pictures-must-use-media-not-blob.md 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
report-barcodes-must-use-barcode-module-and-production-font-name.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
report-barcodes-must-use-barcode-module-and-production-font-name.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
report-barcodes-must-use-barcode-module-and-production-font-name.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
round-direction-symbols-use-magnitude.bad.al Add foundational AL developer knowledge (#195) 2026-09-21 10:15:39 +02:00
round-direction-symbols-use-magnitude.good.al Add foundational AL developer knowledge (#195) 2026-09-21 10:15:39 +02:00
round-direction-symbols-use-magnitude.md Add foundational AL developer knowledge (#195) 2026-09-21 10:15:39 +02:00
set-last-date-modified-in-onmodify-and-onrename.bad.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
set-last-date-modified-in-onmodify-and-onrename.good.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
set-last-date-modified-in-onmodify-and-onrename.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
setup-table-is-a-singleton.bad.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
setup-table-is-a-singleton.good.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
setup-table-is-a-singleton.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
share-mediaset-items-with-insert-not-field-assignment.bad.al Complete AL review knowledge readiness (#108) 2026-07-15 10:55:25 +02:00
share-mediaset-items-with-insert-not-field-assignment.good.al Complete AL review knowledge readiness (#108) 2026-07-15 10:55:25 +02:00
share-mediaset-items-with-insert-not-field-assignment.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
table-design-must-match-bc-table-type-conventions.bad.al 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
table-design-must-match-bc-table-type-conventions.good.al 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
table-design-must-match-bc-table-type-conventions.md 18 more AL/BC patterns: data-modeling, testing, style, security, error-handling, ui, upgrade, web-services, appsource (#157) 2026-09-29 17:12:51 +02:00
table-relation-extensions-are-additive-and-top-down.bad.al Complete AL review knowledge readiness (#108) 2026-07-15 10:55:25 +02:00
table-relation-extensions-are-additive-and-top-down.good.al Complete AL review knowledge readiness (#108) 2026-07-15 10:55:25 +02:00
table-relation-extensions-are-additive-and-top-down.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
testfield-required-setup-field.bad.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
testfield-required-setup-field.good.al 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
testfield-required-setup-field.md 18 AL/BC patterns: style, data-modeling, web-services, appsource, breaking-changes, performance, testing (#156) 2026-09-29 12:48:17 +02:00
transferfields-mirrored-fields-must-match-type-and-length.bad.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
transferfields-mirrored-fields-must-match-type-and-length.good.al 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
transferfields-mirrored-fields-must-match-type-and-length.md 9 AL/BC patterns: document distribution, price calculation & barcode extensibility (#175) 2026-09-30 13:22:38 +02:00
transferfields-skip-type-mismatch-can-drop-data.bad.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
transferfields-skip-type-mismatch-can-drop-data.good.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
transferfields-skip-type-mismatch-can-drop-data.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
use-no-series-codeunit-not-noseriesmanagement.bad.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
use-no-series-codeunit-not-noseriesmanagement.good.al Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65) 2026-07-13 10:35:31 +02:00
use-no-series-codeunit-not-noseriesmanagement.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
validate-table-relation-false-suppresses-rename-propagation.bad.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
validate-table-relation-false-suppresses-rename-propagation.good.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
validate-table-relation-false-suppresses-rename-propagation.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00
xrec-is-a-before-image-only-in-some-triggers.bad.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
xrec-is-a-before-image-only-in-some-triggers.good.al Promote knowledge for Microsoft review skills (#153) 2026-09-03 15:06:01 +02:00
xrec-is-a-before-image-only-in-some-triggers.md Improve partner onboarding and documentation navigation (#174) 2026-09-09 17:31:03 +02:00