Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

50 lines
1.6 KiB
Markdown

# Grouped Automatic Invoices Runbook
## Operator Model
Automatic invoices now use a parent/child model:
- parent rows are grouped by `client + invoice window`
- child rows are the atomic execution units
- parent selection means "generate one combined invoice" only when the parent is combinable
When a parent is not combinable, the parent checkbox is disabled and the reason is shown explicitly.
## Select All Semantics
`Select All` is intentionally smart and non-surprising:
- for combinable groups: select the parent row
- for non-combinable groups: select child rows individually
This prevents invalid combined generation while preserving bulk execution.
## Combinability Reasons
A parent can become non-combinable for explicit invoice-scope reasons:
- `PO scope differs`
- `Currency differs`
- `Tax treatment differs`
- `Export shape differs`
Do not assume a disabled parent can be generated as one invoice. Expand the group and select children as needed.
## Preview and Execution
Preview must reflect exact current selection scope:
- combinable parent selection can preview as `1 invoice`
- mixed/incompatible child selection can preview as `N invoices`
Generation must execute exactly the selected parent/child scope and must not implicitly add unselected siblings.
## Troubleshooting
If a group is unexpectedly non-combinable:
1. Expand the parent and inspect child financial badges.
2. Check PO scope compatibility first.
3. Verify currency, tax source, and export shape are aligned.
4. If still blocked, generate at child scope and capture candidate keys for support follow-up.