# erpfly > erpfly is an AI builder for ERPNext and Odoo. Describe a module in plain English and get DocTypes, models, reports and workflows you can install, review and own. ## Key facts - erpfly is an AI builder for ERP code. You describe a module in plain English and it writes a Frappe app for ERPNext or an addon for Odoo. - Supported versions: ERPNext / Frappe v15 and v16; Odoo 17, 18, 19 (Community and Enterprise). - Output is ordinary source code (Python, JavaScript, XML, JSON) delivered as a pull request to the customer's own GitHub or GitLab repository. It keeps working if the customer stops using erpfly. - Modules are installed and tested on a disposable sandbox copy of the customer's site before anything reaches production. - Generated code extends or inherits standard documents and models. It does not edit ERPNext, Frappe or Odoo core files. - erpfly reads schema (DocTypes, custom fields, Odoo models), not business records. A read-only key on a staging site is enough. - It is not a no-code platform, and it does not replace a consultant for GL posting changes, country-specific payroll or tax law, or large historical data migrations. - erpfly is not affiliated with Frappe Technologies or Odoo S.A. ## Platforms - [ERPNext AI builder](https://erpfly.com/erpnext/): Chat with erpfly to build new ERPNext apps or customize the ERPNext you run. Get a Frappe app for v15 or v16, tested on a sandbox, with code you own. - [Odoo AI builder](https://erpfly.com/odoo/): Chat with erpfly to build new Odoo addons or customize the Odoo you run. Real modules for Odoo 17, 18 and 19, tested on a sandbox, with code you own. ## Services - [ERPNext custom modules](https://erpfly.com/erpnext-custom-module-development/): Describe the ERPNext module you need and get a proper Frappe app with DocTypes, workflows, reports and tests. Install on v15 or v16. You own the code. - [ERPNext customization](https://erpfly.com/erpnext-customization/): Custom fields, workflows, print formats and reports for ERPNext, shipped as a small Frappe app with fixtures so every site gets the same changes. - [Odoo module development](https://erpfly.com/odoo-module-development/): Describe the Odoo custom module you need and get a real addon with models, views, access rules and tests. Built for Odoo 17, 18 and 19, ready for Odoo.sh. - [Odoo customization](https://erpfly.com/odoo-customization/): Add fields, change views with xpath, adjust QWeb reports and automate steps in Odoo 17, 18 and 19. Delivered as a small addon you can review and upgrade. - [Custom ERP development](https://erpfly.com/custom-erp-development/): When off-the-shelf ERP really doesn't fit, erpfly generates a custom ERP on the Frappe framework, with logins, roles, a REST API and reports already built in. - [How it works](https://erpfly.com/how-it-works/): The steps from prompt to pull request: schema reading, clarifying questions, generation, tests, sandbox and review. - [Pricing](https://erpfly.com/pricing/): Plans and billing. Free to try on a sandbox. - [About](https://erpfly.com/about/): Why erpfly exists and what we believe about ERP code ownership. - [Contact](https://erpfly.com/contact/): Talk to a person about ERPNext or Odoo work. Email hello@erpfly.com. ## Modules - [Accounting module](https://erpfly.com/modules/accounting/): Add a custom accounting module to ERPNext or Odoo. Manual journal controls, overhead allocations and branch reports, built on the standard ledger. - [Asset management module](https://erpfly.com/modules/asset-management/): Generate an asset management system on ERPNext or Odoo that links depreciation, hour meters and maintenance requests to the same asset record. - [Attendance management module](https://erpfly.com/modules/attendance-management/): An attendance management system for Odoo or ERPNext. Biometric device sync, shift rules, late marks and overtime, generated as code you own. - [CRM module](https://erpfly.com/modules/crm/): Generate a CRM module that fits how your sales team really sells. Leads, pipelines, follow-ups and quotes for ERPNext or Odoo, with code you own. - [Expense management module](https://erpfly.com/modules/expense-management/): Generate an expense management system for Odoo or ERPNext with daily caps, mileage rates and receipt rules built in, not buried in a policy PDF. - [Field service module](https://erpfly.com/modules/field-service/): Generate field service management software for ERPNext or Odoo. Dispatch, on-site checklists, parts and signatures that flow straight into stock and invoices. - [Fleet management module](https://erpfly.com/modules/fleet-management/): Build fleet management software inside ERPNext or Odoo. Fuel card imports, odometer checks, service reminders and cost per vehicle, all in your own ERP. - [Helpdesk module](https://erpfly.com/modules/helpdesk/): Build a helpdesk ticketing system inside ERPNext or Odoo, with SLAs, escalations and contract checks tied to your real customers, serials and invoices. - [HR and payroll module](https://erpfly.com/modules/hr-payroll/): HR and payroll software built on Frappe HR (ERPNext) or Odoo, with your overtime, allowances and approval rules generated as code you own. - [Inventory management module](https://erpfly.com/modules/inventory-management/): Build an inventory management system on ERPNext or Odoo around your own reorder rules, batches and stock counts. Real code in your repo. - [Invoice management module](https://erpfly.com/modules/invoice-management/): Build an invoice management system on ERPNext or Odoo that checks PO numbers, duplicates and disputes before invoices go out. Code you own. - [Leave management module](https://erpfly.com/modules/leave-management/): A leave management system on ERPNext or Odoo with your accrual, carry-forward and team cover rules built in. Generated code that you own. - [Manufacturing module](https://erpfly.com/modules/manufacturing/): Manufacturing ERP for ERPNext or Odoo shaped around your BOMs, work orders, job cards and machine rules. Generated as code your team owns. - [Point of sale module](https://erpfly.com/modules/point-of-sale/): Build a custom POS system on ERPNext or Odoo. Refund controls, store rules and receipt changes that respect offline tills, generated as code you own. - [Project management module](https://erpfly.com/modules/project-management/): Build an ERP project management module on ERPNext or Odoo that ties tasks and timesheets to budgets, milestone billing and margin, with code you own. - [Purchase management module](https://erpfly.com/modules/purchase-management/): Build a purchase management system on ERPNext or Odoo with quote rules, approval limits and three-way matching that fit how your buyers really work. - [Quality management module](https://erpfly.com/modules/quality-management/): Build a quality management system into Odoo or ERPNext. Inspections, lot holds, non-conformance and corrective actions, as code you own. - [Sales order management module](https://erpfly.com/modules/sales-order-management/): Generate a sales order management system for ERPNext or Odoo with your margin floors, split deliveries and approvals. Real code, in your own repo. - [School management module](https://erpfly.com/modules/school-management/): Build a school management system on the Frappe Education app or Odoo, with admissions, attendance alerts, sibling discounts and fees you can audit. - [Subscription billing module](https://erpfly.com/modules/subscription-billing/): Generate subscription billing software inside ERPNext or Odoo. Plans, metered usage, proration and renewals that post straight to your ledger. - [Warehouse management module](https://erpfly.com/modules/warehouse-management/): A warehouse management system on Odoo or ERPNext with bin locations, putaway rules, pick lists and scan-to-confirm picking. Code you own. ## Industries - [ERP for construction](https://erpfly.com/industries/construction/): ERP for construction companies on ERPNext or Odoo. Generate modules for progress claims, retention, variations and subcontractor RFIs, with code you own. - [ERP for distribution](https://erpfly.com/industries/distribution/): ERP for wholesale distributors on ERPNext or Odoo. Generate modules for landed cost by volume, supplier rebates and back order allocation, with code you own. - [ERP for education](https://erpfly.com/industries/education/): ERP for schools on ERPNext or Odoo. Generate modules for sibling discounts, fee instalments, admissions and transport routes, built around how your school runs. - [ERP for food & beverage](https://erpfly.com/industries/food-and-beverage/): ERP for food and beverage producers on ERPNext or Odoo. Generate modules for lot genealogy, FEFO picking, shelf-life rules and one-click recall traces. - [ERP for healthcare](https://erpfly.com/industries/healthcare/): ERP for healthcare clinics on ERPNext or Odoo. Generate modules for session packages, no-shows, consumables and practitioner payouts. Clear about compliance. - [ERP for logistics](https://erpfly.com/industries/logistics/): ERP for logistics and transport companies on ERPNext or Odoo. Generate modules for trip sheets, proof of delivery, fuel logs and detention charges. - [ERP for manufacturing](https://erpfly.com/industries/manufacturing/): ERP for manufacturing that follows your real shop floor. Generate ERPNext or Odoo modules for rework, scrap reasons and subcontracting. You own the code. - [ERP for retail](https://erpfly.com/industries/retail/): ERP for retail chains on ERPNext or Odoo. Generate modules for store transfers, shrinkage tracking, returns and replenishment that fit how your shops run. ## Comparisons - [erpfly or an ERP developer? For most real projects, the answer is both](https://erpfly.com/compare/ai-vs-hiring-erp-developer/): Generating ERPNext and Odoo modules with erpfly compared with hiring a freelancer or agency. Speed, cost, risk, and the jobs that still need a person. - [ERPNext vs Odoo: what we tell clients after building modules for both](https://erpfly.com/compare/erpnext-vs-odoo/): ERPNext vs Odoo compared by people who build modules on both. Licensing, hosting, accounting, customization, developer cost and upgrades, without the spin. - [ERPNext vs SAP Business One, for a growing company that only wants to choose once](https://erpfly.com/compare/erpnext-vs-sap-business-one/): ERPNext vs SAP Business One compared on licensing, partners, customization, manufacturing, localization and upgrades, for companies outgrowing basic accounting. - [Odoo vs a custom ERP, and when building your own is worth the trouble](https://erpfly.com/compare/odoo-vs-custom-erp/): Odoo vs a custom ERP compared on time to go live, cost of ownership, fit, upgrades and risk. When Odoo is the sensible default, and when custom really pays off. ## Guides - [Connecting biometric attendance devices to ERPNext](https://erpfly.com/blog/erpnext-biometric-attendance-integration/): Sync ZKTeco-style biometric devices with ERPNext: Employee Checkin, Shift Type auto attendance, Frappe's sync tool, timezones, duplicates and offline devices. - [_inherit vs _inherits in Odoo, explained with examples](https://erpfly.com/blog/odoo-inherit-vs-inherits/): _inherit extends or copies a model, _inherits links to a parent record by delegation. Examples for all three patterns, view xpath inheritance and gotchas. - [Odoo Studio vs a custom module: which should you use?](https://erpfly.com/blog/odoo-studio-vs-custom-module/): When Odoo Studio is enough, when you need a real addon, and how Studio's data-based customizations affect version control, upgrades and mixing the two. - [Server Scripts vs a custom app in ERPNext: when to use which](https://erpfly.com/blog/server-scripts-vs-custom-app-erpnext/): Server Scripts are quick, sandboxed and untestable. A custom Frappe app takes longer to set up. Here's where we draw the line, with code for both. - [Reviewing AI-generated ERP code: a checklist](https://erpfly.com/blog/ai-generated-erp-code-review/): A reviewer's checklist for AI-written ERPNext and Odoo code: permission bypasses, SQL injection, sudo(), N+1 queries, commits in loops, tests and migrations. - [How much does ERPNext customization cost?](https://erpfly.com/blog/erpnext-customization-cost/): What actually drives the cost of ERPNext customization, fixed price vs time and materials, and the hidden costs of upgrades, testing and data cleanup. - [Upgrading ERPNext without breaking your customizations](https://erpfly.com/blog/erpnext-upgrade-keep-customizations/): What breaks when you upgrade ERPNext a major version: core edits, Server Scripts, custom fields and patches. Plus a staging routine and testing checklist. - [How to create a custom module in Odoo 19](https://erpfly.com/blog/create-custom-module-odoo/): Scaffold an Odoo 19 addon, write the manifest, model, access CSV, list and form views and menu, then install with -i and upgrade with -u. - [Build vs buy ERP: a decision guide for 2026](https://erpfly.com/blog/build-vs-buy-erp/): Off-the-shelf, off-the-shelf plus custom modules, or a fully custom ERP. How to decide, what total cost really includes, and the red flags on each path. - [How to create a custom DocType in ERPNext](https://erpfly.com/blog/create-custom-doctype-erpnext/): Step by step: developer mode, bench new-app, fields, naming, permissions, controller methods and fixtures, plus the DocType mistakes we see most. ## Glossary - [__manifest__.py](https://erpfly.com/glossary/odoo-manifest/): __manifest__.py is the file that turns a Python package into an Odoo addon. It holds a single dictionary literal declaring the module's name, version, license and dependencies, the XML and CSV data files to load, and the static files it adds to asset bundles such as web.assets_backend. - [bench](https://erpfly.com/glossary/bench/): bench is the command-line tool for setting up and managing Frappe Framework and ERPNext deployments. The word also refers to the bench directory it creates, usually frappe-bench, which holds the apps, sites, Python environment and configuration shared by every site on that server. - [Child Table](https://erpfly.com/glossary/child-table/): A Child Table in Frappe and ERPNext is a DocType marked Is Child Table whose records only exist as rows inside a parent document, such as the items on a Sales Order. The parent holds the rows through a Table field, and each row stores its parent, parenttype, parentfield and idx. - [Custom Field](https://erpfly.com/glossary/custom-field/): A Custom Field is a field added to an existing DocType, such as Sales Order or Customer, without editing that DocType's source files. Frappe stores it as a record of the Custom Field DocType, adds a matching column to the database table and merges it into the form's metadata at runtime. - [DocType](https://erpfly.com/glossary/doctype/): A DocType is the basic data model in the Frappe Framework, which ERPNext is built on. It defines a type of record, its fields, naming rule, permissions and form layout, and Frappe creates a matching database table plus a list view and form view from that definition. - [Fixtures](https://erpfly.com/glossary/fixtures/): Fixtures are database records, such as Custom Fields, Property Setters, Roles or Workflows, that a Frappe app exports to JSON files in its fixtures folder. Frappe imports those files whenever the app is installed and on every bench migrate, so each site running the app ends up with the same records. - [Frappe app](https://erpfly.com/glossary/frappe-app/): A Frappe app is a Python package built on the Frappe Framework that lives in a bench's apps folder and gets installed on one or more sites. ERPNext is itself a Frappe app, and a custom Frappe app holds your own DocTypes, hooks, patches and front-end assets in a Git repository. - [hooks.py](https://erpfly.com/glossary/hooks-py/): hooks.py is the configuration file inside every Frappe app's Python package where the app declares how it plugs into the framework, such as document event handlers, scheduled jobs, fixtures, form script includes and class overrides. Frappe merges the hooks of all apps installed on a site and applies them together. - [ir.cron](https://erpfly.com/glossary/ir-cron/): ir.cron is the Odoo model behind Scheduled Actions: each record tells the server's cron workers to run a piece of Python code against a model at a fixed interval, such as every hour or every day. Modules usually ship them as XML data records that call a model method. - [ir.model.access.csv](https://erpfly.com/glossary/ir-model-access-csv/): ir.model.access.csv is the CSV data file in an Odoo module's security folder that creates ir.model.access records, each granting one user group read, write, create or delete rights on a whole model. A model with no line in it can only be used by superuser code. - [Odoo addon](https://erpfly.com/glossary/odoo-addon/): An Odoo addon (also called an Odoo module) is a Python package that Odoo can install into a database: a folder on the addons path with a __manifest__.py and an __init__.py, plus the models, XML views, security files, data and web assets it needs. - [Odoo Studio](https://erpfly.com/glossary/odoo-studio/): Odoo Studio is the no-code customization tool in Odoo Enterprise. It lets an admin add fields, change views, create models and apps, build automation rules, webhooks, approval rules and PDF report changes from the browser, and it stores that work as database records grouped under a module called studio_customization. - [Odoo.sh](https://erpfly.com/glossary/odoo-sh/): Odoo.sh is Odoo's official cloud platform for running Odoo Enterprise with your own custom modules. It connects to a GitHub repository, builds every branch you push in a container, and sorts branches into three stages: production, staging and development. - [OWL](https://erpfly.com/glossary/owl/): OWL (Odoo Web Library) is the JavaScript UI framework Odoo builds and uses for its web client. OWL components are ES6 classes with a QWeb template and a setup() method, keep reactive state through hooks like useState, and are plugged into Odoo through registries such as fields, systray and main_components. - [Print Format](https://erpfly.com/glossary/print-format/): A Print Format is the template Frappe uses to turn a document, such as a Sales Invoice or Delivery Note, into a printable page or PDF. It can be laid out by dragging fields in the Print Format Builder or written by hand as a Jinja HTML template with its own CSS. - [QWeb](https://erpfly.com/glossary/qweb/): QWeb is Odoo's XML templating engine. A QWeb template is ordinary XML or HTML with t- directives such as t-if, t-foreach, t-out and t-call, and Odoo uses it to render PDF reports and website and portal pages on the server and, through OWL, the web client's components in the browser. - [Record rules](https://erpfly.com/glossary/record-rules/): Record rules are ir.rule records that limit which individual records of an Odoo model a user can read, write, create or delete. Each rule holds a domain that is checked record by record after access rights, so record rules can narrow what ir.model.access.csv grants but never go beyond it. - [Script Report](https://erpfly.com/glossary/script-report/): A Script Report is a Frappe report whose columns and rows are produced by Python, typically an execute(filters) function that returns column definitions and data, with its filters declared in a JavaScript file. It's the report type to use when the numbers need more logic than a single SQL query can express. - [Server Script](https://erpfly.com/glossary/server-script/): A Server Script is a Frappe record holding Python code that is written in the desk and run in a restricted sandbox. Depending on its type, it runs on a document event, answers an API call, runs on a schedule or filters list queries, all without a custom app or a deploy. - [XPath view inheritance](https://erpfly.com/glossary/xpath-view-inheritance/): XPath view inheritance is how Odoo changes an existing view without editing it. A new ir.ui.view record points at the original through inherit_id, and xpath elements locate nodes in the parent arch to add content inside, before or after them, replace them, change their attributes or move them. ## Optional - [Full content](https://erpfly.com/llms-full.txt): Every service, module, industry, comparison and guide on this site as one Markdown file. - [Blog RSS](https://erpfly.com/rss.xml): New guides as they are published. - Markdown copy of any page: add .md to its path under /md/, for example https://erpfly.com/md/erpnext.md or https://erpfly.com/md/glossary/doctype.md