HI Vivek,
To simplify things a bit I will try and summarise your requirements so that we can both understand what you are wanting to achieve.
Payment Requirements:
PR1. Specify a payment type for a product for all account holders. For example
Product 1 is to be paid for with payment type 1 [Visa]
Product 2 is to be paid for with payment type 2 [Mastercard]
Product 3 is to be paid for with payment type 3 [Account Deposit / __external_payment__]
Note:
1. Specifying these generic payment type rules at a system level is not currently supported in either the catalog or in tenant properties.
2. Only one payment type is to be specified for each product, not a set of payment types with a preferred order.
PR2. Record a payment type rule against an account/subscription object. The For example
Product 1 is to be paid for with payment type: Visa
Note:
1. Data formatting / usage conventions. As you point out you could record this custom field | value against either the account or subscription object. A standard naming convention for this custom field [payment-type-rule] needs to be applied consistently to every object you record these values against.
2. You would also need to ensure that these payment type options reflected the payment gateways the tenant had selected. Tenants can activate only a subset of the payment network plugins currently deployed within the system.
3. Different payment plugins can support the same payment type. So you will need to ensure that the rule identifies both the payment gateway / payment type that is to be used.
4. As outlined in the example above the custom field value would need to have at least three sections <product-name><payment-network>< payment-type>
General:
If you are only running Kill Bill with a single payment plugin and have a single biller tenancy these issues are minimised. But as your example provides three payment type methods I assume you have at least three payment plugins deployed.
The other comments you make around plans, alignment rules, and account BCDs are not relevant to the core requirements as I understand them. Also the use of invoicing groups is also not really needed if each subscription has its own billing cycle enabled.
If you simply subscribed the customer to separate product plans with each plan having a monthly billing frequency this would result in the account holder receiving three separate invoices per month, one for each product subscription with each subscription dealing with a different product and payment method type. Subscriptions can be created with any start date/time and allow for backdating and forward dating scenarios that are independent of the account BCD. However it is worth noting that the first subscription you create for an account also sets the account BCD which can never be changed. Typically the start date for a subscription is the same as the date/time it was submitted.
Your suggested implementation would need to attach custom fields to either the invoice / subscription that specified the payment type rule for the product plan. Once the billing cycle is triggered you would have to supply modified invoice and payment plugins to deal with your custom payment method selection logic.
It will be easier to maintain if you ensure that you specify standalone plans having only one product. If you define the plans as base plans other add-ons may complicate your logic.
Hope that helps.
Rgs
Shaun