tadforce 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +13 -0
- package/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.md +266 -2
- package/assets/logo-mark.svg +24 -0
- package/assets/logo.svg +31 -0
- package/bin/tadforce.js +4 -0
- package/commands/tadforce-review.md +8 -0
- package/commands/tadforce-update.md +6 -0
- package/commands/tadforce.md +10 -0
- package/package.json +60 -4
- package/skills/tadforce/SKILL.md +73 -0
- package/skills/tadforce/references/axes-rules.md +29 -0
- package/skills/tadforce/references/evidence-rules.md +40 -0
- package/skills/tadforce/references/exclusion-heuristics.md +40 -0
- package/skills/tadforce/references/figure-rules.md +42 -0
- package/skills/tadforce/references/markdown-conventions.md +67 -0
- package/skills/tadforce/references/modules/agentforce-ai.md +24 -0
- package/skills/tadforce/references/modules/analytics.md +19 -0
- package/skills/tadforce/references/modules/commerce.md +25 -0
- package/skills/tadforce/references/modules/data-cloud.md +23 -0
- package/skills/tadforce/references/modules/experience-cloud.md +24 -0
- package/skills/tadforce/references/modules/field-service.md +25 -0
- package/skills/tadforce/references/modules/industries.md +21 -0
- package/skills/tadforce/references/modules/integration-platforms.md +19 -0
- package/skills/tadforce/references/modules/marketing.md +24 -0
- package/skills/tadforce/references/modules/omnistudio.md +24 -0
- package/skills/tadforce/references/modules/platform-events.md +19 -0
- package/skills/tadforce/references/modules/revenue-cpq.md +25 -0
- package/skills/tadforce/references/modules/sales-cloud.md +26 -0
- package/skills/tadforce/references/modules/security-shield.md +18 -0
- package/skills/tadforce/references/modules/service-cloud.md +27 -0
- package/skills/tadforce/references/naming-external-systems.md +32 -0
- package/skills/tadforce/references/questions.md +59 -0
- package/skills/tadforce/references/salesforce-skills.md +27 -0
- package/skills/tadforce/references/workflow.md +95 -0
- package/skills/tadforce/references/writing-rules.md +47 -0
- package/skills/tadforce-review/SKILL.md +53 -0
- package/skills/tadforce-update/SKILL.md +48 -0
- package/src/build/brand.js +107 -0
- package/src/build/browser.js +70 -0
- package/src/build/directives.js +293 -0
- package/src/build/export.js +60 -0
- package/src/build/figures.js +119 -0
- package/src/build/mermaid.js +107 -0
- package/src/build/render.js +299 -0
- package/src/build/serve.js +59 -0
- package/src/cli.js +68 -0
- package/src/commands/docs.js +204 -0
- package/src/commands/doctor.js +370 -0
- package/src/commands/init.js +132 -0
- package/src/commands/org.js +151 -0
- package/src/commands/review.js +35 -0
- package/src/commands/spec.js +91 -0
- package/src/commands/update.js +154 -0
- package/src/facts/extractors/apex.js +111 -0
- package/src/facts/extractors/automation.js +85 -0
- package/src/facts/extractors/data.js +94 -0
- package/src/facts/extractors/integration.js +76 -0
- package/src/facts/extractors/misc.js +100 -0
- package/src/facts/extractors/security.js +92 -0
- package/src/facts/extractors/ui.js +120 -0
- package/src/facts/fingerprints.js +32 -0
- package/src/facts/heuristics/exclusions.js +143 -0
- package/src/facts/heuristics/modules.js +85 -0
- package/src/facts/heuristics/naming.js +31 -0
- package/src/facts/heuristics/signals.js +76 -0
- package/src/facts/index.js +197 -0
- package/src/facts/org.js +87 -0
- package/src/facts/xml.js +85 -0
- package/src/sf/sf.js +120 -0
- package/src/util/args.js +21 -0
- package/src/util/config.js +104 -0
- package/src/util/fsx.js +58 -0
- package/src/util/i18n.js +49 -0
- package/src/util/log.js +31 -0
- package/src/util/paths.js +11 -0
- package/src/validate/index.js +126 -0
- package/templates/axes/en/00-document-control.md +3 -0
- package/templates/axes/en/01-summary.md +7 -0
- package/templates/axes/en/02-method.md +9 -0
- package/templates/axes/en/03-findings.md +19 -0
- package/templates/axes/en/04-register.md +3 -0
- package/templates/axes/en/05-roadmap.md +3 -0
- package/templates/axes/en/99-appendix.md +5 -0
- package/templates/axes/fr/00-document-control.md +3 -0
- package/templates/axes/fr/01-summary.md +7 -0
- package/templates/axes/fr/02-method.md +9 -0
- package/templates/axes/fr/03-findings.md +19 -0
- package/templates/axes/fr/04-register.md +3 -0
- package/templates/axes/fr/05-roadmap.md +3 -0
- package/templates/axes/fr/99-appendix.md +5 -0
- package/templates/html/cover.html +12 -0
- package/templates/html/editor.js +502 -0
- package/templates/html/style.css +255 -0
- package/templates/html/template.html +88 -0
- package/templates/i18n/en.json +366 -0
- package/templates/i18n/fr.json +366 -0
- package/templates/manifest/package-tad.xml +543 -0
- package/templates/specs/sections.yml +494 -0
- package/templates/tad/en/00-document-control.md +7 -0
- package/templates/tad/en/01-summary.md +17 -0
- package/templates/tad/en/02-purpose.md +35 -0
- package/templates/tad/en/03-context.md +17 -0
- package/templates/tad/en/04-general.md +29 -0
- package/templates/tad/en/05-functional.md +7 -0
- package/templates/tad/en/06-data.md +71 -0
- package/templates/tad/en/07-application.md +49 -0
- package/templates/tad/en/08-ui.md +41 -0
- package/templates/tad/en/09-integrations.md +53 -0
- package/templates/tad/en/10-security.md +59 -0
- package/templates/tad/en/11-reporting.md +13 -0
- package/templates/tad/en/12-operations.md +25 -0
- package/templates/tad/en/13-nfr.md +9 -0
- package/templates/tad/en/14-decisions.md +3 -0
- package/templates/tad/en/15-outlook.md +3 -0
- package/templates/tad/en/99-appendices.md +119 -0
- package/templates/tad/fr/00-document-control.md +7 -0
- package/templates/tad/fr/01-summary.md +17 -0
- package/templates/tad/fr/02-purpose.md +35 -0
- package/templates/tad/fr/03-context.md +17 -0
- package/templates/tad/fr/04-general.md +29 -0
- package/templates/tad/fr/05-functional.md +7 -0
- package/templates/tad/fr/06-data.md +71 -0
- package/templates/tad/fr/07-application.md +49 -0
- package/templates/tad/fr/08-ui.md +41 -0
- package/templates/tad/fr/09-integrations.md +53 -0
- package/templates/tad/fr/10-security.md +59 -0
- package/templates/tad/fr/11-reporting.md +13 -0
- package/templates/tad/fr/12-operations.md +25 -0
- package/templates/tad/fr/13-nfr.md +9 -0
- package/templates/tad/fr/14-decisions.md +3 -0
- package/templates/tad/fr/15-outlook.md +3 -0
- package/templates/tad/fr/99-appendices.md +119 -0
- package/templates/vendor/LICENSE-html-docx-js.txt +21 -0
- package/templates/vendor/LICENSE-html2canvas.txt +22 -0
- package/templates/vendor/LICENSE-mermaid.txt +21 -0
- package/templates/vendor/html-docx.js +13216 -0
- package/templates/vendor/html2canvas.min.js +20 -0
- package/templates/vendor/mermaid.min.js +2314 -0
package/package.json
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tadforce",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "AI-Powered Salesforce Technical Documentation — the Technical Architecture Document of any Salesforce org, written from the org's own metadata: evidence-based, reproducible, reviewable in the browser, kept up to date.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"tadforce": "bin/tadforce.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"src",
|
|
12
|
+
"templates",
|
|
13
|
+
"skills",
|
|
14
|
+
"commands",
|
|
15
|
+
".claude-plugin",
|
|
16
|
+
"assets/logo.svg",
|
|
17
|
+
"assets/logo-mark.svg",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"NOTICE"
|
|
21
|
+
],
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=20"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "node --test \"test/*.test.js\" && node tools/check-generic.js",
|
|
27
|
+
"test:unit": "node --test \"test/*.test.js\"",
|
|
28
|
+
"check:generic": "node tools/check-generic.js",
|
|
29
|
+
"example": "node bin/tadforce.js build --doc all --pdf --docx --cwd examples/northwind-bank",
|
|
30
|
+
"example:validate": "node bin/tadforce.js validate --doc all --cwd examples/northwind-bank",
|
|
31
|
+
"set-owner": "node tools/set-owner.js"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"salesforce",
|
|
35
|
+
"architecture",
|
|
36
|
+
"technical-architecture-document",
|
|
37
|
+
"documentation",
|
|
38
|
+
"sfdx",
|
|
39
|
+
"sf-cli",
|
|
40
|
+
"agent-skills",
|
|
41
|
+
"claude-code",
|
|
42
|
+
"codex",
|
|
43
|
+
"well-architected",
|
|
44
|
+
"mermaid"
|
|
45
|
+
],
|
|
46
|
+
"author": "Jihad AZAMI HASSANI (Salesforce Technical Architect)",
|
|
47
|
+
"license": "Apache-2.0",
|
|
48
|
+
"homepage": "https://github.com/azamiji/TADForce#readme",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/azamiji/TADForce.git"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/azamiji/TADForce/issues"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"fast-xml-parser": "^4.5.0",
|
|
58
|
+
"markdown-it": "^14.1.0",
|
|
59
|
+
"puppeteer-core": "^23.11.1",
|
|
60
|
+
"yaml": "^2.6.1"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tadforce
|
|
3
|
+
description: Generate, end to end, a client-ready Technical Architecture Document (TAD) of any Salesforce org — plus the integrator's internal Improvement Axes — from the org's own metadata. Handles prerequisites, org authorization, wildcard manifest retrieve, deterministic facts, the questions only a human can answer, writing chapter by chapter, HTML (in-browser edit and comment) / PDF / DOCX build and validation. Covers every Salesforce product (Sales, Service, Field Service, Experience, Marketing, Commerce, Industries, CPQ/Revenue, OmniStudio, Data Cloud, Agentforce, CRM Analytics, Shield, integrations). Use when the user asks to document a Salesforce org, write or update an architecture document / solution architecture / as-built / document d'architecture technique, or runs /tadforce.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# TADForce — the architect's scribe
|
|
7
|
+
|
|
8
|
+
You produce the architecture document a senior Salesforce architect would hand to a client: precise, evidence-based, readable, the same structure for every org. **No evidence, no sentence.**
|
|
9
|
+
|
|
10
|
+
The CLI (`npx tadforce …`) does everything deterministic: org access, retrieve, facts, tables, diagrams from metadata, build, validation. You do what needs judgement: ask the right questions, read the code, write the narrative, keep the client's vocabulary.
|
|
11
|
+
|
|
12
|
+
## Golden rules
|
|
13
|
+
|
|
14
|
+
1. **Read-only.** Never deploy, never modify `force-app`, never read business records. TADForce only allows read-only `sf` commands and aggregate queries.
|
|
15
|
+
2. **No evidence, no sentence.** Every statement relies on metadata (P1), a document provided by the project (P2/P3 — functional specifications are in `knowledge/inputs/specs/`), or is written as *to be confirmed*. See `references/evidence-rules.md`.
|
|
16
|
+
3. **Never name a system by guessing.** External systems come from `knowledge/glossary.yml`, confirmed by a human. A field called `LegacyCoreId__c` does not tell you the system is called « Legacy Core ».
|
|
17
|
+
4. **Never document what is decommissioned or excluded.** Ask about the candidates in `facts/questions.json`; record the answers in `knowledge/exclusions.yml`.
|
|
18
|
+
5. **The client's vocabulary is law.** Apply `glossary.yml › terms` everywhere, diagrams included.
|
|
19
|
+
6. **Numbers come from facts.** Write counts as `{{n:apex.classes}}`, links as `{{ref:section-id}}`. Never type a count by hand.
|
|
20
|
+
7. **Client document ≠ internal review.** The TAD is factual and positive. Debt, risks and recommendations go to the Improvement Axes document.
|
|
21
|
+
8. **Technical names in code font must exist** in the inventory (`tadforce validate` checks it).
|
|
22
|
+
9. **Write in the document language** (`tadforce.config.json › language` — any language; outside English and French, translate the headings and labels once, see `references/workflow.md › Other languages`). Keep Salesforce terms in English (Lead, Queue, Record Type, Named Credential…).
|
|
23
|
+
10. **Ask in batches.** Group your questions; never ask what the facts already answer.
|
|
24
|
+
|
|
25
|
+
## The run
|
|
26
|
+
|
|
27
|
+
Four commands: **doctor → build → review → update**. Follow `references/workflow.md`. In short:
|
|
28
|
+
|
|
29
|
+
| Step | You run | Human action |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| 1. Doctor | `npx tadforce doctor --json`, in a loop until `ok: true`. Answer its `questions` in one message (Block A of `references/questions.md`), then pass the answers as flags: `--confirm --lang … --client … --integrator …\|none --author …\|none --title … [--scope …] [--logo …] [--specs …\|--no-specs]`. Ask Blocks B–D, write `knowledge/*.yml`, then `--facts-reviewed` | log in once in the browser if asked; confirm the answers |
|
|
32
|
+
| 2. Write | loop: `npx tadforce next --json` → read the spec, the facts, the specifications in `knowledge/inputs/specs/`, the code → replace the marker | — |
|
|
33
|
+
| 3. Build | `npx tadforce build --pdf --docx` until validation shows 0 errors; hand over the paths, the score, the points to confirm | — |
|
|
34
|
+
| 4. Review | `/tadforce-review` (`npx tadforce review --json`) | `npx tadforce review`: comment in the page, Save — always the same file |
|
|
35
|
+
| Later | `/tadforce-update` (`npx tadforce update --json`) | — |
|
|
36
|
+
|
|
37
|
+
## Writing a section
|
|
38
|
+
|
|
39
|
+
`npx tadforce next --json` returns the file, the marker, and the spec: `intent`, `must`, `never`, `facts` (with an excerpt), and `readModules` (product references to read). Then:
|
|
40
|
+
|
|
41
|
+
1. Read the facts excerpt; open the metadata or code files it points to (`tadforce/.snapshot/source/...` or `force-app/...`) when you need behaviour, not only names.
|
|
42
|
+
2. Replace the `<!-- tad:pending id -->` line with the content. Keep the headings and their `{#id}` anchors.
|
|
43
|
+
3. Use the conventions of `references/markdown-conventions.md`: `{{n:…}}`, `{{ref:…}}`, `@@ERD:…@@`, Mermaid + `Figure:` line, `> [!INTEGRATOR]`, cards and KPI blocks.
|
|
44
|
+
4. Follow `references/writing-rules.md` (voice, structure, length) and `references/figure-rules.md`.
|
|
45
|
+
5. Every few sections, run `npx tadforce validate` to catch unknown identifiers or forbidden terms early.
|
|
46
|
+
|
|
47
|
+
## Products and industries
|
|
48
|
+
|
|
49
|
+
`facts.modules.clouds` lists the products detected, each with its evidence and a reference under `references/modules/`. Read the reference of every detected product before writing chapters 4 to 11 — it says what to cover, where, and which pitfalls to avoid:
|
|
50
|
+
|
|
51
|
+
`sales-cloud` · `service-cloud` · `field-service` · `experience-cloud` · `marketing` · `commerce` · `revenue-cpq` · `industries` · `omnistudio` · `data-cloud` · `agentforce-ai` · `analytics` · `platform-events` · `security-shield` · `integration-platforms`
|
|
52
|
+
|
|
53
|
+
When a product is used but not detected (no metadata trace), the human tells you: add it to `glossary.yml › products` and cover it.
|
|
54
|
+
|
|
55
|
+
## References
|
|
56
|
+
|
|
57
|
+
- `references/workflow.md` — the full run, failure handling, long-running steps
|
|
58
|
+
- `references/questions.md` — the exact questions to ask, in batches (EN / FR)
|
|
59
|
+
- `references/evidence-rules.md` — levels of evidence, what counts as proof, when to ask
|
|
60
|
+
- `references/writing-rules.md` — voice, structure and style of a consulting-grade TAD
|
|
61
|
+
- `references/figure-rules.md` — when to draw, Mermaid conventions, generated figures
|
|
62
|
+
- `references/markdown-conventions.md` — placeholders, directives, callouts, HTML blocks
|
|
63
|
+
- `references/exclusion-heuristics.md` — unused / decommissioned components
|
|
64
|
+
- `references/naming-external-systems.md` — glossary of systems and terms
|
|
65
|
+
- `references/axes-rules.md` — the Improvement Axes document
|
|
66
|
+
- `references/salesforce-skills.md` — Salesforce skills worth calling, and when
|
|
67
|
+
- `references/modules/*.md` — one reference per Salesforce product family
|
|
68
|
+
|
|
69
|
+
## Done means
|
|
70
|
+
|
|
71
|
+
- `npx tadforce validate` → 0 error, warnings reviewed (each unknown identifier explained or fixed).
|
|
72
|
+
- `tadforce/out/` holds the TAD (HTML, PDF, DOCX) and the Improvement Axes (HTML).
|
|
73
|
+
- You give the human: the paths, the validation score, the sections you marked *to be confirmed*, and the questions still open.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# The Improvement Axes document (internal to the integrator)
|
|
2
|
+
|
|
3
|
+
Purpose: give the integrator an honest, prioritised view of the debt and the opportunities, separate from the client TAD. It may be shared with the client after review — write it so that it can be.
|
|
4
|
+
|
|
5
|
+
## Inputs
|
|
6
|
+
|
|
7
|
+
- `facts.signals` — measured signals (pillar, priority, value, evidence); tables are generated per pillar.
|
|
8
|
+
- `knowledge/inputs/code-analyzer-results.json` — Code Analyzer violations (via the `dx-code-analyzer-run` skill).
|
|
9
|
+
- The `platform-architecture-analyze` skill output (Well-Architected reading).
|
|
10
|
+
- What you saw while writing the TAD (keep a scratch list of observations as you go).
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
|
|
14
|
+
- A signal is not a finding. For each signal, decide: real issue, acceptable by design (say why), or false positive (drop it).
|
|
15
|
+
- Each retained finding becomes an axis `AX-nn` with: finding (fact), impact (for the business or the run), recommendation (concrete, Salesforce-native), priority, effort (S / M / L).
|
|
16
|
+
- Priorities: **P1** security, data integrity or continuity at risk; **P2** plan in the next releases (maintainability, limits, retired features such as Workflow Rules and Process Builder); **P3** improve when touching the area.
|
|
17
|
+
- Pillars follow Salesforce Well-Architected: Trusted, Easy, Adaptable.
|
|
18
|
+
- Name components; never people or teams.
|
|
19
|
+
- No duplicates with the TAD: the TAD describes, the Axes document improves. The TAD's outlook chapter may point to this document without quoting it.
|
|
20
|
+
|
|
21
|
+
## Register table
|
|
22
|
+
|
|
23
|
+
| ID | Axis | Finding | Impact | Recommendation | Priority | Effort |
|
|
24
|
+
|---|---|---|---|---|---|---|
|
|
25
|
+
| AX-01 | Sharing | 3 classes declared `without sharing` serve UI controllers | Users may read records beyond their access | Switch to `with sharing` + `WITH USER_MODE`; keep `without sharing` in a dedicated system class | <span class="b p1">P1</span> | M |
|
|
26
|
+
|
|
27
|
+
## Roadmap
|
|
28
|
+
|
|
29
|
+
Group the axes by horizon (next release, next quarter, next year) or by theme; a Mermaid `gantt` is welcome.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Evidence rules — no evidence, no sentence
|
|
2
|
+
|
|
3
|
+
## Levels of evidence
|
|
4
|
+
|
|
5
|
+
| Level | Source | Example | How to write it |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| **P1** | Metadata or code of the org | `LeadTrigger` calls `LeadTriggerHandler.run()` | State it as a fact |
|
|
8
|
+
| **P2** | Technical document provided by the project | Release procedure in `knowledge/inputs/` | State it as a fact; cite the reference (DR-nn) when it matters |
|
|
9
|
+
| **P3** | Functional document, ticket, interview | « Advisors handle 30 leads a day » | Attribute it: « according to the specifications (DR-01) » |
|
|
10
|
+
| **To confirm** | Deduction, missing or contradictory information | Retention policy not configured in the org | Write « to be confirmed » / « à confirmer » and list it in your hand-over |
|
|
11
|
+
|
|
12
|
+
## Kinds of statements
|
|
13
|
+
|
|
14
|
+
Keep them apart in your head and in the text:
|
|
15
|
+
|
|
16
|
+
- **Documented requirement** — written in a specification.
|
|
17
|
+
- **Technical observation** — visible in the metadata or the code.
|
|
18
|
+
- **Deduction** — logical but not proven: say so, or leave it out.
|
|
19
|
+
- **Unavailable information** — absent from the snapshot: say it is not visible, never fill the gap.
|
|
20
|
+
- **Recommendation** — goes to the Improvement Axes, not to the TAD.
|
|
21
|
+
|
|
22
|
+
## Non-equivalences
|
|
23
|
+
|
|
24
|
+
- A name that looks like a business term is not a proof of the link (`LegacyCoreId__c` does not mean the system is called « Legacy Core »).
|
|
25
|
+
- Absent from the snapshot ≠ absent from the org (a type may have failed to retrieve: check `.snapshot/retrieve-report.json`).
|
|
26
|
+
- Present in the snapshot ≠ used (inactive flows, components placed nowhere, objects with no record).
|
|
27
|
+
- A ticket status or a file date is not a proof of deployment.
|
|
28
|
+
- What a Salesforce product *can* do is not what this org *does*.
|
|
29
|
+
|
|
30
|
+
## Reading code for evidence
|
|
31
|
+
|
|
32
|
+
- Read the handler, not only the trigger; the service, not only the controller.
|
|
33
|
+
- Note thresholds and switches (`if (records.size() > 200) Database.executeBatch…`), named credentials (`callout:X`), custom metadata read (`X__mdt.getAll()`), platform events published (`EventBus.publish`).
|
|
34
|
+
- For flows: start element (object, trigger type), decisions, actions (Apex, subflows), record operations.
|
|
35
|
+
- For OmniStudio: OmniScript elements → Integration Procedure → Data Mapper / Remote Action / HTTP.
|
|
36
|
+
- Keep a short list of `file:line` for the sentences that matter; you need it when the human challenges a statement.
|
|
37
|
+
|
|
38
|
+
## When to ask
|
|
39
|
+
|
|
40
|
+
Ask when a sentence would otherwise rely on a guess about: the name of a system, the use of a component that looks dead, a decommissioned feature, an environment or a release step, a number not in facts. Batch the questions (`questions.md`).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Unused and decommissioned components
|
|
2
|
+
|
|
3
|
+
An org accumulates proofs of concept, test scaffolding, samples and features switched off but still deployed. Documenting them misleads the reader; deleting them is not your job. TADForce **proposes** candidates; the human **decides**; the decision lives in `knowledge/exclusions.yml`.
|
|
4
|
+
|
|
5
|
+
## Candidates computed by `tadforce facts`
|
|
6
|
+
|
|
7
|
+
| Reason | Meaning | Typical decision |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| name suggests test / demo / POC / sample / old / legacy / draft… | Words in the API name | Exclude after a quick look |
|
|
10
|
+
| not placed on any page, app, tab, action, flow or OmniStudio component | LWC or Aura never used in the snapshot | Exclude unless used by a site or a utility bar outside the snapshot |
|
|
11
|
+
| flow status is Draft / Inactive / Obsolete | No active version | Exclude |
|
|
12
|
+
| inactive version (OmniStudio) | No active OmniScript / IP / Data Mapper version | Exclude |
|
|
13
|
+
| referenced only by test classes | Apex reached by nothing but its tests | Ask: often dead code, sometimes started by anonymous Apex or a scheduler |
|
|
14
|
+
| not referenced by any other component | Apex not reached at all (entry points such as REST, schedulable, invocable, global, SSO handlers are never flagged) | Ask |
|
|
15
|
+
| not assigned to any app, object override or tab | FlexiPage not assigned in the snapshot | Ask: assignments by profile may live outside the snapshot |
|
|
16
|
+
| object with no record in the org | From org facts | Ask: new feature not live yet, or abandoned |
|
|
17
|
+
|
|
18
|
+
## Exclusions file
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
exclude:
|
|
22
|
+
- name: "*Demo*" # wildcard on the API name
|
|
23
|
+
reason: "Demonstration components"
|
|
24
|
+
- name: legacyScoring
|
|
25
|
+
type: lwc # optional: apex, trigger, lwc, aura, flow, flexipage, app, object, permissionSet, omniScript, integrationProcedure, dataMapper, report, emailTemplate, staticResource…
|
|
26
|
+
reason: "Replaced by the scoring engine"
|
|
27
|
+
features:
|
|
28
|
+
- name: "Search by national ID"
|
|
29
|
+
note: "UI removed; backend kept until further notice"
|
|
30
|
+
components: [idSearch, IdSearchController, IdSearch_Procedure]
|
|
31
|
+
keywords: ["national ID search", "ID card search"] # forbidden in the text
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- Excluded components disappear from every count, table and figure after `tadforce facts`.
|
|
35
|
+
- `features.keywords` are forbidden in the text: `tadforce validate` fails if one appears.
|
|
36
|
+
- The method section of the TAD lists the exclusions applied (generated), so the client knows what was left out and why.
|
|
37
|
+
|
|
38
|
+
## In the Improvement Axes
|
|
39
|
+
|
|
40
|
+
Candidates that the human did not exclude but did not confirm either are listed in the appendix of the Improvement Axes: cleaning them is an improvement axis, never a TAD statement.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Figure rules
|
|
2
|
+
|
|
3
|
+
A figure is worth its place only when it shows a relationship, a branch, an order or a dependency that text cannot show at a glance.
|
|
4
|
+
|
|
5
|
+
## Generated figures (do not draw them by hand)
|
|
6
|
+
|
|
7
|
+
| Directive | What it draws |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `@@FIGURE:context@@` | Context view: users (glossary.actors or apps), the org with its products, connected systems |
|
|
10
|
+
| `@@FIGURE:layers@@` | Logical layers with counts |
|
|
11
|
+
| `@@FIGURE:integrations\|caption@@` | Integration map from glossary systems and endpoints |
|
|
12
|
+
| `@@FIGURE:roles\|caption@@` | Role hierarchy (top levels on large orgs) |
|
|
13
|
+
| `@@ERD:Obj1,Obj2,…\|caption@@` | ER diagram, Lookup / Master-Detail fields only; `@@ERD:auto\|caption@@` picks the most connected objects |
|
|
14
|
+
|
|
15
|
+
## Hand-written Mermaid figures
|
|
16
|
+
|
|
17
|
+
Fence them as `mermaid` and put the caption on the line right after the closing fence:
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
sequenceDiagram
|
|
21
|
+
participant U as Advisor
|
|
22
|
+
participant L as customer360
|
|
23
|
+
U->>L: open the customer record
|
|
24
|
+
```
|
|
25
|
+
Figure: Opening the customer 360 view
|
|
26
|
+
|
|
27
|
+
- **Sequences** (`sequenceDiagram`): only calls you saw in code or metadata. Participants are components or confirmed systems. 4 to 9 participants, 6 to 15 messages. Numbering is automatic.
|
|
28
|
+
- **Flowcharts** (`flowchart LR|TB`): use the shared classes `:::actor`, `:::sf`, `:::ext`, `:::data`, `:::warn` (added automatically). Node ids short and alphanumeric (`A1`), labels in double quotes: `A1["Lead (web)"]:::actor`.
|
|
29
|
+
- **State diagrams** (`stateDiagram-v2`) for statuses with transitions.
|
|
30
|
+
- **Gantt** only in the Improvement Axes roadmap.
|
|
31
|
+
- ERDs are never hand-written: use `@@ERD@@` so they match the metadata.
|
|
32
|
+
|
|
33
|
+
## Mermaid pitfalls (they break the build)
|
|
34
|
+
|
|
35
|
+
- Parentheses, brackets, `#`, `;` or quotes inside an unquoted label → always quote labels.
|
|
36
|
+
- `end` as a node id; a `-->` inside a label; `:` inside sequence messages is fine, `;` is not.
|
|
37
|
+
- Long labels: wrap with `<br/>` is not supported (labels are SVG text) — keep labels short instead.
|
|
38
|
+
- One diagram per fence; the `Figure:` line must follow the fence immediately.
|
|
39
|
+
|
|
40
|
+
## Captions
|
|
41
|
+
|
|
42
|
+
Sentence case, no final full stop, say what the figure shows: « Figure: Lead lifecycle, from the sources to conversion or archiving ».
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Markdown conventions of TADForce sources
|
|
2
|
+
|
|
3
|
+
The sources live in `tadforce/src/tad/*.md` and `tadforce/src/axes/*.md`, concatenated in file-name order.
|
|
4
|
+
|
|
5
|
+
## Headings
|
|
6
|
+
|
|
7
|
+
- `#` chapter, `##` section, `###` subsection — numbered automatically (1, 1.2, 1.2.3).
|
|
8
|
+
- `{-}` at the end: not numbered. `{#my-id}`: explicit anchor. Both: `{- #my-id}`.
|
|
9
|
+
- In appendices, `{{letter}}` in a `##` title becomes A, B, C… and `{{sub}}` in a `###` becomes A.1, A.2… so optional appendices never leave gaps.
|
|
10
|
+
- Keep the anchors of the skeleton: KPI tiles, references and validation rely on them.
|
|
11
|
+
|
|
12
|
+
## Placeholders (resolved at build)
|
|
13
|
+
|
|
14
|
+
| Placeholder | Result |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `{{n:apex.classes}}` | Formatted number from `facts.counts` (then from the facts root) |
|
|
17
|
+
| `{{v:modules.products}}` | Raw value from facts |
|
|
18
|
+
| `{{cfg:client.name}}` | Value from `tadforce.config.json` |
|
|
19
|
+
| `{{ref:data-overview}}` | Link « § 6.2 » to the section |
|
|
20
|
+
| `{{title:ch-data}}` | Link « 6 Data architecture » |
|
|
21
|
+
|
|
22
|
+
Main count keys: `apex.classes`, `apex.tests`, `apex.triggers`, `apex.batch`, `apex.queueable`, `apex.schedulable`, `apex.future`, `apex.rest`, `apex.withSharing`, `apex.withoutSharing`, `objects.custom`, `objects.standard`, `objects.platformEvents`, `fields.custom`, `fields.externalIds`, `recordTypes`, `validationRules.active`, `cmdt.types`, `cmdt.records`, `flows.active`, `flows.recordTriggered`, `flows.scheduled`, `omni.scriptsActive`, `omni.ipsActive`, `omni.dataMappers`, `ui.apps`, `ui.flexipages`, `ui.lwc`, `ui.aura`, `ui.vfPages`, `security.profiles`, `security.permissionSets`, `security.permissionSetGroups`, `security.roles`, `security.queues`, `security.sharingRules`, `integration.namedCredentials`, `integration.externalCredentials`, `integration.restResources`, `integration.connectedApps`, `integration.systems`, `misc.reports`, `misc.dashboards`, `misc.labels`.
|
|
23
|
+
|
|
24
|
+
## Directives (one per line)
|
|
25
|
+
|
|
26
|
+
- `@@ANNEX:<name>@@` — generated table. Names: `doc-control`, `version-history`, `legend`, `key-figures`, `products`, `naming`, `objects`, `standard-objects`, `external-ids`, `record-types`, `validation-rules`, `cmdt`, `platform-events`, `volumes`, `apex-summary`, `triggers`, `async`, `rest`, `flows`, `omni-scripts`, `integration-procedures`, `data-mappers`, `apps`, `flexipages`, `lwc`, `aura`, `visualforce`, `psg`, `permission-sets`, `profiles`, `roles`, `owd`, `sharing-rules`, `queues`, `named-credentials`, `external-credentials`, `connected-apps`, `auth-providers`, `allowed-domains`, `call-centers`, `systems`, `reports`, `labels`, `scheduled-jobs`, `packages`, `exclusions`, `inventory`, `traceability`, `glossary`, `signals`, `signals-trusted`, `signals-easy`, `signals-adaptable`, `exclusion-candidates`.
|
|
27
|
+
- `@@ERD:Obj1,Obj2|caption@@`, `@@FIGURE:context|layers|integrations|roles@@`, `@@KPIS@@`.
|
|
28
|
+
- `@@INCLUDE:knowledge/figures/x.svg@@` — include a file (SVG figures are framed). Follow it with `<p class="figcap">Figure — caption</p>` to number it.
|
|
29
|
+
|
|
30
|
+
## Conditional blocks
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<!-- tad:if modules.omnistudio -->
|
|
34
|
+
…only when OmniStudio is detected…
|
|
35
|
+
<!-- tad:else -->
|
|
36
|
+
…otherwise…
|
|
37
|
+
<!-- tad:endif -->
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Conditions are facts paths (`modules.*`, `counts.*`, `org.*`, `facts.*`), `!` negates, `a|b` means either.
|
|
41
|
+
|
|
42
|
+
## Callouts
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
> [!INTEGRATOR]
|
|
46
|
+
> The scoring rules are Custom Metadata records: a new rule needs no deployment.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Kinds: `INTEGRATOR` (the integrator's contribution), `NOTE`, `RECO` (rare in the TAD), `WARN`.
|
|
50
|
+
|
|
51
|
+
## HTML blocks
|
|
52
|
+
|
|
53
|
+
Cards (achievements):
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<div class="cards">
|
|
57
|
+
<div class="card"><h4>Title</h4><p>Two to four sentences with `code` replaced by <code>code</code>.</p></div>
|
|
58
|
+
</div>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Markdown is not processed inside HTML blocks: use `<code>`, `<b>`, `<a href="#id">`.
|
|
62
|
+
|
|
63
|
+
Priority badges (Improvement Axes): `<span class="b p1">P1</span>`, `p2`, `p3`.
|
|
64
|
+
|
|
65
|
+
## Pending markers
|
|
66
|
+
|
|
67
|
+
`<!-- tad:pending <id> -->` marks a section to write. Replace the whole line. `tadforce next` gives the next one; `tadforce validate` fails while active ones remain.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Agentforce and Einstein
|
|
2
|
+
|
|
3
|
+
**Detected by** `bots` / `botVersions`, `genAiPlanners`, `genAiPlannerBundles`, `genAiPlugins` (topics), `genAiFunctions` (actions), `aiAuthoringBundles` (Agent Script), `genAiPromptTemplates`, Einstein prediction definitions.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 7 Application | `application.ai` section: each agent (purpose, channel, topics, actions and what they call — Flow, Apex, prompt template, API), grounding sources (knowledge, Data Cloud, records), guardrails and escalation to humans, prompt templates and where they are used, Einstein features used (scoring, classification, Copilot features) |
|
|
10
|
+
| 8 UI | Where agents appear (Lightning, Experience site, messaging channel) |
|
|
11
|
+
| 10 Security | Agent user, permission sets, Einstein Trust Layer settings, data masking |
|
|
12
|
+
| 12 Operations | Testing (agent tests), monitoring (session tracing, health alerts) |
|
|
13
|
+
|
|
14
|
+
## Read
|
|
15
|
+
|
|
16
|
+
Agent metadata above; the `agentforce-architecture-analyze` skill renders the declared architecture of one agent (topics, actions, flows, Apex, prompts).
|
|
17
|
+
|
|
18
|
+
## Draw
|
|
19
|
+
|
|
20
|
+
Flowchart agent → topics → actions → Flow / Apex / prompt template → data.
|
|
21
|
+
|
|
22
|
+
## Watch out
|
|
23
|
+
|
|
24
|
+
Describe declared behaviour, never transcripts or user prompts. Legacy Einstein Bots and Agentforce agents may coexist: say which channel uses which.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CRM Analytics and Tableau
|
|
2
|
+
|
|
3
|
+
**Detected by** `wave*` metadata (applications, dashboards, dataflows, recipes, datasets) or namespace `wave`; Tableau shows as CSP trusted sites or embedded LWC.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 11 Reporting | `reporting.analytics` section: apps and their audience, data preparation (dataflows or recipes, schedules, sources), datasets, dashboards embedded in Lightning pages, security predicates and sharing inheritance |
|
|
10
|
+
| 9 Integrations | External data sources and connectors |
|
|
11
|
+
| 10 Security | Analytics permission sets and licences, row-level security |
|
|
12
|
+
|
|
13
|
+
## Read
|
|
14
|
+
|
|
15
|
+
`waveApplications`, `waveDashboards`, `waveDataflows`, `waveRecipes`, `waveDatasets` (XMD), flexipages embedding analytics components.
|
|
16
|
+
|
|
17
|
+
## Watch out
|
|
18
|
+
|
|
19
|
+
Lightning reports and dashboards (chapter 11 first section) and CRM Analytics are distinct: document both when both exist.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Commerce (B2B / D2C on Lightning, B2C Commerce connector, Order Management)
|
|
2
|
+
|
|
3
|
+
**Detected by** `WebStore`, `WebCart`, `ProductCatalog`, `BuyerGroup`, `BuyerAccount`, entitlement policies; Order Management by `OrderSummary`, `FulfillmentOrder`, `ReturnOrder`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 5 Functional | Buyer journey (browse, search, cart, checkout, payment, order), account management, reorder; order lifecycle (summary, fulfilment, returns, refunds) |
|
|
10
|
+
| 6 Data | Catalog and categories, products and price books, buyer groups and entitlements, carts, orders and order summaries |
|
|
11
|
+
| 8 UI | Store site (LWR template, components), search configuration, guest browsing |
|
|
12
|
+
| 9 Integrations | Checkout integrations (pricing, inventory, shipping, tax, payment gateway), ERP for orders and stock, product information management |
|
|
13
|
+
| 10 Security | Buyer licences, store guest access, payment data never stored in Salesforce |
|
|
14
|
+
|
|
15
|
+
## Read
|
|
16
|
+
|
|
17
|
+
`objects/WebStore` and commerce objects, store `experiences`/`digitalExperiences`, Apex classes implementing commerce extension points (`commercestorefront`, `sfdc_checkout.*` interfaces), named credentials of payment and tax providers, flows of the checkout.
|
|
18
|
+
|
|
19
|
+
## Draw
|
|
20
|
+
|
|
21
|
+
Sequence of checkout with each external call; state diagram of the order summary.
|
|
22
|
+
|
|
23
|
+
## Watch out
|
|
24
|
+
|
|
25
|
+
B2C Commerce (Salesforce Commerce Cloud on its own platform) is a separate system: treat it as an external system unless the documents say otherwise.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Data Cloud
|
|
2
|
+
|
|
3
|
+
**Detected by** data stream definitions, data model objects (`__dlm`), data lake objects (`__dll`), Data Cloud metadata folders.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 6 Data | Data streams (sources: CRM, ingestion API, cloud storage, Marketing Cloud), data lake and data model objects, mappings, identity resolution rulesets, calculated insights, segments |
|
|
10
|
+
| 9 Integrations | Ingestion connectors and activation targets (Marketing, advertising, CRM), data actions and data graphs used by the CRM (related lists, Agentforce grounding) |
|
|
11
|
+
| 10 Security | Data spaces, permission sets for Data Cloud, consent |
|
|
12
|
+
|
|
13
|
+
## Read
|
|
14
|
+
|
|
15
|
+
`dataStreamDefinitions`, `dataSourceObjects`, `__dlm` / `__dll` objects, `mktCalcInsightObjectDefs`, data graphs, `dataSpaces`; the `data360-schema-get` skill helps.
|
|
16
|
+
|
|
17
|
+
## Draw
|
|
18
|
+
|
|
19
|
+
Flowchart sources → data streams → DLO → DMO → identity resolution → segments / insights → activations.
|
|
20
|
+
|
|
21
|
+
## Watch out
|
|
22
|
+
|
|
23
|
+
Data Cloud configuration is partly outside the metadata API: say what you could not see. Never quote profile data.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Experience Cloud (sites and portals)
|
|
2
|
+
|
|
3
|
+
**Detected by** `networks`, `experiences` / `digitalExperiences` bundles, `sites`, `navigationMenus`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 3 Context | External populations (customers, partners, citizens, employees) and their channel |
|
|
10
|
+
| 8 UI | One `###` per site: audience, template (LWR or Aura), pages and custom components, navigation, branding, languages, mobile |
|
|
11
|
+
| 9 Integrations | Identity (self-registration, SSO, social login), embedded services (messaging), CMS content |
|
|
12
|
+
| 10 Security | Licences (Customer Community, Partner Community…), sharing sets and share groups, guest user access and its sharing rules, external OWD, CSP/CORS for the site, clickjack and session settings |
|
|
13
|
+
|
|
14
|
+
## Read
|
|
15
|
+
|
|
16
|
+
`networks/*.network-meta.xml` (self-registration, login, member profiles), `experiences` / `digitalExperiences` (routes, views, components used), `sites`, `sharingSets`, guest sharing rules (`sharingGuestRules`), profiles with community licences, `navigationMenus`, `cspTrustedSites`.
|
|
17
|
+
|
|
18
|
+
## Draw
|
|
19
|
+
|
|
20
|
+
Context view of the site (external users ↔ site ↔ org ↔ systems); sequence of self-registration or login.
|
|
21
|
+
|
|
22
|
+
## Watch out
|
|
23
|
+
|
|
24
|
+
Guest user access is a security topic: describe it factually in the TAD, put any overexposure in the Improvement Axes. External OWD differs from internal OWD.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Field Service
|
|
2
|
+
|
|
3
|
+
**Detected by** namespace `FSL`, or customised `WorkOrder`, `ServiceAppointment`, `ServiceTerritory`, `ServiceResource`, `MaintenancePlan`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 5 Functional | Work order lifecycle (creation from case or asset, work types, line items), scheduling and dispatch (policies, optimisation), mobile execution (Field Service mobile app, flows, data capture), completion and billing triggers; preventive maintenance plans |
|
|
10
|
+
| 6 Data | Work order / appointment / assigned resource model, territories and operating hours, skills, products consumed and required, assets |
|
|
11
|
+
| 7 Application | Scheduling policies and work rules (`FSL` objects are data, not metadata: ask), automation on appointment status changes |
|
|
12
|
+
| 8 UI | Dispatcher console, Gantt, mobile app configuration (offline priming) |
|
|
13
|
+
| 10 Security | Field service permission sets, territory-based sharing, mobile user licences |
|
|
14
|
+
|
|
15
|
+
## Read
|
|
16
|
+
|
|
17
|
+
`objects/WorkOrder`, `objects/ServiceAppointment`, `objects/ServiceTerritory`, `objects/ServiceResource`, `workTypes`, `FSL__*` references, mobile app extensions (`lwc` with `lightning__GlobalAction` targets), flows launched from the mobile app.
|
|
18
|
+
|
|
19
|
+
## Draw
|
|
20
|
+
|
|
21
|
+
State diagram of appointment statuses; sequence case → work order → appointment → dispatch → mobile completion.
|
|
22
|
+
|
|
23
|
+
## Watch out
|
|
24
|
+
|
|
25
|
+
Scheduling policies, work rules and service objectives are records in `FSL` objects: they are not in the metadata; ask for them or describe them as configuration to confirm.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Industry clouds
|
|
2
|
+
|
|
3
|
+
**Detected by** namespaces or standard industry objects (see `facts.modules.clouds` evidence): Financial Services (`FinServ`, `FinancialAccount`, `ResidentialLoanApplication`), Insurance (`InsurancePolicy`, `Claim`), Health (`HealthCloudGA`, `CarePlan`, `ClinicalEncounter`), Life Sciences, Manufacturing (`SalesAgreement`, `AccountForecast`), Automotive (`Vehicle`), Consumer Goods (`RetailStore`, `Visit`), Communications / Media / Energy & Utilities (`vlocity_cmt`, `ServicePoint`), Public Sector (`IndividualApplication`, `BusinessLicense`), Education (`hed`, `LearnerProfile`), Nonprofit (`npsp`, `GiftTransaction`), Loyalty (`LoyaltyProgram`), Net Zero (carbon footprint objects).
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 4 General | Which industry cloud, which data model version (managed package vs standard objects), which industry features are used (and which are not) |
|
|
10
|
+
| 5 Functional | The industry processes as implemented (examples: onboarding and financial accounts; policy and claims; care plans and referrals; sales agreements and account forecasts; retail execution visits; licensing and permits; admissions and advising; donations and programs; loyalty accrual and redemption) |
|
|
11
|
+
| 6 Data | The industry objects used, with their role and what is custom around them (`data.industry` section); Person Accounts and household or group models |
|
|
12
|
+
| 7 Application | Industry engines used: OmniStudio, Business Rules Engine (decision matrices, expression sets), Document Generation, Action Plans, Industries Interaction Summaries — each only if seen in the metadata |
|
|
13
|
+
| 10 Security | Compliant data sharing (`participant`-based sharing), industry permission set licences |
|
|
14
|
+
|
|
15
|
+
## Read
|
|
16
|
+
|
|
17
|
+
Objects with the namespace or industry standard names, `decisionMatrixDefinitions` and `expressionSetDefinitions` (Business Rules Engine), `actionPlanTemplates`, `documentTemplates`, OmniStudio assets, Person Account settings (`settings/Account.settings-meta.xml`).
|
|
18
|
+
|
|
19
|
+
## Watch out
|
|
20
|
+
|
|
21
|
+
Industry clouds ship hundreds of objects: document only those referenced by local metadata or customised. Data model versions differ (managed package `FinServ__` vs core standard objects): say which one the org uses.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Integration platforms and connected services (MuleSoft, Heroku, Slack, external services, Salesforce Connect)
|
|
2
|
+
|
|
3
|
+
**Detected by** named credentials and hosts (`*.cloudhub.io`, `*.anypoint.mulesoft.com`, `*.herokuapp.com`, `*.slack.com`), `externalServiceRegistrations`, external objects (`__x`) and `dataSources`, Slack metadata or namespaces.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 9 Integrations | The middleware as a system of its own (named in the glossary: « API Gateway », « MuleSoft »), the APIs consumed through it, External Services (OpenAPI-based actions used by flows and agents), Salesforce Connect external objects (data virtualization), Slack integrations (notifications, Slack apps) |
|
|
10
|
+
| 4 General | Position of the middleware in the context view |
|
|
11
|
+
| 10 Security | Credentials (named / external credentials, principals, per-user vs named principal), integration users, mutual TLS certificates (names only) |
|
|
12
|
+
|
|
13
|
+
## Read
|
|
14
|
+
|
|
15
|
+
`namedCredentials`, `externalCredentials`, `externalServiceRegistrations`, `dataSources`, external objects, Apex classes with `callout:`, Integration Procedures with HTTP actions.
|
|
16
|
+
|
|
17
|
+
## Watch out
|
|
18
|
+
|
|
19
|
+
What happens behind the middleware is out of scope unless documented: say « exposed by the API Gateway » rather than guessing the system behind it.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Marketing (Marketing Cloud Connect, Account Engagement, Marketing Cloud on the core platform)
|
|
2
|
+
|
|
3
|
+
**Detected by** namespaces `et4ae5` (Marketing Cloud Connect) or `pi` (Account Engagement / Pardot); Marketing Cloud Growth/Advanced on core shows standard marketing objects and Data Cloud.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 5 Functional | Campaign process: audiences, journeys or engagement programs, sends, tracking back to the CRM, lead scoring and grading, hand-over to sales |
|
|
10
|
+
| 6 Data | `Campaign`, `CampaignMember`, consent objects (`Individual`, `ContactPointTypeConsent`, communication subscriptions), tracking objects of the connector |
|
|
11
|
+
| 9 Integrations | Connector configuration (synchronised objects, triggered sends, business units), direction and frequency, connector user |
|
|
12
|
+
| 10 Security | Connector user and permission sets, consent and unsubscribe handling |
|
|
13
|
+
|
|
14
|
+
## Read
|
|
15
|
+
|
|
16
|
+
`et4ae5__*` / `pi__*` references, `objects/Campaign`, `objects/CampaignMember`, consent objects, connector permission sets, triggered-send configurations.
|
|
17
|
+
|
|
18
|
+
## Draw
|
|
19
|
+
|
|
20
|
+
Sequence CRM → marketing platform → tracking back; flowchart of the lead hand-over.
|
|
21
|
+
|
|
22
|
+
## Watch out
|
|
23
|
+
|
|
24
|
+
The internal configuration of Marketing Cloud (journeys, content, data extensions) is out of the org: put it out of scope unless documents are provided. Never reproduce audiences or personal data.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# OmniStudio
|
|
2
|
+
|
|
3
|
+
**Detected by** `omniScripts`, `omniIntegrationProcedures`, `omniDataTransforms`, `omniUiCard`, or namespaces `omnistudio` / `vlocity_*`.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 7 Application | Role split: OmniScripts (guided journeys), Integration Procedures (server-side orchestration, caching), Data Mappers (extract, load, transform), FlexCards (display); naming (`Type/SubType/Language`); one table per family (generated appendix lists the active versions) |
|
|
10
|
+
| 5 Functional | The journeys implemented as OmniScripts, step by step for the main ones |
|
|
11
|
+
| 9 Integrations | HTTP actions and Remote Actions (Apex) called by Integration Procedures |
|
|
12
|
+
| 12 Operations | Deployment of OmniStudio assets (separate step, activation of versions), runtime (standard vs managed package) |
|
|
13
|
+
|
|
14
|
+
## Read
|
|
15
|
+
|
|
16
|
+
The `type`, `subType`, `language`, `isActive` of each asset; inside the JSON: elements of type `Integration Procedure Action`, `DataRaptor …`, `Remote Action` (Apex class and method), `HTTP Action` (named credential), custom LWC elements (`lwcName`).
|
|
17
|
+
|
|
18
|
+
## Draw
|
|
19
|
+
|
|
20
|
+
Flowchart OmniScript → Integration Procedure → Data Mapper / Apex / HTTP for each main journey.
|
|
21
|
+
|
|
22
|
+
## Watch out
|
|
23
|
+
|
|
24
|
+
Only active versions are documented; several versions of the same asset are normal. Standard runtime (on-platform) vs managed package runtime changes deployment and naming: say which.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Platform Events and Change Data Capture
|
|
2
|
+
|
|
3
|
+
**Detected by** objects ending with `__e`, `platformEventChannels`, `platformEventChannelMembers` (CDC entities), event-triggered flows and triggers.
|
|
4
|
+
|
|
5
|
+
## Document
|
|
6
|
+
|
|
7
|
+
| Chapter | What |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 6 Data | `data.events`: each event (purpose, fields in one line), CDC entities selected |
|
|
10
|
+
| 7 Application | Publishers (Apex `EventBus.publish`, flows, processes) and subscribers (triggers on `__e`, platform-event-triggered flows, external subscribers via Pub/Sub API or CometD) |
|
|
11
|
+
| 9 Integrations | External subscribers and publishers, replay and retention, ordering assumptions |
|
|
12
|
+
|
|
13
|
+
## Draw
|
|
14
|
+
|
|
15
|
+
Sequence publisher → event bus → subscribers (internal and external).
|
|
16
|
+
|
|
17
|
+
## Watch out
|
|
18
|
+
|
|
19
|
+
Publish behaviour (`Publish Immediately` vs `Publish After Commit`) matters for consistency: read the event definition. High-volume events have allocations: mention them as facts.
|