Skip to content

Instantly share code, notes, and snippets.

@gcrsaldanha
Last active January 22, 2026 02:33
Show Gist options
  • Select an option

  • Save gcrsaldanha/b4c51b2622ea724b32771674cd092b93 to your computer and use it in GitHub Desktop.

Select an option

Save gcrsaldanha/b4c51b2622ea724b32771674cd092b93 to your computer and use it in GitHub Desktop.
FA_ISSUER RFI Support Plan

2026-01-21 - Support ENTITY_TYPE_FA_ISSUER in RFI System

Summary

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


Area 1: Listing Portcos in RFI Dashboard

User Story: Investment firm sees FA_ISSUER entities in their RFI dashboard entity list.

Current Blockers

Location Issue
request_for_information_service.py:324 Excludes is_gl_issuer=True
request_for_information_service.py:596-600 Only allows CORPORATION, LLC

Changes Required

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_issuer from 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_ISSUER to allowed_rfi_entity_types set

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_tab URL

1.4 Entity Name Handler

  • File: Same as above
  • Lines: 160-170
  • Change: Add FA_ISSUER name fetching from Entity Link Service

Tests

  • tests/unit/.../services/test_request_for_information_service.py
  • tests/unit/.../api/serializers/test_rfi_entity_serializer.py

Area 2: Submitting RFI Request to FA_ISSUER

User Story: Investment firm can send an RFI request to an FA_ISSUER entity.

Current Blockers

Location Issue
kpis/api/serializers.py:1581 ALLOWED_ENTITY_TYPES only has CORPORATION, LLC

Changes Required

2.1 KPIs Serializer

  • File: eshares/kpis/api/serializers.py
  • Line: 1581
  • Change: Add ENTITY_TYPE_FA_ISSUER to ALLOWED_ENTITY_TYPES

Tests

  • tests/unit/eshares/kpis/api/test_serializers.py

Area 3: Responding via RFI Upload Portal

User Story: PortCo (FA_ISSUER) can submit data through the RFI Upload Portal.

Current State

  • Already supported - Upload portal uses entity_link_id which works for FA issuers
  • No code changes required for basic upload functionality

Potential Changes (if needed)

File Change
helpers/corporation_helper.py:136-151 FA_ISSUER entity link handling (if get_entity_link_id called)

Tests

  • Verify existing upload tests work with FA_ISSUER entity type

Area 4: PI-HQ Tracking (Data Status Service)

User Story: PI-HQ staff can track RFI status and data collection progress for FA_ISSUER entities.

Current Blockers

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

Changes Required

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.execute to support FA_ISSUER

4.3 Forecasts Data Checker

  • File: Same as above
  • Lines: 102-125
  • Change: Extend ForecastsDataChecker.execute to support FA_ISSUER

4.4 Financials Data Checker

  • File: Same as above
  • Lines: 128-161
  • Change: Extend FinancialsDataChecker.execute to 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

  • tests/unit/.../services/test_rfi_data_status_service.py

Area 5: Financials Microservice

User Story: FA_ISSUER financials data can be fetched and displayed in PI-HQ tracking.

Current Blockers

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

Changes Required

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

  • tests/unit/eshares/financials/microservice/test_queries.py

Open Question

  • Does external financials-rpc-service support FA issuer data? (May need team coordination)

Area 6: Reports

User Story: RFI reports and exports correctly include and display FA_ISSUER entities.

Current Blockers

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

Changes Required

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

  • tests/unit/eshares/kpis/api/test_serializers.py
  • tests/unit/.../api/views/test_rfi_views.py

Files by Area

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

Complexity by Area

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

Verification

# 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/

Decisions

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

Jira Task Breakdown

Epic: Data Collection for Paper Companies

Create tickets using acli jira CLI.

Area 1: Dashboard

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

Area 2: Submit RFI

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

Area 3: Upload Portal

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

Area 4: PI-HQ Tracking

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

Area 5: Financials Microservice

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

Area 6: Reports

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

Ticket Creation Commands

# 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...

Suggested Sprint Breakdown

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment