dodil/erp-method

erp/phase/discover.md

Phase 1 · Discover: which bricks, at which tags?

Produce the candidate modules, the bricks and tags behind each, and the reference process shown to the customer. Back: dodil://erp/build.

Steps

  1. Read the catalogue: index.json (modules[]: id, maturity, repos), then modules/<id>/module.yaml for each module in scope. On the blog the same files are /modules/index.json and /modules/<id>/spec.yaml.
  2. Check reference.repos. A module with repos EXISTS as bricks: you will clone and compose them. Do not write your own tables, models or routes for it (lab, 2026-10-17: a model that skipped this rebuilt HR from scratch, 3 runs of 3).
  3. A module with no repos (gl, ar, purchasing) has no brick yet: generate a new brick in the brick shape on erp-platform (lifecycle, Transition). A module in catalog.yaml as pending has no spec: start from the modules its start_from names.
  4. Read customer_varies in each spec: the questions for phase 2. Note standard: (a named authority) and typical: (what we have seen) on each.
  5. Show the reference process from the brick itself, for each PCF id in scope, never from the spec in your own words (lab, 2026-10-18: a builder that did described a process the brick does not run, and signed a hash of its notes). For HR, in the project folder (local, no login; this folder is also where the build happens):
    uvx --from git+https://git.dodil.io/dodil/erp-platform.git@v0.9.13 erp-compose init hr
    mkdir -p config && echo '- { use_case: install_localisation_pack, args: { pack: gb, with_playbooks: true } }' > config/hr.calls.yaml
    uvx --from git+https://git.dodil.io/dodil/erp-platform.git@v0.9.13 erp-compose process --module hr --playbook employee-onboarding --calls config/hr.calls.yaml
    
    It writes processes/employee-onboarding.bpmn (with scenarios.json and deviations.json) and prints its short hash. Do it before your first answer, without asking: it is local and changes nothing of theirs. Then PASTE into your message the diagram's tasks in order, by their exact names, with the lane (who does it) of each, read from that file; never point them at a viewer instead (lab, 2026-10-18: "open it at bpmn.io, I haven't looked at it" is not showing). For other modules, /modules/<id>/process.bpmn (not published yet: describe the reference flow in words). Every node is a default: configurable, best practice, or kept.
  6. Record in ERP_<MODULE>.md Frame: modules, bricks and tags, reference versions.

Example

curl -s https://blog.dodil.io/modules/index.json | python3 -c \
  'import json,sys; [print(m["id"], m["maturity"], [r["name"]+"@"+r["tag"] for r in m.get("repos",[])]) for m in json.load(sys.stdin)["modules"]]'
# hr tested ['brick-hr@v0.5.3', 'brick-business-partner@v0.3.2', 'erp-platform@v0.9.0']

Done when

  • Every module in scope has its bricks and tags recorded, or "generated: no brick".
  • The customer has seen the reference process and said "yes, like that" or "not like that".
  • The estimate you gave reflects which modules exist and which are generated.

Next: dodil://erp/phase/show