Where this file lives
- This path (
docs/membership/contact-subscription-membership-fees.md) is inside the rakletv3 repo for easy reference during review and maintenance.- This document describes the current implemented behavior for subscription membership fee display on the manager contact membership tab.
Contact Subscription Membership Fees¶
Generated: 2026-05-04
Repo: rakletadmin/rakletv3
Focus: Manager UI subscription fee display on #/manager/contacts/{contactId}/membership
Purpose¶
The manager contact membership tab shows the membership fee for each subscription row so managers can see the amount attached to the subscription plan without opening the subscription details page.
Data model¶
Subscription rows are exposed to the manager UI through CustomPlanImportDto. The DTO carries PlanMembershipFee, Currency, GroupMembershipEnabled, GroupMembershipPriceType, and ParentMembershipId so the UI can render a formatted amount for parent and child subscriptions.
OrganisationMembershipService.ConvertMemberToContactInfo() maps database subscriptions into CustomPlanImportDto for Elasticsearch indexing. V2ContactsController.GetContactInfo() also enriches subscription rows at read time, so older indexed contact documents are corrected in the API response before the manager UI renders them.
Business rules¶
| Scenario | Displayed PlanMembershipFee |
|---|---|
| Standalone subscription | The subscription plan's CustomMemberType.MembershipFee |
| Parent group membership subscription | The parent plan's CustomMemberType.MembershipFee |
Child subscription under a FixedPrice group membership parent |
0 |
Child subscription under a ChargePerSubMember group membership parent |
The child subscription plan's CustomMemberType.MembershipFee |
The amount is formatted with the subscription plan Currency. If a legacy response does not include a subscription currency, the manager UI falls back to OrganizationService.Organization.Currency.
UI behavior¶
contact-membership.html adds a MembershipFee column to the subscription table. The table still renders parent and child rows in the existing flattened order, with child rows visually indented under their parent subscription.
QA checklist¶
- Open a contact with a standalone paid subscription and confirm the subscription table shows that plan's membership fee.
- Open a contact with a
FixedPricegroup membership parent and at least one child subscription. Confirm the parent row shows the parent fee and child rows show0. - Open a contact with a
ChargePerSubMembergroup membership parent and at least one child subscription. Confirm child rows show their own plan fee. - Confirm zero values render as a formatted zero amount, not as
Free.