- willId: WillId (UUID)
- clientId: ClientId
- willjiniRef: String?
- status: DRAFT | IN_REVIEW | SIGNED | STORED | REVOKED
- content: WillContent (encrypted)
- nominees: List<Nominee>
- witnesses: List<Witness> (min 2)
- createdAt: Instant
- signedAt: Instant?
- lastReviewReminder: LocalDate?
+ draft(content): DomainEvent[WillDrafted]
+ submitForReview(): DomainEvent[WillSubmittedForReview]
+ sign(signatures): DomainEvent[WillSigned]
+ store(): DomainEvent[WillStored]
+ revoke(): DomainEvent[WillRevoked]
+ addNominee(nominee): void
+ updateContent(content): void
- nomineeId: NomineeId
- name: String
- relation: SPOUSE | CHILD | PARENT | SIBLING | OTHER
- aadhaarHash: String (SHA-256)
- sharePercentage: BigDecimal
- assetAllocation: Map<AssetType, Percentage>
- groupId: FamilyGroupId
- name: String
- ownerId: ClientId
- members: Map<ClientId, FamilyRole>
- sharedPortfolios: Set<PortfolioId>
+ addMember(clientId, role): void
+ removeMember(clientId): void
+ changeRole(clientId, newRole): void
+ sharePortfolio(portfolioId): void
+ isAuthorized(clientId, action): Boolean