After Exporting
When you export, AOS generates a CSV file with your invoice and invoice line data. Typically the file is sent to an S3 bucket or S/FTP directory where your internal IT team or partners then creates processes to consume the data. After the data is sent out of AOS for invoicing, a few capabilities existing in AOS:
-
An Export Control File that can be consumed to verify export data
-
Adjusting Invoices to account for credits or overrides made outside AOS while preserving the original locked values
-
The Financial System Data Pull operation to import invoice level status information.
Export Control File
When exporting an invoice to a Financial System (e.g., S3), the system also generates and sends a companion Control File that you can use to programmatically validate the invoice export file. By default, a CSV file is generated. However, an Administrator can configure this as a PDF file the System Configuration module under Module Settlings > Finance > Control File as PDF. When the Control File as PDF setting is True, a PDF of an image of the CSV output is generated to ensure it cannot be tampered with.
The control file has the same name as the file it describes but with “CONTROLFILE” before the file extension. For example:
-
Invoice export file name:
FinanceTotalFieldList-20250429T041339Z.CSV
-
Companion control file name:
FinanceTotalFieldList-20250429T041339Z-CONTROLFILE.CSV
The control file contains only two rows. The first row shows headings and the second rows shows values as follows:
Header |
Description |
---|---|
Filename |
This shows the file name of the corresponding export file. |
CreatedDateTime |
This is the date and time when the export occurred. This will convert to the time zone of the user who triggered the export, whereas the time stamp in the file name is always in UTC to ensure uniqueness. |
ExportStatus |
This will almost always say Complete or else the export file wouldn't have been delivered. There are some internal cases where it may contain error conditions, but those would not be surfaced to the file that is actually delivered. |
Checksum |
This is an MD5 hash alphanumeric value used to verify the integrity of the export file after it was transferred to the server. |
RecordCount |
This is a count of the number of rows in the export file, excluding the heading row. |
InvoiceCount |
This is a count of the number of invoices, which would be a distinct count of the Invoice ID column. |
Total_Net_Invoice_Amount |
This is the sum of the Net Invoice Amount column across all rows in the export, regardless of currency. It is not a sum of the Total Net Invoice Amount column that is already summing Net Invoice Amount per invoice. |
Total_Invoice_Units |
This is the sum of the Invoice Units column across all rows in the export, regardless of unit type. It is not a sum of the Total Invoice Units column that is already summing Invoice Units per invoice. |
When exporting for a local download only, the control file is not generated. When exporting for both a local download and a Financial System distribution, both the export file and its control file appear as notifications for download.
Adjusting Invoices
After an invoice is locked, its numbers are finalized. However, there are certain cases where after sending invoice data, you need to make adjustments based on client feedback or other issues. The Finance module provides the ability to make adjustments that add or subtract from the values you locked, while maintaining a record of those locked numbers. Depending on your company policies, you can either use the adjustments capabilities or you can unlock the invoices and change/override the original invoice numbers.
The terms overriding and adjusting do not mean the same thing in the Finance module.
-
Overriding an invoice means modifying the values AOS calculated before it is locked. While the audit preserves a record of the change, the before and after of the change cannot be exported and used in reports. Only the value you change to is available for exporting and reporting.
-
Adjusting an invoice is done while an invoice is locked to handle changes required after the invoice is sent or finalized. The locked numbers are preserved along with the positive or negative number that you apply to that locked number.
Enabling Adjustments
By default, adjustments are not enabled, but an Administrator can turn them on for specific invoicing organizations through the System Configuration module. When you open an organization that has the Invoicing Organization tab enabled, a few options are available:
-
Post Lock Adjustments controls post lock adjustments, when you need to change Finance values after an invoice has already been sent:
-
Disable means adjustments do not appear within the Finance module UI. This keeps the user experience simpler for customers who do not use the feature and prevents any users from entering adjustments in the Finance module. It does not hide columns in the export and reports, but exports and reports are customizable, so you can simply remove any adjustment columns you do not need. Once the feature is enabled, disabling it is not recommended as the adjustments do not disappear from the system and will remain in the data, but no longer be visible. You can choose to change to a new invoicing organization and not enable adjustments for that organization so that future invoices do not have adjustments.
-
Enable With Capping means adjustments are allowed up to the Quantity or Net Cost goal from Sales if capping was enforced pre-lock. This means you cannot adjust the total value of a line item to be greater than the value for which it is sold. This applies to Units, Amount, and Revenue. However, if you chose to override capping before locking that override will apply to the adjustment as well regardless of this setting.
-
Enable Without Capping means you can make adjustments that exceed the Quantity or Net Cost goal from Sales. If a line item runs for multiple periods, adjusting the line up will be taken from future periods if they were capping. However, the adjustment itself is not capped and can exceed what was sold.
-
-
Require Adjustment Category when checked this makes a single-select categorization required whenever an adjustment is made. Administrators predefine the categories under System Configuration > System > Finance Adjustment Category. Then whenever a user makes an adjustment, they are prevented from Saving unless they also select one of the pre-defined adjustment categories. If this is unchecked, the category is optional when adjusting.
Adjustment Permissions
In addition to enabling Adjustments for the invoicing organization, users need the Adjustments.Update permission for their roles. By default this role is granted only to the Administrator and Finance Manager roles. To use adjustments with custom roles, an administrator must grant it to those roles. In some organizations, only certain users are allowed to make adjustments, so you can structure your roles accordingly.
Finance Adjustment Categories
If you want users to set a predefined category for why an adjustment is made, administrators can set up the categories under System Configuration > System > Finance Adjustment Category. This is optional but can help with reporting or in your accounting system.
Adjustment Fields
When you open a locked invoice, several fields appear on the screen if the adjustments feature is enabled for the invoicing organization.
Field |
Description |
---|---|
Adjustment Comments |
This is a free text field where you can enter up to 255 characters of text describing details around the adjustment. It is always optional. |
Adjustment Category |
This lets you select a predefined category for why an adjustment is made. Administrators define the categories in the System Configuration module under System Configuration > System > Finance Adjustment Category. If the Invoicing Organization has Require Adjustment Category selected, then this field has to be set whenever any of the Adjustment fields are not empty or zero. |
Invoice Units Adjustment |
This lets you add a positive or negative whole number that is applied to the Invoice Units. |
Adjusted Invoice Units |
This is read-only and calculated as: Invoice Units + Invoice Units Adjustment |
Net Invoice Amount Adjustment |
This lets you add a positive or negative number that is applied to the Net Invoice Amount. |
Adjusted Net Invoice Amount |
This is read-only and calculated as: Net Invoice Amount + Net Invoice Amount Adjustment |
Recognized Revenue Adjustment |
This lets you add a positive or negative number that is applied to the Recognized Revenue. |
Adjusted Net Invoice Amount |
This is read-only and calculated as: Recognized Revenue + Recognized Revenue Adjustment |
Last Adjusted By |
This shows the login of the user who last saved an adjustment number, category, or comment. This does not appear in the grid by default, but you can add it through the Columns list. |
Last Adjusted Date |
This shows the most recent date when a user saved an adjustment number, category, or comment. This does not appear in the grid by default, but you can add it through the Columns list. |
In addition, fields for gross are calculated and used in the system.
These fields do not appear unless the Adjustment feature is enabled. They also only appear if the invoice is locked or for Prior_Locked invoice that had adjustments you did not remove when unlocking. The adjustment fields are read-only if they appear for a Prior_Locked invoice.
Capping With Adjustments
When enabling adjustments for an invoicing organization, you can enable with or without capping. The capping is applied when you enter the adjustment itself as long as capping would have been applied for the line item before the lock. For example, if your organization allows Invoice Units to exceed the Quantity, then the Invoice Units Adjustment can exceed the Quantity even when capping is enabled for the adjustment.
When capping applies to the adjustment, when you are entering positive numbers for the cap, it will review all earlier periods, including their adjustments, to ensure the sum of those periods, plus the current period with the adjustment do not exceed the contracted goals from the Sales module (Quantity for Invoice Units, Net Cost for Net Invoice Amount and Recognized Revenue).
If capping was enforced before locking, then adjustments are considered by Sales when determining how much the Quantity and Net Cost can change within the Sales module for a line that runs in multiple periods when some but not all invoices are locked.
Future Period Recalculations
If you adjust a line item that runs in multiple periods and there are later periods that are unlocked, the adjustment in the current period will cause the later periods to recalculate. This ensures that the total goal from Sales is not exceeded.
-
Contracted terms recalculate and redistribute what is left. For example, if you have three periods using contracted straightline terms across three periods for $300. If the first period is locked at $100 and adjusted down -$10. The remaining periods become $105 and $105, assuming they are not locked or manually overridden.
-
Performance terms reapportion the cap. For example, a line item runs in two periods with a 4000 Quantity in Sales. Both periods already delivered 2200 impressions (e.g., the line ran for 2 days that happen to fall in separate periods) which would set the first period’s Invoice Units to 2200 and the second to 1800. If you locked the first period and adjusted delivery down -500, then the second period can now use all of the 2200 because the total of the two periods including adjustments would then be below the 4000 cap (((2200 – 1500) + 2200) = 3900).
This happens even if adjustments are enabled without capping. The capping setting for adjustments applies only to the cap you enter and not the effect of the cap on future unlocked periods. If the cap is exceeded, future periods may get calculated as zero.
Totals and Cumulative Numbers
Adjustments are included in several fields that sum other fields:
-
Total fields are the sum of all lines in an invoice. They appear on the Invoices grid that loads with the module and on top of a specific invoice when you open it. Within the export, they have Total in their name.
-
Cumulative fields add one invoice line with other invoice lines for the same Sales line in earlier periods. They are used with capping calculations and other derived fields such as: Remaining Units, Remaining Amount, Deferred Revenue, Unrecognized Revenue.
All of these fields include adjustments. If you adjust negative, it is possible for these numbers to be negative if you go below the numbers calculated before the lock.
Resetting and Unlocking
After you add adjustments, Unlock actions must handle the adjustments.
For Unlock & Reset, the adjustments are always removed. If any invoices that you unlock have adjustments, you receive a warning that you must confirm:
For Unlock (without Reset), you can choose whether to keep or remove the adjustments.
If you choose to keep the adjustments, they may impact capping if you override numbers or make other changes. If you keep the adjustments, they show as read-only for a Prior_Locked invoice.
Financial System Data Pull
After exporting invoices to your Financial System, that system can send details back to AOS to surface status, error, or payment details in AOS. These details are stored per invoice, whereas the invoice export is done per invoice line item. Any sets of invoices can be provided back and not just those that were exported together.
This is a CSV file based integration. A CSV file is placed on an S3 location and then an API is called to begin the AOS pull process. The file is typically placed in the same location where the invoice export files are pushed, but can you place it somewhere else if desired. The location and connection details are configured within the System Configuration module along with the External System for the Financial System through the Name Credentials details. This operation is called Invoice Pull. For now, you must add that mapping within the External System details.
The CSV file must have the following columns:
Header |
Description |
---|---|
INVOICE_ID |
This is required and must match an Invoice ID within the Finance module. |
PROCESSED_DATE |
This is an optional date indicating when you are reporting something within the Financial System. This can appear in the invoices grid and the export. It must be set using UTC time-zone in the format:
For Example:
Warning: Be aware that saving with Excel may corrupt this format and you should confirm its format within a text editor. |
INVOICE_STATUS |
This must be a valid Finance Workflow manual transition invoice status that is allowed for the current Invoice Status of the row's invoice. The valid values are configurable and must be discussed with Operative. This can appear in the invoices grid and the export. These are manual transition values not the automated ones based on actions. |
EXPORT_PROCESS_DETAILS |
This optionally allows up to 255 characters to detail information about what occurred within the Financial System. It is typically used to describe problems or warnings within the Financial System. It can appear in an export. |
PAYMENT_AMOUNT |
This is an optional decimal value, up to four decimal places. It can be sent back to AOS to indicate how much of an invoice was paid. It can appear in an export. |
If other columns appear in the file, they are ignored.
Warning: If you re-import details from a Financial System for the same invoice and do not provide all the fields, any prior details from a financial system for that same invoice are overwritten.
For example, you may load error details for an invoice in the EXPORT_PROCESS_DETAILS field in one import. However, if a later import for that same invoice sets the Invoice Status to indicate successful processing while leaving EXPORT_PROCESS_DETAILS blank, then the previous error details are removed.
API Post Details
AOS can ingest Posting information through an API POST request. Once the file is placed on the S3 bucket/folder, the requesting system sends AOS an API POST request. The URL follows the form:
https://{host}/ingress/v2/{aptiKey}/ingest/externalLoad
The authentication and authorization details are the same as other APIs. Refer to the AOS API documentation portal for more details. The user account within the JSON Web Token (JWT) needs a role with permission to update Invoices. The body of the request needs to contain the following attributes as JSON:
Header |
Description |
---|---|
filePath |
This specifies the file within the bucket and folder defined by the named credentials in the System Configuration module. Do not specify the full path from the root. Start with the folder set for the named credentials. If you place the file directly within that folder, specify only the file name. For example:
This feature has only been tested with a single file at this time. |
Operation |
This has to be
|
psDefinitionId |
This has to specify the underlying ID for the External System for the Financial System as specified within the System Configuration module. To get this ID, you may need to make a GET call based on the financial system name: For example:
|
For example, within the body of the HTTP request, you should send something similar to the following example:
{ "filePath":["InvoicePull2025-05-12SincFb.csv"], "operation":"InvoicePull", "psDefinitionId":"rJghwqM1RkaxBo2FGxRsug" }
This returns a confirmation that the request was received including a job ID that you can use to track the request. If you contact support, you need this ID.
{ "jobId": "dee8040c-cc3b-4ddc-9546-487e6bce5e71", "status": "ACCEPTED", "description": "" }
At this time, you cannot determine the success of the job. If you have access to the Integration Manager dashboard module, you can see within the UI if the file was found and the processing begun. However, at this time, details of the processing and its completion are not shown.