Enable Fund Admin (FA) issuers (ENTITY_TYPE_FA_ISSUER) to participate in the RFI system alongside corporations and LLCs.
Feature Flag: IRAD_XXXX_RFI_FOR_FA_ISSUER
User Story: Investment firm sees FA_ISSUER entities in their RFI dashboard entity list.
| Location | Issue |
|---|---|
request_for_information_service.py:324 |
Excludes is_gl_issuer=True |
request_for_information_service.py:596-600 |
Only allows CORPORATION, LLC |
1.1 Remove GL Issuer Filter
- File:
eshares/portfolio_analytics/request_for_information/services/request_for_information_service.py - Line: 324
- Change: Remove
not entity.is_gl_issuerfrom filter (gate with feature flag)
1.2 Add FA_ISSUER to Allowed Types
- File: Same as above
- Line: 596-600
- Change: Add
ENTITY_TYPE_FA_ISSUERtoallowed_rfi_entity_typesset
1.3 Portfolio Tab URL Routing
- File:
eshares/portfolio_analytics/request_for_information/api/serializers/rfi_entity_serializer.py - Lines: 80-100
- Change: Add FA_ISSUER case using existing
gl_issuer_entity_link_tabURL
1.4 Entity Name Handler
- File: Same as above
- Lines: 160-170
- Change: Add FA_ISSUER name fetching from Entity Link Service
tests/unit/.../services/test_request_for_information_service.pytests/unit/.../api/serializers/test_rfi_entity_serializer.py
User Story: Investment firm can send an RFI request to an FA_ISSUER entity.
| Location | Issue |
|---|---|
kpis/api/serializers.py:1581 |
ALLOWED_ENTITY_TYPES only has CORPORATION, LLC |
2.1 KPIs Serializer
- File:
eshares/kpis/api/serializers.py - Line: 1581
- Change: Add
ENTITY_TYPE_FA_ISSUERtoALLOWED_ENTITY_TYPES
tests/unit/eshares/kpis/api/test_serializers.py
User Story: PortCo (FA_ISSUER) can submit data through the RFI Upload Portal.
- Already supported - Upload portal uses
entity_link_idwhich works for FA issuers - No code changes required for basic upload functionality
| File | Change |
|---|---|
helpers/corporation_helper.py:136-151 |
FA_ISSUER entity link handling (if get_entity_link_id called) |
- Verify existing upload tests work with FA_ISSUER entity type
User Story: PI-HQ staff can track RFI status and data collection progress for FA_ISSUER entities.
| Location | Issue |
|---|---|
rfi_data_status_service.py:515-518 |
No FA_ISSUER enum mapping |
rfi_data_status_service.py:66-99 |
KpiDataChecker only supports CORPORATION |
rfi_data_status_service.py:102-125 |
ForecastsDataChecker only supports CORPORATION |
rfi_data_status_service.py:128-161 |
FinancialsDataChecker only supports CORPORATION/LLC |
4.1 Entity Type Enum Mapping
- File:
eshares/portfolio_analytics/request_for_information/services/rfi_data_status_service.py - Lines: 515-518
- Change: Add FA_ISSUER mapping to
EntityType.FA_ISSUER
4.2 KPI Data Checker
- File: Same as above
- Lines: 66-99
- Change: Extend
KpiDataChecker.executeto support FA_ISSUER
4.3 Forecasts Data Checker
- File: Same as above
- Lines: 102-125
- Change: Extend
ForecastsDataChecker.executeto support FA_ISSUER
4.4 Financials Data Checker
- File: Same as above
- Lines: 128-161
- Change: Extend
FinancialsDataChecker.executeto support FA_ISSUER
4.5 Admin Display (Optional)
- File:
eshares/portfolio_analytics/request_for_information/admin.py - Lines: 155-156
- Change: Update display text
tests/unit/.../services/test_rfi_data_status_service.py
User Story: FA_ISSUER financials data can be fetched and displayed in PI-HQ tracking.
| Location | Issue |
|---|---|
financials/microservice/queries.py:42-99 |
_request_financials only handles CORPORATION/LLC |
financials/microservice/queries.py:~100+ |
get_organization_financials only handles CORPORATION/LLC |
5.1 Request Financials Handler
- File:
eshares/financials/microservice/queries.py - Lines: 42-99
- Change: Add FA_ISSUER handling in
_request_financials
5.2 Organization Financials
- File: Same as above
- Lines: ~100+
- Change: Add FA_ISSUER entity fetching in
get_organization_financials
tests/unit/eshares/financials/microservice/test_queries.py
- Does external
financials-rpc-servicesupport FA issuer data? (May need team coordination)
User Story: RFI reports and exports correctly include and display FA_ISSUER entities.
| Location | Issue |
|---|---|
kpis/api/serializers.py:618-643 |
Company URL generation only handles CORPORATION/LLC |
kpis/api/serializers.py:651-652 |
Paper company logic only checks LLC |
kpis/api/serializers.py:718-735 |
Update URL generation only handles CORPORATION/LLC |
rfi_views.py:68-77 |
LLC name bulk fetching pattern needs FA_ISSUER equivalent |
info_request.py:931-947 |
Bulk download URL generation |
6.1 RFIEntitySerializer - Company URL
- File:
eshares/kpis/api/serializers.py - Lines: 618-643
- Change: Add FA_ISSUER routing in
get_company_url
6.2 RFIEntitySerializer - Paper Company Logic
- File: Same as above
- Lines: 651-652
- Change: Include FA_ISSUER in paper company checks
6.3 RFIEntitySerializer - Update URL
- File: Same as above
- Lines: 718-735
- Change: Add FA_ISSUER case in
get_update_url
6.4 RFI Views - Entity Name Fetching
- File:
eshares/portfolio_analytics/request_for_information/api/views/rfi_views.py - Lines: 68-77
- Change: Add FA_ISSUER name fetching (similar to LLC name cache pattern)
6.5 Bulk Download URLs
- File:
eshares/portfolio_analytics/request_for_information/models/info_request.py - Lines: 931-947
- Change: Add FA_ISSUER support in bulk download URL generation
6.6 Period Aggregation
- File:
eshares/portfolio_analytics/request_for_information/services/rfi_period_aggregation_service.py - Line: 214
- Change: Verify entity ID grouping works for FA_ISSUER (likely already works)
tests/unit/eshares/kpis/api/test_serializers.pytests/unit/.../api/views/test_rfi_views.py
| Area | Files |
|---|---|
| 1 - Dashboard | request_for_information_service.py, rfi_entity_serializer.py |
| 2 - Submit | kpis/api/serializers.py |
| 3 - Upload Portal | corporation_helper.py (maybe) |
| 4 - PI-HQ Tracking | rfi_data_status_service.py, admin.py |
| 5 - Financials | financials/microservice/queries.py |
| 6 - Reports | kpis/api/serializers.py, rfi_views.py, info_request.py, rfi_period_aggregation_service.py |
| Area | Complexity | Reason |
|---|---|---|
| 1 - Dashboard | Medium | Filter removal + serializer changes |
| 2 - Submit RFI | Low | Single constant addition |
| 3 - Upload Portal | Low | Already works |
| 4 - PI-HQ Tracking | Medium | Multiple data checkers |
| 5 - Financials | High | External service dependency |
| 6 - Reports | Medium | Multiple serializer methods + URL generation |
# Unit tests
docker compose run --rm unit-tests pytest tests/unit/eshares/portfolio_analytics/request_for_information/
# Backend tests
docker compose run --rm backend-tests pytest tests/backend/eshares/portfolio_analytics/request_for_information/| Question | Decision |
|---|---|
| Feature flag? | ✅ Yes - IRAD_XXXX_RFI_FOR_FA_ISSUER |
| KPI support? | ✅ Full support |
| Portfolio URL? | ✅ Existing gl_issuer_entity_link |
| Reporting frequency? | ✅ Same as current |
| Name source? | ✅ Entity Link Service |
Create tickets using acli jira CLI.
Title: [IRAD-XXXX] Display FA_ISSUER entities in RFI Dashboard
Type: Story
Labels: rfi, fa-issuer, dashboard
Depends on: Foundation ticket
Description:
Investment firms should see FA_ISSUER (paper company) entities in their RFI dashboard.
Changes:
- Remove `is_gl_issuer` filter in request_for_information_service.py:324 (gated by FF)
- Add FA_ISSUER to allowed_rfi_entity_types in request_for_information_service.py:596
- Add FA_ISSUER URL routing in rfi_entity_serializer.py:80-100
- Add FA_ISSUER name handling in rfi_entity_serializer.py:160-170
Acceptance Criteria:
- [ ] FA_ISSUER entities appear in dashboard when FF enabled
- [ ] Portfolio links work correctly
- [ ] Entity names display correctly
- [ ] Unit tests added/updated
Title: [IRAD-XXXX] Allow submitting RFI requests to FA_ISSUER entities
Type: Story
Labels: rfi, fa-issuer
Depends on: Area 1 ticket
Description:
Investment firms should be able to send RFI requests to FA_ISSUER entities.
Changes:
- Add FA_ISSUER to ALLOWED_ENTITY_TYPES in kpis/api/serializers.py:1581
Acceptance Criteria:
- [ ] Can send RFI to FA_ISSUER entity
- [ ] Unit tests added/updated
Title: [IRAD-XXXX] Verify RFI Upload Portal works for FA_ISSUER entities
Type: Task
Labels: rfi, fa-issuer, upload-portal
Depends on: Area 2 ticket
Description:
Verify that FA_ISSUER portcos can submit data through RFI Upload Portal.
Upload portal uses entity_link_id (UUID) which should already work.
Changes (if needed):
- Update corporation_helper.py:136-151 for FA_ISSUER entity link handling
Acceptance Criteria:
- [ ] FA_ISSUER portco can access upload portal
- [ ] File uploads work correctly
- [ ] Existing tests pass with FA_ISSUER
Title: [IRAD-XXXX] Add FA_ISSUER support to RFI data status tracking
Type: Story
Labels: rfi, fa-issuer, pi-hq
Depends on: Foundation ticket
Description:
PI-HQ staff should be able to track RFI status for FA_ISSUER entities.
Changes:
- Add FA_ISSUER enum mapping in rfi_data_status_service.py:515-518
- Extend KpiDataChecker for FA_ISSUER (lines 66-99)
- Extend ForecastsDataChecker for FA_ISSUER (lines 102-125)
- Extend FinancialsDataChecker for FA_ISSUER (lines 128-161)
- Update admin display (optional)
Acceptance Criteria:
- [ ] Data status updates work for FA_ISSUER RFIs
- [ ] KPI/Forecasts/Financials checkers support FA_ISSUER
- [ ] Unit tests added/updated
Title: [IRAD-XXXX] Add FA_ISSUER support to financials microservice
Type: Story
Labels: rfi, fa-issuer, financials
Depends on: Area 4 ticket
Description:
Financials microservice should fetch and return data for FA_ISSUER entities.
Changes:
- Add FA_ISSUER handling in _request_financials (queries.py:42-99)
- Add FA_ISSUER entity fetching in get_organization_financials
Blockers:
- Verify external financials-rpc-service supports FA issuer data
Acceptance Criteria:
- [ ] Financials data fetched for FA_ISSUER entities
- [ ] Unit tests added/updated
Title: [IRAD-XXXX] Add FA_ISSUER support to RFI reports and exports
Type: Story
Labels: rfi, fa-issuer, reports
Depends on: Area 1 ticket
Description:
RFI reports and exports should correctly display FA_ISSUER entities with proper URLs and names.
Changes:
- Add FA_ISSUER routing in RFIEntitySerializer.get_company_url (kpis/api/serializers.py:618-643)
- Include FA_ISSUER in paper company logic (kpis/api/serializers.py:651-652)
- Add FA_ISSUER case in RFIEntitySerializer.get_update_url (kpis/api/serializers.py:718-735)
- Add FA_ISSUER name fetching in rfi_views.py:68-77 (similar to LLC cache pattern)
- Add FA_ISSUER support in bulk download URLs (info_request.py:931-947)
- Verify period aggregation works (rfi_period_aggregation_service.py:214)
Acceptance Criteria:
- [ ] FA_ISSUER entities appear in reports with correct company URLs
- [ ] FA_ISSUER names display correctly (fetched from Entity Link Service)
- [ ] Update URLs work for FA_ISSUER entities
- [ ] Bulk download includes FA_ISSUER files
- [ ] Period aggregation correctly groups FA_ISSUER data
- [ ] Unit tests added/updated
# Create Epic first
acli jira createIssue --project IRAD --type Epic --summary "Data Collection for Paper Companies" --description "Enable FA_ISSUER (paper company) entities to participate in RFI system"
# Then create tickets linked to epic (replace IRAD-EPIC with actual epic key)
# Foundation
acli jira createIssue --project IRAD --type Task --summary "[Foundation] Add FA_ISSUER feature flag + EntityType enum" --parent IRAD-EPIC
# Area 1-5 stories...| Sprint | Tickets | Deliverable |
|---|---|---|
| 1 | Area 1 + Area 2 | FA_ISSUER visible + can send RFI |
| 2 | Area 3 + Area 4 + Area 6 | Upload works + PI-HQ tracking + Reports |
| 3 | Area 5 | Full financials support |