{"id":"b696606f-0bce-4250-a204-962db2a6339d","shortId":"gkHKGA","kind":"skill","title":"odoo-edi-connector","tagline":"Guide for implementing EDI (Electronic Data Interchange) with Odoo: X12, EDIFACT document mapping, partner onboarding, and automated order processing.","description":"# Odoo EDI Connector\n\n## Overview\n\nElectronic Data Interchange (EDI) is the standard for automated B2B document exchange — purchase orders, invoices, ASNs (Advance Shipping Notices). This skill guides you through mapping EDI transactions (ANSI X12 or EDIFACT) to Odoo business objects, setting up trading partner configurations, and automating inbound/outbound document flows.\n\n## When to Use This Skill\n\n- A retail partner requires EDI 850 (Purchase Orders) to do business with you.\n- You need to send EDI 856 (ASN) when goods are shipped.\n- Automating EDI 810 (Invoice) generation from Odoo confirmed deliveries.\n- Mapping EDI fields to Odoo fields for a new trading partner.\n\n## How It Works\n\n1. **Activate**: Mention `@odoo-edi-connector` and specify the EDI transaction set and trading partner.\n2. **Map**: Receive a complete field mapping table between EDI segments and Odoo fields.\n3. **Automate**: Get Python code to parse incoming EDI files and create Odoo records.\n\n## EDI ↔ Odoo Object Mapping\n\n| EDI Transaction | Odoo Object |\n|---|---|\n| 850 Purchase Order | `sale.order` (inbound customer PO) |\n| 855 PO Acknowledgment | Confirmation email / SO confirmation |\n| 856 ASN (Advance Ship Notice) | `stock.picking` (delivery order) |\n| 810 Invoice | `account.move` (customer invoice) |\n| 846 Inventory Inquiry | `product.product` stock levels |\n| 997 Functional Acknowledgment | Automated receipt confirmation |\n\n## Examples\n\n### Example 1: Parse EDI 850 and Create Odoo Sale Order (Python)\n\n```python\nfrom pyx12 import x12file  # pip install pyx12\nfrom datetime import datetime\n\nimport xmlrpc.client\nimport os\n\nodoo_url = os.getenv(\"ODOO_URL\")\ndb = os.getenv(\"ODOO_DB\")\npwd = os.getenv(\"ODOO_API_KEY\") \nuid = int(os.getenv(\"ODOO_UID\", \"2\"))\n\nmodels = xmlrpc.client.ServerProxy(f\"{odoo_url}/xmlrpc/2/object\")\n\ndef process_850(edi_file_path):\n    \"\"\"Parse X12 850 Purchase Order and create Odoo Sale Order\"\"\"\n    with x12file.X12File(edi_file_path) as f:\n        for transaction in f.get_transaction_sets():\n            # Extract header info (BEG segment)                     \n            po_number = transaction['BEG'][3]    # Purchase Order Number                                                    \n            po_date   = transaction['BEG'][5]    # Purchase Order Date \n\n            # IDEMPOTENCY CHECK: Verify PO doesn't already exist in Odoo\n            existing = models.execute_kw(db, uid, pwd, 'sale.order', 'search', [\n                [['client_order_ref', '=', po_number]]\n            ])\n            if existing:\n                print(f\"Skipping: PO {po_number} already exists.\")\n                continue \n\n            # Extract partner (N1 segment — Buyer)\n\n\n                        # Extract partner (N1 segment — Buyer)                  \n            partner_name = transaction.get_segment('N1')[2] if transaction.get_segment('N1') else \"Unknown\"                                                                             \n            \n            # Find partner in Odoo                                  \n            partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search',                                                  \n                                [[['name', 'ilike', partner_name]]])                \n            \n            if not partner:\n                print(f\"Error: Partner '{partner_name}' not found. Skipping transaction.\")\n                continue\n                \n            partner_id = partner[0]\n\n            # Extract line items (PO1 segments)\n            order_lines = []\n            for po1 in transaction.get_segments('PO1'):\n                sku     = po1[7]    # Product ID\n                qty     = float(po1[2])\n                price   = float(po1[4])\n\n                product = models.execute_kw(db, uid, pwd, 'product.product', 'search',\n                    [[['default_code', '=', sku]]])\n                if product:\n                    order_lines.append((0, 0, {\n                        'product_id': product[0],\n                        'product_uom_qty': qty,\n                        'price_unit': price,\n                    }))\n\n            # Create Sale Order\n            if partner_id and order_lines:\n                models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{\n                    'partner_id': partner_id,\n                    'client_order_ref': po_number,\n                    'order_line': order_lines,\n                }])\n```\n\n### Example 2: Send EDI 997 Acknowledgment\n\n```python\ndef generate_997(isa_control, gs_control, transaction_control):\n    \"\"\"Generate a functional acknowledgment for received EDI\"\"\"\n    today = datetime.now().strftime('%y%m%d')\n    return f\"\"\"ISA*00*          *00*          *ZZ*YOURISAID      *ZZ*PARTNERISAID   *{today}*1200*^*00501*{isa_control}*0*P*>~\nGS*FA*YOURGID*PARTNERGID*{today}*1200*{gs_control}*X*005010X231A1~\nST*997*0001~\nAK1*PO*{gs_control}~\nAK9*A*1*1*1~\nSE*4*0001~\nGE*1*{gs_control}~\nIEA*1*{isa_control}~\"\"\"\n```\n\n## Best Practices\n\n- ✅ **Do:** Store every raw EDI transaction in an audit log table before processing.\n- ✅ **Do:** Always send a **997 Functional Acknowledgment** within 24 hours of receiving a transaction.\n- ✅ **Do:** Negotiate a test cycle with trading partners before going live — use test ISA qualifier `T`.\n- ❌ **Don't:** Process EDI files synchronously in web requests — queue them for async processing.\n- ❌ **Don't:** Hardcode trading partner qualifiers — store them in a configuration table per partner.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["odoo","edi","connector","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-odoo-edi-connector","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-edi-connector","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (5,777 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:40.706Z","embedding":null,"createdAt":"2026-04-18T21:41:44.071Z","updatedAt":"2026-04-23T06:51:40.706Z","lastSeenAt":"2026-04-23T06:51:40.706Z","tsv":"'/xmlrpc/2/object':269 '0':409,450,451,455,535 '00':524,525 '0001':549,561 '00501':532 '005010x231a1':546 '1':125,218,556,557,558,563,567 '1200':531,542 '2':141,263,369,431,493 '24':593 '3':155,308 '4':435,560 '5':316 '7':425 '810':104,199 '846':204 '850':83,177,221,272,278 '855':184 '856':96,191 '997':210,496,501,548,589 'account.move':201 'acknowledg':186,212,497,511,591 'activ':126 'advanc':44,193 'ak1':550 'ak9':554 'alreadi':326,351 'alway':586 'ansi':55 'api':256 'ask':676 'asn':43,97,192 'async':627 'audit':580 'autom':21,36,69,102,156,213 'b2b':37 'beg':302,307,315 'best':570 'boundari':684 'busi':61,88 'buyer':358,363 'check':321 'clarif':678 'clear':651 'client':338,483 'code':159,445 'complet':145 'configur':67,639 'confirm':109,187,190,215 'connector':4,26,131 'continu':353,405 'control':503,505,507,534,544,553,565,569 'creat':166,223,282,463,478 'criteria':687 'custom':182,202 'cycl':603 'd':520 'data':10,29 'date':313,319 'datetim':237,239 'datetime.now':516 'db':249,252,333,383,439,474 'def':270,499 'default':444 'deliveri':110,197 'describ':655 'document':16,38,71 'doesn':324 'edi':3,8,25,31,53,82,95,103,112,130,135,150,163,169,173,220,273,288,495,514,576,618 'edifact':15,58 'electron':9,28 'els':374 'email':188 'environ':667 'environment-specif':666 'error':397 'everi':574 'exampl':216,217,492 'exchang':39 'exist':327,330,344,352 'expert':672 'extract':299,354,359,410 'f':266,292,346,396,522 'f.get':296 'fa':538 'field':113,116,146,154 'file':164,274,289,619 'find':376 'float':429,433 'flow':72 'found':402 'function':211,510,590 'ge':562 'generat':106,500,508 'get':157 'go':608 'good':99 'gs':504,537,543,552,564 'guid':5,49 'hardcod':631 'header':300 'hour':594 'id':407,427,453,468,480,482 'idempot':320 'iea':566 'ilik':389 'implement':7 'import':231,238,240,242 'inbound':181 'inbound/outbound':70 'incom':162 'info':301 'input':681 'inquiri':206 'instal':234 'int':259 'interchang':11,30 'inventori':205 'invoic':42,105,200,203 'isa':502,523,533,568,612 'item':412 'key':257 'kw':332,382,438,473 'level':209 'limit':643 'line':411,416,471,489,491 'live':609 'log':581 'm':519 'map':17,52,111,142,147,172 'match':652 'mention':127 'miss':689 'model':264 'models.execute':331,381,437,472 'n1':356,361,368,373 'name':365,388,391,400 'need':92 'negoti':600 'new':119 'notic':46,195 'number':305,311,342,350,487 'object':62,171,176 'odoo':2,13,24,60,108,115,129,153,167,170,175,224,244,247,251,255,261,267,283,329,379 'odoo-edi-connector':1,128 'onboard':19 'order':22,41,85,179,198,226,280,285,310,318,339,415,465,470,484,488,490 'order_lines.append':449 'os':243 'os.getenv':246,250,254,260 'output':661 'overview':27 'p':536 'pars':161,219,276 'partner':18,66,80,121,140,355,360,364,377,380,390,394,398,399,406,408,467,479,481,606,633,642 'partnergid':540 'partnerisaid':529 'path':275,290 'per':641 'permiss':682 'pip':233 'po':183,185,304,312,323,341,348,349,486,551 'po1':413,418,422,424,430,434 'practic':571 'price':432,460,462 'print':345,395 'process':23,271,584,617,628 'product':426,436,448,452,454,456 'product.product':207,442 'purchas':40,84,178,279,309,317 'pwd':253,335,385,441,476 'python':158,227,228,498 'pyx12':230,235 'qti':428,458,459 'qualifi':613,634 'queue':624 'raw':575 'receipt':214 'receiv':143,513,596 'record':168 'ref':340,485 'request':623 'requir':81,680 'res.partner':386 'retail':79 'return':521 'review':673 'safeti':683 'sale':225,284,464 'sale.order':180,336,477 'scope':654 'se':559 'search':337,387,443 'segment':151,303,357,362,367,372,414,421 'send':94,494,587 'set':63,137,298 'ship':45,101,194 'skill':48,77,646 'skill-odoo-edi-connector' 'skip':347,403 'sku':423,446 'source-sickn33' 'specif':668 'specifi':133 'st':547 'standard':34 'stock':208 'stock.picking':196 'stop':674 'store':573,635 'strftime':517 'substitut':664 'success':686 'synchron':620 'tabl':148,582,640 'task':650 'test':602,611,670 'today':515,530,541 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'trade':65,120,139,605,632 'transact':54,136,174,294,297,306,314,404,506,577,598 'transaction.get':366,371,420 'treat':659 'uid':258,262,334,384,440,475 'unit':461 'unknown':375 'uom':457 'url':245,248,268 'use':75,610,644 'valid':669 'verifi':322 'web':622 'within':592 'work':124 'x':545 'x12':14,56,277 'x12file':232 'x12file.x12file':287 'xmlrpc.client':241 'xmlrpc.client.serverproxy':265 'y':518 'yourgid':539 'yourisaid':527 'zz':526,528","prices":[{"id":"c60592fc-7763-49ea-8d14-6bcfdd46162a","listingId":"b696606f-0bce-4250-a204-962db2a6339d","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:44.071Z"}],"sources":[{"listingId":"b696606f-0bce-4250-a204-962db2a6339d","source":"github","sourceId":"sickn33/antigravity-awesome-skills/odoo-edi-connector","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-edi-connector","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:44.071Z","lastSeenAt":"2026-04-23T06:51:40.706Z"}],"details":{"listingId":"b696606f-0bce-4250-a204-962db2a6339d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"odoo-edi-connector","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"9a6b18a46b57f2ccc7b845ce9700840f1547846f","skill_md_path":"skills/odoo-edi-connector/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-edi-connector"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"odoo-edi-connector","description":"Guide for implementing EDI (Electronic Data Interchange) with Odoo: X12, EDIFACT document mapping, partner onboarding, and automated order processing."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-edi-connector"},"updatedAt":"2026-04-23T06:51:40.706Z"}}