{"id":16177585,"url":"https://github.com/raphaelm/python-sepaxml","last_synced_at":"2025-04-13T11:46:53.341Z","repository":{"id":16213155,"uuid":"79558935","full_name":"raphaelm/python-sepaxml","owner":"raphaelm","description":"SEPA Direct Debit XML generation in python","archived":false,"fork":false,"pushed_at":"2024-10-04T13:02:29.000Z","size":138,"stargazers_count":116,"open_issues_count":16,"forks_count":43,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-06T08:08:21.344Z","etag":null,"topics":["debit","python","sepa","xml"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphaelm.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-20T12:54:58.000Z","updated_at":"2025-03-30T11:59:15.000Z","dependencies_parsed_at":"2022-08-17T19:55:19.530Z","dependency_job_id":"a889f076-6c49-4d51-9973-6ba2eff11009","html_url":"https://github.com/raphaelm/python-sepaxml","commit_stats":{"total_commits":101,"total_committers":20,"mean_commits":5.05,"dds":0.3564356435643564,"last_synced_commit":"e38616ef63c1ef9d2e8c28f06b3426a4d0a0d3cf"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelm%2Fpython-sepaxml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelm%2Fpython-sepaxml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelm%2Fpython-sepaxml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelm%2Fpython-sepaxml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphaelm","download_url":"https://codeload.github.com/raphaelm/python-sepaxml/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248710408,"owners_count":21149185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debit","python","sepa","xml"],"created_at":"2024-10-10T05:09:36.138Z","updated_at":"2025-04-13T11:46:53.322Z","avatar_url":"https://github.com/raphaelm.png","language":"Python","funding_links":[],"categories":["Payments and Banking"],"sub_categories":[],"readme":"SEPA XML Generator\n==================\n\n.. image:: https://travis-ci.org/raphaelm/python-sepaxml.svg?branch=master\n   :target: https://travis-ci.org/raphaelm/python-sepaxml\n\n.. image:: https://codecov.io/gh/raphaelm/python-sepaxml/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/raphaelm/python-sepaxml\n\n.. image:: http://img.shields.io/pypi/v/sepaxml.svg\n   :target: https://pypi.python.org/pypi/sepaxml\n\nThis is a python implementation to generate SEPA XML files.\n\nLimitations\n-----------\n\nSupported standards:\n\n* SEPA PAIN.001.001.03\n* SEPA PAIN.008.001.02\n\nUsage\n-----\n\nDirect debit\n\"\"\"\"\"\"\"\"\"\"\"\"\n\nExample:\n\n.. code:: python\n\n    from sepaxml import SepaDD\n    import datetime, uuid\n\n    config = {\n        \"name\": \"Test von Testenstein\",\n        \"IBAN\": \"NL50BANK1234567890\",\n        \"BIC\": \"BANKNL2A\",\n        \"batch\": True,\n        \"creditor_id\": \"DE26ZZZ00000000000\",  # supplied by your bank or financial authority\n        \"currency\": \"EUR\",  # ISO 4217\n        # \"instrument\": \"B2B\",  # - default is CORE (B2C)\n        \"address\": {\n            # The address and all of its fields are optional but in some countries they are required\n            \"address_type\": \"ADDR\",  # valid: ADDR, PBOX, HOME, BIZZ, MLTO, DLVY\n            \"department\": \"Head Office\",\n            \"subdepartment\": None,\n            \"street_name\": \"Musterstr.\",\n            \"building_number\": \"1\",\n            \"postcode\": \"12345\",\n            \"town\": \"Berlin\",\n            \"country\": \"DE\",\n            \"country_subdivision\": None,\n            \"lines\": [\"Line 1\", \"Line 2\"],\n        },\n    }\n    sepa = SepaDD(config, schema=\"pain.008.001.02\", clean=True)\n\n    payment = {\n        \"name\": \"Test von Testenstein\",\n        \"IBAN\": \"NL50BANK1234567890\",\n        \"BIC\": \"BANKNL2A\",\n        \"amount\": 5000,  # in cents\n        \"type\": \"RCUR\",  # FRST,RCUR,OOFF,FNAL\n        \"collection_date\": datetime.date.today(),\n        \"mandate_id\": \"1234\",\n        \"mandate_date\": datetime.date.today(),\n        \"description\": \"Test transaction\",\n        # \"endtoend_id\": str(uuid.uuid1()).replace(\"-\", \"\"),  # autogenerated if obmitted\n        \"address\": {\n            # The address and all of its fields are optional but in some countries they are required\n            \"address_type\": \"ADDR\",  # valid: ADDR, PBOX, HOME, BIZZ, MLTO, DLVY\n            \"department\": \"Head Office\",\n            \"subdepartment\": None,\n            \"street_name\": \"Musterstr.\",\n            \"building_number\": \"1\",\n            \"postcode\": \"12345\",\n            \"town\": \"Berlin\",\n            \"country\": \"DE\",\n            \"country_subdivision\": None,\n            \"lines\": [\"Line 1\", \"Line 2\"],\n        },\n    }\n    sepa.add_payment(payment)\n\n    print(sepa.export(validate=True))\n\n\nCredit transfer\n\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\n\nExample:\n\n.. code:: python\n\n    from sepaxml import SepaTransfer\n    import datetime, uuid\n\n    config = {\n        \"name\": \"Test von Testenstein\",\n        \"IBAN\": \"NL50BANK1234567890\",\n        \"BIC\": \"BANKNL2A\",\n        \"batch\": True,\n        # For non-SEPA transfers, set \"domestic\" to True, necessary e.g. for CH/LI\n        \"currency\": \"EUR\",  # ISO 4217\n        \"address\": {\n            # The address and all of its fields are optional but in some countries they are required\n            \"address_type\": \"ADDR\",  # valid: ADDR, PBOX, HOME, BIZZ, MLTO, DLVY\n            \"department\": \"Head Office\",\n            \"subdepartment\": None,\n            \"street_name\": \"Musterstr.\",\n            \"building_number\": \"1\",\n            \"postcode\": \"12345\",\n            \"town\": \"Berlin\",\n            \"country\": \"DE\",\n            \"country_subdivision\": None,\n            \"lines\": [\"Line 1\", \"Line 2\"],\n        },\n    }\n    sepa = SepaTransfer(config, clean=True)\n\n    payment = {\n        \"name\": \"Test von Testenstein\",\n        \"IBAN\": \"NL50BANK1234567890\",\n        \"BIC\": \"BANKNL2A\",\n        \"amount\": 5000,  # in cents\n        \"execution_date\": datetime.date.today() + datetime.timedelta(days=2),\n        \"description\": \"Test transaction\",\n        # \"endtoend_id\": str(uuid.uuid1()).replace(\"-\", \"\"),  # optional\n        \"address\": {\n            # The address and all of its fields are optional but in some countries they are required\n            \"address_type\": \"ADDR\",  # valid: ADDR, PBOX, HOME, BIZZ, MLTO, DLVY\n            \"department\": \"Head Office\",\n            \"subdepartment\": None,\n            \"street_name\": \"Musterstr.\",\n            \"building_number\": \"1\",\n            \"postcode\": \"12345\",\n            \"town\": \"Berlin\",\n            \"country\": \"DE\",\n            \"country_subdivision\": None,\n            \"lines\": [\"Line 1\", \"Line 2\"],\n        },\n    }\n    sepa.add_payment(payment)\n\n    print(sepa.export(validate=True))\n\n\nDevelopment\n-----------\n\nTo run the included tests::\n\n    pip install -r requirements_dev.txt\n    py.test tests\n\nTo automatically sort your Imports as required by CI::\n\n    pip install isort\n    isort -rc .\n\n\nCredits and License\n-------------------\n\nMaintainer: Raphael Michel \u003cmail@raphaelmichel.de\u003e\n\nThis basically started as a properly packaged, python 3 tested version\nof the `PySepaDD`_ implementation that was released by The Congressus under the MIT license.\nThanks for your work!\n\nThe source code is released under MIT license.\n\nNot part of the MIT-licensed project are the XML schemas in the ``sepaxml/schemas/``\nfolder which are copyrighted by the ISO 20022 organization but `allowed to be reproduced`_\nfreely.\n\n.. _PySepaDD: https://github.com/congressus/PySepaDD\n.. _allowed to be reproduced: https://www.iso20022.org/terms-use","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelm%2Fpython-sepaxml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphaelm%2Fpython-sepaxml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelm%2Fpython-sepaxml/lists"}