feat: Laboratory Module Enhancements (#22416)

* feat: option to add organism count in descriptive tests
print format to accommodate descriptive test changes
fix: refactoring, clean up wip

* lab test - result based on secondary uom, result format options
lab test print - consider result format options, result legend and worksheet instructions

* feat: option to allow results blank in lab test if configured via lab test template

* fix: rename child doctypes, rename related links

* fix: field display depends on, cleanup - rename fields and variables

* fix: get from encounter popup layout, code cleanup and minor fixes

* fix: sms send dialog bug

* fix: lab test get from encounter html class name typo corrected

* fix: lab test organisms depends on condition

* fix: reorder fields - depends on fields brought together

* fix: PR review feedback, removed : separator, result formatting applied to result UOM

* fix: child table js removed

* fix: internal field require_result_value hidden, secondary uom result field type set to data

* fix: Use ORM methods instead of db.sql, code cleanup, style

* fix: create item price for lab test template if billable, code cleanup

* fix: patch rename doctypes before fields, deleted renamed child doctypes

* fix: secondary uom result calc - warn user if calculation fails

* fix: patch to insert entries into renamed child tables

* fix: codacy issues

* fix: patch duplicate error as items are already migrated in v12 migrate
organisms child table field name updated

* fix: patch a bit lenghty, added comments

* fix: patch

* fix: require_result_value flag marked hidden

* fix: code cleanup-up

* fix: patch - lab_test rename field, lab_test_group_template select option corrected

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
diff --git a/erpnext/healthcare/doctype/antibiotic/antibiotic.json b/erpnext/healthcare/doctype/antibiotic/antibiotic.json
index d481036..41a3e31 100644
--- a/erpnext/healthcare/doctype/antibiotic/antibiotic.json
+++ b/erpnext/healthcare/doctype/antibiotic/antibiotic.json
@@ -1,115 +1,151 @@
 {
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 1, 
- "allow_rename": 1, 
- "autoname": "field:antibiotic_name", 
- "beta": 1, 
- "creation": "2016-02-23 11:11:30.749731", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 0, 
+ "allow_copy": 1,
+ "allow_events_in_timeline": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 1,
+ "allow_rename": 1,
+ "autoname": "field:antibiotic_name",
+ "beta": 1,
+ "creation": "2016-02-23 11:11:30.749731",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "editable_grid": 0,
  "fields": [
   {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "antibiotic_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Antibiotic Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "antibiotic_name",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Antibiotic Name",
+   "length": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 1
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "abbr",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 0,
+   "in_standard_filter": 0,
+   "label": "Abbr",
+   "length": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 1
   }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2017-08-31 13:44:43.199657", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Antibiotic", 
- "name_case": "", 
- "owner": "Administrator", 
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 0,
+ "max_attachments": 0,
+ "modified": "2019-10-01 17:58:23.136498",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Antibiotic",
+ "name_case": "",
+ "owner": "Administrator",
  "permissions": [
   {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Healthcare Administrator", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
+   "amend": 0,
+   "cancel": 0,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "if_owner": 0,
+   "import": 0,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Healthcare Administrator",
+   "set_user_permissions": 0,
+   "share": 1,
+   "submit": 0,
    "write": 1
-  }, 
+  },
   {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Laboratory User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
+   "amend": 0,
+   "cancel": 0,
+   "create": 0,
+   "delete": 0,
+   "email": 1,
+   "export": 1,
+   "if_owner": 0,
+   "import": 0,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Laboratory User",
+   "set_user_permissions": 0,
+   "share": 1,
+   "submit": 0,
    "write": 0
   }
- ], 
- "quick_entry": 1, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "search_fields": "antibiotic_name", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "title_field": "antibiotic_name", 
- "track_changes": 0, 
- "track_seen": 0
+ ],
+ "quick_entry": 1,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "restrict_to_domain": "Healthcare",
+ "search_fields": "antibiotic_name",
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "title_field": "antibiotic_name",
+ "track_changes": 0,
+ "track_seen": 0,
+ "track_views": 0
 }
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/__init__.py b/erpnext/healthcare/doctype/descriptive_test_result/__init__.py
similarity index 100%
copy from erpnext/healthcare/doctype/lab_test_groups/__init__.py
copy to erpnext/healthcare/doctype/descriptive_test_result/__init__.py
diff --git a/erpnext/healthcare/doctype/descriptive_test_result/descriptive_test_result.json b/erpnext/healthcare/doctype/descriptive_test_result/descriptive_test_result.json
new file mode 100644
index 0000000..fcd3828
--- /dev/null
+++ b/erpnext/healthcare/doctype/descriptive_test_result/descriptive_test_result.json
@@ -0,0 +1,74 @@
+{
+ "actions": [],
+ "allow_copy": 1,
+ "beta": 1,
+ "creation": "2016-02-22 15:12:36.202380",
+ "doctype": "DocType",
+ "document_type": "Document",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "lab_test_particulars",
+  "result_value",
+  "allow_blank",
+  "template",
+  "require_result_value"
+ ],
+ "fields": [
+  {
+   "fieldname": "lab_test_particulars",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Particulars",
+   "read_only": 1
+  },
+  {
+   "depends_on": "eval:doc.require_result_value == 1",
+   "fieldname": "result_value",
+   "fieldtype": "Small Text",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Value"
+  },
+  {
+   "fieldname": "template",
+   "fieldtype": "Link",
+   "hidden": 1,
+   "label": "Template",
+   "options": "Lab Test Template",
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "default": "0",
+   "fieldname": "require_result_value",
+   "fieldtype": "Check",
+   "hidden": 1,
+   "label": "Require Result Value",
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 1
+  },
+  {
+   "default": "1",
+   "fieldname": "allow_blank",
+   "fieldtype": "Check",
+   "label": "Allow Blank",
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 1
+  }
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2020-07-23 12:33:47.693065",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Descriptive Test Result",
+ "owner": "Administrator",
+ "permissions": [],
+ "restrict_to_domain": "Healthcare",
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/descriptive_test_result/descriptive_test_result.py
similarity index 83%
copy from erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
copy to erpnext/healthcare/doctype/descriptive_test_result/descriptive_test_result.py
index c67531c..7ccf6b5 100644
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
+++ b/erpnext/healthcare/doctype/descriptive_test_result/descriptive_test_result.py
@@ -5,5 +5,5 @@
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class LabTestGroups(Document):
+class DescriptiveTestResult(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/special_test_template/__init__.py b/erpnext/healthcare/doctype/descriptive_test_template/__init__.py
similarity index 100%
rename from erpnext/healthcare/doctype/special_test_template/__init__.py
rename to erpnext/healthcare/doctype/descriptive_test_template/__init__.py
diff --git a/erpnext/healthcare/doctype/descriptive_test_template/descriptive_test_template.json b/erpnext/healthcare/doctype/descriptive_test_template/descriptive_test_template.json
new file mode 100644
index 0000000..9ee8f4f
--- /dev/null
+++ b/erpnext/healthcare/doctype/descriptive_test_template/descriptive_test_template.json
@@ -0,0 +1,41 @@
+{
+ "actions": [],
+ "allow_copy": 1,
+ "beta": 1,
+ "creation": "2016-02-22 16:12:12.394200",
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "particulars",
+  "allow_blank"
+ ],
+ "fields": [
+  {
+   "fieldname": "particulars",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Result Component"
+  },
+  {
+   "default": "0",
+   "fieldname": "allow_blank",
+   "fieldtype": "Check",
+   "in_list_view": 1,
+   "label": "Allow Blank"
+  }
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2020-06-24 14:03:51.728863",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Descriptive Test Template",
+ "owner": "Administrator",
+ "permissions": [],
+ "restrict_to_domain": "Healthcare",
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/special_test_template/special_test_template.py b/erpnext/healthcare/doctype/descriptive_test_template/descriptive_test_template.py
similarity index 83%
copy from erpnext/healthcare/doctype/special_test_template/special_test_template.py
copy to erpnext/healthcare/doctype/descriptive_test_template/descriptive_test_template.py
index e4e0d5b..281f32d 100644
--- a/erpnext/healthcare/doctype/special_test_template/special_test_template.py
+++ b/erpnext/healthcare/doctype/descriptive_test_template/descriptive_test_template.py
@@ -5,5 +5,5 @@
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class SpecialTestTemplate(Document):
+class DescriptiveTestTemplate(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json
index 2f0115c..0104386 100644
--- a/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json
+++ b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json
@@ -39,8 +39,8 @@
   "create_lab_test_on_si_submit",
   "create_sample_collection_for_lab_test",
   "column_break_34",
-  "employee_name_and_designation_in_print",
   "lab_test_approval_required",
+  "employee_name_and_designation_in_print",
   "custom_signature_in_print",
   "laboratory_sms_alerts",
   "sms_printed",
@@ -306,7 +306,7 @@
  ],
  "issingle": 1,
  "links": [],
- "modified": "2020-03-26 11:25:21.842092",
+ "modified": "2020-07-08 15:17:21.543218",
  "modified_by": "Administrator",
  "module": "Healthcare",
  "name": "Healthcare Settings",
diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.js b/erpnext/healthcare/doctype/lab_test/lab_test.js
index bf1ecc8..8036c7d 100644
--- a/erpnext/healthcare/doctype/lab_test/lab_test.js
+++ b/erpnext/healthcare/doctype/lab_test/lab_test.js
@@ -1,49 +1,53 @@
 // Copyright (c) 2016, ESS and contributors
 // For license information, please see license.txt
 
-cur_frm.cscript.custom_refresh = function(doc) {
-	cur_frm.toggle_display("sb_sensitivity", doc.sensitivity_toggle=="1");
-	cur_frm.toggle_display("sb_special", doc.special_toggle=="1");
-	cur_frm.toggle_display("sb_normal", doc.normal_toggle=="1");
+cur_frm.cscript.custom_refresh = function (doc) {
+	cur_frm.toggle_display('sb_sensitivity', doc.sensitivity_toggle);
+	cur_frm.toggle_display('organisms_section', doc.descriptive_toggle);
+	cur_frm.toggle_display('sb_descriptive', doc.descriptive_toggle);
+	cur_frm.toggle_display('sb_normal', doc.normal_toggle);
 };
 
 frappe.ui.form.on('Lab Test', {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.get_field('normal_test_items').grid.editable_fields = [
-			{fieldname: 'lab_test_name', columns: 3},
-			{fieldname: 'lab_test_event', columns: 2},
-			{fieldname: 'result_value', columns: 2},
-			{fieldname: 'lab_test_uom', columns: 1},
-			{fieldname: 'normal_range', columns: 2}
+			{ fieldname: 'lab_test_name', columns: 3 },
+			{ fieldname: 'lab_test_event', columns: 2 },
+			{ fieldname: 'result_value', columns: 2 },
+			{ fieldname: 'lab_test_uom', columns: 1 },
+			{ fieldname: 'normal_range', columns: 2 }
 		];
-		frm.get_field('special_test_items').grid.editable_fields = [
-			{fieldname: 'lab_test_particulars', columns: 3},
-			{fieldname: 'result_value', columns: 7}
+		frm.get_field('descriptive_test_items').grid.editable_fields = [
+			{ fieldname: 'lab_test_particulars', columns: 3 },
+			{ fieldname: 'result_value', columns: 7 }
 		];
 	},
-	refresh :  function(frm){
+	refresh: function (frm) {
 		refresh_field('normal_test_items');
-		refresh_field('special_test_items');
-		if(frm.doc.__islocal){
+		refresh_field('descriptive_test_items');
+		if (frm.doc.__islocal) {
 			frm.add_custom_button(__('Get from Patient Encounter'), function () {
 				get_lab_test_prescribed(frm);
 			});
 		}
-		if(frm.doc.docstatus==1	&&	frm.doc.status!='Approved'	&&	frm.doc.status!='Rejected'	&&	frappe.defaults.get_default("lab_test_approval_required")	&&	frappe.user.has_role("LabTest Approver")){
-			frm.add_custom_button(__('Approve'), function() {
-				status_update(1,frm);
-			});
-			frm.add_custom_button(__('Reject'), function() {
-				status_update(0,frm);
-			});
+		if (frappe.defaults.get_default('lab_test_approval_required') && frappe.user.has_role('LabTest Approver')) {
+			if (frm.doc.docstatus === 1 && frm.doc.status !== 'Approved' && frm.doc.status !== 'Rejected') {
+				frm.add_custom_button(__('Approve'), function () {
+					status_update(1, frm);
+				});
+				frm.add_custom_button(__('Reject'), function () {
+					status_update(0, frm);
+				});
+			}
 		}
-		if(frm.doc.docstatus==1 && frm.doc.sms_sent==0){
-			frm.add_custom_button(__('Send SMS'), function() {
+
+		if (frm.doc.docstatus === 1 && frm.doc.sms_sent === 0 && frm.doc.status !== 'Rejected' ) {
+			frm.add_custom_button(__('Send SMS'), function () {
 				frappe.call({
-					method: "erpnext.healthcare.doctype.healthcare_settings.healthcare_settings.get_sms_text",
-					args:{doc: frm.doc.name},
-					callback: function(r) {
-						if(!r.exc) {
+					method: 'erpnext.healthcare.doctype.healthcare_settings.healthcare_settings.get_sms_text',
+					args: { doc: frm.doc.name },
+					callback: function (r) {
+						if (!r.exc) {
 							var emailed = r.message.emailed;
 							var printed = r.message.printed;
 							make_dialog(frm, emailed, printed);
@@ -53,246 +57,223 @@
 			});
 		}
 
-	},
-	onload: function (frm) {
-		frm.add_fetch("practitioner", "department", "department");
-		if(frm.doc.employee){
-			frappe.call({
-				method: "frappe.client.get",
-				args:{
-					doctype: "Employee",
-					name: frm.doc.employee
-				},
-				callback: function(arg){
-					frappe.model.set_value(frm.doctype,frm.docname,"employee_name", arg.message.employee_name);
-					frappe.model.set_value(frm.doctype,frm.docname,"employee_designation", arg.message.designation);
-				}
-			});
-		}
 	}
 });
 
-frappe.ui.form.on("Lab Test", "patient", function(frm) {
-	if(frm.doc.patient){
+frappe.ui.form.on('Lab Test', 'patient', function (frm) {
+	if (frm.doc.patient) {
 		frappe.call({
-			"method": "erpnext.healthcare.doctype.patient.patient.get_patient_detail",
-			args: {
-				patient: frm.doc.patient
-			},
+			'method': 'erpnext.healthcare.doctype.patient.patient.get_patient_detail',
+			args: { patient: frm.doc.patient },
 			callback: function (data) {
 				var age = null;
-				if(data.message.dob){
+				if (data.message.dob) {
 					age = calculate_age(data.message.dob);
 				}
-				frappe.model.set_value(frm.doctype,frm.docname, "patient_age", age);
-				frappe.model.set_value(frm.doctype,frm.docname, "patient_sex", data.message.sex);
-				frappe.model.set_value(frm.doctype,frm.docname, "email", data.message.email);
-				frappe.model.set_value(frm.doctype,frm.docname, "mobile", data.message.mobile);
-				frappe.model.set_value(frm.doctype,frm.docname, "report_preference", data.message.report_preference);
+				let values = {
+					'patient_age': age,
+					'patient_sex': data.message.sex,
+					'email': data.message.email,
+					'mobile': data.message.mobile,
+					'report_preference': data.message.report_preference
+				};
+				frm.set_value(values);
 			}
 		});
 	}
 });
 
-frappe.ui.form.on('Normal Test Items', {
-	normal_test_items_remove: function() {
-		frappe.msgprint(__("Not permitted, configure Lab Test Template as required"));
+frappe.ui.form.on('Normal Test Result', {
+	normal_test_items_remove: function () {
+		frappe.msgprint(__('Not permitted, configure Lab Test Template as required'));
 		cur_frm.reload_doc();
 	}
 });
 
-frappe.ui.form.on('Special Test Items', {
-	special_test_items_remove: function() {
-		frappe.msgprint(__("Not permitted, configure Lab Test Template as required"));
+frappe.ui.form.on('Descriptive Test Result', {
+	descriptive_test_items_remove: function () {
+		frappe.msgprint(__('Not permitted, configure Lab Test Template as required'));
 		cur_frm.reload_doc();
 	}
 });
 
-var status_update = function(approve,frm){
+var status_update = function (approve, frm) {
 	var doc = frm.doc;
 	var status = null;
-	if(approve == 1){
-		status = "Approved";
+	if (approve == 1) {
+		status = 'Approved';
 	}
 	else {
-		status = "Rejected";
+		status = 'Rejected';
 	}
 	frappe.call({
-		method: "erpnext.healthcare.doctype.lab_test.lab_test.update_status",
-		args: {status: status, name: doc.name},
-		callback: function(){
+		method: 'erpnext.healthcare.doctype.lab_test.lab_test.update_status',
+		args: { status: status, name: doc.name },
+		callback: function () {
 			cur_frm.reload_doc();
 		}
 	});
 };
 
-var get_lab_test_prescribed = function(frm){
-	if(frm.doc.patient){
+var get_lab_test_prescribed = function (frm) {
+	if (frm.doc.patient) {
 		frappe.call({
-			method:	"erpnext.healthcare.doctype.lab_test.lab_test.get_lab_test_prescribed",
-			args:	{patient: frm.doc.patient},
-			callback: function(r){
+			method: 'erpnext.healthcare.doctype.lab_test.lab_test.get_lab_test_prescribed',
+			args: { patient: frm.doc.patient },
+			callback: function (r) {
 				show_lab_tests(frm, r.message);
 			}
 		});
 	}
-	else{
-		frappe.msgprint(__("Please select a Patient to get Lab Tests"));
+	else {
+		frappe.msgprint(__('Please select Patient to get Lab Tests'));
 	}
 };
 
-var show_lab_tests = function(frm, result){
+var show_lab_tests = function (frm, lab_test_list) {
 	var d = new frappe.ui.Dialog({
-		title: __("Lab Tests"),
-		fields: [
-			{
-				fieldtype: "HTML", fieldname: "lab_test"
-			}
-		]
+		title: __('Lab Tests'),
+		fields: [{
+			fieldtype: 'HTML', fieldname: 'lab_test'
+		}]
 	});
 	var html_field = d.fields_dict.lab_test.$wrapper;
 	html_field.empty();
-	$.each(result, function(x, y){
-		var row = $(repl('<div class="col-xs-12" style="padding-top:12px; text-align:center;" >\
-		<div class="col-xs-2"> %(lab_test)s </div>\
-		<div class="col-xs-2"> %(encounter)s </div>\
-		<div class="col-xs-3"> %(practitioner)s </div>\
-		<div class="col-xs-3"> %(date)s </div>\
-		<div class="col-xs-1">\
-		<a data-name="%(name)s" data-lab-test="%(lab_test)s"\
-		data-encounter="%(encounter)s" data-practitioner="%(practitioner)s"\
-		data-invoiced="%(invoiced)s" href="#"><button class="btn btn-default btn-xs">Get Lab Tests\
-		</button></a></div></div>', {name:y[0], lab_test: y[1], encounter:y[2], invoiced:y[3], practitioner:y[4], date:y[5]})).appendTo(html_field);
-		row.find("a").click(function() {
-			frm.doc.template = $(this).attr("data-lab-test");
-			frm.doc.prescription = $(this).attr("data-name");
-			frm.doc.practitioner = $(this).attr("data-practitioner");
-			frm.set_df_property("template", "read_only", 1);
-			frm.set_df_property("patient", "read_only", 1);
-			frm.set_df_property("practitioner", "read_only", 1);
+	$.each(lab_test_list, function (x, y) {
+		var row = $(repl(
+			'<div class="col-xs-12" style="padding-top:12px;">\
+				<div class="col-xs-3"> %(lab_test)s </div>\
+				<div class="col-xs-4"> %(practitioner_name)s<br>%(encounter)s</div>\
+				<div class="col-xs-3"> %(date)s </div>\
+				<div class="col-xs-1">\
+					<a data-name="%(name)s" data-lab-test="%(lab_test)s"\
+					data-encounter="%(encounter)s" data-practitioner="%(practitioner)s"\
+					data-invoiced="%(invoiced)s" href="#"><button class="btn btn-default btn-xs">Get</button></a>\
+				</div>\
+			</div><hr>',
+			{ name: y[0], lab_test: y[1], encounter: y[2], invoiced: y[3], practitioner: y[4], practitioner_name: y[5], date: y[6] })
+		).appendTo(html_field);
+
+		row.find("a").click(function () {
+			frm.doc.template = $(this).attr('data-lab-test');
+			frm.doc.prescription = $(this).attr('data-name');
+			frm.doc.practitioner = $(this).attr('data-practitioner');
+			frm.set_df_property('template', 'read_only', 1);
+			frm.set_df_property('patient', 'read_only', 1);
+			frm.set_df_property('practitioner', 'read_only', 1);
 			frm.doc.invoiced = 0;
-			if($(this).attr("data-invoiced") == 1){
+			if ($(this).attr('data-invoiced') === 1) {
 				frm.doc.invoiced = 1;
 			}
-			refresh_field("invoiced");
-			refresh_field("template");
+			refresh_field('invoiced');
+			refresh_field('template');
 			d.hide();
 			return false;
 		});
 	});
-	if(!result.length){
-		var msg = __("No Lab Tests found for the Patient {0}", [frm.doc.patient_name.bold()]);
+	if (!lab_test_list.length) {
+		var msg = __('No Lab Tests found for the Patient {0}', [frm.doc.patient_name.bold()]);
 		html_field.empty();
-		$(repl('<div class="col-xs-12" style="padding-top:0px;" >%(msg)s</div>', {msg: msg})).appendTo(html_field);
+		$(repl('<div class="col-xs-12" style="padding-top:0px;" >%(msg)s</div>', { msg: msg })).appendTo(html_field);
 	}
 	d.show();
 };
 
-cur_frm.cscript.custom_before_submit =  function(doc) {
-	if(doc.normal_test_items){
-		for(let result in doc.normal_test_items){
-			if(!doc.normal_test_items[result].result_value	&&	doc.normal_test_items[result].require_result_value == 1){
-				frappe.msgprint(__("Please input all required Result Value(s)"));
-				throw("Error");
+cur_frm.cscript.custom_before_submit = function (doc) {
+	if (doc.normal_test_items) {
+		for (let result in doc.normal_test_items) {
+			if (!doc.normal_test_items[result].result_value && !doc.normal_test_items[result].allow_blank && doc.normal_test_items[result].require_result_value) {
+				frappe.throw(__('Please input all required result values'));
 			}
 		}
 	}
-	if(doc.special_test_items){
-		for(let result in doc.special_test_items){
-			if(!doc.special_test_items[result].result_value	&&	doc.special_test_items[result].require_result_value == 1){
-				frappe.msgprint(__("Please input all required Result Value(s)"));
-				throw("Error");
+	if (doc.descriptive_test_items) {
+		for (let result in doc.descriptive_test_items) {
+			if (!doc.descriptive_test_items[result].result_value && !doc.descriptive_test_items[result].allow_blank && doc.descriptive_test_items[result].require_result_value) {
+				frappe.throw(__('Please input all required result values'));
 			}
 		}
 	}
 };
 
-var make_dialog = function(frm, emailed, printed) {
+var make_dialog = function (frm, emailed, printed) {
 	var number = frm.doc.mobile;
 
 	var dialog = new frappe.ui.Dialog({
 		title: 'Send SMS',
 		width: 400,
 		fields: [
-			{fieldname:'sms_type', fieldtype:'Select', label:'Type', options:
-			['Emailed','Printed']},
-			{fieldname:'number', fieldtype:'Data', label:'Mobile Number', reqd:1},
-			{fieldname:'messages_label', fieldtype:'HTML'},
-			{fieldname:'messages', fieldtype:'HTML', reqd:1}
+			{ fieldname: 'sms_type', fieldtype: 'Select', label: 'Type', options: ['Emailed', 'Printed'] },
+			{ fieldname: 'number', fieldtype: 'Data', label: 'Mobile Number', reqd: 1 },
+			{ fieldname: 'message', fieldtype: 'Small Text', label: 'Message', reqd: 1 }
 		],
-		primary_action_label: __("Send"),
-		primary_action : function(){
+		primary_action_label: __('Send'),
+		primary_action: function () {
 			var values = dialog.fields_dict;
-			if(!values){
+			if (!values) {
 				return;
 			}
-			send_sms(values,frm);
+			send_sms(values, frm);
 			dialog.hide();
 		}
 	});
-	if(frm.doc.report_preference == "Email"){
+	if (frm.doc.report_preference == 'Print') {
 		dialog.set_values({
-			'sms_type': "Emailed",
-			'number': number
+			'sms_type': 'Printed',
+			'number': number,
+			'message': printed
 		});
-		dialog.fields_dict.messages_label.html("Message".bold());
-		dialog.fields_dict.messages.html(emailed);
-	}else{
+	} else {
 		dialog.set_values({
-			'sms_type': "Printed",
-			'number': number
+			'sms_type': 'Emailed',
+			'number': number,
+			'message': emailed
 		});
-		dialog.fields_dict.messages_label.html("Message".bold());
-		dialog.fields_dict.messages.html(printed);
 	}
 	var fd = dialog.fields_dict;
-	$(fd.sms_type.input).change(function(){
-		if(dialog.get_value('sms_type') == 'Emailed'){
+	$(fd.sms_type.input).change(function () {
+		if (dialog.get_value('sms_type') == 'Emailed') {
 			dialog.set_values({
-				'number': number
+				'number': number,
+				'message': emailed
 			});
-			fd.messages_label.html("Message".bold());
-			fd.messages.html(emailed);
-		}else{
+		} else {
 			dialog.set_values({
-				'number': number
+				'number': number,
+				'message': printed
 			});
-			fd.messages_label.html("Message".bold());
-			fd.messages.html(printed);
 		}
 	});
 	dialog.show();
 };
 
-var send_sms = function(v,frm){
-	var doc = frm.doc;
-	var number = v.number.last_value;
-	var messages = v.messages.wrapper.innerText;
+var send_sms = function (vals, frm) {
+	var number = vals.number.value;
+	var message = vals.message.last_value;
+
+	if (!number || !message) {
+		frappe.throw(__('Did not send SMS, missing patient mobile number or message content.'));
+	}
 	frappe.call({
-		method: "frappe.core.doctype.sms_settings.sms_settings.send_sms",
+		method: 'frappe.core.doctype.sms_settings.sms_settings.send_sms',
 		args: {
 			receiver_list: [number],
-			msg: messages
+			msg: message
 		},
-		callback: function(r) {
-			if(r.exc) {frappe.msgprint(r.exc); return; }
-			else{
-				frappe.call({
-					method: "erpnext.healthcare.doctype.lab_test.lab_test.update_lab_test_print_sms_email_status",
-					args: {print_sms_email: "sms_sent", name: doc.name},
-					callback: function(){
-						cur_frm.reload_doc();
-					}
-				});
+		callback: function (r) {
+			if (r.exc) {
+				frappe.msgprint(r.exc);
+			} else {
+				frm.reload_doc();
 			}
 		}
 	});
 };
 
-var calculate_age = function(birth) {
-	var	ageMS = Date.parse(Date()) - Date.parse(birth);
-	var	age = new Date();
+var calculate_age = function (dob) {
+	var ageMS = Date.parse(Date()) - Date.parse(dob);
+	var age = new Date();
 	age.setTime(ageMS);
-	var	years =  age.getFullYear() - 1970;
-	return  years + " Year(s) " + age.getMonth() + " Month(s) " + age.getDate() + " Day(s)";
+	var years = age.getFullYear() - 1970;
+	return years + ' Year(s) ' + age.getMonth() + ' Month(s) ' + age.getDate() + ' Day(s)';
 };
diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.json b/erpnext/healthcare/doctype/lab_test/lab_test.json
index 88eeb46a..2eb8014 100644
--- a/erpnext/healthcare/doctype/lab_test/lab_test.json
+++ b/erpnext/healthcare/doctype/lab_test/lab_test.json
@@ -10,49 +10,63 @@
  "engine": "InnoDB",
  "field_order": [
   "naming_series",
+  "template",
+  "lab_test_name",
+  "lab_test_group",
+  "medical_code",
+  "department",
+  "column_break_26",
+  "company",
+  "status",
+  "submitted_date",
+  "result_date",
+  "approved_date",
+  "expected_result_date",
+  "expected_result_time",
+  "printed_on",
+  "invoiced",
+  "sb_first",
   "patient",
   "patient_name",
   "patient_age",
   "patient_sex",
+  "inpatient_record",
   "report_preference",
   "email",
   "mobile",
-  "practitioner",
   "c_b",
-  "inpatient_record",
-  "company",
-  "department",
-  "status",
-  "submitted_date",
-  "approved_date",
-  "sample",
-  "result_date",
+  "practitioner",
+  "practitioner_name",
+  "requesting_department",
   "employee",
   "employee_name",
   "employee_designation",
   "user",
-  "invoiced",
-  "sb_first",
-  "template",
-  "lab_test_name",
-  "column_break_26",
-  "medical_code",
-  "lab_test_group",
+  "sample",
   "sb_normal",
+  "lab_test_html",
   "normal_test_items",
-  "sb_special",
-  "special_test_items",
+  "sb_descriptive",
+  "descriptive_test_items",
+  "organisms_section",
+  "organism_test_items",
   "sb_sensitivity",
   "sensitivity_test_items",
   "sb_comments",
   "lab_test_comment",
   "sb_customresult",
   "custom_result",
+  "worksheet_section",
+  "worksheet_instructions",
+  "result_legend_section",
+  "legend_print_position",
+  "result_legend",
+  "section_break_50",
   "email_sent",
   "sms_sent",
   "printed",
   "normal_toggle",
-  "special_toggle",
+  "descriptive_toggle",
   "sensitivity_toggle",
   "amended_from",
   "prescription"
@@ -89,7 +103,6 @@
    "fieldname": "patient",
    "fieldtype": "Link",
    "ignore_user_permissions": 1,
-   "in_list_view": 1,
    "in_standard_filter": 1,
    "label": "Patient",
    "options": "Patient",
@@ -120,6 +133,7 @@
    "label": "Gender",
    "options": "Gender",
    "print_hide": 1,
+   "read_only": 1,
    "report_hide": 1,
    "reqd": 1,
    "set_only_once": 1
@@ -128,11 +142,14 @@
    "fieldname": "practitioner",
    "fieldtype": "Link",
    "ignore_user_permissions": 1,
-   "label": "Healthcare Practitioner",
+   "in_list_view": 1,
+   "label": "Requesting Practitioner",
+   "no_copy": 1,
    "options": "Healthcare Practitioner",
    "search_index": 1
   },
   {
+   "fetch_from": "patient.email",
    "fieldname": "email",
    "fieldtype": "Data",
    "hidden": 1,
@@ -142,6 +159,7 @@
    "report_hide": 1
   },
   {
+   "fetch_from": "patient.mobile",
    "fieldname": "mobile",
    "fieldtype": "Data",
    "hidden": 1,
@@ -166,21 +184,23 @@
    "print_hide": 1
   },
   {
+   "fetch_from": "template.department",
    "fieldname": "department",
    "fieldtype": "Link",
    "ignore_user_permissions": 1,
    "in_standard_filter": 1,
    "label": "Department",
    "options": "Medical Department",
+   "read_only": 1,
    "search_index": 1
   },
   {
    "fieldname": "status",
    "fieldtype": "Select",
-   "hidden": 1,
    "label": "Status",
    "options": "Draft\nCompleted\nApproved\nRejected\nCancelled",
    "print_hide": 1,
+   "read_only": 1,
    "report_hide": 1,
    "search_index": 1
   },
@@ -212,15 +232,38 @@
    "report_hide": 1
   },
   {
+   "default": "Today",
+   "fieldname": "expected_result_date",
+   "fieldtype": "Date",
+   "hidden": 1,
+   "label": "Expected Result Date",
+   "read_only": 1
+  },
+  {
+   "fieldname": "expected_result_time",
+   "fieldtype": "Time",
+   "hidden": 1,
+   "label": "Expected Result Time",
+   "read_only": 1
+  },
+  {
    "fieldname": "result_date",
    "fieldtype": "Date",
+   "hidden": 1,
    "label": "Result Date",
    "search_index": 1
   },
   {
+   "allow_on_submit": 1,
+   "fieldname": "printed_on",
+   "fieldtype": "Datetime",
+   "label": "Printed on",
+   "read_only": 1
+  },
+  {
    "fieldname": "employee",
    "fieldtype": "Link",
-   "label": "Lab Technician",
+   "label": "Employee (Lab Technician)",
    "no_copy": 1,
    "options": "Employee",
    "print_hide": 1,
@@ -230,7 +273,7 @@
    "fetch_from": "employee.employee_name",
    "fieldname": "employee_name",
    "fieldtype": "Data",
-   "label": "Technician Name",
+   "label": "Lab Technician Name",
    "no_copy": 1,
    "print_hide": 1,
    "read_only": 1,
@@ -240,7 +283,7 @@
    "fetch_from": "employee.designation",
    "fieldname": "employee_designation",
    "fieldtype": "Data",
-   "label": "Designation",
+   "label": "Lab Technician Designation",
    "no_copy": 1,
    "print_hide": 1,
    "read_only": 1,
@@ -257,6 +300,7 @@
    "report_hide": 1
   },
   {
+   "fetch_from": "patient.report_preference",
    "fieldname": "report_preference",
    "fieldtype": "Data",
    "label": "Report Preference",
@@ -272,7 +316,6 @@
    "fieldname": "lab_test_name",
    "fieldtype": "Data",
    "in_list_view": 1,
-   "in_standard_filter": 1,
    "label": "Test Name",
    "no_copy": 1,
    "print_hide": 1,
@@ -281,13 +324,10 @@
    "search_index": 1
   },
   {
-   "fieldname": "column_break_26",
-   "fieldtype": "Column Break"
-  },
-  {
    "fieldname": "template",
    "fieldtype": "Link",
    "ignore_user_permissions": 1,
+   "in_standard_filter": 1,
    "label": "Test Template",
    "options": "Lab Test Template",
    "print_hide": 1,
@@ -305,33 +345,40 @@
    "report_hide": 1
   },
   {
+   "fetch_from": "template.medical_code",
+   "fieldname": "medical_code",
+   "fieldtype": "Link",
+   "label": "Medical Code",
+   "options": "Medical Code",
+   "read_only": 1
+  },
+  {
    "fieldname": "sb_normal",
    "fieldtype": "Section Break"
   },
   {
    "fieldname": "normal_test_items",
    "fieldtype": "Table",
-   "options": "Normal Test Items"
+   "options": "Normal Test Result",
+   "print_hide": 1
   },
   {
-   "fieldname": "sb_special",
+   "fieldname": "lab_test_html",
+   "fieldtype": "HTML"
+  },
+  {
+   "depends_on": "descriptive_toggle",
+   "fieldname": "organisms_section",
    "fieldtype": "Section Break"
   },
   {
-   "fieldname": "special_test_items",
-   "fieldtype": "Table",
-   "options": "Special Test Items",
-   "print_hide": 1,
-   "report_hide": 1
-  },
-  {
    "fieldname": "sb_sensitivity",
    "fieldtype": "Section Break"
   },
   {
    "fieldname": "sensitivity_test_items",
    "fieldtype": "Table",
-   "options": "Sensitivity Test Items",
+   "options": "Sensitivity Test Result",
    "print_hide": 1,
    "report_hide": 1
   },
@@ -343,7 +390,8 @@
    "fieldname": "lab_test_comment",
    "fieldtype": "Text",
    "ignore_xss_filter": 1,
-   "label": "Comments"
+   "label": "Comments",
+   "print_hide": 1
   },
   {
    "collapsible": 1,
@@ -355,7 +403,8 @@
    "fieldname": "custom_result",
    "fieldtype": "Text Editor",
    "ignore_xss_filter": 1,
-   "label": "Custom Result"
+   "label": "Custom Result",
+   "print_hide": 1
   },
   {
    "default": "0",
@@ -391,14 +440,6 @@
   },
   {
    "default": "0",
-   "fieldname": "special_toggle",
-   "fieldtype": "Check",
-   "hidden": 1,
-   "print_hide": 1,
-   "report_hide": 1
-  },
-  {
-   "default": "0",
    "fieldname": "sensitivity_toggle",
    "fieldtype": "Check",
    "hidden": 1,
@@ -427,17 +468,89 @@
    "report_hide": 1
   },
   {
-   "fetch_from": "template.medical_code",
-   "fieldname": "medical_code",
+   "fieldname": "column_break_26",
+   "fieldtype": "Column Break"
+  },
+  {
+   "fetch_from": "practitioner.department",
+   "fieldname": "requesting_department",
    "fieldtype": "Link",
-   "label": "Medical Code",
-   "options": "Medical Code",
+   "in_list_view": 1,
+   "label": "Requesting Department",
+   "options": "Medical Department",
    "read_only": 1
+  },
+  {
+   "fetch_from": "practitioner.practitioner_name",
+   "fieldname": "practitioner_name",
+   "fieldtype": "Data",
+   "label": "Requesting Practitioner",
+   "read_only": 1
+  },
+  {
+   "collapsible": 1,
+   "fieldname": "result_legend_section",
+   "fieldtype": "Section Break",
+   "label": "Result Legend Print"
+  },
+  {
+   "fieldname": "legend_print_position",
+   "fieldtype": "Select",
+   "label": "Print Position",
+   "options": "\nBottom\nTop\nBoth",
+   "print_hide": 1
+  },
+  {
+   "fieldname": "result_legend",
+   "fieldtype": "Text Editor",
+   "label": "Result Legend",
+   "print_hide": 1
+  },
+  {
+   "fieldname": "section_break_50",
+   "fieldtype": "Section Break"
+  },
+  {
+   "fieldname": "worksheet_instructions",
+   "fieldtype": "Text Editor",
+   "label": "Worksheet Instructions",
+   "print_hide": 1
+  },
+  {
+   "collapsible": 1,
+   "fieldname": "worksheet_section",
+   "fieldtype": "Section Break",
+   "label": "Worksheet Print"
+  },
+  {
+   "fieldname": "descriptive_test_items",
+   "fieldtype": "Table",
+   "options": "Descriptive Test Result",
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "fieldname": "sb_descriptive",
+   "fieldtype": "Section Break"
+  },
+  {
+   "default": "0",
+   "fieldname": "descriptive_toggle",
+   "fieldtype": "Check",
+   "hidden": 1,
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "fieldname": "organism_test_items",
+   "fieldtype": "Table",
+   "options": "Organism Test Result",
+   "print_hide": 1
   }
  ],
  "is_submittable": 1,
  "links": [],
- "modified": "2020-06-29 14:24:26.509721",
+ "modified": "2020-07-16 13:35:24.811062",
  "modified_by": "Administrator",
  "module": "Healthcare",
  "name": "Lab Test",
diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.py b/erpnext/healthcare/doctype/lab_test/lab_test.py
index b2c5e6b..865f4a1 100644
--- a/erpnext/healthcare/doctype/lab_test/lab_test.py
+++ b/erpnext/healthcare/doctype/lab_test/lab_test.py
@@ -10,26 +10,30 @@
 
 class LabTest(Document):
 	def on_submit(self):
-		frappe.db.set_value(self.doctype,self.name,"submitted_date", getdate())
+		self.db_set('submitted_date', getdate())
+		self.db_set('status', 'Completed')
 		insert_lab_test_to_medical_record(self)
-		frappe.db.set_value("Lab Test", self.name, "status", "Completed")
 
 	def on_cancel(self):
 		delete_lab_test_from_medical_record(self)
-		frappe.db.set_value("Lab Test", self.name, "status", "Cancelled")
+		self.db_set('status', 'Cancelled')
 		self.reload()
 
+	def validate(self):
+		if not self.is_new():
+			self.set_secondary_uom_result()
+
 	def on_update(self):
-		if(self.sensitivity_test_items):
+		if self.sensitivity_test_items:
 			sensitivity = sorted(self.sensitivity_test_items, key=lambda x: x.antibiotic_sensitivity)
 			for i, item in enumerate(sensitivity):
-				item.idx = i+1
+				item.idx = i + 1
 			self.sensitivity_test_items = sensitivity
 
 	def after_insert(self):
-		if(self.prescription):
-			frappe.db.set_value("Lab Prescription", self.prescription, "lab_test_created", 1)
-			if frappe.db.get_value("Lab Prescription", self.prescription, 'invoiced') == 1:
+		if self.prescription:
+			frappe.db.set_value('Lab Prescription', self.prescription, 'lab_test_created', 1)
+			if frappe.db.get_value('Lab Prescription', self.prescription, 'invoiced'):
 				self.invoiced = True
 		if not self.lab_test_name and self.template:
 			self.load_test_from_template()
@@ -40,109 +44,110 @@
 		create_test_from_template(lab_test)
 		self.reload()
 
+	def set_secondary_uom_result(self):
+		for item in self.normal_test_items:
+			if item.result_value and item.secondary_uom and item.conversion_factor:
+				try:
+					item.secondary_uom_result = float(item.result_value) * float(item.conversion_factor)
+				except:
+					item.secondary_uom_result = ''
+					frappe.msgprint(_('Result for Secondary UOM not calculated for row #{0}'.format(item.idx)), title = _('Warning'))
+
+
 def create_test_from_template(lab_test):
-	template = frappe.get_doc("Lab Test Template", lab_test.template)
-	patient = frappe.get_doc("Patient", lab_test.patient)
+	template = frappe.get_doc('Lab Test Template', lab_test.template)
+	patient = frappe.get_doc('Patient', lab_test.patient)
 
 	lab_test.lab_test_name = template.lab_test_name
 	lab_test.result_date = getdate()
 	lab_test.department = template.department
 	lab_test.lab_test_group = template.lab_test_group
+	lab_test.legend_print_position = template.legend_print_position
+	lab_test.result_legend = template.result_legend
+	lab_test.worksheet_instructions = template.worksheet_instructions
 
 	lab_test = create_sample_collection(lab_test, template, patient, None)
 	lab_test = load_result_format(lab_test, template, None, None)
 
 @frappe.whitelist()
 def update_status(status, name):
-	frappe.db.sql("""update `tabLab Test` set status=%s, approved_date=%s where name = %s""", (status, getdate(), name))
-
-@frappe.whitelist()
-def update_lab_test_print_sms_email_status(print_sms_email, name):
-	frappe.db.set_value("Lab Test",name,print_sms_email,1)
+	if name and status:
+		frappe.db.set_value('Lab Test', name, {
+			'status': status,
+			'approved_date': getdate()
+		})
 
 @frappe.whitelist()
 def create_multiple(doctype, docname):
+	if not doctype or not docname:
+		frappe.throw(_('Sales Invoice or Patient Encounter is required to create Lab Tests'), title=_('Insufficient Data'))
+
 	lab_test_created = False
-	if doctype == "Sales Invoice":
+	if doctype == 'Sales Invoice':
 		lab_test_created = create_lab_test_from_invoice(docname)
-	elif doctype == "Patient Encounter":
+	elif doctype == 'Patient Encounter':
 		lab_test_created = create_lab_test_from_encounter(docname)
 
 	if lab_test_created:
-		frappe.msgprint(_("Lab Test(s) {0} created".format(lab_test_created)))
+		frappe.msgprint(_('Lab Test(s) {0} created'.format(lab_test_created)))
 	else:
-		frappe.msgprint(_("No Lab Tests created"))
+		frappe.msgprint(_('No Lab Tests created'))
 
-def create_lab_test_from_encounter(encounter_id):
+def create_lab_test_from_encounter(encounter):
 	lab_test_created = False
-	encounter = frappe.get_doc("Patient Encounter", encounter_id)
+	encounter = frappe.get_doc('Patient Encounter', encounter)
 
-	lab_test_ids = frappe.db.sql("""select lp.name, lp.lab_test_code, lp.invoiced
-	from `tabPatient Encounter` et, `tabLab Prescription` lp
-	where et.patient=%s and lp.parent=%s and
-	lp.parent=et.name and lp.lab_test_created=0 and et.docstatus=1""", (encounter.patient, encounter_id))
-
-	if lab_test_ids:
-		patient = frappe.get_doc("Patient", encounter.patient)
-		for lab_test_id in lab_test_ids:
-			template = get_lab_test_template(lab_test_id[1])
-			if template:
-				lab_test = create_lab_test_doc(lab_test_id[2], encounter.practitioner, patient, template, encounter.company)
-				lab_test.save(ignore_permissions = True)
-				frappe.db.set_value("Lab Prescription", lab_test_id[0], "lab_test_created", 1)
-				if not lab_test_created:
-					lab_test_created = lab_test.name
-				else:
-					lab_test_created += ", "+lab_test.name
+	if encounter and encounter.lab_test_prescription:
+		patient = frappe.get_doc('Patient', encounter.patient)
+		for item in encounter.lab_test_prescription:
+			if not item.lab_test_created:
+				template = get_lab_test_template(item.lab_test_code)
+				if template:
+					lab_test = create_lab_test_doc(item.invoiced, encounter.practitioner, patient, template, encounter.company)
+					lab_test.save(ignore_permissions = True)
+					frappe.db.set_value('Lab Prescription', item.name, 'lab_test_created', 1)
+					if not lab_test_created:
+						lab_test_created = lab_test.name
+					else:
+						lab_test_created += ', ' + lab_test.name
 	return lab_test_created
 
 
-def create_lab_test_from_invoice(invoice_name):
+def create_lab_test_from_invoice(sales_invoice):
 	lab_tests_created = False
-	invoice = frappe.get_doc("Sales Invoice", invoice_name)
-	if invoice.patient:
-		patient = frappe.get_doc("Patient", invoice.patient)
+	invoice = frappe.get_doc('Sales Invoice', sales_invoice)
+	if invoice and invoice.patient:
+		patient = frappe.get_doc('Patient', invoice.patient)
 		for item in invoice.items:
 			lab_test_created = 0
-			if item.reference_dt == "Lab Prescription":
-				lab_test_created = frappe.db.get_value("Lab Prescription", item.reference_dn, "lab_test_created")
-			elif item.reference_dt == "Lab Test":
+			if item.reference_dt == 'Lab Prescription':
+				lab_test_created = frappe.db.get_value('Lab Prescription', item.reference_dn, 'lab_test_created')
+			elif item.reference_dt == 'Lab Test':
 				lab_test_created = 1
 			if lab_test_created != 1:
 				template = get_lab_test_template(item.item_code)
 				if template:
 					lab_test = create_lab_test_doc(True, invoice.ref_practitioner, patient, template, invoice.company)
-					if item.reference_dt == "Lab Prescription":
+					if item.reference_dt == 'Lab Prescription':
 						lab_test.prescription = item.reference_dn
 					lab_test.save(ignore_permissions = True)
-					if item.reference_dt != "Lab Prescription":
-						frappe.db.set_value("Sales Invoice Item", item.name, "reference_dt", "Lab Test")
-						frappe.db.set_value("Sales Invoice Item", item.name, "reference_dn", lab_test.name)
+					if item.reference_dt != 'Lab Prescription':
+						frappe.db.set_value('Sales Invoice Item', item.name, 'reference_dt', 'Lab Test')
+						frappe.db.set_value('Sales Invoice Item', item.name, 'reference_dn', lab_test.name)
 					if not lab_tests_created:
 						lab_tests_created = lab_test.name
 					else:
-						lab_tests_created += ", " + lab_test.name
+						lab_tests_created += ', ' + lab_test.name
 	return lab_tests_created
 
 def get_lab_test_template(item):
-	template_id = check_template_exists(item)
+	template_id = frappe.db.exists('Lab Test Template', {'item': item})
 	if template_id:
-		return frappe.get_doc("Lab Test Template", template_id)
-	return False
-
-def check_template_exists(item):
-	template_exists = frappe.db.exists(
-		"Lab Test Template",
-		{
-			'item': item
-		}
-	)
-	if template_exists:
-		return template_exists
+		return frappe.get_doc('Lab Test Template', template_id)
 	return False
 
 def create_lab_test_doc(invoiced, practitioner, patient, template, company):
-	lab_test = frappe.new_doc("Lab Test")
+	lab_test = frappe.new_doc('Lab Test')
 	lab_test.invoiced = invoiced
 	lab_test.practitioner = practitioner
 	lab_test.patient = patient.name
@@ -159,63 +164,71 @@
 	return lab_test
 
 def create_normals(template, lab_test):
-	lab_test.normal_toggle = "1"
-	normal = lab_test.append("normal_test_items")
+	lab_test.normal_toggle = 1
+	normal = lab_test.append('normal_test_items')
 	normal.lab_test_name = template.lab_test_name
 	normal.lab_test_uom = template.lab_test_uom
+	normal.secondary_uom = template.secondary_uom
+	normal.conversion_factor = template.conversion_factor
 	normal.normal_range = template.lab_test_normal_range
 	normal.require_result_value = 1
+	normal.allow_blank = 0
 	normal.template = template.name
 
 def create_compounds(template, lab_test, is_group):
-	lab_test.normal_toggle = "1"
+	lab_test.normal_toggle = 1
 	for normal_test_template in template.normal_test_templates:
-		normal = lab_test.append("normal_test_items")
+		normal = lab_test.append('normal_test_items')
 		if is_group:
 			normal.lab_test_event = normal_test_template.lab_test_event
 		else:
 			normal.lab_test_name = normal_test_template.lab_test_event
 
 		normal.lab_test_uom = normal_test_template.lab_test_uom
+		normal.secondary_uom = normal_test_template.secondary_uom
+		normal.conversion_factor = normal_test_template.conversion_factor
 		normal.normal_range = normal_test_template.normal_range
 		normal.require_result_value = 1
+		normal.allow_blank = normal_test_template.allow_blank
 		normal.template = template.name
 
-def create_specials(template, lab_test):
-	lab_test.special_toggle = "1"
-	if(template.sensitivity):
-		lab_test.sensitivity_toggle = "1"
-	for special_test_template in template.special_test_template:
-		special = lab_test.append("special_test_items")
-		special.lab_test_particulars = special_test_template.particulars
-		special.require_result_value = 1
-		special.template = template.name
+def create_descriptives(template, lab_test):
+	lab_test.descriptive_toggle = 1
+	if template.sensitivity:
+		lab_test.sensitivity_toggle = 1
+	for descriptive_test_template in template.descriptive_test_templates:
+		descriptive = lab_test.append('descriptive_test_items')
+		descriptive.lab_test_particulars = descriptive_test_template.particulars
+		descriptive.require_result_value = 1
+		descriptive.allow_blank = descriptive_test_template.allow_blank
+		descriptive.template = template.name
 
 def create_sample_doc(template, patient, invoice, company = None):
 	if template.sample:
 		sample_exists = frappe.db.exists({
-			"doctype": "Sample Collection",
-			"patient": patient.name,
-			"docstatus": 0,
-			"sample": template.sample
+			'doctype': 'Sample Collection',
+			'patient': patient.name,
+			'docstatus': 0,
+			'sample': template.sample
 		})
 		if sample_exists:
-			# update Sample Collection by adding quantity
-			sample_collection = frappe.get_doc("Sample Collection", sample_exists[0][0])
+			# Update Sample Collection by adding quantity
+			sample_collection = frappe.get_doc('Sample Collection', sample_exists[0][0])
 			quantity = int(sample_collection.sample_qty) + int(template.sample_qty)
 			if template.sample_details:
-				sample_details = sample_collection.sample_details + "\n==============\n" + _("Test: ")
-				sample_details += (template.get("lab_test_name") or template.get("template")) +	"\n"
-				sample_details += _("Collection Details: ") + "\n\t" + template.sample_details
+				sample_details = sample_collection.sample_details + '\n-\n' + _('Test: ')
+				sample_details += (template.get('lab_test_name') or template.get('template')) +	'\n'
+				sample_details += _('Collection Details: ') + '\n\t' + template.sample_details
+				frappe.db.set_value('Sample Collection', sample_collection.name, 'sample_details', sample_details)
 
-				frappe.db.set_value("Sample Collection", sample_collection.name, "sample_details", sample_details)
-			frappe.db.set_value("Sample Collection", sample_collection.name, "sample_qty", quantity)
+			frappe.db.set_value('Sample Collection', sample_collection.name, 'sample_qty', quantity)
 
 		else:
-			#create Sample Collection for template, copy vals from Invoice
-			sample_collection = frappe.new_doc("Sample Collection")
-			if(invoice):
+			# Create Sample Collection for template, copy vals from Invoice
+			sample_collection = frappe.new_doc('Sample Collection')
+			if invoice:
 				sample_collection.invoiced = True
+
 			sample_collection.patient = patient.name
 			sample_collection.patient_age = patient.get_age()
 			sample_collection.patient_sex = patient.sex
@@ -224,125 +237,146 @@
 			sample_collection.sample_qty = template.sample_qty
 			sample_collection.company = company
 
-			if(template.sample_details):
-				sample_collection.sample_details = "Test :" + (template.get("lab_test_name") or template.get("template")) +"\n"+"Collection Detials:\n\t"+template.sample_details
+			if template.sample_details:
+				sample_collection.sample_details = 'Test :' + (template.get('lab_test_name') or template.get('template')) + '\n' + 'Collection Detials:\n\t' + template.sample_details
 			sample_collection.save(ignore_permissions=True)
 
 		return sample_collection
 
 def create_sample_collection(lab_test, template, patient, invoice):
-	if(frappe.db.get_value("Healthcare Settings", None, "create_sample_collection_for_lab_test") == "1"):
+	if frappe.get_cached_value('Healthcare Settings', None, 'create_sample_collection_for_lab_test'):
 		sample_collection = create_sample_doc(template, patient, invoice, lab_test.company)
-		if(sample_collection):
+		if sample_collection:
 			lab_test.sample = sample_collection.name
+
 	return lab_test
 
 def load_result_format(lab_test, template, prescription, invoice):
-	if(template.lab_test_template_type == 'Single'):
+	if template.lab_test_template_type == 'Single':
 		create_normals(template, lab_test)
-	elif(template.lab_test_template_type == 'Compound'):
+	elif template.lab_test_template_type == 'Compound':
 		create_compounds(template, lab_test, False)
-	elif(template.lab_test_template_type == 'Descriptive'):
-		create_specials(template, lab_test)
-	elif(template.lab_test_template_type == 'Grouped'):
-		#iterate for each template in the group and create one result for all.
+	elif template.lab_test_template_type == 'Descriptive':
+		create_descriptives(template, lab_test)
+	elif template.lab_test_template_type == 'Grouped':
+		# Iterate for each template in the group and create one result for all.
 		for lab_test_group in template.lab_test_groups:
-			#template_in_group = None
-			if(lab_test_group.lab_test_template):
-				template_in_group = frappe.get_doc("Lab Test Template",
+			# Template_in_group = None
+			if lab_test_group.lab_test_template:
+				template_in_group = frappe.get_doc('Lab Test Template',
 								lab_test_group.lab_test_template)
-				if(template_in_group):
-					if(template_in_group.lab_test_template_type == 'Single'):
+				if template_in_group:
+					if template_in_group.lab_test_template_type == 'Single':
 						create_normals(template_in_group, lab_test)
-					elif(template_in_group.lab_test_template_type == 'Compound'):
-						normal_heading = lab_test.append("normal_test_items")
+					elif template_in_group.lab_test_template_type == 'Compound':
+						normal_heading = lab_test.append('normal_test_items')
 						normal_heading.lab_test_name = template_in_group.lab_test_name
 						normal_heading.require_result_value = 0
+						normal_heading.allow_blank = 1
 						normal_heading.template = template_in_group.name
 						create_compounds(template_in_group, lab_test, True)
-					elif(template_in_group.lab_test_template_type == 'Descriptive'):
-						special_heading = lab_test.append("special_test_items")
-						special_heading.lab_test_name = template_in_group.lab_test_name
-						special_heading.require_result_value = 0
-						special_heading.template = template_in_group.name
-						create_specials(template_in_group, lab_test)
-			else:
-				normal = lab_test.append("normal_test_items")
+					elif template_in_group.lab_test_template_type == 'Descriptive':
+						descriptive_heading = lab_test.append('descriptive_test_items')
+						descriptive_heading.lab_test_name = template_in_group.lab_test_name
+						descriptive_heading.require_result_value = 0
+						descriptive_heading.allow_blank = 1
+						descriptive_heading.template = template_in_group.name
+						create_descriptives(template_in_group, lab_test)
+			else: # Lab Test Group - Add New Line
+				normal = lab_test.append('normal_test_items')
 				normal.lab_test_name = lab_test_group.group_event
 				normal.lab_test_uom = lab_test_group.group_test_uom
+				normal.secondary_uom = lab_test_group.secondary_uom
+				normal.conversion_factor = lab_test_group.conversion_factor
 				normal.normal_range = lab_test_group.group_test_normal_range
+				normal.allow_blank = lab_test_group.allow_blank
 				normal.require_result_value = 1
 				normal.template = template.name
-	if(template.lab_test_template_type != 'No Result'):
-		if(prescription):
+	if template.lab_test_template_type != 'No Result':
+		if prescription:
 			lab_test.prescription = prescription
-			if(invoice):
-				frappe.db.set_value("Lab Prescription", prescription, "invoiced", True)
-		lab_test.save(ignore_permissions=True) # insert the result
+			if invoice:
+				frappe.db.set_value('Lab Prescription', prescription, 'invoiced', True)
+		lab_test.save(ignore_permissions=True) # Insert the result
 		return lab_test
 
 @frappe.whitelist()
 def get_employee_by_user_id(user_id):
-	emp_id = frappe.db.get_value("Employee",{"user_id":user_id})
-	employee = frappe.get_doc("Employee",emp_id)
+	emp_id = frappe.db.get_value('Employee', { 'user_id': user_id })
+	employee = frappe.get_doc('Employee', emp_id)
 	return employee
 
 def insert_lab_test_to_medical_record(doc):
 	table_row = False
 	subject = cstr(doc.lab_test_name)
 	if doc.practitioner:
-		subject += frappe.bold(_("Healthcare Practitioner: "))+ doc.practitioner + "<br>"
+		subject += frappe.bold(_('Healthcare Practitioner: '))+ doc.practitioner + '<br>'
 	if doc.normal_test_items:
 		item = doc.normal_test_items[0]
-		comment = ""
+		comment = ''
 		if item.lab_test_comment:
 			comment = str(item.lab_test_comment)
-		table_row = frappe.bold(_("Lab Test Conducted: ")) + item.lab_test_name
+		table_row = frappe.bold(_('Lab Test Conducted: ')) + item.lab_test_name
 
 		if item.lab_test_event:
-			table_row += frappe.bold(_("Lab Test Event: ")) + item.lab_test_event
+			table_row += frappe.bold(_('Lab Test Event: ')) + item.lab_test_event
 
 		if item.result_value:
-			table_row += " " + frappe.bold(_("Lab Test Result: ")) + item.result_value
+			table_row += ' ' + frappe.bold(_('Lab Test Result: ')) + item.result_value
 
 		if item.normal_range:
-			table_row += " " + _("Normal Range:") + item.normal_range
-		table_row += " " + comment
+			table_row += ' ' + _('Normal Range:') + item.normal_range
+		table_row += ' ' + comment
 
-	elif doc.special_test_items:
-		item = doc.special_test_items[0]
+	elif doc.descriptive_test_items:
+		item = doc.descriptive_test_items[0]
 
 		if item.lab_test_particulars and item.result_value:
-			table_row = item.lab_test_particulars +" "+ item.result_value
+			table_row = item.lab_test_particulars + ' ' + item.result_value
 
 	elif doc.sensitivity_test_items:
 		item = doc.sensitivity_test_items[0]
 
 		if item.antibiotic and item.antibiotic_sensitivity:
-			table_row = item.antibiotic + " " + item.antibiotic_sensitivity
+			table_row = item.antibiotic + ' ' + item.antibiotic_sensitivity
 
 	if table_row:
-		subject += "<br>" + table_row
+		subject += '<br>' + table_row
 	if doc.lab_test_comment:
-		subject += "<br>" + cstr(doc.lab_test_comment)
+		subject += '<br>' + cstr(doc.lab_test_comment)
 
-	medical_record = frappe.new_doc("Patient Medical Record")
+	medical_record = frappe.new_doc('Patient Medical Record')
 	medical_record.patient = doc.patient
 	medical_record.subject = subject
-	medical_record.status = "Open"
+	medical_record.status = 'Open'
 	medical_record.communication_date = doc.result_date
-	medical_record.reference_doctype = "Lab Test"
+	medical_record.reference_doctype = 'Lab Test'
 	medical_record.reference_name = doc.name
 	medical_record.reference_owner = doc.owner
-	medical_record.save(ignore_permissions=True)
+	medical_record.save(ignore_permissions = True)
 
 def delete_lab_test_from_medical_record(self):
-	medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(self.name))
+	medical_record_id = frappe.db.sql('select name from `tabPatient Medical Record` where reference_name= %s', (self.name))
 
 	if medical_record_id and medical_record_id[0][0]:
-		frappe.delete_doc("Patient Medical Record", medical_record_id[0][0])
+		frappe.delete_doc('Patient Medical Record', medical_record_id[0][0])
 
 @frappe.whitelist()
 def get_lab_test_prescribed(patient):
-	return frappe.db.sql("""select cp.name, cp.lab_test_code, cp.parent, cp.invoiced, ct.practitioner, ct.encounter_date from `tabPatient Encounter` ct,
-	`tabLab Prescription` cp where ct.patient=%s and cp.parent=ct.name and cp.lab_test_created=0""", (patient))
+	return frappe.db.sql(
+		'''
+			select
+				lp.name,
+				lp.lab_test_code,
+				lp.parent,
+				lp.invoiced,
+				pe.practitioner,
+				pe.practitioner_name,
+				pe.encounter_date
+			from
+				`tabPatient Encounter` pe, `tabLab Prescription` lp
+			where
+				pe.patient=%s
+				and lp.parent=pe.name
+				and lp.lab_test_created=0
+		''', (patient))
diff --git a/erpnext/healthcare/doctype/lab_test/lab_test_list.js b/erpnext/healthcare/doctype/lab_test/lab_test_list.js
index 1f6a12f..6783bb3 100644
--- a/erpnext/healthcare/doctype/lab_test/lab_test_list.js
+++ b/erpnext/healthcare/doctype/lab_test/lab_test_list.js
@@ -2,57 +2,63 @@
 (c) ESS 2015-16
 */
 frappe.listview_settings['Lab Test'] = {
-	add_fields: ["name", "status", "invoiced"],
-	filters:[["docstatus","=","0"]],
-	get_indicator: function(doc) {
-		if(doc.status=="Approved"){
-			return [__("Approved"), "green", "status,=,Approved"];
+	add_fields: ['name', 'status', 'invoiced'],
+	filters: [['docstatus', '=', '0']],
+	get_indicator: function (doc) {
+		if (doc.status == 'Approved') {
+			return [__('Approved'), 'green', 'status, = ,Approved'];
 		}
-		if(doc.status=="Rejected"){
-			return [__("Rejected"), "yellow", "status,=,Rejected"];
+		if (doc.status == 'Rejected') {
+			return [__('Rejected'), 'orange', 'status, =, Rejected'];
 		}
 	},
-	onload: function(listview) {
-		listview.page.add_menu_item(__("Create Multiple"), function() {
+	onload: function (listview) {
+		listview.page.add_menu_item(__('Create Multiple'), function () {
 			create_multiple_dialog(listview);
 		});
 	}
 };
 
-var create_multiple_dialog = function(listview){
+var create_multiple_dialog = function (listview) {
 	var dialog = new frappe.ui.Dialog({
 		title: 'Create Multiple Lab Test',
 		width: 100,
 		fields: [
-			{fieldtype: "Link", label: "Patient", fieldname: "patient", options: "Patient", reqd: 1},
-			{fieldtype: "Select", label: "Invoice / Patient Encounter", fieldname: "doctype",
-				options: "\nSales Invoice\nPatient Encounter", reqd: 1},
-			{fieldtype: "Dynamic Link", fieldname: "docname", options: "doctype", reqd: 1,
-				get_query: function(){
+			{ fieldtype: 'Link', label: 'Patient', fieldname: 'patient', options: 'Patient', reqd: 1 },
+			{
+				fieldtype: 'Select', label: 'Invoice / Patient Encounter', fieldname: 'doctype',
+				options: '\nSales Invoice\nPatient Encounter', reqd: 1
+			},
+			{
+				fieldtype: 'Dynamic Link', fieldname: 'docname', options: 'doctype', reqd: 1,
+				get_query: function () {
 					return {
 						filters: {
-							"patient": dialog.get_value("patient"),
-							"docstatus": 1
+							'patient': dialog.get_value('patient'),
+							'docstatus': 1
 						}
 					};
 				}
 			}
 		],
-		primary_action_label: __("Create Lab Test"),
-		primary_action : function(){
+		primary_action_label: __('Create Lab Test'),
+		primary_action: function () {
 			frappe.call({
 				method: 'erpnext.healthcare.doctype.lab_test.lab_test.create_multiple',
-				args:{
-					'doctype': dialog.get_value("doctype"),
-					'docname': dialog.get_value("docname")
+				args: {
+					'doctype': dialog.get_value('doctype'),
+					'docname': dialog.get_value('docname')
 				},
-				callback: function(data) {
-					if(!data.exc){
+				callback: function (data) {
+					if (!data.exc) {
+						if (!data.message) {
+							frappe.msgprint(__('No Lab Tests created'));
+						}
 						listview.refresh();
 					}
 				},
 				freeze: true,
-				freeze_message: "Creating Lab Test..."
+				freeze_message: 'Creating Lab Tests...'
 			});
 			dialog.hide();
 		}
diff --git a/erpnext/healthcare/doctype/lab_test_groups/__init__.py b/erpnext/healthcare/doctype/lab_test_group_template/__init__.py
similarity index 100%
rename from erpnext/healthcare/doctype/lab_test_groups/__init__.py
rename to erpnext/healthcare/doctype/lab_test_group_template/__init__.py
diff --git a/erpnext/healthcare/doctype/lab_test_group_template/lab_test_group_template.json b/erpnext/healthcare/doctype/lab_test_group_template/lab_test_group_template.json
new file mode 100644
index 0000000..beea7a3
--- /dev/null
+++ b/erpnext/healthcare/doctype/lab_test_group_template/lab_test_group_template.json
@@ -0,0 +1,118 @@
+{
+ "actions": [],
+ "allow_copy": 1,
+ "beta": 1,
+ "creation": "2016-03-29 17:37:29.913583",
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "engine": "InnoDB",
+ "field_order": [
+  "template_or_new_line",
+  "lab_test_template",
+  "lab_test_rate",
+  "lab_test_description",
+  "group_event",
+  "group_test_uom",
+  "secondary_uom",
+  "conversion_factor",
+  "allow_blank",
+  "column_break_8",
+  "group_test_normal_range"
+ ],
+ "fields": [
+  {
+   "default": "Add Test",
+   "fieldname": "template_or_new_line",
+   "fieldtype": "Select",
+   "options": "Add Test\nAdd New Line",
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "depends_on": "eval:doc.template_or_new_line == 'Add Test'",
+   "fieldname": "lab_test_template",
+   "fieldtype": "Link",
+   "ignore_user_permissions": 1,
+   "in_list_view": 1,
+   "label": "Test Name",
+   "options": "Lab Test Template"
+  },
+  {
+   "fetch_from": "lab_test_template.lab_test_rate",
+   "fieldname": "lab_test_rate",
+   "fieldtype": "Currency",
+   "label": "Rate",
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 1
+  },
+  {
+   "fetch_from": "lab_test_template.lab_test_description",
+   "fieldname": "lab_test_description",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Description",
+   "read_only": 1
+  },
+  {
+   "depends_on": "eval:doc.template_or_new_line == 'Add New Line'",
+   "fieldname": "group_event",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Event"
+  },
+  {
+   "depends_on": "eval:doc.template_or_new_line =='Add New Line'",
+   "fieldname": "group_test_uom",
+   "fieldtype": "Link",
+   "ignore_user_permissions": 1,
+   "label": "UOM",
+   "options": "Lab Test UOM"
+  },
+  {
+   "depends_on": "eval:doc.template_or_new_line == 'Add New Line'",
+   "fieldname": "group_test_normal_range",
+   "fieldtype": "Long Text",
+   "ignore_xss_filter": 1,
+   "label": "Normal Range"
+  },
+  {
+   "fieldname": "column_break_8",
+   "fieldtype": "Column Break"
+  },
+  {
+   "depends_on": "eval:doc.template_or_new_line =='Add New Line'",
+   "fieldname": "secondary_uom",
+   "fieldtype": "Link",
+   "label": "Secondary UOM",
+   "options": "Lab Test UOM"
+  },
+  {
+   "depends_on": "secondary_uom",
+   "fieldname": "conversion_factor",
+   "fieldtype": "Float",
+   "label": "Conversion Factor"
+  },
+  {
+   "default": "0",
+   "depends_on": "eval:doc.template_or_new_line == 'Add New Line'",
+   "fieldname": "allow_blank",
+   "fieldtype": "Check",
+   "in_list_view": 1,
+   "label": "Allow Blank"
+  }
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2020-06-24 10:59:01.921924",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Lab Test Group Template",
+ "owner": "Administrator",
+ "permissions": [],
+ "restrict_to_domain": "Healthcare",
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/special_test_template/special_test_template.py b/erpnext/healthcare/doctype/lab_test_group_template/lab_test_group_template.py
similarity index 84%
rename from erpnext/healthcare/doctype/special_test_template/special_test_template.py
rename to erpnext/healthcare/doctype/lab_test_group_template/lab_test_group_template.py
index e4e0d5b..1e2cef4 100644
--- a/erpnext/healthcare/doctype/special_test_template/special_test_template.py
+++ b/erpnext/healthcare/doctype/lab_test_group_template/lab_test_group_template.py
@@ -5,5 +5,5 @@
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class SpecialTestTemplate(Document):
+class LabTestGroupTemplate(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json b/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json
deleted file mode 100644
index e51d8b7..0000000
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json
+++ /dev/null
@@ -1,310 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2016-03-29 17:37:29.913583", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 0, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "Add Test", 
-   "depends_on": "", 
-   "fieldname": "template_or_new_line", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Add Test\nAdd new line", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.template_or_new_line == 'Add Test'", 
-   "fieldname": "lab_test_template", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Test Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Lab Test Template", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "lab_test_template.lab_test_rate", 
-   "fieldname": "lab_test_rate", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Rate", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_from": "lab_test_template.lab_test_description", 
-   "fieldname": "lab_test_description", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Description", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.template_or_new_line == 'Add new line'", 
-   "fieldname": "group_event", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Event", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.template_or_new_line =='Add new line'", 
-   "fieldname": "group_test_uom", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "UOM", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Lab Test UOM", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.template_or_new_line == 'Add new line'", 
-   "fieldname": "group_test_normal_range", 
-   "fieldtype": "Long Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Normal Range", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_8", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-09-04 09:49:24.817787", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Lab Test Groups", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js
index c3eedbb..2e41f51 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js
@@ -1,25 +1,25 @@
 // Copyright (c) 2016, ESS
 // License: ESS license.txt
 
-frappe.ui.form.on("Lab Test Template",{
+frappe.ui.form.on('Lab Test Template', {
 	lab_test_name: function(frm) {
 		if (!frm.doc.lab_test_code)
-			frm.set_value("lab_test_code", frm.doc.lab_test_name);
+			frm.set_value('lab_test_code', frm.doc.lab_test_name);
 		if (!frm.doc.lab_test_description)
-			frm.set_value("lab_test_description", frm.doc.lab_test_name);
+			frm.set_value('lab_test_description', frm.doc.lab_test_name);
 	},
-	refresh: function(frm) {
-		// Restrict Special, Grouped type templates in Child TestGroups
-		frm.set_query("lab_test_template", "lab_test_groups", function() {
+	refresh : function(frm) {
+		// Restrict Special, Grouped type templates in Child Test Groups
+		frm.set_query('lab_test_template', 'lab_test_groups', function() {
 			return {
 				filters: {
-					lab_test_template_type: ['in',['Single','Compound']]
+					lab_test_template_type: ['in', ['Single','Compound']]
 				}
 			};
 		});
 	},
 	medical_code: function(frm) {
-		frm.set_query("medical_code", function() {
+		frm.set_query('medical_code', function() {
 			return {
 				filters: {
 					medical_code_standard: frm.doc.medical_code_standard
@@ -30,10 +30,10 @@
 });
 
 cur_frm.cscript.custom_refresh = function(doc) {
-	cur_frm.set_df_property("lab_test_code", "read_only", doc.__islocal ? 0 : 1);
+	cur_frm.set_df_property('lab_test_code', 'read_only', doc.__islocal ? 0 : 1);
 
 	if (!doc.__islocal) {
-		cur_frm.add_custom_button(__("Change Template Code"), function() {
+		cur_frm.add_custom_button(__('Change Template Code'), function() {
 			change_template_code(doc);
 		});
 	}
@@ -41,12 +41,12 @@
 
 let change_template_code = function(doc) {
 	let d = new frappe.ui.Dialog({
-		title:__("Change Template Code"),
+		title:__('Change Template Code'),
 		fields:[
 			{
-				"fieldtype": "Data",
-				"label": "Lab Test Template Code",
-				"fieldname": "lab_test_code",
+				'fieldtype': 'Data',
+				'label': 'Lab Test Template Code',
+				'fieldname': 'lab_test_code',
 				reqd: 1
 			}
 		],
@@ -54,49 +54,44 @@
 			let values = d.get_values();
 			if (values) {
 				frappe.call({
-					"method": "erpnext.healthcare.doctype.lab_test_template.lab_test_template.change_test_code_from_template",
-					"args": {lab_test_code: values.lab_test_code, doc: doc},
+					'method': 'erpnext.healthcare.doctype.lab_test_template.lab_test_template.change_test_code_from_template',
+					'args': {lab_test_code: values.lab_test_code, doc: doc},
 					callback: function (data) {
-						frappe.set_route("Form", "Lab Test Template", data.message);
+						frappe.set_route('Form', 'Lab Test Template', data.message);
 					}
 				});
 			}
 			d.hide();
 		},
-		primary_action_label: __("Change Template Code")
+		primary_action_label: __('Change Template Code')
 	});
 	d.show();
 
 	d.set_values({
-		"lab_test_code": doc.lab_test_code
+		'lab_test_code': doc.lab_test_code
 	});
 };
 
-frappe.ui.form.on("Lab Test Template", "lab_test_name", function(frm){
-
+frappe.ui.form.on('Lab Test Template', 'lab_test_name', function(frm) {
 	frm.doc.change_in_item = 1;
-
-});
-frappe.ui.form.on("Lab Test Template", "lab_test_rate", function(frm){
-
-	frm.doc.change_in_item = 1;
-
-});
-frappe.ui.form.on("Lab Test Template", "lab_test_group", function(frm){
-
-	frm.doc.change_in_item = 1;
-
-});
-frappe.ui.form.on("Lab Test Template", "lab_test_description", function(frm){
-
-	frm.doc.change_in_item = 1;
-
 });
 
-frappe.ui.form.on("Lab Test Groups", "template_or_new_line", function (frm, cdt, cdn) {
+frappe.ui.form.on('Lab Test Template', 'lab_test_rate', function(frm) {
+	frm.doc.change_in_item = 1;
+});
+
+frappe.ui.form.on('Lab Test Template', 'lab_test_group', function(frm) {
+	frm.doc.change_in_item = 1;
+});
+
+frappe.ui.form.on('Lab Test Template', 'lab_test_description', function(frm) {
+	frm.doc.change_in_item = 1;
+});
+
+frappe.ui.form.on('Lab Test Groups', 'template_or_new_line', function (frm, cdt, cdn) {
 	let child = locals[cdt][cdn];
-	if (child.template_or_new_line == "Add new line") {
-		frappe.model.set_value(cdt, cdn, 'lab_test_template', "");
-		frappe.model.set_value(cdt, cdn, 'lab_test_description', "");
+	if (child.template_or_new_line == 'Add New Line') {
+		frappe.model.set_value(cdt, cdn, 'lab_test_template', '');
+		frappe.model.set_value(cdt, cdn, 'lab_test_description', '');
 	}
 });
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json
index ebd2ec0..db64297 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json
@@ -15,31 +15,38 @@
   "lab_test_group",
   "department",
   "column_break_3",
-  "lab_test_template_type",
   "disabled",
+  "lab_test_template_type",
   "is_billable",
   "lab_test_rate",
-  "medical_coding_section",
-  "medical_code_standard",
-  "medical_code",
+  "section_break_description",
+  "lab_test_description",
   "section_break_normal",
   "lab_test_uom",
-  "lab_test_normal_range",
+  "secondary_uom",
+  "conversion_factor",
   "column_break_10",
+  "lab_test_normal_range",
   "section_break_compound",
   "normal_test_templates",
   "section_break_special",
   "sensitivity",
-  "special_test_template",
+  "descriptive_test_templates",
   "section_break_group",
   "lab_test_groups",
-  "section_break_description",
-  "lab_test_description",
+  "medical_coding_section",
+  "medical_code_standard",
+  "medical_code",
   "sb_sample_collection",
   "sample",
   "sample_uom",
   "sample_qty",
   "sample_details",
+  "worksheet_section",
+  "worksheet_instructions",
+  "result_legend_section",
+  "legend_print_position",
+  "result_legend",
   "change_in_item"
  ],
  "fields": [
@@ -95,7 +102,7 @@
    "fieldtype": "Column Break"
   },
   {
-   "description": "Single for results which require only a single input, result UOM and normal value \n<br>\nCompound for results which require multiple input fields with corresponding event names, result UOMs and normal values\n<br>\nDescriptive for tests which have multiple result components and corresponding result entry fields. \n<br>\nGrouped for test templates which are a group of other test templates.\n<br>\nNo Result for tests with no results. Also, no Lab Test is created. e.g.. Sub Tests for Grouped results.",
+   "description": "<b>Single</b>: Results which require only a single input.\n<br>\n<b>Compound</b>: Results which require multiple event inputs.\n<br>\n<b>Descriptive</b>: Tests which have multiple result components with manual result entry.\n<br>\n<b>Grouped</b>: Test templates which are a group of other test templates.\n<br>\n<b>No Result</b>: Tests with no results, can be ordered and billed but no Lab Test will be created. e.g.. Sub Tests for Grouped results",
    "fieldname": "lab_test_template_type",
    "fieldtype": "Select",
    "in_standard_filter": 1,
@@ -121,6 +128,24 @@
    "mandatory_depends_on": "eval:doc.is_billable == 1"
   },
   {
+   "fieldname": "medical_coding_section",
+   "fieldtype": "Section Break",
+   "label": "Medical Coding"
+  },
+  {
+   "depends_on": "medical_code_standard",
+   "fieldname": "medical_code",
+   "fieldtype": "Link",
+   "label": "Medical Code",
+   "options": "Medical Code"
+  },
+  {
+   "fieldname": "medical_code_standard",
+   "fieldtype": "Link",
+   "label": "Medical Code Standard",
+   "options": "Medical Code Standard"
+  },
+  {
    "depends_on": "eval:doc.lab_test_template_type == 'Single'",
    "fieldname": "section_break_normal",
    "fieldtype": "Section Break",
@@ -159,7 +184,7 @@
    "depends_on": "eval:doc.lab_test_template_type == 'Descriptive'",
    "fieldname": "section_break_special",
    "fieldtype": "Section Break",
-   "label": "Special"
+   "label": "Descriptive"
   },
   {
    "default": "0",
@@ -168,11 +193,6 @@
    "label": "Sensitivity"
   },
   {
-   "fieldname": "special_test_template",
-   "fieldtype": "Table",
-   "options": "Special Test Template"
-  },
-  {
    "depends_on": "eval:doc.lab_test_template_type == 'Grouped'",
    "fieldname": "section_break_group",
    "fieldtype": "Section Break",
@@ -181,20 +201,23 @@
   {
    "fieldname": "lab_test_groups",
    "fieldtype": "Table",
-   "options": "Lab Test Groups"
+   "options": "Lab Test Group Template"
   },
   {
+   "collapsible": 1,
    "fieldname": "section_break_description",
-   "fieldtype": "Section Break"
+   "fieldtype": "Section Break",
+   "label": "Description "
   },
   {
    "fieldname": "lab_test_description",
-   "fieldtype": "Text",
+   "fieldtype": "Text Editor",
    "ignore_xss_filter": 1,
    "label": "Description",
    "no_copy": 1
   },
   {
+   "collapsible": 1,
    "fieldname": "sb_sample_collection",
    "fieldtype": "Section Break",
    "label": "Sample Collection"
@@ -237,32 +260,61 @@
   },
   {
    "fieldname": "sample_details",
-   "fieldtype": "Text",
+   "fieldtype": "Small Text",
    "ignore_xss_filter": 1,
    "label": "Collection Details"
   },
   {
    "collapsible": 1,
-   "fieldname": "medical_coding_section",
+   "description": "Information to help easily interpret the test report, will be printed as part of the Lab Test result.",
+   "fieldname": "result_legend_section",
    "fieldtype": "Section Break",
-   "label": "Medical Coding"
+   "label": "Result Legend Print"
   },
   {
-   "depends_on": "medical_code_standard",
-   "fieldname": "medical_code",
-   "fieldtype": "Link",
-   "label": "Medical Code",
-   "options": "Medical Code"
+   "fieldname": "result_legend",
+   "fieldtype": "Text Editor",
+   "label": "Result Legend"
   },
   {
-   "fieldname": "medical_code_standard",
+   "fieldname": "legend_print_position",
+   "fieldtype": "Select",
+   "label": "Print Position",
+   "options": "Bottom\nTop\nBoth"
+  },
+  {
+   "fieldname": "secondary_uom",
    "fieldtype": "Link",
-   "label": "Medical Code Standard",
-   "options": "Medical Code Standard"
+   "label": "Secondary UOM",
+   "options": "Lab Test UOM"
+  },
+  {
+   "depends_on": "secondary_uom",
+   "fieldname": "conversion_factor",
+   "fieldtype": "Float",
+   "label": "Conversion Factor",
+   "mandatory_depends_on": "secondary_uom"
+  },
+  {
+   "description": "Instructions to be printed on the worksheet",
+   "fieldname": "worksheet_instructions",
+   "fieldtype": "Text Editor",
+   "label": "Worksheet Instructions"
+  },
+  {
+   "collapsible": 1,
+   "fieldname": "worksheet_section",
+   "fieldtype": "Section Break",
+   "label": "Worksheet Print"
+  },
+  {
+   "fieldname": "descriptive_test_templates",
+   "fieldtype": "Table",
+   "options": "Descriptive Test Template"
   }
  ],
  "links": [],
- "modified": "2020-06-29 14:07:20.772219",
+ "modified": "2020-07-13 12:57:09.925436",
  "modified_by": "Administrator",
  "module": "Healthcare",
  "name": "Lab Test Template",
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py
index 3521561..6f0d08c 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py
@@ -14,37 +14,37 @@
 			create_item_from_template(self)
 
 	def validate(self):
+		if self.is_billable and (not self.lab_test_rate or self.lab_test_rate <= 0.0):
+			frappe.throw(_("Standard Selling Rate should be greater than zero."))
+		self.validate_conversion_factor()
 		self.enable_disable_item()
 
 	def on_update(self):
-		# if change_in_item update Item and Price List
+		# If change_in_item update Item and Price List
 		if self.change_in_item and self.is_billable and self.item:
 			self.update_item()
 			item_price = self.item_price_exists()
 			if not item_price:
-				if self.lab_test_rate != 0.0:
-					price_list_name = frappe.db.get_value("Price List", {"selling": 1})
-					if self.lab_test_rate:
-						make_item_price(self.lab_test_code, price_list_name, self.lab_test_rate)
-					else:
-						make_item_price(self.lab_test_code, price_list_name, 0.0)
+				if self.lab_test_rate and self.lab_test_rate > 0.0:
+					price_list_name = frappe.db.get_value('Price List', {'selling': 1})
+					make_item_price(self.lab_test_code, price_list_name, self.lab_test_rate)
 			else:
-				frappe.db.set_value("Item Price", item_price, "price_list_rate", self.lab_test_rate)
+				frappe.db.set_value('Item Price', item_price, 'price_list_rate', self.lab_test_rate)
 
-			frappe.db.set_value(self.doctype, self.name, "change_in_item", 0)
+			self.db_set('change_in_item', 0)
 
 		elif not self.is_billable and self.item:
-			frappe.db.set_value("Item", self.item, "disabled", 1)
+			frappe.db.set_value('Item', self.item, 'disabled', 1)
 
 		self.reload()
 
 	def on_trash(self):
-		# remove template reference from item and disable item
+		# Remove template reference from item and disable item
 		if self.item:
 			try:
-				frappe.delete_doc("Item", self.item)
+				frappe.delete_doc('Item', self.item)
 			except Exception:
-				frappe.throw(_("Not permitted. Please disable the Lab Test Template"))
+				frappe.throw(_('Not permitted. Please disable the Lab Test Template'))
 
 	def enable_disable_item(self):
 		if self.is_billable:
@@ -54,78 +54,86 @@
 				frappe.db.set_value('Item', self.item, 'disabled', 0)
 
 	def update_item(self):
-		item = frappe.get_doc("Item", self.item)
+		item = frappe.get_doc('Item', self.item)
 		if item:
 			item.update({
-				"item_name": self.lab_test_name,
-				"item_group": self.lab_test_group,
-				"disabled": 0,
-				"standard_rate": self.lab_test_rate,
-				"description": self.lab_test_description
+				'item_name': self.lab_test_name,
+				'item_group': self.lab_test_group,
+				'disabled': 0,
+				'standard_rate': self.lab_test_rate,
+				'description': self.lab_test_description
 			})
 			item.save()
 
 	def item_price_exists(self):
-		item_price = frappe.db.exists({"doctype": "Item Price", "item_code": self.lab_test_code})
+		item_price = frappe.db.exists({'doctype': 'Item Price', 'item_code': self.lab_test_code})
 		if item_price:
 			return item_price[0][0]
 		else:
 			return False
 
+	def validate_conversion_factor(self):
+		if self.lab_test_template_type == "Single" and self.secondary_uom and not self.conversion_factor:
+			frappe.throw(_("Conversion Factor is mandatory"))
+		if self.lab_test_template_type == "Compound":
+			for item in self.normal_test_templates:
+				if item.secondary_uom and not item.conversion_factor:
+					frappe.throw(_("Conversion Factor is mandatory"))
+		if self.lab_test_template_type == "Grouped":
+			for group in self.lab_test_groups:
+				if group.template_or_new_line == "Add New Line" and group.secondary_uom and not group.conversion_factor:
+					frappe.throw(_("Conversion Factor is mandatory"))
+
 
 def create_item_from_template(doc):
-	disabled = doc.disabled
-	if doc.is_billable and not doc.disabled:
-		disabled = 0
-
 	uom = frappe.db.exists('UOM', 'Unit') or frappe.db.get_single_value('Stock Settings', 'stock_uom')
-	# insert item
+	# Insert item
 	item =  frappe.get_doc({
-		"doctype": "Item",
-		"item_code": doc.lab_test_code,
-		"item_name":doc.lab_test_name,
-		"item_group": doc.lab_test_group,
-		"description":doc.lab_test_description,
-		"is_sales_item": 1,
-		"is_service_item": 1,
-		"is_purchase_item": 0,
-		"is_stock_item": 0,
-		"show_in_website": 0,
-		"is_pro_applicable": 0,
-		"disabled": disabled,
-		"stock_uom": uom
-	}).insert(ignore_permissions=True, ignore_mandatory=True)
+		'doctype': 'Item',
+		'item_code': doc.lab_test_code,
+		'item_name':doc.lab_test_name,
+		'item_group': doc.lab_test_group,
+		'description':doc.lab_test_description,
+		'is_sales_item': 1,
+		'is_service_item': 1,
+		'is_purchase_item': 0,
+		'is_stock_item': 0,
+		'include_item_in_manufacturing': 0,
+		'show_in_website': 0,
+		'is_pro_applicable': 0,
+		'disabled': 0 if doc.is_billable and not doc.disabled else doc.disabled, 
+		'stock_uom': uom
+	}).insert(ignore_permissions = True, ignore_mandatory = True)
 
-	# insert item price
-	# get item price list to insert item price
-	if doc.lab_test_rate != 0.0:
-		price_list_name = frappe.db.get_value("Price List", {"selling": 1})
+	# Insert item price
+	if doc.is_billable and doc.lab_test_rate != 0.0:
+		price_list_name = frappe.db.get_value('Price List', {'selling': 1})
 		if doc.lab_test_rate:
 			make_item_price(item.name, price_list_name, doc.lab_test_rate)
 		else:
 			make_item_price(item.name, price_list_name, 0.0)
 	# Set item in the template
-	frappe.db.set_value("Lab Test Template", doc.name, "item", item.name)
+	frappe.db.set_value('Lab Test Template', doc.name, 'item', item.name)
 
 	doc.reload()
 
 def make_item_price(item, price_list_name, item_price):
 	frappe.get_doc({
-		"doctype": "Item Price",
-		"price_list": price_list_name,
-		"item_code": item,
-		"price_list_rate": item_price
-	}).insert(ignore_permissions=True, ignore_mandatory=True)
+		'doctype': 'Item Price',
+		'price_list': price_list_name,
+		'item_code': item,
+		'price_list_rate': item_price
+	}).insert(ignore_permissions = True, ignore_mandatory = True)
 
 @frappe.whitelist()
 def change_test_code_from_template(lab_test_code, doc):
 	doc = frappe._dict(json.loads(doc))
 
-	if frappe.db.exists({ "doctype": "Item", "item_code": lab_test_code}):
-		frappe.throw(_("Lab Test Item {0} already exist").format(lab_test_code))
+	if frappe.db.exists({'doctype': 'Item', 'item_code': lab_test_code}):
+		frappe.throw(_('Lab Test Item {0} already exist').format(lab_test_code))
 	else:
-		rename_doc("Item", doc.name, lab_test_code, ignore_permissions=True)
-		frappe.db.set_value("Lab Test Template", doc.name, "lab_test_code", lab_test_code)
-		frappe.db.set_value("Lab Test Template", doc.name, "lab_test_name", lab_test_code)
-		rename_doc("Lab Test Template", doc.name, lab_test_code, ignore_permissions=True)
-	return lab_test_code
\ No newline at end of file
+		rename_doc('Item', doc.name, lab_test_code, ignore_permissions = True)
+		frappe.db.set_value('Lab Test Template', doc.name, 'lab_test_code', lab_test_code)
+		frappe.db.set_value('Lab Test Template', doc.name, 'lab_test_name', lab_test_code)
+		rename_doc('Lab Test Template', doc.name, lab_test_code, ignore_permissions = True)
+	return lab_test_code
diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js b/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js
index a86075f..a3417eb 100644
--- a/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js
+++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js
@@ -2,6 +2,6 @@
 (c) ESS 2015-16
 */
 frappe.listview_settings['Lab Test Template'] = {
-	add_fields: ["lab_test_name", "lab_test_code", "lab_test_rate"],
-	filters: [["disabled", "=", 0]]
+	add_fields: ['lab_test_name', 'lab_test_code', 'lab_test_rate'],
+	filters: [['disabled', '=', 0]]
 };
diff --git a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.js b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.js
deleted file mode 100644
index 0371ddd..0000000
--- a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2016, ESS
-// License: ESS license.txt
-
-
diff --git a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.json b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.json
deleted file mode 100644
index a7a952b..0000000
--- a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.json
+++ /dev/null
@@ -1,301 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2016-02-22 15:06:08.295224", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Document", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Test Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_event", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Event", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.require_result_value == 1 ", 
-   "fieldname": "result_value", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Result Value", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_uom", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "UOM", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "normal_range", 
-   "fieldtype": "Long Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Normal Range", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_comment", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Comment", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "default": "0", 
-   "fieldname": "require_result_value", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Require Result Value", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "template", 
-   "fieldtype": "Link", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Template", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Lab Test Template", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-09-04 11:42:43.095726", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Normal Test Items", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.py b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.py
deleted file mode 100644
index a0069d7..0000000
--- a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, ESS and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-from frappe.model.document import Document
-
-class NormalTestItems(Document):
-	pass
diff --git a/erpnext/healthcare/doctype/normal_test_items/__init__.py b/erpnext/healthcare/doctype/normal_test_result/__init__.py
similarity index 100%
rename from erpnext/healthcare/doctype/normal_test_items/__init__.py
rename to erpnext/healthcare/doctype/normal_test_result/__init__.py
diff --git a/erpnext/healthcare/doctype/normal_test_result/normal_test_result.json b/erpnext/healthcare/doctype/normal_test_result/normal_test_result.json
new file mode 100644
index 0000000..c8f43d3
--- /dev/null
+++ b/erpnext/healthcare/doctype/normal_test_result/normal_test_result.json
@@ -0,0 +1,186 @@
+{
+ "actions": [],
+ "allow_copy": 1,
+ "beta": 1,
+ "creation": "2016-02-22 15:06:08.295224",
+ "doctype": "DocType",
+ "document_type": "Document",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "lab_test_name",
+  "lab_test_event",
+  "result_value",
+  "lab_test_uom",
+  "secondary_uom_result",
+  "secondary_uom",
+  "conversion_factor",
+  "column_break_10",
+  "allow_blank",
+  "normal_range",
+  "lab_test_comment",
+  "bold",
+  "italic",
+  "underline",
+  "template",
+  "require_result_value"
+ ],
+ "fields": [
+  {
+   "fieldname": "lab_test_name",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Test Name",
+   "read_only": 1
+  },
+  {
+   "fieldname": "lab_test_event",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Event",
+   "read_only": 1
+  },
+  {
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "result_value",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Result Value"
+  },
+  {
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "lab_test_uom",
+   "fieldtype": "Link",
+   "label": "UOM",
+   "options": "Lab Test UOM",
+   "read_only": 1
+  },
+  {
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "normal_range",
+   "fieldtype": "Long Text",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Normal Range",
+   "read_only": 1
+  },
+  {
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "lab_test_comment",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "in_list_view": 1,
+   "label": "Comment",
+   "no_copy": 1,
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "fieldname": "template",
+   "fieldtype": "Link",
+   "hidden": 1,
+   "label": "Template",
+   "options": "Lab Test Template",
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "secondary_uom",
+   "fieldtype": "Link",
+   "label": "Secondary UOM",
+   "options": "Lab Test UOM",
+   "print_hide": 1,
+   "read_only": 1
+  },
+  {
+   "depends_on": "secondary_uom",
+   "fieldname": "conversion_factor",
+   "fieldtype": "Float",
+   "label": "Conversion Factor",
+   "mandatory_depends_on": "secondary_uom",
+   "print_hide": 1,
+   "read_only": 1
+  },
+  {
+   "depends_on": "eval:doc.require_result_value && doc.result_value",
+   "fieldname": "secondary_uom_result",
+   "fieldtype": "Data",
+   "label": "Secondary UOM Result",
+   "no_copy": 1,
+   "print_hide": 1,
+   "read_only": 1
+  },
+  {
+   "allow_on_submit": 1,
+   "default": "0",
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "bold",
+   "fieldtype": "Check",
+   "label": "Bold",
+   "no_copy": 1,
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "allow_on_submit": 1,
+   "default": "0",
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "italic",
+   "fieldtype": "Check",
+   "label": "Italic",
+   "no_copy": 1,
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "allow_on_submit": 1,
+   "default": "0",
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "underline",
+   "fieldtype": "Check",
+   "label": "Underline",
+   "no_copy": 1,
+   "print_hide": 1,
+   "report_hide": 1
+  },
+  {
+   "fieldname": "column_break_10",
+   "fieldtype": "Column Break"
+  },
+  {
+   "default": "0",
+   "fieldname": "require_result_value",
+   "fieldtype": "Check",
+   "hidden": 1,
+   "label": "Require Result Value",
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 1
+  },
+  {
+   "default": "1",
+   "depends_on": "eval:doc.require_result_value",
+   "fieldname": "allow_blank",
+   "fieldtype": "Check",
+   "label": "Allow Blank",
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 1
+  }
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2020-07-08 16:03:17.522893",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Normal Test Result",
+ "owner": "Administrator",
+ "permissions": [],
+ "restrict_to_domain": "Healthcare",
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/normal_test_result/normal_test_result.py
similarity index 85%
rename from erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
rename to erpnext/healthcare/doctype/normal_test_result/normal_test_result.py
index c67531c..63abf02 100644
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
+++ b/erpnext/healthcare/doctype/normal_test_result/normal_test_result.py
@@ -5,5 +5,5 @@
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class LabTestGroups(Document):
+class NormalTestResult(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json b/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json
index a36c28d..8dd6476 100644
--- a/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json
+++ b/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json
@@ -1,202 +1,84 @@
 {
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2016-02-22 16:09:54.310628", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 1, 
+ "actions": [],
+ "allow_copy": 1,
+ "beta": 1,
+ "creation": "2016-02-22 16:09:54.310628",
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "heading_text",
+  "lab_test_event",
+  "allow_blank",
+  "lab_test_uom",
+  "secondary_uom",
+  "conversion_factor",
+  "column_break_5",
+  "normal_range"
+ ],
  "fields": [
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "heading_text", 
-   "fieldtype": "Heading", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Test", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "heading_text",
+   "fieldtype": "Heading",
+   "ignore_xss_filter": 1,
+   "label": "Test"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_event", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Event", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "lab_test_event",
+   "fieldtype": "Data",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Event"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_uom", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "UOM", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Lab Test UOM", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "lab_test_uom",
+   "fieldtype": "Link",
+   "ignore_user_permissions": 1,
+   "in_list_view": 1,
+   "label": "UOM",
+   "options": "Lab Test UOM"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "normal_range", 
-   "fieldtype": "Long Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Normal Range", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "normal_range",
+   "fieldtype": "Long Text",
+   "ignore_xss_filter": 1,
+   "in_list_view": 1,
+   "label": "Normal Range"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_5", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
+   "fieldname": "column_break_5",
+   "fieldtype": "Column Break"
+  },
+  {
+   "fieldname": "secondary_uom",
+   "fieldtype": "Link",
+   "label": "Secondary UOM",
+   "options": "Lab Test UOM"
+  },
+  {
+   "depends_on": "secondary_uom",
+   "fieldname": "conversion_factor",
+   "fieldtype": "Float",
+   "label": "Conversion Factor",
+   "mandatory_depends_on": "secondary_uom"
+  },
+  {
+   "default": "0",
+   "fieldname": "allow_blank",
+   "fieldtype": "Check",
+   "label": "Allow Blank"
   }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-09-04 11:42:30.766950", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Normal Test Template", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0, 
- "track_views": 0
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2020-06-23 13:28:40.156224",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Normal Test Template",
+ "owner": "Administrator",
+ "permissions": [],
+ "restrict_to_domain": "Healthcare",
+ "sort_field": "modified",
+ "sort_order": "DESC"
 }
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/__init__.py b/erpnext/healthcare/doctype/organism/__init__.py
similarity index 100%
copy from erpnext/healthcare/doctype/lab_test_groups/__init__.py
copy to erpnext/healthcare/doctype/organism/__init__.py
diff --git a/erpnext/healthcare/doctype/organism/organism.js b/erpnext/healthcare/doctype/organism/organism.js
new file mode 100644
index 0000000..fbcb094
--- /dev/null
+++ b/erpnext/healthcare/doctype/organism/organism.js
@@ -0,0 +1,5 @@
+// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('Organism', {
+});
diff --git a/erpnext/healthcare/doctype/organism/organism.json b/erpnext/healthcare/doctype/organism/organism.json
new file mode 100644
index 0000000..88a7686
--- /dev/null
+++ b/erpnext/healthcare/doctype/organism/organism.json
@@ -0,0 +1,152 @@
+{
+ "allow_copy": 0,
+ "allow_events_in_timeline": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "autoname": "field:organism",
+ "beta": 1,
+ "creation": "2019-09-06 16:29:07.797960",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "organism",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Organism",
+   "length": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 1
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "abbr",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 0,
+   "in_standard_filter": 0,
+   "label": "Abbr",
+   "length": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 1
+  }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 0,
+ "max_attachments": 0,
+ "modified": "2019-10-04 19:45:33.353753",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Organism",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [
+  {
+   "amend": 0,
+   "cancel": 0,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "if_owner": 0,
+   "import": 0,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "System Manager",
+   "set_user_permissions": 0,
+   "share": 1,
+   "submit": 0,
+   "write": 1
+  },
+  {
+   "amend": 0,
+   "cancel": 0,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "if_owner": 0,
+   "import": 0,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Healthcare Administrator",
+   "set_user_permissions": 0,
+   "share": 1,
+   "submit": 0,
+   "write": 1
+  }
+ ],
+ "quick_entry": 1,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "restrict_to_domain": "Healthcare",
+ "search_fields": "organism, abbr",
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "title_field": "organism",
+ "track_changes": 0,
+ "track_seen": 0,
+ "track_views": 0
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/organism/organism.py
similarity index 63%
copy from erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
copy to erpnext/healthcare/doctype/organism/organism.py
index c67531c..1ead762 100644
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
+++ b/erpnext/healthcare/doctype/organism/organism.py
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-# Copyright (c) 2015, ESS and contributors
+# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class LabTestGroups(Document):
+class Organism(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/organism/test_organism.js b/erpnext/healthcare/doctype/organism/test_organism.js
new file mode 100644
index 0000000..d57e553
--- /dev/null
+++ b/erpnext/healthcare/doctype/organism/test_organism.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+// rename this file from _test_[name] to test_[name] to activate
+// and remove above this line
+
+QUnit.test("test: Organism", function (assert) {
+	let done = assert.async();
+
+	// number of asserts
+	assert.expect(1);
+
+	frappe.run_serially([
+		// insert a new Organism
+		() => frappe.tests.make('Organism', [
+			// values to be set
+			{key: 'value'}
+		]),
+		() => {
+			assert.equal(cur_frm.doc.key, 'value');
+		},
+		() => done()
+	]);
+
+});
diff --git a/erpnext/healthcare/doctype/organism/test_organism.py b/erpnext/healthcare/doctype/organism/test_organism.py
new file mode 100644
index 0000000..ecb9665
--- /dev/null
+++ b/erpnext/healthcare/doctype/organism/test_organism.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+import unittest
+
+class TestOrganism(unittest.TestCase):
+	pass
diff --git a/erpnext/healthcare/doctype/lab_test_groups/__init__.py b/erpnext/healthcare/doctype/organism_test_item/__init__.py
similarity index 100%
copy from erpnext/healthcare/doctype/lab_test_groups/__init__.py
copy to erpnext/healthcare/doctype/organism_test_item/__init__.py
diff --git a/erpnext/healthcare/doctype/organism_test_item/organism_test_item.json b/erpnext/healthcare/doctype/organism_test_item/organism_test_item.json
new file mode 100644
index 0000000..56d0a4d
--- /dev/null
+++ b/erpnext/healthcare/doctype/organism_test_item/organism_test_item.json
@@ -0,0 +1,144 @@
+{
+ "allow_copy": 0,
+ "allow_events_in_timeline": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "beta": 1,
+ "creation": "2019-09-06 16:37:59.698996",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "organism",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Organism",
+   "length": 0,
+   "no_copy": 0,
+   "options": "Organism",
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 0
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "colony_population",
+   "fieldtype": "Small Text",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Colony Population",
+   "length": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 0
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "colony_uom",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Colony UOM",
+   "length": 0,
+   "no_copy": 0,
+   "options": "Lab Test UOM",
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 0
+  }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 1,
+ "max_attachments": 0,
+ "modified": "2019-10-04 19:48:04.104234",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Organism Test Item",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 0,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 0,
+ "track_seen": 0,
+ "track_views": 0
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/organism_test_item/organism_test_item.py
similarity index 61%
copy from erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
copy to erpnext/healthcare/doctype/organism_test_item/organism_test_item.py
index c67531c..019a55b 100644
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
+++ b/erpnext/healthcare/doctype/organism_test_item/organism_test_item.py
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-# Copyright (c) 2015, ESS and contributors
+# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class LabTestGroups(Document):
+class OrganismTestItem(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/lab_test_groups/__init__.py b/erpnext/healthcare/doctype/organism_test_result/__init__.py
similarity index 100%
copy from erpnext/healthcare/doctype/lab_test_groups/__init__.py
copy to erpnext/healthcare/doctype/organism_test_result/__init__.py
diff --git a/erpnext/healthcare/doctype/organism_test_result/organism_test_result.json b/erpnext/healthcare/doctype/organism_test_result/organism_test_result.json
new file mode 100644
index 0000000..8b238de
--- /dev/null
+++ b/erpnext/healthcare/doctype/organism_test_result/organism_test_result.json
@@ -0,0 +1,144 @@
+{
+ "allow_copy": 0,
+ "allow_events_in_timeline": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "beta": 1,
+ "creation": "2019-09-06 16:37:59.698996",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "organism",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Organism",
+   "length": 0,
+   "no_copy": 0,
+   "options": "Organism",
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 0
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "colony_population",
+   "fieldtype": "Small Text",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Colony Population",
+   "length": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 0
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_in_quick_entry": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fetch_if_empty": 0,
+   "fieldname": "colony_uom",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Colony UOM",
+   "length": 0,
+   "no_copy": 0,
+   "options": "Lab Test UOM",
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "translatable": 0,
+   "unique": 0
+  }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 1,
+ "max_attachments": 0,
+ "modified": "2019-10-04 19:48:04.104234",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Organism Test Result",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 0,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 0,
+ "track_seen": 0,
+ "track_views": 0
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/organism_test_result/organism_test_result.py
similarity index 60%
copy from erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
copy to erpnext/healthcare/doctype/organism_test_result/organism_test_result.py
index c67531c..02393c2 100644
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
+++ b/erpnext/healthcare/doctype/organism_test_result/organism_test_result.py
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-# Copyright (c) 2015, ESS and contributors
+# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 # For license information, please see license.txt
 
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class LabTestGroups(Document):
+class OrganismTestResult(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json b/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json
deleted file mode 100644
index 86f5e26..0000000
--- a/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2016-02-22 15:18:01.769903", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Document", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "antibiotic", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Antibiotic", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Antibiotic", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "antibiotic_sensitivity", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Sensitivity", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Sensitivity", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2017-10-05 11:08:06.327972", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Sensitivity Test Items", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py b/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py
deleted file mode 100644
index 35c8efd..0000000
--- a/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, ESS and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-from frappe.model.document import Document
-
-class SensitivityTestItems(Document):
-	pass
diff --git a/erpnext/healthcare/doctype/sensitivity_test_items/__init__.py b/erpnext/healthcare/doctype/sensitivity_test_result/__init__.py
similarity index 100%
rename from erpnext/healthcare/doctype/sensitivity_test_items/__init__.py
rename to erpnext/healthcare/doctype/sensitivity_test_result/__init__.py
diff --git a/erpnext/healthcare/doctype/sensitivity_test_result/sensitivity_test_result.json b/erpnext/healthcare/doctype/sensitivity_test_result/sensitivity_test_result.json
new file mode 100644
index 0000000..768c177
--- /dev/null
+++ b/erpnext/healthcare/doctype/sensitivity_test_result/sensitivity_test_result.json
@@ -0,0 +1,103 @@
+{
+ "allow_copy": 1,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "beta": 1,
+ "creation": "2016-02-22 15:18:01.769903",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Document",
+ "editable_grid": 1,
+ "fields": [
+  {
+   "allow_bulk_edit": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fieldname": "antibiotic",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 1,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Antibiotic",
+   "length": 0,
+   "no_copy": 0,
+   "options": "Antibiotic",
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "unique": 0
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
+   "fieldname": "antibiotic_sensitivity",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 1,
+   "ignore_xss_filter": 0,
+   "in_filter": 0,
+   "in_global_search": 0,
+   "in_list_view": 1,
+   "in_standard_filter": 0,
+   "label": "Sensitivity",
+   "length": 0,
+   "no_copy": 0,
+   "options": "Sensitivity",
+   "permlevel": 0,
+   "precision": "",
+   "print_hide": 0,
+   "print_hide_if_no_value": 0,
+   "read_only": 0,
+   "remember_last_selected_value": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
+   "unique": 0
+  }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 1,
+ "max_attachments": 0,
+ "modified": "2017-10-05 11:08:06.327972",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Sensitivity Test Result",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 0,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "restrict_to_domain": "Healthcare",
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 0,
+ "track_seen": 0
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/sensitivity_test_result/sensitivity_test_result.py
similarity index 83%
copy from erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
copy to erpnext/healthcare/doctype/sensitivity_test_result/sensitivity_test_result.py
index c67531c..64f1e6c 100644
--- a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py
+++ b/erpnext/healthcare/doctype/sensitivity_test_result/sensitivity_test_result.py
@@ -5,5 +5,5 @@
 from __future__ import unicode_literals
 from frappe.model.document import Document
 
-class LabTestGroups(Document):
+class SensitivityTestResult(Document):
 	pass
diff --git a/erpnext/healthcare/doctype/special_test_items/__init__.py b/erpnext/healthcare/doctype/special_test_items/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/healthcare/doctype/special_test_items/__init__.py
+++ /dev/null
diff --git a/erpnext/healthcare/doctype/special_test_items/special_test_items.json b/erpnext/healthcare/doctype/special_test_items/special_test_items.json
deleted file mode 100644
index a15806e..0000000
--- a/erpnext/healthcare/doctype/special_test_items/special_test_items.json
+++ /dev/null
@@ -1,175 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2016-02-22 15:12:36.202380", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Document", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "lab_test_particulars", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Particulars", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.require_result_value == 1", 
-   "fieldname": "result_value", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Value", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "print_width": "", 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0, 
-   "width": ""
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "require_result_value", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Require Result Value", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "template", 
-   "fieldtype": "Link", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Template", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Lab Test Template", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2018-09-04 12:01:18.801216", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Special Test Items", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0, 
- "track_views": 0
-}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/special_test_items/special_test_items.py b/erpnext/healthcare/doctype/special_test_items/special_test_items.py
deleted file mode 100644
index 17080b7..0000000
--- a/erpnext/healthcare/doctype/special_test_items/special_test_items.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, ESS and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-from frappe.model.document import Document
-
-class SpecialTestItems(Document):
-	pass
diff --git a/erpnext/healthcare/doctype/special_test_template/special_test_template.json b/erpnext/healthcare/doctype/special_test_template/special_test_template.json
deleted file mode 100644
index 372af0a..0000000
--- a/erpnext/healthcare/doctype/special_test_template/special_test_template.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "allow_copy": 1, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 1, 
- "creation": "2016-02-22 16:12:12.394200", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "Setup", 
- "editable_grid": 1, 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "particulars", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 1, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Result Component", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2017-10-04 16:20:09.565316", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "Special Test Template", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "restrict_to_domain": "Healthcare", 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json b/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json
index e8e95d8..f7d1676 100644
--- a/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json
+++ b/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json
@@ -7,16 +7,17 @@
  "docstatus": 0,
  "doctype": "Print Format",
  "font": "Default",
- "html": "<div >\n  {% if letter_head and not no_letterhead -%}\n    <div class=\"letter-head\">{{ letter_head }}</div>\n    <hr>\n  {%- endif %}\n\n  {% if (doc.docstatus != 1) %}\n  <b>Lab Tests have to be Submitted for Print .. !</b>\n  {% elif (frappe.db.get_value(\"Healthcare Settings\", \"None\", \"lab_test_approval_required\") == '1' and doc.approval_status != \"Approved\") %}\n  <b>Lab Tests have to be Approved for Print .. !</b>\n  {%- else -%}\n  <div class=\"row section-break\">\n    <div class=\"col-xs-6 column-break\">\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Patient</label>\n        </div>\n        {% if doc.patient %}\n        <div class=\"col-xs-7  value\">\n          <strong>: </strong>{{doc.patient}}\n        </div>\n        {% else %}\n        <div class=\"col-xs-7  value\">\n          <strong>: </strong><em>Patient Name</em>\n        </div>\n        {%- endif -%}\n      </div>\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Age</label>\n        </div>\n        <div class=\"col-xs-7  value\">\n          <strong>: </strong> {{doc.patient_age}}\n        </div>\n      </div>\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Gender</label>\n        </div>\n        <div class=\"col-xs-7  value\">\n          <strong>: </strong> {{doc.patient_sex}}\n        </div>\n      </div>\n\n    </div>\n\n    <div class=\"col-xs-6 column-break\">\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Practitioner</label>\n        </div>\n        {% if doc.practitioner %}\n        <div class=\"col-xs-7  text-left value\">\n          <strong>: </strong>{{doc.practitioner}}\n        </div>\n        {%- endif -%}\n      </div>\n\n      {% if doc.sample_date %}\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Sample Date</label>\n        </div>\n        <div class=\"col-xs-7 text-left value\">\n          <strong>: </strong>{{doc.sample_date}}\n        </div>\n      </div>\n      {%- endif -%}\n\n      {% if doc.result_date %}\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Result Date</label>\n        </div>\n        <div class=\"col-xs-7 text-left value\">\n          <strong>: </strong>{{doc.result_date}}\n        </div>\n      </div>\n      {%- endif -%}\n\n    </div>\n\n  </div>\n\n  <div align=\"center\">\n    <hr><h4 class=\"text-uppercase\"><b><u>Department of {{doc.department}}</u></b></h4>\n  </div>\n\n  <table class=\"table\">\n    <tbody>\n      {%- if doc.normal_test_items -%}\n      <tr>\n        <th>Name of Test</th>\n        <th class=\"text-left\">Result</th>\n        <th class=\"text-right\">Normal Range</th>\n      </tr>\n\n      {%- if doc.normal_test_items|length > 1 %}\n      <tr><td style=\"width: 40%;\"> <b>{{ doc.lab_test_name }}</b> </td><td></td></tr>\n      {%- endif -%}\n\n      {%- for row in doc.normal_test_items -%}\n      <tr>\n        <td style=\"width: 40%;border:none;\">\n          {%- if doc.normal_test_items|length > 1 %}&emsp;&emsp;{%- endif -%}\n          {%- if row.lab_test_name -%}<b>{{ row.lab_test_name }}</b>\n          {%- else -%}&emsp;&emsp;&emsp;{%- endif -%}\n          {%- if row.lab_test_event -%} &emsp;&emsp;{{ row.lab_test_event }}{%- endif -%}\n        </td>\n\n        <td style=\"width: 20%;text-align: left;border:none;\">\n          {%- if row.result_value -%}{{ row.result_value }}{%- endif -%}&emsp;\n          {%- if row.lab_test_uom -%}{{ row.lab_test_uom }}{%- endif -%}\n        </td>\n\n        <td style=\"width: 30%;text-align: right;border:none;\">\n          <div style=\"border: 0px;\">\n            {%- if row.normal_range -%}{{ row.normal_range }}{%- endif -%}\n          </div>\n        </td>\n      </tr>\n\n      {%- endfor -%}\n      {%- endif -%}\n    </tbody>\n  </table>\n\n  <table class=\"table\">\n    <tbody>\n      {%- if doc.special_test_items -%}\n      <tr>\n        <th>Name of Test</th>\n        <th class=\"text-left\">Result</th>\n      </tr>\n      <tr><td style=\"width: 30%;border:none;\"> <b>{{ doc.lab_test_name }}</b> </td><td></td></tr>\n      {%- for row in doc.special_test_items -%}\n      <tr>\n        <td style=\"width: 30%;border:none;\"> &emsp;&emsp;{{ row.lab_test_particulars }} </td>\n        <td style=\"width: 70%;text-align: left;border:none;\">\n          {%- if row.result_value -%}{{ row.result_value }}{%- endif -%}\n        </td>\n      </tr>\n\n      {%- endfor -%}\n      {%- endif -%}\n\n      {%- if doc.sensitivity_test_items -%}\n      <tr>\n        <th>Antibiotic</th>\n        <th class=\"text-left\">Sensitivity</th>\n      </tr>\n      {%- for row in doc.sensitivity_test_items -%}\n      <tr>\n        <td style=\"width: 30%;border:none;\"> {{ row.antibiotic }} </td>\n        <td style=\"width: 70%;text-align: left;border:none;\">{{ row.antibiotic_sensitivity }}</td>\n      </tr>\n\n      {%- endfor -%}\n      {%- endif -%}\n\n    </tbody>\n  </table>\n  {%- endif -%}\n\n  <div align=\"right\">\n    {%- if (frappe.db.get_value(\"Healthcare Settings\", \"None\", \"employee_name_and_designation_in_print\") == '1') -%}\n    <h6 class=\"text-uppercase\"><b>{{doc.employee_name}}</b></h6>\n    <h6 class=\"text-uppercase\"><b>{{doc.employee_designation}}</b></h6>\n    {%- else -%}\n    <h6 ><b>{{frappe.db.get_value(\"Healthcare Settings\", \"None\", \"custom_signature_in_print\") }}</b></h6>\n    {%- endif -%}\n  </div>\n</div>\n",
+ "html": "<div >\n  {% if letter_head and not no_letterhead -%}\n    <div class=\"letter-head\">{{ letter_head }}</div>\n    <hr>\n  {%- endif %}\n\n  {% if (doc.docstatus != 1) %}\n  <div><h2 class=\"text-uppercase text-center\"><b>WORKSHEET</b></h2></div>\n\t<br/>\n\t<div class=\"row section-break\">\n    <div class=\"col-xs-6 column-break\">\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Patient</label>\n        </div>\n        {% if doc.patient_name %}\n        <div class=\"col-xs-7  value\">\n          {{ doc.patient_name }}\n        </div>\n        {% else %}\n        <div class=\"col-xs-7  value\">\n          {{ doc.patient }}\n        </div>\n        {%- endif -%}\n      </div>\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Age</label>\n        </div>\n        <div class=\"col-xs-7  value\">\n          {{ doc.patient_age or '' }}\n        </div>\n      </div>\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Gender</label>\n        </div>\n        <div class=\"col-xs-7  value\">\n          {{ doc.patient_sex or '' }}\n        </div>\n      </div>\n\n    </div>\n\n    <div class=\"col-xs-6 column-break\">\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Practitioner</label>\n        </div>\n        {% if doc.practitioner_name %}\n        <div class=\"col-xs-7  text-left value\">\n          {{ doc.practitioner_name }}\n        </div>\n        {% else %}\n\t\t\t{% if doc.referring_practitioner_name %}\n            <div class=\"col-xs-7  text-left value\">\n            {{ doc.referring_practitioner_name }}\n            </div>\n\t\t    {% endif %}\n        {%- endif -%}\n      </div>\n\n      {% if doc.sample_date %}\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Sample Date</label>\n        </div>\n        <div class=\"col-xs-7 text-left value\">\n        {{ doc.sample_date }}\n        </div>\n      </div>\n      {%- endif -%}\n    </div>\n  </div>\n\n\t<div>\n    <hr><h4 class=\"text-uppercase text-center\"><b><u>Department of {{ doc.department }}</u></b></h4>\n  </div>\n\n\t<table class=\"table\">\n    <tbody>\n      {%- if doc.normal_test_items -%}\n      <tr>\n        <th>Name of Test</th>\n        <th class=\"text-left\">Result</th>\n        <th class=\"text-right\">Normal Range</th>\n      </tr>\n\n      {%- if doc.normal_test_items|length > 1 %}\n      <tr><td style=\"width: 40%;\"> <b>{{ doc.lab_test_name }}</b> </td><td></td></tr>\n      {%- endif -%}\n\n      {%- for row in doc.normal_test_items -%}\n      <tr>\n        <td style=\"width: 40%;border:none;\">\n          {%- if doc.normal_test_items|length > 1 %}&emsp;&emsp;{%- endif -%}\n          {%- if row.lab_test_name -%}<b>{{ row.lab_test_name }}</b>\n          {%- else -%}&emsp;&emsp;&emsp;{%- endif -%}\n          {%- if row.lab_test_event -%} &emsp;&emsp;{{ row.lab_test_event }}{%- endif -%}\n        </td>\n\n        <td style=\"width: 20%;text-align: right;border:none;\">\n          {%- if row.lab_test_uom -%}&nbsp;{{ row.lab_test_uom }}{%- endif -%}\n        </td>\n\n        <td style=\"width: 30%;text-align: right;border:none;\">\n          <div style=\"border: 0px;\">\n            {%- if row.normal_range -%}{{ row.normal_range }}{%- endif -%}\n          </div>\n        </td>\n      </tr>\n\n      {%- endfor -%}\n      {%- endif -%}\n    </tbody>\n  </table>\n\n\t<table class=\"table\">\n    <tbody>\n      {%- if doc.descriptive_test_items -%}\n      <tr>\n        <th>Name of Test</th>\n        <th class=\"text-left\">Result</th>\n      </tr>\n      <tr><td style=\"width: 30%;border:none;\"> <b>{{ doc.lab_test_name }}</b> </td><td></td></tr>\n\t\t\t{% set gr_lab_test_name = {'ltname': ''} %}\n      {%- for row in doc.descriptive_test_items -%}\n\t\t\t{%- if row.lab_test_name -%}\n\t\t\t{%- if row.lab_test_name != gr_lab_test_name.ltname -%}\n\t\t\t<tr>\n\t\t\t\t<td style=\"width: 30%;border:none;\"> &emsp;{{ row.lab_test_name }} </td>\n\t\t\t\t<td style=\"width: 70%;text-align: left;border:none;\"></td>\n\t\t\t</tr>\n\t\t\t{% if gr_lab_test_name.update({'ltname': row.lab_test_name}) %} {% endif %}\n\t\t\t{%- endif -%}\n\t\t\t{%- endif -%}\n      <tr>\n        <td style=\"width: 30%;border:none;\"> &emsp;&emsp;{{ row.lab_test_particulars }} </td>\n        <td style=\"width: 70%;text-align: left;border:none;\"></td>\n      </tr>\n      {%- endfor -%}\n      {%- endif -%}\n    </tbody>\n  </table>\n  <div>\n    {% if doc.worksheet_instructions %}\n    <hr>\n    <b>Instructions</b>\n    {{ doc.worksheet_instructions }}\n    {%- endif -%}\n</div>\n  {% elif (frappe.db.get_value(\"Healthcare Settings\", \"None\", \"require_test_result_approval\") == '1' and doc.status != \"Approved\") %}\n  <b>Lab Tests have to be Approved for Print .. !</b>\n  {%- else -%}\n  <div class=\"row section-break\">\n    <div class=\"col-xs-6 column-break\">\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Patient</label>\n        </div>\n        {% if doc.patient_name %}\n        <div class=\"col-xs-7  value\">\n          {{ doc.patient_name }}\n        </div>\n        {% else %}\n        <div class=\"col-xs-7  value\">\n            {{ doc.patient }}\n        </div>\n        {%- endif -%}\n      </div>\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Age</label>\n        </div>\n        <div class=\"col-xs-7  value\">\n        {{ doc.patient_age or '' }}\n        </div>\n      </div>\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Gender</label>\n        </div>\n        <div class=\"col-xs-7  value\">\n          {{ doc.patient_sex or '' }}\n        </div>\n      </div>\n\n    </div>\n\n    <div class=\"col-xs-6 column-break\">\n\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Practitioner</label>\n        </div>\n        {% if doc.practitioner_name %}\n        <div class=\"col-xs-7  text-left value\">\n          {{ doc.practitioner_name }}\n        </div>\n\t\t{% else %}\n\t\t    {% if doc.referring_practitioner_name %}\n                <div class=\"col-xs-7  text-left value\">\n                {{ doc.referring_practitioner_name }}\n                </div>\n\t\t\t{% endif %}\n        {%- endif -%}\n      </div>\n\n      {% if doc.sample_date %}\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Sample Date</label>\n        </div>\n        <div class=\"col-xs-7 text-left value\">\n          {{ doc.sample_date }}\n        </div>\n      </div>\n      {%- endif -%}\n\n      {% if doc.result_date %}\n      <div class=\"row\">\n        <div class=\"col-xs-4 text-left\">\n          <label>Result Date</label>\n        </div>\n        <div class=\"col-xs-7 text-left value\">\n          {{ doc.result_date }}\n        </div>\n      </div>\n      {%- endif -%}\n\n    </div>\n\n  </div>\n\n  <div>\n    <hr><h4 class=\"text-uppercase text-center\"><b><u>Department of {{ doc.department }}</u></b></h4>\n  </div>\n\n\t<div>\n\t\t{% if doc.result_legend and  (doc.legend_print_position == \"Top\" or doc.legend_print_position == \"Both\")%}\n\t\t<b>Result Legend:</b>\n\t\t{{ doc.result_legend }}\n\t\t{%- endif -%}\n\t</div>\n\n  <table class=\"table\">\n    <tbody>\n      {%- if doc.normal_test_items -%}\n      <tr>\n        <th>Name of Test</th>\n        <th class=\"text-left\">Result</th>\n        <th class=\"text-right\">Normal Range</th>\n      </tr>\n\n      {%- if doc.normal_test_items|length > 1 %}\n      <tr><td style=\"width: 40%;\"> <b>{{ doc.lab_test_name }}</b> </td><td></td></tr>\n      {%- endif -%}\n\n      {%- for row in doc.normal_test_items -%}\n      <tr>\n        <td style=\"width: 40%;border:none;\">\n          {%- if doc.normal_test_items|length > 1 %}&emsp;&emsp;{%- endif -%}\n          {%- if row.lab_test_name -%}<b>{{ row.lab_test_name }}</b>\n          {%- else -%}&emsp;&emsp;&emsp;{%- endif -%}\n          {%- if row.lab_test_event -%} &emsp;&emsp;{{ row.lab_test_event }}{%- endif -%}\n        </td>\n\n        <td style=\"width: 20%;text-align: left;border:none;\">\n\t\t\t\t\t{%- if row.result_value -%}\n\t\t\t\t\t\t{%- if row.bold -%}<b>{% endif %}\n\t\t\t\t\t\t{%- if row.underline -%}<u>{% endif %}\n\t\t\t\t\t\t{%- if row.italic -%}<i>{% endif %}\n                        {{ row.result_value }}\n                        {%- if row.lab_test_uom -%}&emsp;{{ row.lab_test_uom }}{%- endif -%}\n\t\t\t\t\t\t{%- if row.italic -%}</i>{% endif %}\n\t\t\t\t\t\t{%- if row.underline -%}</u>{% endif %}\n\t\t\t\t\t\t{%- if row.bold -%}</b>{% endif %}\n\t\t\t\t\t{%- endif -%}\n          \n\t\t\t\t\t{%- if row.secondary_uom and row.conversion_factor and row.secondary_uom_result -%}\n\t\t\t\t\t\t<br/>\n\t\t\t\t\t\t{%- if row.bold -%}<b>{% endif %}\n\t\t\t\t\t\t{%- if row.underline -%}<u>{% endif %}\n\t\t\t\t\t\t{%- if row.italic -%}<i>{% endif %}\n                        {{ row.secondary_uom_result }}\n                        &emsp;{{ row.secondary_uom }}\n\t\t\t\t\t\t{%- if row.italic -%}</i>{% endif %}\n\t\t\t\t\t\t{%- if row.underline -%}</u>{% endif %}\n\t\t\t\t\t\t{%- if row.bold -%}</b>{% endif %}\n\t\t\t\t\t\t&emsp;\n\t\t\t\t\t{%- endif -%}\n        </td>\n\n        <td style=\"width: 30%;text-align: right;border:none;\">\n          <div style=\"border: 0px;\">\n            {%- if row.normal_range -%}{{ row.normal_range }}{%- endif -%}\n          </div>\n        </td>\n      </tr>\n\n      {%- endfor -%}\n      {%- endif -%}\n    </tbody>\n  </table>\n\n  <table class=\"table\">\n    <tbody>\n      {%- if doc.descriptive_test_items -%}\n      <tr>\n        <th>Name of Test</th>\n        <th class=\"text-left\">Result</th>\n      </tr>\n      <tr><td style=\"width: 30%;border:none;\"> <b>{{ doc.lab_test_name }}</b> </td><td></td></tr>\n\t\t\t{% set gr_lab_test_name = {'ltname': ''} %}\n      {%- for row in doc.descriptive_test_items -%}\n\t\t\t{%- if row.lab_test_name -%}\n\t\t\t{%- if row.lab_test_name != gr_lab_test_name.ltname -%}\n\t\t\t<tr>\n\t\t\t\t<td style=\"width: 30%;border:none;\"> &emsp;{{ row.lab_test_name }} </td>\n\t\t\t\t<td style=\"width: 70%;text-align: left;border:none;\"></td>\n\t\t\t</tr>\n\t\t\t{% if gr_lab_test_name.update({'ltname': row.lab_test_name}) %} {% endif %}\n\t\t\t{%- endif -%}\n\t\t\t{%- endif -%}\n      <tr>\n        <td style=\"width: 30%;border:none;\"> &emsp;&emsp;{{ row.lab_test_particulars }} </td>\n        <td style=\"width: 70%;text-align: left;border:none;\">\n          {%- if row.result_value -%}{{ row.result_value }}{%- endif -%}\n        </td>\n      </tr>\n      {%- endfor -%}\n      {%- endif -%}\n\n\t\t\t{%- if doc.organisms -%}\n\t\t\t<tr>\n\t\t\t\t<th>Organism</th>\n\t\t\t\t<th class=\"text-left\">Colony Population</th>\n\t\t\t</tr>\n\t\t\t{%- for row in doc.organisms -%}\n\t\t\t<tr>\n\t\t\t\t<td style=\"width: 30%;border:none;\"> {{ row.organism }} </td>\n\t\t\t\t<td style=\"width: 60%;text-align: left;border:none;\">\n\t\t\t\t\t{{ row.colony_population }}\n\t\t\t\t\t{% if row.colony_uom %}\n\t\t\t\t\t\t{{ row.colony_uom }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t{%- endfor -%}\n\t\t\t{%- endif -%}\n\n\t\t\t{%- if doc.sensitivity_test_items -%}\n\t\t\t<tr>\n\t\t\t\t<th>Antibiotic</th>\n\t\t\t\t<th class=\"text-left\">Sensitivity</th>\n\t\t\t</tr>\n\t\t\t{%- for row in doc.sensitivity_test_items -%}\n\t\t\t<tr>\n\t\t\t\t<td style=\"width: 30%;border:none;\"> {{ row.antibiotic }} </td>\n\t\t\t\t<td style=\"width: 70%;text-align: left;border:none;\">{{ row.antibiotic_sensitivity }}</td>\n\t\t\t</tr>\n\t\t\t{%- endfor -%}\n\t\t\t{%- endif -%}\n\n    </tbody>\n  </table>\n  <div>\n    {% if doc.custom_result %}\n        <br/>\n        <div> {{ doc.custom_result }} </div>\n    {%- endif -%}\n    </div>\n\n    <div>\n        {% if doc.lab_test_comment %}\n        <br/>\n        <b>Comments</b>\n        {{ doc.lab_test_comment }}\n        {%- endif -%}\n    </div>\n\n    <div class=\"text-right\">\n        {%- if (frappe.db.get_value(\"Healthcare Settings\", \"None\", \"employee_name_and_designation_in_print\") == '1') -%}\n            {%- if doc.employee_name -%}\n            <h6 class=\"text-uppercase\"><b>{{ doc.employee_name }}</b></h6>\n            {%- endif -%}\n            {%- if doc.employee_designation -%}\n            <h6 class=\"text-uppercase\"><b>{{ doc.employee_designation }}</b></h6>\n            {%- endif -%}\n        {%- else -%}\n            {%- if frappe.db.get_value(\"Healthcare Settings\", \"None\", \"custom_signature_in_print\") -%}\n            <h6 ><b>{{ frappe.db.get_value(\"Healthcare Settings\", \"None\", \"custom_signature_in_print\") }}</b></h6>\n            {%- endif -%}\n        {%- endif -%}\n    </div>\n\n    <div>\n        {% if doc.result_legend and  (doc.legend_print_position == \"Bottom\" or doc.legend_print_position == \"Both\" or doc.legend_print_position == \"\")%}\n        <hr>\n        <b>Result Legend</b>\n        {{ doc.result_legend }}\n        {%- endif -%}\n    </div>\n  {%- endif -%}\n</div>",
  "idx": 0,
  "line_breaks": 0,
- "modified": "2018-09-04 12:03:47.066918",
+ "modified": "2020-07-08 15:34:28.866798",
  "modified_by": "Administrator",
  "module": "Healthcare",
  "name": "Lab Test Print",
  "owner": "Administrator",
  "print_format_builder": 0,
- "print_format_type": "Server",
+ "print_format_type": "Jinja",
+ "raw_printing": 0,
  "show_section_headings": 0,
  "standard": "Yes"
 }
\ No newline at end of file
diff --git a/erpnext/healthcare/web_form/lab_test/lab_test.json b/erpnext/healthcare/web_form/lab_test/lab_test.json
index 88a9756..3509917 100644
--- a/erpnext/healthcare/web_form/lab_test/lab_test.json
+++ b/erpnext/healthcare/web_form/lab_test/lab_test.json
@@ -1,255 +1,459 @@
 {
- "accept_payment": 0, 
- "allow_comments": 0, 
- "allow_delete": 0, 
- "allow_edit": 1, 
- "allow_incomplete": 0, 
- "allow_multiple": 1, 
- "allow_print": 1, 
- "amount": 0.0, 
- "amount_based_on_field": 0, 
- "creation": "2017-06-06 16:12:33.052258", 
- "currency": "INR", 
- "doc_type": "Lab Test", 
- "docstatus": 0, 
- "doctype": "Web Form", 
- "idx": 0, 
- "introduction_text": "Lab Test", 
- "is_standard": 1, 
- "login_required": 1, 
- "max_attachment_size": 0, 
- "modified": "2018-09-04 08:50:41.314546", 
- "modified_by": "Administrator", 
- "module": "Healthcare", 
- "name": "lab-test", 
- "owner": "Administrator", 
- "payment_button_label": "Buy Now", 
- "print_format": "Lab Test Print", 
- "published": 1, 
- "route": "lab-test", 
- "show_in_grid": 0, 
- "show_sidebar": 1, 
- "sidebar_items": [], 
- "success_url": "/lab-test", 
- "title": "Lab Test", 
+ "accept_payment": 0,
+ "allow_comments": 1,
+ "allow_delete": 0,
+ "allow_edit": 1,
+ "allow_incomplete": 0,
+ "allow_multiple": 1,
+ "allow_print": 1,
+ "amount": 0.0,
+ "amount_based_on_field": 0,
+ "creation": "2017-06-06 16:12:33.052258",
+ "currency": "INR",
+ "doc_type": "Lab Test",
+ "docstatus": 0,
+ "doctype": "Web Form",
+ "idx": 0,
+ "introduction_text": "Lab Test",
+ "is_standard": 1,
+ "login_required": 1,
+ "max_attachment_size": 0,
+ "modified": "2020-06-22 12:59:49.126398",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "lab-test",
+ "owner": "Administrator",
+ "payment_button_label": "Buy Now",
+ "print_format": "Lab Test Print",
+ "published": 1,
+ "route": "lab-test",
+ "route_to_success_link": 0,
+ "show_attachments": 0,
+ "show_in_grid": 0,
+ "show_sidebar": 1,
+ "sidebar_items": [],
+ "success_url": "/lab-test",
+ "title": "Lab Test",
  "web_form_fields": [
   {
-   "fieldname": "naming_series", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "label": "Series", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "LP-", 
-   "read_only": 0, 
-   "reqd": 1, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "lab_test_name",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Test Name",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "default": "0", 
-   "fieldname": "invoiced", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "label": "Invoiced", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "", 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "department",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Department",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Medical Department",
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "patient", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "label": "Patient", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Patient", 
-   "read_only": 0, 
-   "reqd": 1, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "column_break_26",
+   "fieldtype": "Column Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "patient_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "label": "Patient Name", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "patient.patient_name", 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "company",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Company",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Company",
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "practitioner", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "label": "Healthcare Practitioner", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Healthcare Practitioner", 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "status",
+   "fieldtype": "Select",
+   "hidden": 0,
+   "label": "Status",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Draft\nCompleted\nApproved\nRejected\nCancelled",
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "status", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "label": "Status", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Draft\nCompleted\nApproved\nRejected\nCancelled", 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "submitted_date",
+   "fieldtype": "Datetime",
+   "hidden": 0,
+   "label": "Submitted Date",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "label": "Department", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Medical Department", 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sb_first",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "sample", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "label": "Sample ID", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Sample Collection", 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "patient",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Patient",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Patient",
+   "read_only": 0,
+   "reqd": 1,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "default": "", 
-   "fieldname": "result_date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "label": "Result Date", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "patient_name",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Patient Name",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "report_preference", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "label": "Report Preference", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "patient_age",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Age",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "lab_test_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "label": "Test Name", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "patient_sex",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Gender",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Gender",
+   "read_only": 0,
+   "reqd": 1,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "normal_test_items", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Normal Test Items", 
-   "read_only": 1, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "inpatient_record",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Inpatient Record",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Inpatient Record",
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "special_test_items", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Special Test Items", 
-   "read_only": 1, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "report_preference",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Report Preference",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "sensitivity_test_items", 
-   "fieldtype": "Table", 
-   "hidden": 0, 
-   "max_length": 0, 
-   "max_value": 0, 
-   "options": "Sensitivity Test Items", 
-   "read_only": 1, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "email",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "label": "Email",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "lab_test_comment", 
-   "fieldtype": "Text", 
-   "hidden": 0, 
-   "label": "Comments", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 1, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "mobile",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "label": "Mobile",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "fieldname": "custom_result", 
-   "fieldtype": "Text Editor", 
-   "hidden": 0, 
-   "label": "Custom Result", 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 1, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "c_b",
+   "fieldtype": "Column Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "default": "0", 
-   "fieldname": "sensitivity_toggle", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "practitioner",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Requesting Practitioner",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Healthcare Practitioner",
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "default": "0", 
-   "fieldname": "special_toggle", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "practitioner_name",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Requesting Practitioner",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
    "show_in_filter": 0
-  }, 
+  },
   {
-   "default": "0", 
-   "fieldname": "normal_toggle", 
-   "fieldtype": "Check", 
-   "hidden": 1, 
-   "max_length": 0, 
-   "max_value": 0, 
-   "read_only": 0, 
-   "reqd": 0, 
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "requesting_department",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Requesting Department",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Medical Department",
+   "read_only": 1,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "employee",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "label": "Employee (Lab Technician)",
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Employee",
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "employee_name",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Lab Technician Name",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "employee_designation",
+   "fieldtype": "Data",
+   "hidden": 0,
+   "label": "Lab Technician Designation",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 1,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sb_normal",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "lab_test_html",
+   "fieldtype": "HTML",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "normal_test_items",
+   "fieldtype": "Table",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Normal Test Result",
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sb_descriptive",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "descriptive_test_items",
+   "fieldtype": "Table",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Descriptive Test Result",
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "depends_on": "special_toggle",
+   "fieldname": "organisms_section",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "organisms",
+   "fieldtype": "Table",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Organism Test Result",
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sb_sensitivity",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sensitivity_test_items",
+   "fieldtype": "Table",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "options": "Sensitivity Test Result",
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sb_comments",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "lab_test_comment",
+   "fieldtype": "Text",
+   "hidden": 0,
+   "label": "Comments",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "sb_customresult",
+   "fieldtype": "Section Break",
+   "hidden": 0,
+   "label": "Custom Result",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
+   "show_in_filter": 0
+  },
+  {
+   "allow_read_on_all_link_options": 0,
+   "fieldname": "custom_result",
+   "fieldtype": "Text Editor",
+   "hidden": 0,
+   "label": "Custom Result",
+   "max_length": 0,
+   "max_value": 0,
+   "read_only": 0,
+   "reqd": 0,
    "show_in_filter": 0
   }
  ]
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 0c2b873..ea2611f 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -712,3 +712,4 @@
 erpnext.patches.v13_0.delete_report_requested_items_to_order
 erpnext.patches.v12_0.update_item_tax_template_company
 erpnext.patches.v13_0.move_branch_code_to_bank_account
+erpnext.patches.v13_0.healthcare_lab_module_rename_doctypes
diff --git a/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py b/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py
new file mode 100644
index 0000000..5920bf1
--- /dev/null
+++ b/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py
@@ -0,0 +1,51 @@
+from __future__ import unicode_literals
+import frappe
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+	if frappe.db.exists('DocType', 'Lab Test') and frappe.db.exists('DocType', 'Lab Test Template'):
+		# rename child doctypes
+		doctypes = {
+			'Lab Test Groups': 'Lab Test Group Template',
+			'Normal Test Items': 'Normal Test Result',
+			'Sensitivity Test Items': 'Sensitivity Test Result',
+			'Special Test Items': 'Descriptive Test Result',
+			'Special Test Template': 'Descriptive Test Template'
+		}
+
+		frappe.reload_doc('healthcare', 'doctype', 'lab_test')
+		frappe.reload_doc('healthcare', 'doctype', 'lab_test_template')
+
+		for old_dt, new_dt in doctypes.items():
+			if not frappe.db.table_exists(new_dt) and frappe.db.table_exists(old_dt):
+				frappe.rename_doc('DocType', old_dt, new_dt, force=True)
+				frappe.reload_doc('healthcare', 'doctype', frappe.scrub(new_dt))
+				frappe.delete_doc_if_exists('DocType', old_dt)
+
+		parent_fields = {
+			'Lab Test Group Template': 'lab_test_groups',
+			'Descriptive Test Template': 'descriptive_test_templates',
+			'Normal Test Result': 'normal_test_items',
+			'Sensitivity Test Result': 'sensitivity_test_items',
+			'Descriptive Test Result': 'descriptive_test_items'
+		}
+
+		for doctype, parentfield in parent_fields.items():
+			frappe.db.sql("""
+				UPDATE `tab{0}`
+				SET parentfield = %(parentfield)s
+			""".format(doctype), {'parentfield': parentfield})
+
+		# rename field
+		frappe.reload_doc('healthcare', 'doctype', 'lab_test')
+		if frappe.db.has_column('Lab Test', 'special_toggle'):
+			rename_field('Lab Test', 'special_toggle', 'descriptive_toggle')
+
+	if frappe.db.exists('DocType', 'Lab Test Group Template'):
+		# fix select field option
+		frappe.reload_doc('healthcare', 'doctype', 'lab_test_group_template')
+		frappe.db.sql("""
+			UPDATE `tabLab Test Group Template`
+			SET template_or_new_line = 'Add New Line'
+			WHERE template_or_new_line = 'Add new line'
+		""")