feat(ai): add tenant-safe hierarchical expense learning

This commit is contained in:
caoxiaozhu
2026-07-16 14:30:41 +08:00
parent 6bdf65bc24
commit ee88a36baf
65 changed files with 6909 additions and 232 deletions

View File

@@ -159,6 +159,42 @@ def test_untrusted_application_path_does_not_write_learning_ledger() -> None:
assert list(db.scalars(select(WorkflowOutcome)).all()) == []
def test_non_default_tenant_direct_submit_creates_same_tenant_case_link() -> None:
session_factory = build_session_factory()
with session_factory() as db:
request = build_request(
run_id="application-direct-submit-tenant",
tenant_id="tenant-direct-submit",
)
service = UserAgentService(db)
submitted = service._create_expense_application_record(
request,
build_facts(),
submit=True,
learning_current_user=service._build_application_current_user(request),
)
link = db.scalar(
select(ExpenseCaseLink).where(
ExpenseCaseLink.resource_type == "expense_claim",
ExpenseCaseLink.resource_id == submitted.id,
)
)
event = db.scalar(
select(BusinessEvent).where(
BusinessEvent.aggregate_type == "expense_claim",
BusinessEvent.aggregate_id == submitted.id,
BusinessEvent.event_type == "application_submitted",
)
)
assert submitted.status == "submitted"
assert link is not None
assert link.tenant_id == "tenant-direct-submit"
assert event is not None
assert event.tenant_id == "tenant-direct-submit"
assert event.expense_case_id == link.expense_case_id
@pytest.mark.parametrize(
"preview_patch",
[