carta-ach

Library to create and parse ACH files (NACHA)


License
MIT
Install
pip install carta-ach==0.4.2

Documentation

carta-ach

ACH file generator module for python. So far, this has been tested with "PPD" and "CCD" batches with addenda records. Forked from python-ach by Travis Hathaway and released on PyPI as carta-ach.

Example

Below is an example of how to use the module:

from ach.builder import AchFile

settings = {
    'immediate_dest' : '123456789', # Your bank's routing number
    'immediate_org' : '123456789', # Bank assigned routing number
    'immediate_dest_name' : 'YOUR BANK',
    'immediate_org_name' : 'YOUR COMPANY',
    'company_id' : '1234567890', #tax number
}

ach_file = AchFile('A',settings) #file Id mod

entries = [
    {
        'type'           : '22', # type of
        'routing_number' : '12345678',
        'account_number' : '11232132',
        'amount'         : '10.00',
        'name'           : 'Alice Wanderdust',
        'addenda' : [
            {
                'payment_related_info': 'Here is some additional information',
            },
        ],
    },
    {
        'type'           : '27',
        'routing_number' : '12345678',
        'account_number' : '234234234',
        'amount'         : '150.00',
        'name'           : 'Billy Holiday',
    },
    {
        'type'           : '22',
        'routing_number' : '12323231',
        'account_number' : '123123123',
        'amount'         : '12.13',
        'name'           : 'Rachel Welch',
    },
]

ach_file.add_batch('PPD', entries, credits=True, debits=True)

print ach_file.render_to_string()

This returns the following NACHA file:

101 123456780 1234567801409020123A094101YOUR BANK              YOUR COMPANY
5200YOUR COMPANY                        1234567890PPDPAYROLL         140903   1123456780000001
62212345678011232132         0000001000               ALICE WANDERDUST        1123456780000001
705HERE IS SOME ADDITIONAL INFORMATION                                             00000000001
627123456780234234234        0000015000               BILLY HOLIDAY           0123456780000002
622123232318123123123        0000001213               RACHEL WELCH            0123456780000003
820000000400370145870000000150000000000022131234567890                         123456780000001
9000001000001000000040037014587000000015000000000002213
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

Below is another example of what happens if the validation fails for one entry.

from ach.builder import AchFile

settings = {
    'immediate_dest' : '123456789', # Your bank's routing number
    'immediate_org' : '123456789', # Bank assigned routing number
    'immediate_dest_name' : 'YOUR BANK',
    'immediate_org_name' : 'YOUR COMPANY',
    'company_id' : '1234567890', #tax number
}

ach_file = AchFile('B',settings) #file Id mod

entries = [
    {
        'type'           : '27',
        'routing_number' : '********', # invalid
        'account_number' : '********', # invalid
        'amount'         : '150.00',
        'name'           : 'Billy Holiday',
    },
    {
        'type'           : '22',
        'routing_number' : '123232318',
        'account_number' : '123123123',
        'amount'         : '12.13',
        'name'           : 'Rachel Welch',
    },
]

print(ach_file.add_batch('PPD', entries, credits=True, debits=True))

This prints the following information:

[({'routing_number': '********', 'amount': '150.00', 'type': '27', 'account_number': '********', 'name': 'Billy Holiday'}, AchError('field needs to be numeric characters only',))]

Here is the ach file with the skipped entry.

print ach_file.render_to_string()
101 123456780 1234567802008071448B094101YOUR BANK              YOUR COMPANY
5200YOUR COMPANY                        1234567890PPDPAYROLL         200808   1123456780000001
622123232318123123123        0000001213               RACHEL WELCH            0123456780000001
820000000100123232310000000000000000000012131234567890                         123456780000001
9000001000001000000010012323231000000000000000000001213
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999