...
(editable if not payed or validated)
field | type | comment | |||||
HistoryBusinessModel fields | |||||||
subject_type | str |
| |||||
subject_id | uuid/int ? | https://stackoverflow.com/questions/33528098/django-model-one-foreign-key-to-many-tables Picker based on drop down ? (multiple picker displayed based drop down ? ) |
recipient_type | str |
| |||||
recipient_id | uuid/int ? | https://stackoverflow.com/questions/33528098/django-model-one-foreign-key-to-many-tables Picker based on drop down ? (multiple picker displayed based drop down ? ) | |||||
related_invoice_id | uuid | link to invoices | |||||
code | str | or reference for the insurance (editable) | |||||
code_rcp | str | or reference for the recipient (editable) | |||||
code_ext | str | if required for external system integration such as payment systems (editable) | |||||
date_due | date | date on which the payment is due (editable) | |||||
date_invoice | date | Date of the “invoice“ (date of today but editable) | |||||
*dateValidFrom | date | invoice covering service/item from (editable) | |||||
*dateValidTo | date | invoice covering service/item to (editable) | |||||
date_payed | date | Date on which the payment was actually documented as Done (editable) | |||||
amount_discount | float | total of the detail discount (calculated be) | |||||
amount_net | float | Total without tax (calculated be) | |||||
tax_analysis | json |
| |||||
amount_total | float | total net + tax total (calculated be) | |||||
status | int | ENUM: draft, validated, payed, cancelled, deleted (editable ), amended | |||||
currency_rcp_code | str | currency of the recipient (if different) (hidden) | |||||
currency_code | str | currency of insurance (calculated be) (hidden) | |||||
note | bigttext | (editable) | |||||
terms | bigttext | conditions (editable) | |||||
payment_reference | str |
invoiceLineItems
to document the content for the Invoice (editable if invoice not payed or validated)
field | type | comment | |||||
HistoryBusinessModel fields | |||||||
code | str | reference (editable) | |||||
line_type |
| ||||||
line_id | |||||||
invoiceId | UUID | reference to invoice (hidden) | |||||
description | str | (editable) | |||||
details | json | depend of the type, TBD (editable as text) if not json wrap it in {'text':DATA} ← quote must be escaped | |||||
ledger_account | str | from specific payment module (editable) | |||||
quantity | float | (editable) | |||||
unit_price | type | (editable) | |||||
discount | float | to document difference between the std price and the price to be paid, useful for relative pricing (editable) | |||||
tax_rate | Calculation uuid | Calculation to calculate the tax (picker, rule type: tax, subtype *) | |||||
tax_analysis | json |
| |||||
amount_total | float | net +tax (calculated be, updated fe after saving line) | |||||
amount_net | qty * unitprice - discount (calculated be/, updated fe after saving line) |
InvoicePayments
(editable if invoice not in status payed)
To document the payment done on the invoice. out of scope: a payment done for 2 invoice, to support such scenario an “generalPayment“ table need to be created, this table will have sub table with relationships to invoicePayments, once the reconciliation between the different invoice will be done.
field | type | comment |
HistoryModel fields |
| |
Status | int | Accepted / Rejected/refunded (editable) |
code_ext | str | payment reference |
(editable) | ||
label | str | label of the payment (editable) |
code_rcp | str | Reference from the payment system / bank (editable) |
invoiceId | UUID | reference to invoice (hidden) |
code_receipt | str | receipt number (editable) |
amount_payed | float | Amount that need to be matched against business items (fees might be added if there were removed before reaching the system) (editable) |
fees | float | (editable) |
amount_received | float | Amount that is received (may include or not the fees) (editable) |
date_payment | date | (editable) |
invoiceEvents
Read only for all but can add new message
this table will log the event relating to the invoice
...
field
...
type
...
comment
...
HistoryModel fields
...
...
invoiceId
...
UUID
...
Nice to have : addup (only on graphQL querries) mutation logs/history in the event
field | type | comment |
HistoryModel fields |
| |
invoiceId | UUID | reference to invoice |
type | int | (Message / Status / Warning / Payment / Payment error) module |
configuration |
message |
json
str | for status __(“Status change to %s“)) |
[out of scope] invoicedocuments
...
invoicePaymentRefRecieved
invoicePaymentRejected
invoicePaymentRecieved
invoicePaymentRefunded
invoiceCreate (called on save)
invoiceUpdate (called on save)
invoiceDelete
invoiceTaxCalculation
invoiceItemCreate
invoiceItemUpdate
invoiceItemDelete
invoiceItemTaxCalculation
invoiceAmend
invoiceValidateItems
invoiceMatchItems
(payment_reference)
invoiceEventPaymentRejected (msg) msg to event
invoicePaymentRecieved(msg, InvoicePayments) → can update the status to payed (also include rejected payment), only last amendment can be payed
invoicePaymentRefunded(InvoicePayments)→ can update the status to validated (warning the busienss service to be update via signal)
invoicePaymentCanceled(InvoicePayments)
invoiceCreate (called on save)
invoiceUpdate (called on save)
invoiceDelete
invoiceTaxCalculation() calculate tax details by merging the result of invoiceItemTaxCalculation
invoiceItemCreate
invoiceItemUpdate
invoiceItemDelete
invoiceItemTaxCalculation calculate tax details base on the tax_rate rule
nice-to-have invoiceAmend → create new empty invoice and put current idea in “related_invoice“ and set status to amended
invoiceValidateItems → check that we have a business item attached to the invoice are in the right status/ right price: just send a signal, handle by calculation rule, add event if issues
invoiceMatchItems → check that we have a business item attached to the invoice (check if the subject_type / id is not empty and point to a valid database object, check line_id/type if no subject_id)
(not attached to the object)invoiceCreationFromCalculation (will send a signal)
...
1 invoice per policy, with 1 invoiceLineItem, dependants might be documented in the details invoiceItemLine
Invoice:
field | type | comment | |||||
subject | json |
| |||||
recipient | json |
| |||||
code | str | IV-[PRODUCT code]-CHFID | |||||
date_due | date | policy effective date | |||||
date_invoice | date | Date of the enrolment | |||||
*dateValidFrom | date | validFrom: policy effective date | |||||
*dateValidTo | date | validTo: policy expiry date | |||||
amount_discount | float | total of the detail discount | |||||
amount_net | float | Total without tax | |||||
tax_analysis | json |
| |||||
amount_total | float | total net | |||||
status | int | validated | |||||
currency_rcp_code | str | default-curency | |||||
currency_code | str | default-curency-code | |||||
note | bigttext | ||||||
terms | bigttext |
InvoiceItem
field | type | comment | |||||
HistoryBusinessModel fields | validFrom: Policy efective date validTo:Policy exiry date | ||||||
code | str | PRODUCT-code | |||||
description | str | PRODUCT-label | |||||
details | json | Dependant otherName, name, gender, age, relation to insuree | |||||
ledger_account | int | Product premium accounting code | |||||
quantity | float | 1 | |||||
unit_price | type | BASE Policy Value | |||||
discount | float | renewal discount … | |||||
tax_rate | Calculation uuid | null | |||||
tax_analysis | json |
| |||||
amount_total | float | net +tax | |||||
amount_net | qty * unitprice - discount |
Contract:
the invoice of a contract will match the contract value and details.
...
contractApprovedinvoiceCreationFromCalculation
Converters:
Invoice
field | type | comment | |||||
subject | json |
| |||||
recipient | json |
| |||||
code | str | IV-[contract code] | |||||
date_due | date | contract-payment-due | |||||
date_invoice | date | Date of the contract approved | |||||
*dateValidFrom | date | validFrom: contract validFrom | |||||
*dateValidTo | date | validTo:contract validTo | |||||
amount_discount | float | total of the detail discount | |||||
amount_net | float | Total without tax | |||||
tax_analysis | json |
| |||||
amount_total | float | total net | |||||
status | int | validated | |||||
currency_rcp_code | str | default-curency | |||||
currency_code | str | default-curency-code | |||||
note | bigttext | ||||||
terms | bigttext |
invoiceItem
field | type | comment | ||
HistoryBusinessModel fields | validFrom: contractDetails validFrom validTo:contract contractDetails validTo | |||
code | str | Product-code | ||
description | str | product-desc | ||
details | json | Dependant otherName, name, gender, age, relation to insuree | ||
ledger_account | int | Product premium accounting code | ||
quantity | float | 1 | ||
unit_price | type | contractdetail Value | ||
discount | float | |||
tax_rate | Calculation uuid | null | ||
tax_analysis | json |
| ||
amount_total | float | net | ||
amount_net | qty * unitprice - discount |
[out of scope]Claim Co-paiment:
...
search filters on All schema fields but UUID , icontain for message
Add Comment button near the search (see add contract insuree) modal popup with a text field
must: message readonly once created: nice-to-have: user can change only his own message
colunm to show All schema fields but UUID
...