Field Mappings for Sales Invoice to Electronic Invoice
When you send an Accounting sales invoice as an electronic invoice, FinancialForce converts it to an internal structured data format before passing it to Storecove. Storecove then converts it to the format required by the recipient.
The table below shows how fields on a sales invoice are mapped to the internal format, and then to Storecove. You can override all fields and add new mappings in the mapping UI. Some fields are populated with hardcoded values. You can also configure the field mappings. To see how to configure the sales credit note field mappings, see Managing Electronic Invoice Mappings.
Header Field Mapping
The table below lists the header field mappings. Some fields are populated with hard-coded values.
Sales Invoice |
ElectronicInvoicingService.Document |
Storecove InvoiceSubmission |
Notes |
---|---|---|---|
<not mapped, but available for mapping to a custom field> | CreatePrimaryImage | createPrimaryImage | Hardcoded as 'true'. |
c2g__EInvoiceIdentifier__c | DocumentIdentifier | idempotencyGuid | |
<not mapped, but available for mapping to a custom field> | <not supported> | attachments | Although attachments are not currently supported in the e-invoice, a PDF copy of the invoice can still be sent as usual. |
c2g__Account__c | AccountingCustomerParty.AccountId | invoice.accountingCustomerParty.accountId | |
c2g__Account__r.Name | AccountingCustomerParty.CompanyName | invoice.accountingCustomerParty.party.companyName | |
c2g__Account__r.c2g__CODAFinanceContact__c | AccountingCustomerParty.ContactId | invoice.accountingCustomerParty.party.contact.id | |
c2g__Account__r.c2g__CODAFinanceContact__r.Name | AccountingCustomerParty.ContactName | invoice.accountingCustomerParty.party.contact.lastName | |
c2g__Account__r.c2g__CODAInvoiceEmail__c | AccountingCustomerParty.EmailAddress | invoice.accountingCustomerParty.party.contact.email | |
c2g__Account__r.Phone | AccountingCustomerParty.Telephone | invoice.accountingCustomerParty.party.contact.phone | |
c2g__Account__r.BillingStreet | AccountingCustomerParty.PostalAddress.AddressLine1 | invoice.accountingCustomerParty.party.address.street1 | |
<not mapped, but available for mapping to a custom field> | AccountingCustomerParty.PostalAddress.AddressLine2 | invoice.accountingCustomerParty.party.address.street2 | |
c2g__Account__r.BillingCity | AccountingCustomerParty.PostalAddress.CityName | invoice.accountingCustomerParty.party.address.city | |
<not mapped, but available for mapping to a custom field> | AccountingCustomerParty.PostalAddress.County | invoice.accountingCustomerParty.party.address.county | |
c2g__Account__r.BillingCountry | AccountingCustomerParty.PostalAddress.Country | - | |
c2g__Account__r.c2g__CODAECCountryCode__c | AccountingCustomerParty.PostalAddress.CountryIdentificationCode | invoice.accountingCustomerParty.party.address.country | |
c2g__Account__r.BillingPostalCode | AccountingCustomerParty.PostalAddress.PostalCode | invoice.accountingCustomerParty.party.address.zip | |
c2g__Account__r.fferpcore__AccountExtension__r[0].fferpcore__EInvoicingAddressIdentifier__c | AccountingCustomerParty.PublicIdentifiers[0].Id | invoice.accountingCustomerParty.publicIdentifiers[0].id | This is populated with the value from the corresponding Routing.EIdentifiers field. |
c2g__Account__r.fferpcore__AccountExtension__r[0].fferpcore__EInvoicingSchemeID__c | AccountingCustomerParty.PublicIdentifiers[0].Scheme | invoice.accountingCustomerParty.publicIdentifiers[0].scheme | This is populated with the value from the corresponding Routing.EIdentifiers field. |
c2g__Account__r.c2g__CODAVATRegistrationNumber__c | AccountingCustomerParty.PublicIdentifiers[1].Id | invoice.accountingCustomerParty.publicIdentifiers[1].id | This is populated with the value from the corresponding Routing.EIdentifiers field. |
c2g__Account__r.c2g__CODAECCountryCode__c | AccountingCustomerParty.PublicIdentifiers[1].Scheme | invoice.accountingCustomerParty.publicIdentifiers[1].scheme |
This is populated with the value from the corresponding Routing.EIdentifiers field. Country code is used to work out the appropriate scheme for a VAT identifier for this country (in FFA code). |
<not mapped, but available for mapping to a custom field> | AccountingSupplierParty.ContactName | invoice.accountingSupplierParty.party.contact.lastName | |
c2g__OwnerCompany__r.c2g__ContactEmail__c | AccountingSupplierParty.EmailAddress | invoice.accountingSupplierParty.party.contact.email | |
c2g__OwnerCompany__r.c2g__Phone__c | AccountingSupplierParty.Telephone | invoice.accountingSupplierParty.party.contact.phone | |
Name | InvoiceNumber | invoice.invoiceNumber | |
Hardcoded - INVOICE | DocumentType | - | In Storecove, prices are negated if type is CREDIT_NOTE. |
c2g__InvoiceDate__c | IssueDate | invoice.issueDate | |
c2g__InvoiceDate__c | TaxPointDate | ||
c2g__DueDate__c | DueDate | invoice.dueDate | |
c2g__InvoiceTotal__c | DocumentTotal | invoice.amountIncludingVat | Amount is negated if the document is a credit note. |
c2g__CustomerReference__c | CustomerReference | invoice.buyerReference | |
c2g__CustomerReference__c | CustomerOrderReference | invoice.orderReference | |
<not mapped, but available for mapping to a custom field> | ConsumerTaxMode | invoice.consumerTaxMode | Hardcoded as 'false'. |
c2g__Currency__c | DocumentCurrencyCode | invoice.documentCurrencyCode | |
c2g__OwnerCompany__r.c2g__EInvoicingLegalEntityID__c | LegalEntityId | legalEntityId | Do not override this mapping because this field is validated prior to sending. |
c2g__Account__r.fferpcore__AccountExtensions__r[0].fferpcore__EInvoicingAddressIdentifier__c | Routing.EIdentifiers[0].Id | routing.eIdentifiers[0].id | This is hard coded to map to the specified field on the Account. |
c2g__Account__r.fferpcore__AccountExtensions__r[0].fferpcore__EInvoicingSchemeID__c | Routing.EIdentifiers[0].Scheme | routing.eIdentifiers[0].scheme | This is hard coded to map to the specified field on the Account. |
c2g__Account__r.c2g__CODAVATRegistrationNumber__c | Routing.EIdentifiers[1].Id | routing.eIdentifiers[1].id | This is configurable via Manage E-Invoice Mappings. Map the source field to Routing ID. |
c2g__Account__r.c2g__CODAECCountryCode__c | Routing.EIdentifiers[1].Scheme | routing.eIdentifiers[1].scheme |
This is configurable via Manage E-Invoice Mappings. Map the source field to Routing Scheme. Country code is used to work out the appropriate scheme for a VAT identifier for this country. |
c2g__Account__r.c2g__CODAInvoiceEmail__c | Routing.Emails[0] | routing.emails | This is configurable via Manage E-Invoice Mappings. Map the source field to Routing Email. |
<not mapped, but available for mapping to a custom field> | AccountingCostCentre | invoice.accountingCost | |
<not mapped, but available for mapping to a custom field> | AllowanceCharges | invoice.allowanceCharges | |
<not mapped, but available for mapping to a custom field> | PrepaidAmount | invoice.prepaidAmount | Amount is negated if the document is a credit note. |
<not mapped, but available for mapping to a custom field> | BillingReference | invoice.billingReference | |
<not mapped, but available for mapping to a custom field> | ContractDocumentReference | invoice.contractDocumentReference | |
<not mapped, but available for mapping to a custom field> | Note | invoice.note | |
<not mapped, but available for mapping to a custom field> | InvoicePeriod.StartDate | invoice.invoicePeriod | Two source fields can be mapped to this particular Storecove field (see example below) |
<not mapped, but available for mapping to a custom field> | InvoicePeriod.EndDate | invoice.invoicePeriod | Two source fields can be mapped to this particular Storecove field (see example below) |
<not mapped, but available for mapping to a custom field> | PaymentMeans | invoice.paymentMeansArray | |
<not mapped, but available for mapping to a custom field> | Delivery.ActualDate | invoice.delivery.actualDate | |
<not mapped, but available for mapping to a custom field> | Delivery.Quantity | invoice.delivery.quantity | |
<not mapped, but available for mapping to a custom field> | Delivery.Location.Id | invoice.delivery.location.id | |
<not mapped, but available for mapping to a custom field> | Delivery.Location.SchemeAgencyId | invoice.delivery.location.schemeAgencyId | |
<not mapped, but available for mapping to a custom field> | Delivery.Location.SchemeId | invoice.delivery.location.schemeId | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress | invoice.delivery.location.address | |
<not mapped, but available for mapping to a custom field> | PaymentTerms | invoice.paymentTerms | |
<not mapped, but available for mapping to a custom field> | ProjectReference | invoice.projectReference | |
<not mapped, but available for mapping to a custom field> | SalesOrderId | invoice.salesOrderId | |
<not mapped, but available for mapping to a custom field> | TaxPointDate | invoice.taxPointDate | |
<not mapped, but available for mapping to a custom field> | TaxSubtotals | invoice.taxSubtotals | These are worked out automatically from the taxes on the lines. |
<not mapped, but available for mapping to a custom field> | UblExtensions | invoice.ublExtensions | |
<not mapped, but available for mapping to a custom field> | - | invoice.taxSystem | Hardcoded to either 'tax_line_percentages' or 'tax_no_tax', depending on whether there is any tax information. |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.AddressLine1 | invoice.delivery.location.address.street1 | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.AddressLine2 | invoice.delivery.location.address.street2 | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.CityName | invoice.delivery.location.address.city | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.County | invoice.delivery.location.address.county | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.Country | invoice.delivery.location.address.country | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.CountryIdentificationCode | invoice.delivery.location.address.country | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress.PostalCode | invoice.delivery.location.address.zip |
Example for InvoicePeriod Field Mapping
This example shows how to map the InvoicePeriod.StartDate and InvoicePeriod.EndDate custom date fields to the invoice document's invoice.invoicePeriod field. Two source fields are mapped to a single target field. When the mapping happens, the InvoicePeriod.StartDate and InvoicePeriod.EndDate field values are combined together and mapped to the invoice.invoicePeriod target field.
For Example:
The InvoicePeriod.StartDate is 2020-12-23 and the InvoicePeriod.EndDate is 2021-12-25. Both the start and end dates will be combined together as 2020-12-23 - 2021-12-25 and then mapped to invoice.invoicePeriod target field.
Line Field Mapping
The table below lists the line field mappings. Some fields are populated with hard-coded values.
Sales Invoice Line Item |
ElectronicInvoicingService.DocumentLine |
Storecove InvoiceLine |
Notes |
---|---|---|---|
c2g__LineNumber__c | LineId | lineId | |
c2g__LineDescription__c | Description | description | |
c2g__Product__r.Name | ItemName | name | |
c2g__ProductCode__c | SellersItemIdentification | sellersItemIdentification | |
c2g__UnitPrice__c | UnitPrice | itemPrice | Amount is negated if the document is a credit note. |
c2g__Quantity__c | Quantity | quantity | |
c2g__NetValue__c | NetValue | amountExcludingVat | Amount is negated if the document is a credit note. Rounded to 2 decimal places. |
c2g__TaxValue1__c | TaxBreakdown[0].Amount | taxes_duties_fees[0].amount | Amount is negated if the document is a credit note. Rounded to 2 decimal places. |
c2g__OwnerCompany__r.c2g__ECCountryCode__c | TaxBreakdown[0].CountryIdentificationCode | taxes_duties_fees[0].country | |
c2g__TaxRate1__c | TaxBreakdown[0].Percent | taxes_duties_fees[0].percentage | Rounded to 2 decimal places. |
c2g__OwnerCompany__r.EInvoicingTaxCategory__c | TaxBreakdown[0].TaxCode | taxes_duties_fees[0].category | |
c2g__TaxValue2__c | TaxBreakdown[1].Amount | taxes_duties_fees[1].amount | Amount is negated if the document is a credit note. Rounded to 2 decimal places. |
c2g__OwnerCompany__r.c2g__ECCountryCode__c | TaxBreakdown[1].CountryIdentificationCode | taxes_duties_fees[1].country | |
c2g__TaxRate2__c | TaxBreakdown[1].Percent | taxes_duties_fees[1].percentage | Rounded to 2 decimal places. |
c2g__OwnerCompany__r.EInvoicingTaxCategory__c | TaxBreakdown[1].TaxCode | taxes_duties_fees[1].category | |
c2g__TaxValue3__c | TaxBreakdown[2].Amount | taxes_duties_fees[2].amount | Amount is negated if the document is a credit note. Rounded to 2 decimal places. |
c2g__OwnerCompany__r.c2g__ECCountryCode__c | TaxBreakdown[2].CountryIdentificationCode | taxes_duties_fees[2].country | |
c2g__TaxRate3__c | TaxBreakdown[2].Percent | taxes_duties_fees[2].percentage | Rounded to 2 decimal places. |
c2g__OwnerCompany__r.EInvoicingTaxCategory__c | TaxBreakdown[2].TaxCode | taxes_duties_fees[2].category | |
<not mapped, but available for mapping to a custom field> | AccountingCostCentre | accountingCost | |
<not mapped, but available for mapping to a custom field> | AdditionalItemProperties | additionalItemProperties | |
<not mapped, but available for mapping to a custom field> | DiscountAmount | allowanceCharge | Value is negated, unless the document is a credit note. |
<not mapped, but available for mapping to a custom field> | CustomerItemIdentification | buyersItemIdentification | |
<not mapped, but available for mapping to a custom field> | Period.StartDate | invoicePeriod | |
<not mapped, but available for mapping to a custom field> | Period.StartDate | invoicePeriod | |
<not mapped, but available for mapping to a custom field> | OrderLineReferenceLineId | orderLineReferenceLineId | |
<not mapped, but available for mapping to a custom field> | UnitCode | quantityUnitCode | |
<not mapped, but available for mapping to a custom field> | StandardItemIdentification | standardItemIdentification | |
<not mapped, but available for mapping to a custom field> | StandardItemIdentificationSchemeAgencyId | standardItemIdentificationSchemeAgencyId | |
<not mapped, but available for mapping to a custom field> | StandardItemIdentificationSchemeId | standardItemIdentificationSchemeId | |
<not mapped, but available for mapping to a custom field> | Delivery.ActualDate | delivery.actualDate | |
<not mapped, but available for mapping to a custom field> | Delivery.Quantity | delivery.quantity | |
<not mapped, but available for mapping to a custom field> | Delivery.Location.Id | delivery.location.id | |
<not mapped, but available for mapping to a custom field> | Delivery.Location.SchemeAgencyId | delivery.location.schemeAgencyId | |
<not mapped, but available for mapping to a custom field> | Delivery.Location.SchemeId | delivery.location.schemeId | |
<not mapped, but available for mapping to a custom field> | DeliveryAddress | delivery.location.address |
Notes About Line-Level Tax Details
- A sales invoice line item can have up to three taxes but Storecove only handles one. If you populate the sales invoice line item fields for more than one tax, Storecove will report an error.
- The E-Invoicing Tax Category field on the Accounting Company (c2g__OwnerCompany__r.EInvoicingTaxCategory__c) is a picklist of values specified by Storecove. For the list of possible values, see Storecove's API documentation for tax category:
https://www.storecove.com/docs/#_openapi_tax