event

Commit Submitted

Published when a sales rep submits their forecast commitment for a quarter.

Event

Event Overview

Fired when a rep submits their numbers through POST /tenants/{tenant_id}/forecast/submit. The endpoint is guarded by require_submit_permission, and a single submit call emits both this event and Commit Finalized.

Envelope

FieldValue
Bus{env}-rio-events (but see the service page - this repo defaults to rio-commit-events)
sourcerio.commit (api/events/schemas.py:11)
detail-typeCommit Submitted (api/events/schemas.py:20)
detail.event_namerio.commit.commit.submitted
detail.entity_typecommit
detail.actionsubmitted
Emitted atapi/services/forecast_service.py:1859-1864

What the payload carries

Only the audit envelope. The rich domain fields (amounts, breakdowns, quarter labels) are dropped before publishing - see the service page. before and after are always null.

Who consumes it

Only the Audit Service, through its catch-all rule matching any source beginning with rio. No service subscribes to it specifically.

Payload Schema

Event-driven architecture documentation: RIO

JSON Schema

19 properties

Published when a sales rep submits their forecast commitment for a quarter. Envelope built by _enrich_event_detail (rio-commit-service/api/events/eventbridge.py:36-96) and published on source `rio.commit` with detail-type `Commit Submitted`.

event_idstring<uuid>
required
event_namestringconstant: rio.commit.commit.submitted
required
source_servicestringconstant: rio.commit
required
tenant_idstring
required
domainstringconstant: commit
required
subdomainstringconstant: commit
entity_typestringconstant: commit
required
entity_idstring
required

The forecast submission id.

actionstringconstant: submitted
required
statusstring
required
actor_typestringconstant: user
required
actor_idstring
required
occurred_atstring<date-time>
required
correlation_idstring | null

Taken from EventContextMiddleware contextvars.

request_idstring | null
beforenull

Always null - the domain models never populate it.

afternull

Always null - the domain models never populate it.

error_codestring | null
error_messagestring | null