How edx/enterprise-subsidy works
enterprise-subsidy is a Django service for capturing and balancing enterprise-funded transactions. Its principal workflow exposes subsidy and transaction operations through versioned APIs; subsidy logic obtains content details and pricing, creates ledger transactions, and coordinates enrollment or other fulfillment. Reversal handling also responds to ledger events and can process recent enterprise unenrollments. The graph preserves documented and indexed product areas, but some links are omitted because their implementation was not excerpted; dashed links mark integrations whose wiring is not verified here.
Main entry points: models.py Subsidy and ledger · fulfillment/api.py Fulfillment operations · transaction/api.py Transaction operations · serializers.py API serializers
Components 28
API surface
- Version 1 routes
enterprise_subsidy/apps/api/v1/urls.py - Transaction views
enterprise_subsidy/apps/api/v1/views/transaction.py - Subsidy views
enterprise_subsidy/apps/api/v1/views/subsidy.py - Metadata views
enterprise_subsidy/apps/api/v1/views/content_metadata.py - API serializers
enterprise_subsidy/apps/api/v1/serializers.py - Version 2 routes
enterprise_subsidy/apps/api/v2/urls.py - Deposit views
enterprise_subsidy/apps/api/v2/views/deposit.py - Version 2 transactions
enterprise_subsidy/apps/api/v2/views/transaction.py - Deposit serializers
enterprise_subsidy/apps/api/v2/serializers/deposits.py - Transaction pagination
enterprise_subsidy/apps/api/paginators.py
Subsidy domain
- Subsidy and ledger
enterprise_subsidy/apps/subsidy/models.py - Subsidy operations
enterprise_subsidy/apps/subsidy/api.py - Transaction operations
enterprise_subsidy/apps/transaction/api.py
External services
- Content metadata
enterprise_subsidy/apps/content_metadata/api.py - Enterprise client
enterprise_subsidy/apps/api_client/enterprise.py - Catalog client
enterprise_subsidy/apps/api_client/enterprise_catalog.py - LMS user client
enterprise_subsidy/apps/api_client/lms_user.py - Fulfillment operations
enterprise_subsidy/apps/fulfillment/api.py
Events and reversals
- Ledger event publisher
enterprise_subsidy/apps/core/event_bus.py - Reversal handlers
enterprise_subsidy/apps/transaction/signals/handlers.py - Unenrollment reversal job
enterprise_subsidy/apps/transaction/management/commands/write_reversals_from_enterprise_unenrollments.py
Other components
- API client
- Ledger event source
- Enterprise service
- Catalog service
- LMS
- GEAG service
- Open edX event consumers
Connections 31
- API client → Version 1 routes: calls
- API client → Version 2 routes: calls
- Transaction views → API serializers: uses
enterprise_subsidy/apps/api/v1/views/transaction.py - Transaction views → Transaction pagination: uses
enterprise_subsidy/apps/api/v1/views/transaction.py - Transaction views → Subsidy and ledger: queries
enterprise_subsidy/apps/api/v1/views/transaction.py - API serializers → Subsidy and ledger: serializes
enterprise_subsidy/apps/api/v1/serializers.py - API serializers → Fulfillment operations: uses
enterprise_subsidy/apps/api/v1/serializers.py - Version 2 transactions → Subsidy and ledger: uses
enterprise_subsidy/apps/api/v2/views/transaction.py - Version 2 transactions → Fulfillment operations: uses
enterprise_subsidy/apps/api/v2/views/transaction.py - Version 2 transactions → API serializers: uses
enterprise_subsidy/apps/api/v2/views/transaction.py - Subsidy operations → Subsidy and ledger: operates
enterprise_subsidy/apps/subsidy/api.py - Subsidy and ledger → Content metadata: requests details
enterprise_subsidy/apps/subsidy/models.py - Subsidy and ledger → Enterprise client: requests enrollment
enterprise_subsidy/apps/subsidy/models.py - Subsidy and ledger → Catalog client: uses
enterprise_subsidy/apps/subsidy/models.py - Subsidy and ledger → LMS user client: requests user data
enterprise_subsidy/apps/subsidy/models.py - Subsidy and ledger → Fulfillment operations: requests fulfillment
enterprise_subsidy/apps/subsidy/models.py - Subsidy and ledger → Ledger event publisher: publishes events
enterprise_subsidy/apps/subsidy/models.py - Content metadata → Catalog client: queries
enterprise_subsidy/apps/content_metadata/api.py - Enterprise client → Enterprise service: HTTP requests
enterprise_subsidy/apps/api_client/enterprise.py - Fulfillment operations → GEAG service: creates allocation
enterprise_subsidy/apps/fulfillment/api.py - Transaction operations → Enterprise client: uses
enterprise_subsidy/apps/transaction/api.py - Transaction operations → Fulfillment operations: uses
enterprise_subsidy/apps/transaction/api.py - Transaction operations → Ledger event publisher: publishes events
enterprise_subsidy/apps/transaction/api.py - Ledger event publisher → Open edX event consumers: emits events
enterprise_subsidy/apps/core/event_bus.py - Ledger event source → Reversal handlers: signals reversal
- Reversal handlers → Transaction operations: cancels fulfillment
enterprise_subsidy/apps/transaction/signals/handlers.py - Reversal handlers → Ledger event publisher: publishes reversal
enterprise_subsidy/apps/transaction/signals/handlers.py - Unenrollment reversal job → Enterprise client: fetches unenrollments
enterprise_subsidy/apps/transaction/management/commands/write_reversals_from_enterprise_unenrollments.py - Unenrollment reversal job → Reversal handlers: delegates reversal
enterprise_subsidy/apps/transaction/management/commands/write_reversals_from_enterprise_unenrollments.py - Catalog client → Catalog service: queries
- LMS user client → LMS: queries