Hi Team,
I’ve successfully installed the “Healthcare module” on my ERPNext instance (version 15) using the following commands:
bench get-app --branch version-15 GitHub - earthians/marley: Open Source, Enterprise and Modern Health Information System
bench --site frontend install-app healthcare
The app installed properly, and I can access all the Healthcare DocTypes in the system.
However, I’m facing an issue when trying to import data using the Data Import Tool. Here’s what’s happening:
- The import job remains in a “Pending” state or
- Records are “not inserted”, and an error file is generated
- The issue happens “only for Healthcare DocTypes” (like
Patient
,Practitioner
, etc.) - I have verified that:
- The Excel template is correct (downloaded from the Data Import Tool)
- All mandatory fields are filled
I’d appreciate help or suggestions from anyone who has faced this before.
Is there any post-installation step needed for the Healthcare module to support data import?
Versions:
- ERPNext: v15.49.1
- Frappe: v15.53.0
- Healthcare: v15.1.4
- Frappe HR: v15.38.0
- India Compliance: v15.15.0
- Site name:
frontend
Below is the Error I’m getting:
Traceback with variables (most recent call last):
File “apps/frappe/frappe/core/doctype/data_import/data_import.py”, line 142, in start_import
i.import_data()
data_import = <DataImport: Patient Import on 2025-07-15 16:31:47.515059>
i = <frappe.core.doctype.data_import.importer.Importer object at 0x7ffffb2768d0>
File “apps/frappe/frappe/core/doctype/data_import/importer.py”, line 78, in import_data
payloads = self.import_file.get_payloads_for_import()
self = <frappe.core.doctype.data_import.importer.Importer object at 0x7ffffb2768d0>
File “apps/frappe/frappe/core/doctype/data_import/importer.py”, line 519, in get_payloads_for_import
doc, rows, data = self.parse_next_row_for_import(data)
self = <frappe.core.doctype.data_import.importer.ImportFile object at 0x7ffffb255190>
payloads =
data = [<frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>, <frappe.core.doctype.data_import.importer.Row object at 0x7ffffb204210>, <frappe.core.doctype.data_import.importer.Row object at 0x7ffffa3dda90>]
File “apps/frappe/frappe/core/doctype/data_import/importer.py”, line 555, in parse_next_row_for_import
parent_doc = row.parse_doc(doctype)
self = <frappe.core.doctype.data_import.importer.ImportFile object at 0x7ffffb255190>
data = [<frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>, <frappe.core.doctype.data_import.importer.Row object at 0x7ffffb204210>, <frappe.core.doctype.data_import.importer.Row object at 0x7ffffa3dda90>]
doctypes = [(‘Patient’, None)]
first_row = <frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>
rows = [<frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>]
row = <frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>
parent_doc = None
doctype = ‘Patient’
table_df = None
File “apps/frappe/frappe/core/doctype/data_import/importer.py”, line 652, in parse_doc
return self._parse_doc(doctype, columns, values, parent_doc, table_df)
self = <frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>
doctype = ‘Patient’
parent_doc = None
table_df = None
col_indexes = [0, 1]
values = [‘Satya’, ‘Female’]
columns = [<frappe.core.doctype.data_import.importer.Column object at 0x7ffffb2078d0>, <frappe.core.doctype.data_import.importer.Column object at 0x7ffffb399790>]
File “apps/frappe/frappe/core/doctype/data_import/importer.py”, line 658, in parse_doc
doc = frappe.new_doc(
self = <frappe.core.doctype.data_import.importer.Row object at 0x7ffffb256810>
doctype = ‘Patient’
columns = [<frappe.core.doctype.data_import.importer.Column object at 0x7ffffb2078d0>, <frappe.core.doctype.data_import.importer.Column object at 0x7ffffb399790>]
values = [‘Satya’, ‘Female’]
parent_doc = None
table_df = None
doc = {}
File “apps/frappe/frappe/init.py”, line 1148, in new_doc
new_doc = get_new_doc(doctype, parent_doc, parentfield, as_dict=as_dict)
doctype = ‘Patient’
parent_doc = None
parentfield = None
as_dict = True
kwargs = {}
get_new_doc = <function get_new_doc at 0x7ffffdc26840>
File “apps/frappe/frappe/model/create_new.py”, line 22, in get_new_doc
frappe.local.new_doc_templates[doctype] = make_new_doc(doctype)
doctype = ‘Patient’
parent_doc = None
parentfield = None
as_dict = True
File “apps/frappe/frappe/model/create_new.py”, line 35, in make_new_doc
doc = frappe.get_doc({“doctype”: doctype, “__islocal”: 1, “owner”: frappe.session.user, “docstatus”: 0})
doctype = ‘Patient’
File “apps/frappe/frappe/init.py”, line 1291, in get_doc
doc = frappe.model.document.get_doc(*args, **kwargs)
args = ({‘doctype’: ‘Patient’, ‘__islocal’: 1, ‘owner’: ‘Administrator’, ‘docstatus’: 0},)
kwargs = {}
frappe = <module ‘frappe’ from ‘apps/frappe/frappe/init.py’>
File “apps/frappe/frappe/model/document.py”, line 83, in get_doc
controller = get_controller(doctype)
args = ({‘doctype’: ‘Patient’, ‘__islocal’: 1, ‘owner’: ‘Administrator’, ‘docstatus’: 0},)
kwargs = {‘doctype’: ‘Patient’, ‘__islocal’: 1, ‘owner’: ‘Administrator’, ‘docstatus’: 0}
doctype = ‘Patient’
File “apps/frappe/frappe/model/base_document.py”, line 71, in get_controller
site_controllers[doctype] = import_controller(doctype)
doctype = ‘Patient’
site_controllers = {‘Data Import’: <class ‘frappe.core.doctype.data_import.data_import.DataImport’>, ‘File’: <class ‘frappe.core.doctype.file.file.File’>}
File “apps/frappe/frappe/model/base_document.py”, line 96, in import_controller
module = load_doctype_module(doctype, module_name)
doctype = ‘Patient’
Document = <class ‘frappe.model.document.Document’>
NestedSet = <class ‘frappe.utils.nestedset.NestedSet’>
module_name = ‘Healthcare’
doctype_info = {‘name’: ‘Patient’, ‘creation’: datetime.datetime(2017, 1, 23, 14, 3, 49, 84370), ‘modified’: datetime.datetime(2023, 1, 13, 17, 48, 59, 69268), ‘modified_by’: ‘Administrator’, ‘owner’: ‘Administrator’, ‘docstatus’: 0, ‘idx’: 0, ‘search_fields’: ‘patient_name,mobile,email,phone,uid’, ‘issingle’: 0, ‘is_virtual’: 0, ‘is_tree’: 0, ‘istable’: 0, ‘editable_grid’: 0, ‘track_changes’: 1, ‘module’: ‘Healthcare’, ‘restrict_to_domain’: ‘Healthcare’, ‘app’: None, ‘autoname’: ‘naming_series:’, ‘naming_rule’: None, ‘title_field’: ‘patient_name’, ‘image_field’: ‘image’, ‘timeline_field’: None, ‘sort_field’: ‘modified’, ‘sort_order’: ‘ASC’, ‘description’: ‘Patient’, ‘colour’: None, ‘read_only’: 0, ‘in_create’: 0, ‘menu_index’: None, ‘parent_node’: None, ‘smallicon’: None, ‘allow_copy’: 0, ‘allow_rename’: 1, ‘allow_import’: 1, ‘hide_toolbar’: 0, ‘track_seen’: 0, ‘max_attachments’: 50, ‘print_outline’: None, ‘document_type’: ‘Document’, ‘icon’: ‘fa fa-user’, ‘color’: None, ‘tag_fields’: None, 'subject…
module_path = None
class_overrides = {‘Address’: [‘erpnext.accounts.custom.address.ERPNextAddress’], ‘Customize Form’: [‘india_compliance.audit_trail.overrides.customize_form.CustomizeForm’], ‘Employee’: [‘hrms.overrides.employee_master.EmployeeMaster’], ‘Timesheet’: [‘hrms.overrides.employee_timesheet.EmployeeTimesheet’], ‘Payment Entry’: [‘hrms.overrides.employee_payment_entry.EmployeePaymentEntry’], ‘Project’: [‘hrms.overrides.employee_project.EmployeeProject’], ‘Sales Invoice’: [‘healthcare.healthcare.custom_doctype.sales_invoice.HealthcareSalesInvoice’]}
File “apps/frappe/frappe/modules/utils.py”, line 248, in load_doctype_module
app = get_module_app(module)
doctype = ‘Patient’
module = ‘Healthcare’
prefix = ‘’
suffix = ‘’
File “apps/frappe/frappe/modules/utils.py”, line 273, in get_module_app
frappe.throw((“Module {} not found”).format(module), exc=frappe.DoesNotExistError)
module = ‘Healthcare’
app = None
File “apps/frappe/frappe/init.py”, line 603, in throw
msgprint(
msg = ‘Module Healthcare not found’
exc = <class ‘frappe.exceptions.DoesNotExistError’>
title = None
is_minimizable = False
wide = False
as_list = False
primary_action = None
File “apps/frappe/frappe/init.py”, line 568, in msgprint
_raise_exception()
msg = ‘Module Healthcare not found’
title = None
raise_exception = <class ‘frappe.exceptions.DoesNotExistError’>
as_table = False
as_list = False
indicator = ‘red’
alert = False
primary_action = None
is_minimizable = False
wide = False
realtime = False
sys = <module ‘sys’ (built-in)>
_raise_exception = <function msgprint.._raise_exception at 0x7ffffdc26660>
inspect = <module ‘inspect’ from ‘/usr/local/lib/python3.11/inspect.py’>
out = {‘message’: ‘Module Healthcare not found’, ‘title’: ‘Message’, ‘indicator’: ‘red’, ‘raise_exception’: 1, ‘__frappe_exc_id’: ‘6437f0558f9c2e8c5a1a7e37e58282b7f4e73464a42899f9b2ca93b2’}
File “apps/frappe/frappe/init.py”, line 519, in _raise_exception
raise exc
exc = DoesNotExistError(‘Module Healthcare not found’)
inspect = <module ‘inspect’ from ‘/usr/local/lib/python3.11/inspect.py’>
msg = ‘Module Healthcare not found’
out = {‘message’: ‘Module Healthcare not found’, ‘title’: ‘Message’, ‘indicator’: ‘red’, ‘raise_exception’: 1, ‘__frappe_exc_id’: ‘6437f0558f9c2e8c5a1a7e37e58282b7f4e73464a42899f9b2ca93b2’}
raise_exception = <class ‘frappe.exceptions.DoesNotExistError’>
frappe.exceptions.DoesNotExistError: Module Healthcare not found