diff --git a/apps/fyle/migrations/0035_support_split_expense_grouping.py b/apps/fyle/migrations/0035_support_split_expense_grouping.py new file mode 100644 index 00000000..93fddfa7 --- /dev/null +++ b/apps/fyle/migrations/0035_support_split_expense_grouping.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.14 on 2024-11-18 15:00 + +import apps.fyle.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fyle', '0034_expense_is_posted_at_null'), + ] + + operations = [ + migrations.AddField( + model_name='expense', + name='bank_transaction_id', + field=models.CharField(blank=True, help_text='Bank Transaction ID', max_length=255, null=True), + ), + migrations.AddField( + model_name='expensegroupsettings', + name='split_expense_grouping', + field=models.CharField(choices=[('SINGLE_LINE_ITEM', 'SINGLE_LINE_ITEM'), ('MULTIPLE_LINE_ITEM', 'MULTIPLE_LINE_ITEM')], default=apps.fyle.models.get_default_split_expense_grouping, help_text='specify line items for split expenses grouping', max_length=100), + ), + ] diff --git a/apps/fyle/models.py b/apps/fyle/models.py index 087ab4dd..c7529655 100644 --- a/apps/fyle/models.py +++ b/apps/fyle/models.py @@ -72,6 +72,8 @@ ('not_in', 'not_in') ) +SPLIT_EXPENSE_GROUPING = (('SINGLE_LINE_ITEM', 'SINGLE_LINE_ITEM'), ('MULTIPLE_LINE_ITEM', 'MULTIPLE_LINE_ITEM')) + class Expense(models.Model): """ Expense @@ -103,6 +105,7 @@ class Expense(models.Model): report_id = models.CharField(max_length=255, help_text='Report ID') report_title = models.TextField(null=True, blank=True, help_text='Report title') corporate_card_id = models.CharField(max_length=255, null=True, blank=True, help_text='Corporate Card ID') + bank_transaction_id = models.CharField(max_length=255, null=True, blank=True, help_text='Bank Transaction ID') file_ids = ArrayField(base_field=models.CharField(max_length=255), null=True, help_text='File IDs') spent_at = models.DateTimeField(null=True, help_text='Expense spent at') approved_at = models.DateTimeField(null=True, help_text='Expense approved at') @@ -173,6 +176,7 @@ def create_expense_objects(expenses: List[Dict], workspace_id, skip_update: bool 'purpose': expense['purpose'], 'report_id': expense['report_id'], 'corporate_card_id': expense['corporate_card_id'], + 'bank_transaction_id': expense['bank_transaction_id'], 'file_ids': expense['file_ids'], 'spent_at': expense['spent_at'], 'posted_at': expense['posted_at'], @@ -207,6 +211,9 @@ def get_default_expense_state(): def get_default_ccc_expense_state(): return 'PAID' +def get_default_split_expense_grouping(): + return 'MULTIPLE_LINE_ITEM' + class ExpenseGroupSettings(models.Model): """ @@ -232,6 +239,11 @@ class ExpenseGroupSettings(models.Model): reimbursable_export_date_type = models.CharField(max_length=100, default='current_date', help_text='Export Date') ccc_export_date_type = models.CharField(max_length=100, default='current_date', help_text='CCC Export Date') import_card_credits = models.BooleanField(help_text='Import Card Credits', default=False) + split_expense_grouping = models.CharField( + max_length=100, + default=get_default_split_expense_grouping, + choices=SPLIT_EXPENSE_GROUPING, help_text='specify line items for split expenses grouping' + ) workspace = models.OneToOneField( Workspace, on_delete=models.PROTECT, help_text='To which workspace this expense group setting belongs to', related_name = 'expense_group_settings' @@ -311,7 +323,8 @@ def update_expense_group_settings(expense_group_settings: Dict, workspace_id: in 'expense_state': expense_group_settings['expense_state'], 'ccc_expense_state': expense_group_settings['ccc_expense_state'], 'reimbursable_export_date_type': expense_group_settings['reimbursable_export_date_type'], - 'ccc_export_date_type': expense_group_settings['ccc_export_date_type'] + 'ccc_export_date_type': expense_group_settings['ccc_export_date_type'], + 'split_expense_grouping': expense_group_settings['split_expense_grouping'] } ) diff --git a/tests/sql_fixtures/reset_db_fixtures/reset_db.sql b/tests/sql_fixtures/reset_db_fixtures/reset_db.sql index 9f4b573e..3f526db9 100644 --- a/tests/sql_fixtures/reset_db_fixtures/reset_db.sql +++ b/tests/sql_fixtures/reset_db_fixtures/reset_db.sql @@ -2,7 +2,7 @@ -- PostgreSQL database dump -- --- Dumped from database version 15.9 (Debian 15.9-1.pgdg120+1) +-- Dumped from database version 15.7 (Debian 15.7-1.pgdg120+1) -- Dumped by pg_dump version 15.9 (Debian 15.9-1.pgdg120+1) SET statement_timeout = 0; @@ -959,7 +959,8 @@ CREATE TABLE public.expense_group_settings ( workspace_id integer NOT NULL, import_card_credits boolean NOT NULL, ccc_export_date_type character varying(100) NOT NULL, - ccc_expense_state character varying(100) + ccc_expense_state character varying(100), + split_expense_grouping character varying(100) NOT NULL ); @@ -1149,7 +1150,8 @@ CREATE TABLE public.expenses ( previous_export_state character varying(255), workspace_id integer, paid_on_fyle boolean NOT NULL, - is_posted_at_null boolean NOT NULL + is_posted_at_null boolean NOT NULL, + bank_transaction_id character varying(255) ); @@ -7992,6 +7994,7 @@ COPY public.django_migrations (id, app, name, applied) FROM stdin; 202 fyle 0034_expense_is_posted_at_null 2024-11-17 20:37:53.17847+00 203 tasks 0012_alter_tasklog_expense_group 2024-11-17 20:37:53.213044+00 204 workspaces 0040_alter_configuration_change_accounting_period 2024-11-18 04:28:36.094429+00 +205 fyle 0035_support_split_expense_grouping 2024-11-22 10:40:59.441051+00 \. @@ -11578,10 +11581,10 @@ COPY public.expense_filters (id, condition, operator, "values", rank, join_by, i -- Data for Name: expense_group_settings; Type: TABLE DATA; Schema: public; Owner: postgres -- -COPY public.expense_group_settings (id, reimbursable_expense_group_fields, corporate_credit_card_expense_group_fields, expense_state, reimbursable_export_date_type, created_at, updated_at, workspace_id, import_card_credits, ccc_export_date_type, ccc_expense_state) FROM stdin; -1 {employee_email,report_id,claim_number,fund_source} {employee_email,report_id,claim_number,fund_source} PAYMENT_PROCESSING current_date 2021-11-15 08:46:16.069944+00 2021-11-15 08:46:16.069986+00 1 f current_date PAID -2 {fund_source,employee_email,settlement_id,spent_at} {expense_id,fund_source,employee_email,settlement_id,spent_at} PAID spent_at 2021-11-16 04:16:57.847694+00 2021-11-16 07:34:26.302812+00 2 f spent_at PAID -74 {employee_email,report_id,claim_number,fund_source} {claim_number,employee_email,expense_id,report_id,fund_source} PAYMENT_PROCESSING last_spent_at 2021-12-03 11:00:33.637654+00 2021-12-03 11:04:00.206339+00 49 f last_spent_at PAID +COPY public.expense_group_settings (id, reimbursable_expense_group_fields, corporate_credit_card_expense_group_fields, expense_state, reimbursable_export_date_type, created_at, updated_at, workspace_id, import_card_credits, ccc_export_date_type, ccc_expense_state, split_expense_grouping) FROM stdin; +1 {employee_email,report_id,claim_number,fund_source} {employee_email,report_id,claim_number,fund_source} PAYMENT_PROCESSING current_date 2021-11-15 08:46:16.069944+00 2021-11-15 08:46:16.069986+00 1 f current_date PAID MULTIPLE_LINE_ITEM +2 {fund_source,employee_email,settlement_id,spent_at} {expense_id,fund_source,employee_email,settlement_id,spent_at} PAID spent_at 2021-11-16 04:16:57.847694+00 2021-11-16 07:34:26.302812+00 2 f spent_at PAID MULTIPLE_LINE_ITEM +74 {employee_email,report_id,claim_number,fund_source} {claim_number,employee_email,expense_id,report_id,fund_source} PAYMENT_PROCESSING last_spent_at 2021-12-03 11:00:33.637654+00 2021-12-03 11:04:00.206339+00 49 f last_spent_at PAID MULTIPLE_LINE_ITEM \. @@ -11633,15 +11636,15 @@ COPY public.expense_reports (id, account_id, entity_id, currency, department_id, -- Data for Name: expenses; Type: TABLE DATA; Schema: public; Owner: postgres -- -COPY public.expenses (id, employee_email, category, sub_category, project, expense_id, expense_number, claim_number, amount, currency, foreign_amount, foreign_currency, settlement_id, reimbursable, state, vendor, cost_center, purpose, report_id, spent_at, approved_at, expense_created_at, expense_updated_at, created_at, updated_at, fund_source, custom_properties, verified_at, paid_on_netsuite, billable, org_id, tax_amount, tax_group_id, project_id, file_ids, corporate_card_id, is_skipped, report_title, employee_name, posted_at, accounting_export_summary, previous_export_state, workspace_id, paid_on_fyle, is_posted_at_null) FROM stdin; -1 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txjvDntD9ZXR E/2021/11/T/11 C/2021/11/R/5 50 USD \N \N set6GUp6tcEEp t PAYMENT_PROCESSING \N Treasury \N rpuN3bgphxbK 2021-11-15 00:00:00+00 2021-11-15 00:00:00+00 2021-11-15 10:27:53.649+00 2021-11-15 10:28:46.775+00 2021-11-15 10:29:07.597095+00 2021-11-15 10:29:07.597111+00 PERSONAL {"Team": "", "Class": "", "Klass": "", "Team 2": "", "Location": "", "Team Copy": "", "Tax Groups": "", "Departments": "", "User Dimension": "", "Location Entity": "", "Operating System": "", "System Operating": "", "User Dimension Copy": ""} \N f \N or79Cob97KSh \N \N \N \N \N f \N \N \N {} \N \N f f -2 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txy6folbrG2j E/2021/11/T/12 C/2021/11/R/6 100 USD \N \N setNVTcPkZ6on f PAYMENT_PROCESSING Ashwin Vendor \N \N rpHLA9Dfp9hN 2021-11-15 00:00:00+00 2021-11-15 00:00:00+00 2021-11-15 13:11:22.304+00 2021-11-15 13:11:58.032+00 2021-11-15 13:12:12.250613+00 2021-11-15 13:12:12.250638+00 CCC {"Team": "", "Class": "", "Klass": "Klass", "Team 2": "", "Location": "", "Team Copy": "", "Tax Groups": "", "Departments": "", "User Dimension": "", "Location Entity": "", "Operating System": "", "System Operating": "", "User Dimension Copy": ""} \N f \N or79Cob97KSh \N \N \N \N \N f \N \N \N {} \N \N f f -3 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txeLau9Rdu4X E/2021/11/T/1 C/2021/11/R/2 80 USD \N \N setqgvGQnsAya t PAYMENT_PROCESSING \N \N \N rpu5W0LYrk6e 2021-11-16 00:00:00+00 2021-11-16 00:00:00+00 2021-11-16 04:24:18.688+00 2021-11-16 04:25:21.996+00 2021-11-16 04:25:49.174565+00 2021-11-16 04:25:49.174584+00 PERSONAL {"Klass": "Klass", "Device Type": "", "Fyle Category": ""} \N f \N oraWFQlEpjbb 4.53 tg31j9m4PoEO \N \N \N f \N \N \N {} \N \N f f -4 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txMLGb6Xy8m8 E/2021/11/T/2 C/2021/11/R/1 100 USD \N \N setqgvGQnsAya f PAYMENT_PROCESSING \N \N \N rprqDvARHUnv 2021-11-16 00:00:00+00 2021-11-16 00:00:00+00 2021-11-16 04:24:38.141+00 2021-11-16 04:25:21.996+00 2021-11-16 04:25:49.192351+00 2021-11-16 04:25:49.192367+00 CCC {"Device Type": "", "Fyle Category": ""} \N f \N oraWFQlEpjbb 16.67 tgSYjXsBCviv \N \N \N f \N \N \N {} \N \N f f -173 admin1@fyleforintacct.in Food Food Project 2 tx7A5QpesrV5 E/2021/12/T/1 C/2021/12/R/1 120 USD \N \N set15sMvtRIiS t PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85N 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:30.076+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.685597+00 2021-12-03 11:26:58.685616+00 PERSONAL {} \N f \N orHe8CpW2hyN \N \N \N \N \N f \N \N \N {} \N \N f f -174 admin1@fyleforintacct.in Food Food Project 2 txcKVVELn1Vl E/2021/12/T/2 C/2021/12/R/1 130 USD \N \N set15sMvtRIiS f PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85N 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:49.51+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.702183+00 2021-12-03 11:26:58.702209+00 CCC {} \N f \N orHe8CpW2hyN \N \N \N \N \N f \N \N \N {} \N \N f f -600 jhonsnoww@fyle.in Food Food Project 2 txcKVVELn1Vlkill E/2021/12/T/298 C/2021/12/R/198 130 USD \N \N set15sMvtRIiSkill f PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85Nkill 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:49.51+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.702183+00 2021-12-03 11:26:58.702209+00 CCC {} \N f \N or79Cob97KSh \N \N \N \N \N t \N \N \N {} \N \N f f -601 jhonsnoww@fyle.in Food Food Project 2 txcKVVELn1Vlgon E/2021/12/T/299 C/2021/12/R/199 130 USD \N \N set15sMvtRIiSgon f PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85Ngon 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:49.51+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.702183+00 2021-12-03 11:26:58.702209+00 CCC {} \N f \N or79Cob97KSh \N \N \N \N \N t \N \N \N {} \N \N f f +COPY public.expenses (id, employee_email, category, sub_category, project, expense_id, expense_number, claim_number, amount, currency, foreign_amount, foreign_currency, settlement_id, reimbursable, state, vendor, cost_center, purpose, report_id, spent_at, approved_at, expense_created_at, expense_updated_at, created_at, updated_at, fund_source, custom_properties, verified_at, paid_on_netsuite, billable, org_id, tax_amount, tax_group_id, project_id, file_ids, corporate_card_id, is_skipped, report_title, employee_name, posted_at, accounting_export_summary, previous_export_state, workspace_id, paid_on_fyle, is_posted_at_null, bank_transaction_id) FROM stdin; +1 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txjvDntD9ZXR E/2021/11/T/11 C/2021/11/R/5 50 USD \N \N set6GUp6tcEEp t PAYMENT_PROCESSING \N Treasury \N rpuN3bgphxbK 2021-11-15 00:00:00+00 2021-11-15 00:00:00+00 2021-11-15 10:27:53.649+00 2021-11-15 10:28:46.775+00 2021-11-15 10:29:07.597095+00 2021-11-15 10:29:07.597111+00 PERSONAL {"Team": "", "Class": "", "Klass": "", "Team 2": "", "Location": "", "Team Copy": "", "Tax Groups": "", "Departments": "", "User Dimension": "", "Location Entity": "", "Operating System": "", "System Operating": "", "User Dimension Copy": ""} \N f \N or79Cob97KSh \N \N \N \N \N f \N \N \N {} \N \N f f \N +2 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txy6folbrG2j E/2021/11/T/12 C/2021/11/R/6 100 USD \N \N setNVTcPkZ6on f PAYMENT_PROCESSING Ashwin Vendor \N \N rpHLA9Dfp9hN 2021-11-15 00:00:00+00 2021-11-15 00:00:00+00 2021-11-15 13:11:22.304+00 2021-11-15 13:11:58.032+00 2021-11-15 13:12:12.250613+00 2021-11-15 13:12:12.250638+00 CCC {"Team": "", "Class": "", "Klass": "Klass", "Team 2": "", "Location": "", "Team Copy": "", "Tax Groups": "", "Departments": "", "User Dimension": "", "Location Entity": "", "Operating System": "", "System Operating": "", "User Dimension Copy": ""} \N f \N or79Cob97KSh \N \N \N \N \N f \N \N \N {} \N \N f f \N +3 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txeLau9Rdu4X E/2021/11/T/1 C/2021/11/R/2 80 USD \N \N setqgvGQnsAya t PAYMENT_PROCESSING \N \N \N rpu5W0LYrk6e 2021-11-16 00:00:00+00 2021-11-16 00:00:00+00 2021-11-16 04:24:18.688+00 2021-11-16 04:25:21.996+00 2021-11-16 04:25:49.174565+00 2021-11-16 04:25:49.174584+00 PERSONAL {"Klass": "Klass", "Device Type": "", "Fyle Category": ""} \N f \N oraWFQlEpjbb 4.53 tg31j9m4PoEO \N \N \N f \N \N \N {} \N \N f f \N +4 ashwin.t@fyle.in Accounts Payable Accounts Payable \N txMLGb6Xy8m8 E/2021/11/T/2 C/2021/11/R/1 100 USD \N \N setqgvGQnsAya f PAYMENT_PROCESSING \N \N \N rprqDvARHUnv 2021-11-16 00:00:00+00 2021-11-16 00:00:00+00 2021-11-16 04:24:38.141+00 2021-11-16 04:25:21.996+00 2021-11-16 04:25:49.192351+00 2021-11-16 04:25:49.192367+00 CCC {"Device Type": "", "Fyle Category": ""} \N f \N oraWFQlEpjbb 16.67 tgSYjXsBCviv \N \N \N f \N \N \N {} \N \N f f \N +173 admin1@fyleforintacct.in Food Food Project 2 tx7A5QpesrV5 E/2021/12/T/1 C/2021/12/R/1 120 USD \N \N set15sMvtRIiS t PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85N 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:30.076+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.685597+00 2021-12-03 11:26:58.685616+00 PERSONAL {} \N f \N orHe8CpW2hyN \N \N \N \N \N f \N \N \N {} \N \N f f \N +174 admin1@fyleforintacct.in Food Food Project 2 txcKVVELn1Vl E/2021/12/T/2 C/2021/12/R/1 130 USD \N \N set15sMvtRIiS f PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85N 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:49.51+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.702183+00 2021-12-03 11:26:58.702209+00 CCC {} \N f \N orHe8CpW2hyN \N \N \N \N \N f \N \N \N {} \N \N f f \N +600 jhonsnoww@fyle.in Food Food Project 2 txcKVVELn1Vlkill E/2021/12/T/298 C/2021/12/R/198 130 USD \N \N set15sMvtRIiSkill f PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85Nkill 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:49.51+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.702183+00 2021-12-03 11:26:58.702209+00 CCC {} \N f \N or79Cob97KSh \N \N \N \N \N t \N \N \N {} \N \N f f \N +601 jhonsnoww@fyle.in Food Food Project 2 txcKVVELn1Vlgon E/2021/12/T/299 C/2021/12/R/199 130 USD \N \N set15sMvtRIiSgon f PAYMENT_PROCESSING \N Sales and Cross \N rpXqCutQj85Ngon 2021-12-03 00:00:00+00 2021-12-03 00:00:00+00 2021-12-03 10:58:49.51+00 2021-12-03 11:00:22.64+00 2021-12-03 11:26:58.702183+00 2021-12-03 11:26:58.702209+00 CCC {} \N f \N or79Cob97KSh \N \N \N \N \N t \N \N \N {} \N \N f f \N \. @@ -11903,7 +11906,7 @@ SELECT pg_catalog.setval('public.django_content_type_id_seq', 47, true); -- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres -- -SELECT pg_catalog.setval('public.django_migrations_id_seq', 203, true); +SELECT pg_catalog.setval('public.django_migrations_id_seq', 205, true); -- diff --git a/tests/test_fyle/fixtures.py b/tests/test_fyle/fixtures.py index 935bf244..77217b00 100644 --- a/tests/test_fyle/fixtures.py +++ b/tests/test_fyle/fixtures.py @@ -246,6 +246,7 @@ "expenses_spent_at":[ { 'id': '1234', + 'bank_transaction_id': 'btxnqmATEEBkJ4', 'employee_email': 'jhonsnow@fyle.in', 'category': 'Accounts Payable', 'sub_category': 'Accounts Payable', @@ -287,6 +288,7 @@ }, { 'id': '1235', + 'bank_transaction_id': 'btxnqmATEEBkJ4', 'employee_email': 'jhonsnow@fyle.in', 'category': 'Accounts Payable', 'sub_category': 'Accounts Payable', @@ -328,6 +330,7 @@ }, { 'id': '1236', + 'bank_transaction_id': 'btxnqmATEEBkJ4', 'employee_email': 'jhonsnow@fyle.in', 'category': 'Accounts Payable', 'sub_category': 'Accounts Payable', @@ -860,6 +863,7 @@ 'Vehicle Type': '', 'Fyle Categories': '', }, + 'bank_transaction_id': 'btxnqmATEEBkJ4', "is_posted_at_null": True }, { @@ -902,6 +906,7 @@ 'Vehicle Type': '', 'Fyle Categories': '', }, + 'bank_transaction_id': 'btxnqmATEEBkJ4', "is_posted_at_null": False }, ], @@ -1002,7 +1007,8 @@ "import_card_credits": "False", "created_at": "2021-11-15T08:46:16.069944Z", "updated_at": "2021-11-15T08:46:16.069986Z", - "workspace": 1 + "workspace": 1, + "split_expense_grouping": "MULTIPLE_LINE_ITEM", }, "fyle_orgs": [ { @@ -1106,7 +1112,8 @@ 'expense_state': 'PAYMENT_PROCESSING', 'reimbursable_export_date_type': 'spent_at', 'ccc_export_date_type': 'spent_at', - 'ccc_expense_state': 'PAID' + 'ccc_expense_state': 'PAID', + 'split_expense_grouping': 'MULTIPLE_LINE_ITEM', }, 'get_my_profile': { 'data': { diff --git a/tests/test_workspaces/test_apis/test_export_settings/fixtures.py b/tests/test_workspaces/test_apis/test_export_settings/fixtures.py index 99a943a2..1761c6db 100644 --- a/tests/test_workspaces/test_apis/test_export_settings/fixtures.py +++ b/tests/test_workspaces/test_apis/test_export_settings/fixtures.py @@ -26,7 +26,8 @@ 'expense_id' ], 'ccc_export_date_type': 'spent_at', - 'ccc_expense_state': 'PAID' + 'ccc_expense_state': 'PAID', + 'split_expense_grouping': 'MULTIPLE_LINE_ITEM' }, 'general_mappings': { 'reimbursable_account': { @@ -74,7 +75,8 @@ 'expense_id' ], 'ccc_export_date_type': 'spent_at', - 'ccc_expense_state': 'PAID' + 'ccc_expense_state': 'PAID', + 'split_expense_grouping': 'MULTIPLE_LINE_ITEM' }, 'general_mappings': { 'reimbursable_account': {