From 7113bf1867514b9f05760607ff60898590b5198e Mon Sep 17 00:00:00 2001 From: Duradundi Date: Wed, 19 Aug 2026 11:36:01 +0000 Subject: [PATCH] Initial commit: sfda_parser Frappe app --- .editorconfig | 21 + .eslintrc | 124 + .pre-commit-config.yaml | 69 + README.md | 33 + license.txt | 21 + pyproject.toml | 59 + sfda_parser/__init__.py | 1 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes sfda_parser/__pycache__/hooks.cpython-310.pyc | Bin 0 -> 787 bytes sfda_parser/api/__init__.py | 0 .../api/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 177 bytes .../__pycache__/sfda_scraper.cpython-310.pyc | Bin 0 -> 2862 bytes sfda_parser/api/sfda_scraper.py | 87 + sfda_parser/config/__init__.py | 0 sfda_parser/fixtures/client_script.json | 1 + sfda_parser/fixtures/custom_docperm.json | 15722 ++++++++++++++++ sfda_parser/fixtures/custom_field.json | 59 + sfda_parser/fixtures/property_setter.json | 1 + sfda_parser/fixtures/report.json | 1 + sfda_parser/fixtures/server_script.json | 21 + sfda_parser/hooks.py | 262 + sfda_parser/modules.txt | 1 + sfda_parser/patches.txt | 7 + sfda_parser/patches/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 181 bytes ...fda_device_lists_from_pdfs.cpython-310.pyc | Bin 0 -> 865 bytes .../reparse_sfda_device_lists_from_pdfs.py | 20 + sfda_parser/public/.gitkeep | 0 sfda_parser/sfda_parser/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 185 bytes sfda_parser/sfda_parser/doctype/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 193 bytes .../doctype/sfda_device_entries/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 213 bytes .../sfda_device_entries.cpython-310.pyc | Bin 0 -> 446 bytes .../sfda_device_entries.json | 120 + .../sfda_device_entries.py | 8 + .../doctype/sfda_entries/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 206 bytes .../__pycache__/sfda_entries.cpython-310.pyc | Bin 0 -> 426 bytes .../doctype/sfda_entries/sfda_entries.js | 199 + .../doctype/sfda_entries/sfda_entries.json | 98 + .../doctype/sfda_entries/sfda_entries.py | 8 + .../doctype/sfda_entries/test_sfda_entries.py | 8 + sfda_parser/sfda_scraper/__init__.py | 1 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 186 bytes .../_verify_pdf_attach.cpython-310.pyc | Bin 0 -> 1230 bytes .../__pycache__/detail_page.cpython-310.pyc | Bin 0 -> 6133 bytes .../__pycache__/detail_pdf.cpython-310.pyc | Bin 0 -> 32778 bytes .../__pycache__/http_client.cpython-310.pyc | Bin 0 -> 2145 bytes .../__pycache__/importer.cpython-310.pyc | Bin 0 -> 10615 bytes .../__pycache__/jobs.cpython-310.pyc | Bin 0 -> 1077 bytes .../__pycache__/reparse.cpython-310.pyc | Bin 0 -> 3397 bytes .../test_detail_pdf_expand.cpython-310.pyc | Bin 0 -> 7296 bytes .../test_detail_pdf_sanitize.cpython-310.pyc | Bin 0 -> 7570 bytes .../__pycache__/weekly_list.cpython-310.pyc | Bin 0 -> 3543 bytes .../__pycache__/weekly_pdf.cpython-310.pyc | Bin 0 -> 2366 bytes sfda_parser/sfda_scraper/detail_page.py | 192 + sfda_parser/sfda_scraper/detail_pdf.py | 1295 ++ sfda_parser/sfda_scraper/http_client.py | 74 + sfda_parser/sfda_scraper/importer.py | 407 + sfda_parser/sfda_scraper/jobs.py | 25 + sfda_parser/sfda_scraper/reparse.py | 140 + .../sfda_scraper/test_detail_pdf_expand.py | 158 + .../sfda_scraper/test_detail_pdf_sanitize.py | 176 + sfda_parser/sfda_scraper/weekly_list.py | 103 + sfda_parser/sfda_scraper/weekly_pdf.py | 74 + sfda_parser/templates/__init__.py | 0 sfda_parser/templates/pages/__init__.py | 0 69 files changed, 19596 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintrc create mode 100644 .pre-commit-config.yaml create mode 100644 README.md create mode 100644 license.txt create mode 100644 pyproject.toml create mode 100644 sfda_parser/__init__.py create mode 100644 sfda_parser/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/__pycache__/hooks.cpython-310.pyc create mode 100644 sfda_parser/api/__init__.py create mode 100644 sfda_parser/api/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/api/__pycache__/sfda_scraper.cpython-310.pyc create mode 100644 sfda_parser/api/sfda_scraper.py create mode 100644 sfda_parser/config/__init__.py create mode 100644 sfda_parser/fixtures/client_script.json create mode 100644 sfda_parser/fixtures/custom_docperm.json create mode 100644 sfda_parser/fixtures/custom_field.json create mode 100644 sfda_parser/fixtures/property_setter.json create mode 100644 sfda_parser/fixtures/report.json create mode 100644 sfda_parser/fixtures/server_script.json create mode 100644 sfda_parser/hooks.py create mode 100644 sfda_parser/modules.txt create mode 100644 sfda_parser/patches.txt create mode 100644 sfda_parser/patches/__init__.py create mode 100644 sfda_parser/patches/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/patches/__pycache__/reparse_sfda_device_lists_from_pdfs.cpython-310.pyc create mode 100644 sfda_parser/patches/reparse_sfda_device_lists_from_pdfs.py create mode 100644 sfda_parser/public/.gitkeep create mode 100644 sfda_parser/sfda_parser/__init__.py create mode 100644 sfda_parser/sfda_parser/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/sfda_parser/doctype/__init__.py create mode 100644 sfda_parser/sfda_parser/doctype/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/sfda_parser/doctype/sfda_device_entries/__init__.py create mode 100644 sfda_parser/sfda_parser/doctype/sfda_device_entries/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/sfda_parser/doctype/sfda_device_entries/__pycache__/sfda_device_entries.cpython-310.pyc create mode 100644 sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.json create mode 100644 sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.py create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/__init__.py create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/__pycache__/sfda_entries.cpython-310.pyc create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.js create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.json create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.py create mode 100644 sfda_parser/sfda_parser/doctype/sfda_entries/test_sfda_entries.py create mode 100644 sfda_parser/sfda_scraper/__init__.py create mode 100644 sfda_parser/sfda_scraper/__pycache__/__init__.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/_verify_pdf_attach.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/detail_page.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/detail_pdf.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/http_client.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/importer.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/jobs.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/reparse.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/test_detail_pdf_expand.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/test_detail_pdf_sanitize.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/weekly_list.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/__pycache__/weekly_pdf.cpython-310.pyc create mode 100644 sfda_parser/sfda_scraper/detail_page.py create mode 100644 sfda_parser/sfda_scraper/detail_pdf.py create mode 100644 sfda_parser/sfda_scraper/http_client.py create mode 100644 sfda_parser/sfda_scraper/importer.py create mode 100644 sfda_parser/sfda_scraper/jobs.py create mode 100644 sfda_parser/sfda_scraper/reparse.py create mode 100644 sfda_parser/sfda_scraper/test_detail_pdf_expand.py create mode 100644 sfda_parser/sfda_scraper/test_detail_pdf_sanitize.py create mode 100644 sfda_parser/sfda_scraper/weekly_list.py create mode 100644 sfda_parser/sfda_scraper/weekly_pdf.py create mode 100644 sfda_parser/templates/__init__.py create mode 100644 sfda_parser/templates/pages/__init__.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..b901702 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# Root editor config file +root = true + +# Common settings +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +# python, js indentation settings +[{*.py,*.js,*.vue,*.css,*.scss,*.html}] +indent_style = tab +indent_size = 4 +max_line_length = 99 + +# JSON files - mostly doctype schema files +[{*.json}] +insert_final_newline = false +indent_style = space +indent_size = 2 diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..c5e7d68 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,124 @@ +{ + "env": { + "browser": true, + "node": true, + "es2022": true + }, + "parserOptions": { + "sourceType": "module" + }, + "extends": "eslint:recommended", + "rules": { + "indent": "off", + "brace-style": "off", + "no-mixed-spaces-and-tabs": "off", + "no-useless-escape": "off", + "space-unary-ops": ["error", { "words": true }], + "linebreak-style": "off", + "quotes": ["off"], + "semi": "off", + "camelcase": "off", + "no-unused-vars": "off", + "no-console": ["warn"], + "no-extra-boolean-cast": ["off"], + "no-control-regex": ["off"], + }, + "root": true, + "globals": { + "frappe": true, + "Vue": true, + "SetVueGlobals": true, + "__": true, + "repl": true, + "Class": true, + "locals": true, + "cint": true, + "cstr": true, + "cur_frm": true, + "cur_dialog": true, + "cur_page": true, + "cur_list": true, + "cur_tree": true, + "msg_dialog": true, + "is_null": true, + "in_list": true, + "has_common": true, + "posthog": true, + "has_words": true, + "validate_email": true, + "open_web_template_values_editor": true, + "validate_name": true, + "validate_phone": true, + "validate_url": true, + "get_number_format": true, + "format_number": true, + "format_currency": true, + "comment_when": true, + "open_url_post": true, + "toTitle": true, + "lstrip": true, + "rstrip": true, + "strip": true, + "strip_html": true, + "replace_all": true, + "flt": true, + "precision": true, + "CREATE": true, + "AMEND": true, + "CANCEL": true, + "copy_dict": true, + "get_number_format_info": true, + "strip_number_groups": true, + "print_table": true, + "Layout": true, + "web_form_settings": true, + "$c": true, + "$a": true, + "$i": true, + "$bg": true, + "$y": true, + "$c_obj": true, + "refresh_many": true, + "refresh_field": true, + "toggle_field": true, + "get_field_obj": true, + "get_query_params": true, + "unhide_field": true, + "hide_field": true, + "set_field_options": true, + "getCookie": true, + "getCookies": true, + "get_url_arg": true, + "md5": true, + "$": true, + "jQuery": true, + "moment": true, + "hljs": true, + "Awesomplete": true, + "Sortable": true, + "Showdown": true, + "Taggle": true, + "Gantt": true, + "Slick": true, + "Webcam": true, + "PhotoSwipe": true, + "PhotoSwipeUI_Default": true, + "io": true, + "JsBarcode": true, + "L": true, + "Chart": true, + "DataTable": true, + "Cypress": true, + "cy": true, + "it": true, + "describe": true, + "expect": true, + "context": true, + "before": true, + "beforeEach": true, + "after": true, + "qz": true, + "localforage": true, + "extend_cscript": true + } +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..f6fccf1 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,69 @@ +exclude: 'node_modules|.git' +default_stages: [pre-commit] +fail_fast: false + + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: trailing-whitespace + files: "sfda_parser.*" + exclude: ".*json$|.*txt$|.*csv|.*md|.*svg" + - id: check-merge-conflict + - id: check-ast + - id: check-json + - id: check-toml + - id: check-yaml + - id: debug-statements + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.1 + hooks: + - id: ruff + name: "Run ruff import sorter" + args: ["--select=I", "--fix"] + + - id: ruff + name: "Run ruff linter" + + - id: ruff-format + name: "Run ruff formatter" + + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v2.7.1 + hooks: + - id: prettier + types_or: [javascript, vue, scss] + # Ignore any files that might contain jinja / bundles + exclude: | + (?x)^( + sfda_parser/public/dist/.*| + .*node_modules.*| + .*boilerplate.*| + sfda_parser/templates/includes/.*| + sfda_parser/public/js/lib/.* + )$ + + + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v8.44.0 + hooks: + - id: eslint + types_or: [javascript] + args: ['--quiet'] + # Ignore any files that might contain jinja / bundles + exclude: | + (?x)^( + sfda_parser/public/dist/.*| + cypress/.*| + .*node_modules.*| + .*boilerplate.*| + sfda_parser/templates/includes/.*| + sfda_parser/public/js/lib/.* + )$ + +ci: + autoupdate_schedule: weekly + skip: [] + submodules: false diff --git a/README.md b/README.md new file mode 100644 index 0000000..12c7663 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +### SFDA Parser + +SFDA weekly alert scraper + +### Installation + +You can install this app using the [bench](https://github.com/frappe/bench) CLI: + +```bash +cd $PATH_TO_YOUR_BENCH +bench get-app $URL_OF_THIS_REPO --branch develop +bench install-app sfda_parser +``` + +### Contributing + +This app uses `pre-commit` for code formatting and linting. Please [install pre-commit](https://pre-commit.com/#installation) and enable it for this repository: + +```bash +cd apps/sfda_parser +pre-commit install +``` + +Pre-commit is configured to use the following tools for checking and formatting your code: + +- ruff +- eslint +- prettier +- pyupgrade + +### License + +mit diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..8aa2645 --- /dev/null +++ b/license.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) [year] [fullname] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..55daa3b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,59 @@ +[project] +name = "sfda_parser" +authors = [ + { name = "seyfert", email = "support@seeraarabia.com"} +] +description = "SFDA weekly alert scraper" +requires-python = ">=3.10" +readme = "README.md" +dynamic = ["version"] +dependencies = [ + # "frappe~=15.0.0" # Installed and managed by bench. + "beautifulsoup4>=4.12.0", + "pdfplumber>=0.11.0", + "requests>=2.31.0", +] + +[build-system] +requires = ["flit_core >=3.4,<4"] +build-backend = "flit_core.buildapi" + +# These dependencies are only installed when developer mode is enabled +[tool.bench.dev-dependencies] +# package_name = "~=1.1.0" + +[tool.ruff] +line-length = 110 +target-version = "py310" + +[tool.ruff.lint] +select = [ + "F", + "E", + "W", + "I", + "UP", + "B", + "RUF", +] +ignore = [ + "B017", # assertRaises(Exception) - should be more specific + "B018", # useless expression, not assigned to anything + "B023", # function doesn't bind loop variable - will have last iteration's value + "B904", # raise inside except without from + "E101", # indentation contains mixed spaces and tabs + "E402", # module level import not at top of file + "E501", # line too long + "E741", # ambiguous variable name + "F401", # "unused" imports + "F403", # can't detect undefined names from * import + "F405", # can't detect undefined names from * import + "F722", # syntax error in forward type annotation + "W191", # indentation contains tabs +] +typing-modules = ["frappe.types.DF"] + +[tool.ruff.format] +quote-style = "double" +indent-style = "tab" +docstring-code-format = true diff --git a/sfda_parser/__init__.py b/sfda_parser/__init__.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/sfda_parser/__init__.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/sfda_parser/__pycache__/__init__.cpython-310.pyc b/sfda_parser/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05a5cc9da213b2ef45c1e2c6497e4d551c02a037 GIT binary patch literal 194 zcmd1j<>g`kf(eSUSzRtp5z3u??J?SBta6SgzxV;_Wk<)?fT?}(opcyuy6}F%a9q2AxZV|Sj2YU+#`aj);3xgjX_&aJJ4&acx@W@6U??j&L zsHfX%(Fr?nG;@Z>rmqrUkz}Nh?)tN<%Xh)F7N(s2sAZ9U~+N<7!Wm7t7iRNcT>g#P1Ws6|03mRvu81JsY`!` zbc=K^P5UEO6Mq}t?`2zp| literal 0 HcmV?d00001 diff --git a/sfda_parser/api/__init__.py b/sfda_parser/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/api/__pycache__/__init__.cpython-310.pyc b/sfda_parser/api/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb3df39bc46a54d27224309d1333bdb1a3c625d8 GIT binary patch literal 177 zcmd1j<>g`kf6oZ}eyE*M4dLf)CAgW+~ZD?m|J!-PzgMd3k1r#mY)Z z;Q8WTKi&OLhme2c;{4;m;!{GX{tHY5*&>1pmeC2@Vif02=4?6eb~AV4ZFv)a%eQnd zYfXZ!z|Q@wJqfo$N~CktIVPedf|ulwZgm&y%i@aYi0(@dXe$k^?JRy&ToufhdgYV5heL7AnnWegtg5TTxjE@S%pFCW@$91COQYs$ju(AGtZ%(&?ZM-h4IL$OK zmE23^Z1`WaaX?Kc&hw&*tF*}V#(Qai$PpFvm{L-)Ljrza8z;Rd`{08K|4p37J5miC z#9XvIGOtuBb(F^wc@pYM@tSWGxlAbVEFYYons*r%=gq5$V6P~c=*)lnSZ+_#Oz?H< zDE#gj2oR582e|{K=bepr}+*~rb>Y}d~^LFZ%iGk7Tooksug$*92LMz zwQ=xqK%34yr641Sxv`Agxll!T?YS`OE5O+}!wIRvaG7wS4uHj6wT@W`K>zGp@0j)} zg3R?aPqL{%jGZE)xd!YxX{TUD4Th=&)HkRDM;GrC6(yqc69 z!H(E5Iq++$lG@iv!obmG@UNqQVpY%b;%U`s;)bE7~G_1po&vcR|Y)(LuP^{!veKkEyQ2O6~uhd12QrPY|nXP}2_G?IYpL^gsT>**)Pt<+Q+XJ2YV z=3QG1A2f-$@mAuo1}@|m2$>(j;?JZee+Um~O?Szc}$FK)yu_P ze$5OUery~tXh2mTjy9=cv!s1zN9OW*sqTIP8#Wc#i|b^5b4OND46uHurVj6bGvZ9& z9iAS1znV9fYOXeFmVtm`cuWx2@2HGbgQ@SsfelFSOYk-xWKCKcZwhr$sp~)ji~K59 zpxT)Q>c_D0OZe*^4D5wV7`sZ@8=txVGd;B6ET2CI0sV9*hbkU{%t@*>c98jaqp)4) zcaI;Gyq(D*e<#wn04|wKDu`*5>sZMaQO=j=Z*jnal0S#aYf;wp6W%nLp>fAm zRnBkWsBf>WfqFv(&TyyL8|rxNp-$qpw|n0j#0=}~{3>GOw!O!8J3azMrI>r5^=)ow z2z}72(khdtHIZ6FW0~K$UreFmLa*f6G97H?#RO=;f1A(m4Eg7{hThC4@jl;{OUU!$ zTtZAMFf2~S=$xj0LkbNCed9o&jF%NN2oncYZFM#+M35*F0HJ(dna;WTs6GTP<6s;y z(h9qg`Uq*Rj`t*(F$UKf=s_`bVay{1m6DkDgXf7XvFn?5R_sJ@U!ew}x`^koGc@S7 zGSO$Ivny(a|_iFy-;)ozysv`by; zGDiE9QU8tWuEIM6iu;Cn?upy(!>R{7K5{Y_cHM76FQkn1fc^pOgtY%n@PfTjzrwpe zfB}@T<{+d8-Ud7h8}HIoB%d)fdRv;c+|JN^h23p%!L%ZbLll`Xibm6F3h0j%){`bs zH*D!z^jSM!enKo8Gk&9B0BoSlhwtTYP!3VSUT2z;_+4@ro!Rzo)1ECq3hl>;ZNiNw sutUDv)q^{eLQFGx7yY3zST2DmuvOM|yVQp+?t4Az`wSw|{Q6)2ACSrlvH$=8 literal 0 HcmV?d00001 diff --git a/sfda_parser/api/sfda_scraper.py b/sfda_parser/api/sfda_scraper.py new file mode 100644 index 0000000..0d6caee --- /dev/null +++ b/sfda_parser/api/sfda_scraper.py @@ -0,0 +1,87 @@ +"""Whitelisted API for SFDA scraper and ADE PublishDetails preview.""" + +from __future__ import annotations + +import frappe + +from sfda_parser.sfda_scraper.detail_page import ( + fetch_publish_details, + resolve_detail_url_for_ncmdr_ref, +) +from sfda_parser.sfda_scraper.importer import import_latest_weekly_alerts +from sfda_parser.sfda_scraper.reparse import reparse_all_stored_pdf_device_lists + + +@frappe.whitelist() +def run_sfda_scraper_now(): + frappe.only_for("System Manager") + return import_latest_weekly_alerts() + + +@frappe.whitelist() +def reparse_device_list_from_stored_pdfs(sfda_entries_name: str | None = None): + """Rebuild Device List child rows from stored detail_pdf using current PDF parser.""" + frappe.only_for("System Manager") + return reparse_all_stored_pdf_device_lists(sfda_entries_name=sfda_entries_name) + + +@frappe.whitelist() +def get_ade_publish_details( + detail_url: str | None = None, + sfda_entries_name: str | None = None, + sfda_device_entry_name: str | None = None, + ncmdr_ref: str | None = None, + include_device_list_from_pdf: int | str = 0, +): + """ + Load ADE PublishDetails via the ERP server (works when your PC browser is blocked). + Pass detail_url and/or sfda_entries_name with a child row reference. + """ + include_pdf = str(include_device_list_from_pdf).lower() in ("1", "true", "yes") + + url = (detail_url or "").strip() + if sfda_entries_name and not url: + doc = frappe.get_doc("SFDA Entries", sfda_entries_name) + child_row = None + + if sfda_device_entry_name: + child_row = next( + (row for row in doc.device_list if row.name == sfda_device_entry_name), + None, + ) + elif ncmdr_ref: + target = (ncmdr_ref or "").strip().upper() + child_row = next( + ( + row + for row in doc.device_list + if (row.ncmdr_ref or "").strip().upper() == target + ), + None, + ) + + if child_row: + url = (child_row.get("ade_detail_url") or "").strip() + if not url and child_row.ncmdr_ref: + url = resolve_detail_url_for_ncmdr_ref(child_row.ncmdr_ref) or "" + if url: + child_row.ade_detail_url = url + doc.save(ignore_permissions=True) + + if not url: + frappe.throw( + "No ADE URL available. Pass detail_url, select a device row with an ADE URL, " + "or re-run the weekly import." + ) + + if not url.startswith("http"): + url = f"https://ade.sfda.gov.sa/Fsca/PublishDetails/{url}" + + try: + return fetch_publish_details(url, include_device_list_from_pdf=include_pdf) + except Exception as exc: + frappe.log_error(title="SFDA: ADE fetch failed", message=f"URL: {url}\n{exc}") + frappe.throw( + f"Could not load ADE from the server: {exc}. " + "The site may be blocked on your PC but reachable from ERP." + ) diff --git a/sfda_parser/config/__init__.py b/sfda_parser/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/fixtures/client_script.json b/sfda_parser/fixtures/client_script.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/sfda_parser/fixtures/client_script.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/sfda_parser/fixtures/custom_docperm.json b/sfda_parser/fixtures/custom_docperm.json new file mode 100644 index 0000000..11d1631 --- /dev/null +++ b/sfda_parser/fixtures/custom_docperm.json @@ -0,0 +1,15722 @@ +[ + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-30 17:40:42.968669", + "name": "4ktpvl1rma", + "parent": "Notification Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:25.699587", + "name": "q594gkpguc", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:45.015991", + "name": "qbavvevsc7", + "parent": "Year", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:19:15.081499", + "name": "tie1hptgj7", + "parent": "Project", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:20:14.412615", + "name": "u50us2a0jl", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Project Manager (Cluster)", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:20:38.940330", + "name": "ucmgdv6l4d", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Project Consultant", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:20:56.835705", + "name": "ui9ft66jrp", + "parent": "Project Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Engg Design Department", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:21:15.422889", + "name": "uo22ne22h2", + "parent": "Project Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "CEO", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-12 17:22:15.324646", + "name": "vap23tujd8", + "parent": "Project Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-19 12:13:06.214332", + "name": "se631bk032", + "parent": "Site Visit", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-19 12:13:30.864505", + "name": "slta4s9olo", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-19 12:14:04.732699", + "name": "t0gks7j32t", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-19 12:14:51.826300", + "name": "tf6lqh4edd", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:36:40.043944", + "name": "5s0up4hgo4", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:01.545628", + "name": "62no5q09tt", + "parent": "Contractor Information", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:30.708606", + "name": "6brluqek0i", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:53.861983", + "name": "6j3mllb5ud", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:38:28.753476", + "name": "6u0rdp0e5e", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-23 16:39:14.436830", + "name": "7c9a3uv322", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:39:42.814927", + "name": "7l408r56jm", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Representative", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:40:14.473686", + "name": "7v1hn3h51h", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-06-23 16:40:52.994326", + "name": "8b2olkg5iu", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Cluster Supervising Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:41:16.631330", + "name": "8ifgnkch4c", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Network Project Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:58:22.961783", + "name": "ij57f9nlkh", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "MOH", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.837199", + "name": "d1rsrd3lbv", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:14.399813", + "name": "d20oe3p95u", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "End user", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:27.577036", + "name": "d24reppiuc", + "parent": "Asset Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:59.941507", + "name": "d2evrrn6c3", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:33.874683", + "name": "d2pibsl4iq", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.455246", + "name": "d2uoosj5ts", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:03:32.055043", + "name": "d3bo61rsao", + "parent": "Item Tax Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:04:33.487134", + "name": "d3uu22ch43", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "End user", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:05:38.071233", + "name": "d4j4qhsdpp", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:05:54.721207", + "name": "d4obvo59a2", + "parent": "Issue Priority", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.696694", + "name": "d57amdiq03", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:11.076127", + "name": "d6lm2203qk", + "parent": "Manufacturer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:23.506816", + "name": "d6pjdlb9kp", + "parent": "Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:56.124978", + "name": "d73plbd5tg", + "parent": "Project", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:19:09.531259", + "name": "dcgoeuj21f", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:20:05.482340", + "name": "dd28a5ljup", + "parent": "Work_Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:20:44.630063", + "name": "ddefplvor2", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:21:04.750069", + "name": "ddknevpnpb", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:21:31.986800", + "name": "ddt9tsu4g4", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:21:53.052515", + "name": "de3rheg5h5", + "parent": "Asset Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:22:10.593296", + "name": "de9co16jrb", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:22:30.347540", + "name": "defhqavk14", + "parent": "Item Tax Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:22:54.906830", + "name": "den6ui68c3", + "parent": "Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:23:07.470863", + "name": "der4orhkot", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:23:27.704956", + "name": "df1eakqr4i", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:23:45.441161", + "name": "df7263es3b", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:24:30.143646", + "name": "dfkv8cjgq2", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:24:55.836472", + "name": "dft08n0oq3", + "parent": "Issue Priority", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:26:11.891582", + "name": "dgkoavc67j", + "parent": "Manufacturer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:47:46.510004", + "name": "dt99hpmk4l", + "parent": "Project", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:49:42.476706", + "name": "dudim5ai7o", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:50:39.490210", + "name": "duvcjdpat7", + "parent": "Asset Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:51:15.897171", + "name": "dvaphtlnlk", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:51:40.029096", + "name": "dvic5qudvf", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:52:39.045456", + "name": "e04mhv0q0o", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:53:05.522205", + "name": "e0cvj52bn3", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:54:05.880700", + "name": "e0vsiarcu8", + "parent": "Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:54:34.493070", + "name": "e18qmjqfkh", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:55:05.982197", + "name": "e1ij9229er", + "parent": "PPM OF CT SCAN MACHINE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:55:53.581980", + "name": "e21fe20j2u", + "parent": "PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:56:29.577331", + "name": "e2cns65jca", + "parent": "PPM OF ELECTRICAL PANELS", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:57:24.843184", + "name": "e2u0ke0abe", + "parent": "PPM OF FIRE ALARM DEVICES", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:58:37.077685", + "name": "e3kipe0nsk", + "parent": "PPM OF MRI SCAN MACHINE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:01:16.169787", + "name": "e5691ro6vg", + "parent": "PPM OF MRI SCAN MACHINE", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:01:37.981351", + "name": "e5d5100nrq", + "parent": "PPM OF FIRE ALARM DEVICES", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:01:56.469316", + "name": "e5j0ljcsf6", + "parent": "PPM OF ELECTRICAL PANELS", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:02:23.671514", + "name": "e5relsmotd", + "parent": "PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:03:13.180343", + "name": "e6at71rrei", + "parent": "PPM OF CT SCAN MACHINE", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:10.169823", + "name": "e6slbkmqtk", + "parent": "Item Group", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:23.101052", + "name": "e70ocmuuj9", + "parent": "Item Group", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:02.254685", + "name": "e7cutt3rda", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:23.087230", + "name": "e7jf4m5af9", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:47.160885", + "name": "e7qv8d7br8", + "parent": "Employee", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:06:01.300013", + "name": "e7vdbrdfe9", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:06:14.160733", + "name": "e83gnafn91", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:08:02.786436", + "name": "e95bakocsa", + "parent": "Support Plans", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:08:22.640219", + "name": "e9binlou12", + "parent": "Support Plans", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:08:53.503895", + "name": "e9l7mt20oc", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:09:18.559601", + "name": "e9t39ogv51", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:10:47.999725", + "name": "eap0cg8216", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:11:05.841882", + "name": "eaujs5ceet", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:08.027809", + "name": "ebi0ugriu7", + "parent": "Customer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.291889", + "name": "ebo0itihm1", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:16:27.541774", + "name": "ee33gaktsf", + "parent": "Tax Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:17:39.385610", + "name": "eeph2gkf9h", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:18:03.536800", + "name": "ef13a3t13l", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:32:35.563091", + "name": "enhj60g85j", + "parent": "User", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:33:12.527214", + "name": "ent55uftio", + "parent": "Role", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:33:12.539747", + "name": "ent6nje78q", + "parent": "Role", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 09:52:31.318092", + "name": "vii9mg015h", + "parent": "Employee", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:00:51.187966", + "name": "0qjg6sqqfk", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:01:52.517281", + "name": "0r6lem30tc", + "parent": "Finance Book", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:06:17.302876", + "name": "0tpd9eq05l", + "parent": "Asset Movement", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:34:08.529985", + "name": "1e3lohmi3c", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:34:28.387872", + "name": "1e9ttl8k0o", + "parent": "Issue Priority", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:14:51.054108", + "name": "25uu6dq4k8", + "parent": "PPM CT SCAN MACHINE TEMPLATE", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:15:15.497608", + "name": "266j5i48qt", + "parent": "PPM CT SCAN MACHINE TEMPLATE", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:15:36.396946", + "name": "26d3lj9dtq", + "parent": "PPM MRI Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:15:58.892174", + "name": "26k8rgjm1k", + "parent": "PPM MRI Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:15:58.919127", + "name": "26k8gadt2b", + "parent": "PPM MRI Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:40:00.795215", + "name": "2kmo4ct4aa", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:40:34.267309", + "name": "2l172qn8ii", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 13:00:42.633240", + "name": "30qqqa0a75", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-17 20:00:13.166295", + "name": "ve4kq159ee", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-17 20:05:34.195335", + "name": "vh8u5brcqo", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-17 20:05:47.539741", + "name": "vhd4jiissd", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:41:21.586675", + "name": "m5c088a47m", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:41:49.670420", + "name": "m5kqlqso8a", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:15.842132", + "name": "m5sua0s72q", + "parent": "Tax Withholding Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:36.759162", + "name": "m63f0u0u1d", + "parent": "Purchase Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:52.293170", + "name": "m68eb5nrpm", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:04.045817", + "name": "m6c47mbr27", + "parent": "Project", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:17.959758", + "name": "m6gbr6cuss", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:34.446224", + "name": "m6lic5j2is", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:52.642312", + "name": "m6r8hlj9u8", + "parent": "Tax Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:34.337346", + "name": "m787v2fl0h", + "parent": "Purchase Taxes and Charges Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:52.255650", + "name": "m7dqgqu1lm", + "parent": "Shipping Rule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:08.070311", + "name": "m7ioffif38", + "parent": "Incoterm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:25.982001", + "name": "m7ob51s49p", + "parent": "Address", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.994232", + "name": "m7ujjs39hv", + "parent": "Contact", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:04.722113", + "name": "m84gk9aikn", + "parent": "Customer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:24.539983", + "name": "m8al84fdrd", + "parent": "Payment Terms Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:38.754644", + "name": "m8f3nlnuqo", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:55.599662", + "name": "m8kc2atvd0", + "parent": "Letter Head", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:07.550266", + "name": "m8o32abbh6", + "parent": "Print Heading", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:30.378300", + "name": "m8v73pljpk", + "parent": "Supplier Quotation", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:44.197713", + "name": "m93hihq19h", + "parent": "Sales Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:48:12.250855", + "name": "m9caof0924", + "parent": "Asset Repair", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:48:26.386297", + "name": "m9gphuobo6", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:48:39.009731", + "name": "m9km11itu7", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:49:06.278093", + "name": "m9t6dfl0hv", + "parent": "Purchase Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:49:19.283501", + "name": "ma1ah0romp", + "parent": "Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:49:36.383071", + "name": "ma6lq9io7o", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:49:50.770039", + "name": "mab5lavaee", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:50:11.875131", + "name": "maho7ruhak", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:52:16.601141", + "name": "mboms2t1d5", + "parent": "Contract", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:36:13.315280", + "name": "n5gl776mpu", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:36:46.641086", + "name": "n5r4hfelsn", + "parent": "Purchase Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:37:25.713205", + "name": "n67cep5530", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:37:44.683245", + "name": "n6d9h2ve7q", + "parent": "Tax Withholding Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:38:38.450058", + "name": "n6u22ktsa1", + "parent": "Purchase Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:40:04.833765", + "name": "n7p21stt2l", + "parent": "Project", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:41:05.650585", + "name": "n8c310gvr8", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:41:32.767076", + "name": "n8khr784s2", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:42:00.166334", + "name": "n8t3kkv0ua", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:42:21.279514", + "name": "n93miraq3r", + "parent": "Tax Category", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:42:41.476839", + "name": "n9a0jgi238", + "parent": "Purchase Taxes and Charges Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:43:06.882053", + "name": "n9hur4v423", + "parent": "Shipping Rule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:43:37.805436", + "name": "n9rjug7ajm", + "parent": "Incoterm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:43:59.528237", + "name": "na2dub0rsn", + "parent": "Address", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:44:31.689691", + "name": "nacdtjeus9", + "parent": "Contact", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:45:04.922240", + "name": "namqm1ups1", + "parent": "Customer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:45:49.357377", + "name": "nb4oegi2md", + "parent": "Payment Terms Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:47:16.198302", + "name": "nbvr3f2bfv", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:47:45.085502", + "name": "nc8s0up7bf", + "parent": "Print Heading", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:48:07.031022", + "name": "ncfnv2c8o1", + "parent": "Letter Head", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:48:29.127728", + "name": "ncmjfofmug", + "parent": "Supplier Quotation", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:48:54.998096", + "name": "ncun5n0s1q", + "parent": "Sales Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:49:17.769495", + "name": "nd5rke4api", + "parent": "Contract", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:49:41.561206", + "name": "ndd9ctmlov", + "parent": "Asset Repair", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:50:07.681826", + "name": "ndlea02asj", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 17:50:55.991529", + "name": "ne4hkplqnh", + "parent": "Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:00:20.137139", + "name": "njkqn6rg1s", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.299110", + "name": "nkb1vsrucs", + "parent": "Buying Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:04:23.766442", + "name": "nm0u2t3rfd", + "parent": "User", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:04:47.633323", + "name": "nm8goc4ua7", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:05:08.672724", + "name": "nmf27mj5o9", + "parent": "UOM", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:05:30.584613", + "name": "nmlpl19cj4", + "parent": "Payment Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:07:20.862421", + "name": "nno8kcl1a0", + "parent": "Mode of Payment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:07:52.901411", + "name": "no29vv1v3c", + "parent": "Bank Account", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-19 12:56:30.489439", + "name": "cdc1bhtvb4", + "parent": "Support Plans", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-20 11:59:11.368893", + "name": "5nh963jm4m", + "parent": "Purchase Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-20 11:59:29.647540", + "name": "5nn1ge9h5b", + "parent": "Purchase Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-20 12:19:44.822586", + "name": "63iouthmjk", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 14:45:14.994574", + "name": "cjiuq7orcg", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 14:51:44.192131", + "name": "cnchb3j1l9", + "parent": "Support Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:26:32.852612", + "name": "eeu8qpsm95", + "parent": "PPM Templates", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:26:58.578991", + "name": "ef6bltpdsf", + "parent": "PPM Templates", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:27:25.097358", + "name": "efeipfgs23", + "parent": "PPM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:28:58.687295", + "name": "egbtcu98k7", + "parent": "PPM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:29:31.033842", + "name": "egluppcbev", + "parent": "Warranty", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:29:52.346096", + "name": "egslsvo29p", + "parent": "Warranty", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:30:21.033883", + "name": "eh5ifk6n3b", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:30:32.889499", + "name": "eh995tjk42", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:31:50.979161", + "name": "ei1midohp7", + "parent": "Site Information", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:32:07.939260", + "name": "ei710mjmvt", + "parent": "Site Information", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:33:02.419584", + "name": "eio1l9h5g9", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.338366", + "name": "ep8n1s7cim", + "parent": "Request for Quotation", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:57.381076", + "name": "epne4e74ni", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.937221", + "name": "eq2hu1n0jb", + "parent": "Delivery Note", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:48:42.530540", + "name": "ertplg7h9u", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:52:31.445393", + "name": "eu5b9m80bb", + "parent": "PPM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:52:53.532139", + "name": "euc8u92jp1", + "parent": "PPM Templates", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:55:09.281237", + "name": "evml1q22p7", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:55:27.801729", + "name": "evsf3vt957", + "parent": "Warranty", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-27 16:07:15.199360", + "name": "2r4gbdqhoh", + "parent": "Customer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-10-18 18:48:38.447421", + "name": "fgeg5jrffp", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Employee", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-10-24 20:26:00.378577", + "name": "fg041sjika", + "parent": "Request for Quotation", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-10-29 17:23:34.088997", + "name": "fvrdnpbrkq", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-12-01 13:00:42.398615", + "name": "h9iogrut5j", + "parent": "Delivery Note", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-12-01 13:01:08.203879", + "name": "h9qq53mhdq", + "parent": "Payment Entry", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-12-01 13:02:56.562998", + "name": "hasl3cc996", + "parent": "Work Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-06 11:41:43.058949", + "name": "jnictousae", + "parent": "Journal Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-06 11:59:34.924830", + "name": "gsflihut59", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-06 12:01:15.340142", + "name": "6ac6s8sca6", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-06 12:01:57.658086", + "name": "chljrqpfd7", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-07 11:57:15.855696", + "name": "781ghq679o", + "parent": "Communication", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 20:50:19.578895", + "name": "8idj11qj1f", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 21:02:16.458619", + "name": "ltbjkb26cj", + "parent": "Material Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 21:03:06.969112", + "name": "j5pdgfpi8o", + "parent": "Material Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 21:03:21.384121", + "name": "9c8a2479ud", + "parent": "Material Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance User", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 22:33:24.384745", + "name": "2qviq7tdqi", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 08:59:22.701868", + "name": "bcvm44i0rt", + "parent": "Brand", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 09:25:17.902542", + "name": "s58q44e6dh", + "parent": "Work Job Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 10:06:20.553447", + "name": "47vgsoeb4i", + "parent": "Brand", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-26 16:55:07.494406", + "name": "2ngp9h1dec", + "parent": "Feedback", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-07 22:51:03.844010", + "name": "vbfuupjoft", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-07 22:52:00.914724", + "name": "vc1qls0g6n", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-07 23:08:20.687048", + "name": "vljug3l9mf", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 09:24:48.235785", + "name": "d02iht69f5", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 09:44:39.018298", + "name": "dbmmnj8htp", + "parent": "Feedback", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 11:35:29.789139", + "name": "fcl2qvtbtg", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 11:36:43.271530", + "name": "fdc2qmpf9a", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 11:39:37.884862", + "name": "ff2i8071bm", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 11:41:26.843447", + "name": "fg4k6db3i8", + "parent": "Asset Movement", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 11:51:28.230223", + "name": "fm0i0ni236", + "parent": "User Permission", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 12:03:26.585915", + "name": "ft11ti1unh", + "parent": "Feedback", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 16:22:01.769351", + "name": "kkhhg4i3iu", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 17:47:41.598786", + "name": "m6no7fh08g", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 17:50:08.011763", + "name": "m85g85okoc", + "parent": "Manufacturer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-03-19 17:51:48.113999", + "name": "m94pnamk6n", + "parent": "Stock Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 18:51:26.317055", + "name": "nc2vi1hltg", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 19:39:52.129600", + "name": "o8f1oasckt", + "parent": "Material Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:40:35.810393", + "name": "5a9mqre8sk", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:51:01.762127", + "name": "5gd9661sh7", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:54:43.503259", + "name": "5iijf567s4", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:54:59.472419", + "name": "5inkcvd8hl", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:55:15.568360", + "name": "5islod6unb", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:55:28.969200", + "name": "5j0rd31m55", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 12:55:40.778958", + "name": "5j4iibmt3o", + "parent": "Work_Order", + "permlevel": 2, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-21 13:18:37.728339", + "name": "60ipn2qttf", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 12:47:05.351592", + "name": "khbdldq1jk", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 12:48:16.740591", + "name": "ki1ov9nupk", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 12:48:39.836938", + "name": "ki90e8cjno", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Finance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 12:53:20.251879", + "name": "kl0jgri1in", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Finance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:50:10.103334", + "name": "q2u5s57ci1", + "parent": "Purchase Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:27.232836", + "name": "q490f9q0kl", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:00:58.541463", + "name": "d1rptc7k4b", + "parent": "Item", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:01:14.309896", + "name": "d20nrokf78", + "parent": "Asset", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:01:27.530602", + "name": "d24rio2nii", + "parent": "Asset Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:01:59.756639", + "name": "d2eurm5477", + "parent": "UOM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:02:33.451691", + "name": "d2pg6kqer8", + "parent": "Warehouse", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.102001", + "name": "d2um1een76", + "parent": "Cost Center", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:03:32.027838", + "name": "d3boj6s684", + "parent": "Item Tax Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:04:33.463228", + "name": "d3uug9q6sk", + "parent": "Work_Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:05:37.744891", + "name": "d4j3h7eub4", + "parent": "Issue Type", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:05:54.352840", + "name": "d4o8t14l28", + "parent": "Issue Priority", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.572440", + "name": "d579s3lpkm", + "parent": "Company", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:10.962040", + "name": "d6lm7hb4uu", + "parent": "Manufacturer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:09:23.081048", + "name": "d6pg0vecg6", + "parent": "Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:56.072632", + "name": "d73oe5kk7g", + "parent": "Project", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:14:12.308593", + "name": "d9jrbqk7ll", + "parent": "Work Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:52:38.835607", + "name": "e04lm458uo", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:53:05.207634", + "name": "e0ctjkmuft", + "parent": "Asset Maintenance Log", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:55:05.635783", + "name": "e1iihud6ke", + "parent": "PPM OF CT SCAN MACHINE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:55:53.378839", + "name": "e21ebvkt0i", + "parent": "PPM OF ELECTRICAL FIXTURES INSIDE ROOMS", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:56:29.343964", + "name": "e2cmcos324", + "parent": "PPM OF ELECTRICAL PANELS", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:57:24.341409", + "name": "e2ttcfvp7s", + "parent": "PPM OF FIRE ALARM DEVICES", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:58:36.819945", + "name": "e3khii0mh3", + "parent": "PPM OF MRI SCAN MACHINE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:10.089973", + "name": "e6skvmtlp5", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:02.156473", + "name": "e7ctmomo2c", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:47.138073", + "name": "e7qvafpmu3", + "parent": "Employee", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Employee", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:06:01.257920", + "name": "e7vck1o9u1", + "parent": "Department", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:08:02.465282", + "name": "e95a5tq908", + "parent": "Support Plans", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:08:53.188156", + "name": "e9l5di1334", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:10:47.963117", + "name": "eaovr4nrk0", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.970741", + "name": "ebhvpr273v", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.207888", + "name": "ebo05fnipd", + "parent": "Supplier", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:16:27.434717", + "name": "ee328kohki", + "parent": "Tax Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:17:39.368060", + "name": "eephsa5di5", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:18:03.515676", + "name": "ef13jp72g0", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:32:35.456643", + "name": "enhi7b5oro", + "parent": "User", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:33:11.872694", + "name": "ent27lfk78", + "parent": "Role", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:33:12.018561", + "name": "ent2k12em9", + "parent": "Role", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:01:52.473895", + "name": "0r6knmios9", + "parent": "Finance Book", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:06:17.227512", + "name": "0tpcv7uicc", + "parent": "Asset Movement", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:14:51.003487", + "name": "25uuhn90da", + "parent": "PPM CT SCAN MACHINE TEMPLATE", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 12:15:36.320849", + "name": "26d3l8c6lc", + "parent": "PPM MRI Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:15.798115", + "name": "m5sup8d6te", + "parent": "Tax Withholding Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:36.210789", + "name": "m63c4qqh4u", + "parent": "Purchase Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:43:17.864727", + "name": "m6ga8k7se9", + "parent": "Currency", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:34.292480", + "name": "m786gpvra2", + "parent": "Purchase Taxes and Charges Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:52.224500", + "name": "m7dqg8rku8", + "parent": "Shipping Rule", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:07.595999", + "name": "m7ikrm5he0", + "parent": "Incoterm", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:25.942654", + "name": "m7obgele8i", + "parent": "Address", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:45:45.942628", + "name": "m7uj25k2b1", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:24.445164", + "name": "m8akaf0fmt", + "parent": "Payment Terms Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:46:38.704354", + "name": "m8f3mm1igg", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:55.576835", + "name": "m8kb7vrtg8", + "parent": "Letter Head", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:07.524987", + "name": "m8o3bpqand", + "parent": "Print Heading", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:30.330017", + "name": "m8v7mvg2md", + "parent": "Supplier Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:43.475885", + "name": "m93e7jml1i", + "parent": "Sales Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:48:11.886232", + "name": "m9c8akfufi", + "parent": "Asset Repair", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:48:38.644166", + "name": "m9kjefsgom", + "parent": "Issue", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Support Team", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:49:06.004349", + "name": "m9t4sa5947", + "parent": "Purchase Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:52:16.553114", + "name": "mbolegf26n", + "parent": "Contract", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.247486", + "name": "nkb0f024e0", + "parent": "Buying Settings", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 18:05:29.877461", + "name": "nmlmaa136b", + "parent": "Payment Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:07:20.819097", + "name": "nno89p3eeq", + "parent": "Mode of Payment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 18:07:52.501761", + "name": "no26c20pb5", + "parent": "Bank Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-24 19:02:10.304147", + "name": "muc7apn1bn", + "parent": "Site Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 14:51:44.144738", + "name": "cnchg9nfuc", + "parent": "Support Settings", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:26:32.792076", + "name": "eeu7hn5qd3", + "parent": "PPM Templates", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:27:24.757010", + "name": "efehfglc7v", + "parent": "PPM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:29:30.772645", + "name": "egltf2h44a", + "parent": "Warranty", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:30:20.965005", + "name": "eh5i7fa74f", + "parent": "Asset Type", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.283822", + "name": "ep8mtfg7qh", + "parent": "Request for Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.855674", + "name": "eq2g1am8g1", + "parent": "Delivery Note", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-01-06 11:41:42.519794", + "name": "5hd3gat819", + "parent": "Journal Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-01-07 11:57:15.835276", + "name": "fq94posqea", + "parent": "Communication", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-02-17 21:02:16.343111", + "name": "liq9b1rcb5", + "parent": "Material Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-02-18 08:59:22.656760", + "name": "1rbiorpr16", + "parent": "Brand", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 09:25:17.880522", + "name": "2q28lcjbdc", + "parent": "Work Job Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-26 16:55:07.426522", + "name": "4a316felaj", + "parent": "Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-07 22:51:03.781784", + "name": "vbfthj0uok", + "parent": "User Permission", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-07 23:08:20.665695", + "name": "vljuelb998", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 17:51:48.094618", + "name": "m94o6i6fn6", + "parent": "Stock Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:27.128793", + "name": "q48vfdb095", + "parent": "Bin", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.753955", + "name": "d1rrfla4ge", + "parent": "Item", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:14.382958", + "name": "d20nk1qjja", + "parent": "Asset", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:01:27.553296", + "name": "d24r103fq6", + "parent": "Asset Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:59.899922", + "name": "d2ev4klv0t", + "parent": "UOM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:33.788977", + "name": "d2ph4ng13d", + "parent": "Warehouse", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.385263", + "name": "d2un2o2ea8", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Auditor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:03:32.005224", + "name": "d3bodhi2dc", + "parent": "Item Tax Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:04:33.147848", + "name": "d3ut6qbtlc", + "parent": "Work_Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:05:38.048595", + "name": "d4j43m7287", + "parent": "Issue Type", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Support Team", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.290600", + "name": "d578jlr8bg", + "parent": "Company", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:11.056493", + "name": "d6lmlsj31a", + "parent": "Manufacturer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:23.482295", + "name": "d6pi32df33", + "parent": "Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Auditor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:56.086981", + "name": "d73ok8ag1t", + "parent": "Project", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 1, + "role": "Desk User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:14:12.385219", + "name": "d9jr7bk6mq", + "parent": "Work Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:52:39.021758", + "name": "e04m211uav", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:09.867160", + "name": "e6sjas2dr7", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:02.181218", + "name": "e7cthacl96", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:05:47.116781", + "name": "e7qvea0s85", + "parent": "Employee", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:06:01.276917", + "name": "e7vcn9naf0", + "parent": "Department", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Academics User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:10:47.980356", + "name": "eaovublm6c", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Sales Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.984384", + "name": "ebhv5rar2q", + "parent": "Customer", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.257980", + "name": "ebo0rqvd7m", + "parent": "Supplier", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:16:27.522948", + "name": "ee33akjbch", + "parent": "Tax Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:17:39.351752", + "name": "eeph3ulcbg", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:18:03.480945", + "name": "ef12pmmso7", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:32:35.207206", + "name": "enhgviggk0", + "parent": "User", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:01:52.341227", + "name": "0r6jnhpkrv", + "parent": "Finance Book", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:06:17.286196", + "name": "0tpcnfsdek", + "parent": "Asset Movement", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:15.818221", + "name": "m5su018tof", + "parent": "Tax Withholding Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:36.734543", + "name": "m63fukmng5", + "parent": "Purchase Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:17.888361", + "name": "m6gaeo3n2v", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:33.887858", + "name": "m784u7mkrn", + "parent": "Purchase Taxes and Charges Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:51.657503", + "name": "m7dm6vlejt", + "parent": "Shipping Rule", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:07.894139", + "name": "m7impus7jf", + "parent": "Incoterm", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:25.902633", + "name": "m7obt4lqe9", + "parent": "Address", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.869368", + "name": "m7uihu1u8n", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:24.518033", + "name": "m8albafhnp", + "parent": "Payment Terms Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:38.168160", + "name": "m8evjes5lu", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:55.195514", + "name": "m8k9on5df6", + "parent": "Letter Head", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Desk User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:07.043900", + "name": "m8o03bntin", + "parent": "Print Heading", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Desk User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:29.914057", + "name": "m8v47as8sk", + "parent": "Supplier Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:47:44.113309", + "name": "m93h0td5b5", + "parent": "Sales Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:48:12.233757", + "name": "m9ca2vrhth", + "parent": "Asset Repair", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:52:16.583536", + "name": "mbolgi5n4q", + "parent": "Contract", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.222931", + "name": "nkb0sas2su", + "parent": "Buying Settings", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 18:05:30.563463", + "name": "nmlp0bibgt", + "parent": "Payment Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:07:20.242622", + "name": "nno5ubfs3l", + "parent": "Mode of Payment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:07:52.859675", + "name": "no280510g6", + "parent": "Bank Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.201418", + "name": "ep8mheo4qs", + "parent": "Request for Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.881165", + "name": "eq2gs4v2kb", + "parent": "Delivery Note", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-01-06 11:41:43.018014", + "name": "42hl09r4hi", + "parent": "Journal Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-07 11:57:15.503197", + "name": "b1djncmeoc", + "parent": "Communication", + "permlevel": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 21:02:16.386444", + "name": "dok9ud1beu", + "parent": "Material Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 08:59:22.615296", + "name": "471kknpupj", + "parent": "Brand", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 09:25:17.827545", + "name": "gboq3610pf", + "parent": "Work Job Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-03-07 23:08:20.613519", + "name": "vljuoovv9n", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 17:51:48.076966", + "name": "m94ot69b8o", + "parent": "Stock Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing User", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:26.976391", + "name": "q48trilr8o", + "parent": "Bin", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.686693", + "name": "d1rqm3h9ae", + "parent": "Item", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:27.216877", + "name": "d24pm1m2ct", + "parent": "Asset Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Quality Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:01:59.919396", + "name": "d2evcf7cim", + "parent": "UOM", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:33.828167", + "name": "d2pivptqi3", + "parent": "Warehouse", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.438340", + "name": "d2uonfrf05", + "parent": "Cost Center", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:03:31.669013", + "name": "d3bmduprbj", + "parent": "Item Tax Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.557541", + "name": "d579stk441", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Employee", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:23.416460", + "name": "d6pim2fop2", + "parent": "Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:55.837825", + "name": "d73nt4ikvo", + "parent": "Project", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:04:10.121530", + "name": "e6sl6m91i6", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:02.133496", + "name": "e7ct40ibfs", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:05:46.790226", + "name": "e7qtgps5bi", + "parent": "Employee", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:06:01.238615", + "name": "e7vc24h5j0", + "parent": "Department", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:10:47.947062", + "name": "eaovoko18s", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.721702", + "name": "ebhuhj6ao1", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:12:27.274123", + "name": "ebo0jhjl3p", + "parent": "Supplier", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:16:27.508282", + "name": "ee33t9702n", + "parent": "Tax Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:17:38.805502", + "name": "eepekhshk8", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:18:03.498850", + "name": "ef12prq79s", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:32:35.352616", + "name": "enhh5evg16", + "parent": "User", + "permlevel": 0, + "print": 0, + "read": 0, + "report": 0, + "role": "Desk User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:01:52.439902", + "name": "0r6k7vtp9u", + "parent": "Finance Book", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Auditor", + "select": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-15 11:06:17.271912", + "name": "0tpcoo3fbg", + "parent": "Asset Movement", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:15.596098", + "name": "m5ssd4s3a4", + "parent": "Tax Withholding Category", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:36.711220", + "name": "m63fp846dq", + "parent": "Purchase Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:17.912844", + "name": "m6gbtf1ird", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:44:34.314958", + "name": "m78722fvg5", + "parent": "Purchase Taxes and Charges Template", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:44:52.161706", + "name": "m7dpqa70lo", + "parent": "Shipping Rule", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:07.942898", + "name": "m7inmcv7g8", + "parent": "Incoterm", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:25.922090", + "name": "m7ob2efi01", + "parent": "Address", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.600373", + "name": "m7ugpqdvvr", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:23.733765", + "name": "m8afoilhe9", + "parent": "Payment Terms Template", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:38.633285", + "name": "m8f2almlcl", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:30.353763", + "name": "m8v7ugtido", + "parent": "Supplier Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:44.129702", + "name": "m93hp2732v", + "parent": "Sales Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:52:16.414839", + "name": "mbokc6q0th", + "parent": "Contract", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "HR Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.271903", + "name": "nkb0e8ii0v", + "parent": "Buying Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.320615", + "name": "ep8n4vfe1g", + "parent": "Request for Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.814034", + "name": "eq2g7m2j7p", + "parent": "Delivery Note", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-01-06 11:41:43.037429", + "name": "3r5ufm2vlj", + "parent": "Journal Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Auditor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-07 11:57:15.796576", + "name": "8qfbb1tnhi", + "parent": "Communication", + "permlevel": 2, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 21:02:16.419972", + "name": "nblndkfrjr", + "parent": "Material Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 08:59:22.679098", + "name": "1nltukh0oj", + "parent": "Brand", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-19 17:51:47.605743", + "name": "m94nkl6b2e", + "parent": "Stock Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Manufacturing Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:27.092435", + "name": "q48un6n97k", + "parent": "Bin", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.668049", + "name": "d1rqv6dol5", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:33.809485", + "name": "d2piff05i5", + "parent": "Warehouse", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.403079", + "name": "d2uoe1krsq", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.677082", + "name": "d57arhmvdr", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:23.459674", + "name": "d6pihbho2s", + "parent": "Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:09:56.104164", + "name": "d73p8hj9b8", + "parent": "Project", + "permlevel": 0, + "print": 1, + "read": 0, + "report": 1, + "role": "Employee", + "select": 1, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:10.152899", + "name": "e6sl85kjtu", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:01.753026", + "name": "e7crfl58hl", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:06:00.917100", + "name": "e7vagnddc4", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 0, + "report": 0, + "role": "Employee", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:10:47.932649", + "name": "eaova29sne", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Purchase Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 18:12:07.938775", + "name": "ebhvsvqvl7", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.192350", + "name": "ebnvhr5pkb", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:17:39.309460", + "name": "eephe62cm5", + "parent": "Purchase Receipt", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:18:03.464097", + "name": "ef125394fn", + "parent": "Purchase Invoice", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Auditor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:42:36.688619", + "name": "m63e2em3gg", + "parent": "Purchase Order", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:17.937267", + "name": "m6gb5ciec5", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:44:52.194207", + "name": "m7dpcsm02m", + "parent": "Shipping Rule", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Master Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:07.917230", + "name": "m7in0rcd0v", + "parent": "Incoterm", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:25.962299", + "name": "m7ob1qqgm3", + "parent": "Address", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:44.794043", + "name": "m7uaqss8g0", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:24.481752", + "name": "m8ak3ffasd", + "parent": "Payment Terms Template", + "permlevel": 0, + "print": 1, + "read": 0, + "report": 1, + "role": "All", + "select": 1, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:38.728653", + "name": "m8f3d3jj90", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:30.294638", + "name": "m8v6cfuvlv", + "parent": "Supplier Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:44.163277", + "name": "m93hquf0e7", + "parent": "Sales Order", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:52:16.568001", + "name": "mbol5vb1gq", + "parent": "Contract", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.005291", + "name": "nkav2j2e2b", + "parent": "Buying Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.303757", + "name": "ep8nvvni2u", + "parent": "Request for Quotation", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.922836", + "name": "eq2h3jom6c", + "parent": "Delivery Note", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-01-07 11:57:15.815263", + "name": "dgst1i7sl2", + "parent": "Communication", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Inbox User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-17 21:02:16.438812", + "name": "e3rv62no51", + "parent": "Material Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 08:59:22.635535", + "name": "318j7jog9c", + "parent": "Brand", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2025-03-19 17:51:48.061477", + "name": "m94o5mcq1j", + "parent": "Stock Entry", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:27.065306", + "name": "q48u7pmnvf", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.789122", + "name": "d1rrj92n1j", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:33.847450", + "name": "d2pis36gh5", + "parent": "Warehouse", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.421768", + "name": "d2uo8sjitg", + "parent": "Cost Center", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.645092", + "name": "d57a0cqpus", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-14 17:09:23.437657", + "name": "d6pi1ncm6d", + "parent": "Account", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:10.076757", + "name": "e6sk8r21el", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:02.204854", + "name": "e7cuitqc4e", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Agriculture Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:10:47.854589", + "name": "eaovp2ommo", + "parent": "Price List", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Manufacturing User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.957425", + "name": "ebhvdhf2fq", + "parent": "Customer", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Master Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.239794", + "name": "ebo0gikpdq", + "parent": "Supplier", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:17:39.335349", + "name": "eephd67eip", + "parent": "Purchase Receipt", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:18:03.230613", + "name": "ef11qcf48c", + "parent": "Purchase Invoice", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:43:17.427917", + "name": "m6g8sf1ju8", + "parent": "Currency", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:07.993210", + "name": "m7incq5o1q", + "parent": "Incoterm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2024-09-18 16:45:25.879495", + "name": "m7oaca9fem", + "parent": "Address", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.795562", + "name": "m7ui4df10a", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:38.656143", + "name": "m8f2t8m7pu", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:30.311204", + "name": "m8v798hgtd", + "parent": "Supplier Quotation", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:44.146338", + "name": "m93hj6occ5", + "parent": "Sales Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.198716", + "name": "nkb0f3epro", + "parent": "Buying Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.242636", + "name": "ep8m5h7iq8", + "parent": "Request for Quotation", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.894661", + "name": "eq2gad24gn", + "parent": "Delivery Note", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 1, + "import": 0, + "modified": "2025-01-07 11:57:15.776869", + "name": "em8kg8odui", + "parent": "Communication", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-02-18 08:59:22.474949", + "name": "cs5smm5dnv", + "parent": "Brand", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:27.159830", + "name": "q48v2ls8rl", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.814020", + "name": "d1rsu8d5v3", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:33.769637", + "name": "d2phl4hlab", + "parent": "Warehouse", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Manufacturing User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:02:50.368122", + "name": "d2unfu6nl2", + "parent": "Cost Center", + "permlevel": 0, + "print": 1, + "read": 0, + "report": 1, + "role": "Employee", + "select": 1, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.659999", + "name": "d57ac83spa", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:10.106450", + "name": "e6slkn2o1l", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:05:02.228589", + "name": "e7cus4h161", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Agriculture User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:08.011644", + "name": "ebi0liu1d3", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.223956", + "name": "ebo0p5hn71", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:08.045259", + "name": "m7io60f0jd", + "parent": "Incoterm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 1, + "import": 0, + "modified": "2024-09-18 16:45:25.464772", + "name": "m7o89r76gq", + "parent": "Address", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.967601", + "name": "m7ujrcebv5", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:46:38.679921", + "name": "m8f2gmoc8j", + "parent": "Terms and Conditions", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:47:44.180652", + "name": "m93hqgv993", + "parent": "Sales Order", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.151475", + "name": "nkavdsjdau", + "parent": "Buying Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:44:10.261562", + "name": "ep8m0tsvk9", + "parent": "Request for Quotation", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.906812", + "name": "eq2hcb9o9r", + "parent": "Delivery Note", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Delivery User", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2025-03-24 17:52:27.192227", + "name": "q48vq6ftnr", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Sales Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.729902", + "name": "d1rreup9dk", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.609711", + "name": "d57alvf548", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Projects User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:04:10.138510", + "name": "e6sltg0i09", + "parent": "Item Group", + "permlevel": 0, + "print": 1, + "read": 0, + "report": 1, + "role": "Desk User", + "select": 1, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.925889", + "name": "ebhv231at2", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:27.050229", + "name": "ebnvtf8nmh", + "parent": "Supplier", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:07.968087", + "name": "m7ine9v933", + "parent": "Incoterm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.916643", + "name": "m7uj84iraf", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 18:01:31.174014", + "name": "nkav3nv2q1", + "parent": "Buying Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-25 16:45:32.867822", + "name": "eq2gcnn9o2", + "parent": "Delivery Note", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Delivery Manager", + "select": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.707105", + "name": "d1rr7j6dij", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Manufacturing User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.627590", + "name": "d57an4c6q6", + "parent": "Company", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.913380", + "name": "ebhv2srt7q", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:08.019347", + "name": "m7iovcvoud", + "parent": "Incoterm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock User", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.843435", + "name": "m7uitnkumo", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:00:58.771224", + "name": "d1rr0ml3oa", + "parent": "Item", + "permlevel": 0, + "print": 1, + "read": 0, + "report": 1, + "role": "Desk User", + "select": 1, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 17:06:42.590494", + "name": "d579an27mr", + "parent": "Company", + "permlevel": 0, + "print": 0, + "read": 0, + "report": 0, + "role": "Auditor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-14 18:12:07.996979", + "name": "ebhv35j6tb", + "parent": "Customer", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.747546", + "name": "m7uhh43fs1", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.646961", + "name": "m7ugi6d9kt", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Maintenance User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2024-09-18 16:45:45.702983", + "name": "m7uhhfmhv5", + "parent": "Contact", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 0, + "if_owner": 1, + "import": 0, + "modified": "2024-09-18 16:45:45.893210", + "name": "m7ui6ihqo3", + "parent": "Contact", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:29:59.326655", + "name": "q59kk205rt", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:30:31.251307", + "name": "qf8s2tness", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:30:41.868761", + "name": "qij8ru3n2p", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:30:55.389622", + "name": "qmq0ccqmc4", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:31:05.807264", + "name": "qq3rfnmudc", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:31:14.325070", + "name": "qso4agd1m7", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:03:44.887084", + "name": "hg8bi4ctqq", + "parent": "Inspection", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Supervisor", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:04:37.131763", + "name": "i0jkvk87nm", + "parent": "Inspection", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:05:36.830086", + "name": "ij95fu5j7p", + "parent": "Inspection", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:13:54.659694", + "name": "neqch08ndl", + "parent": "Inspection", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:15:26.362319", + "name": "obf50h7m5k", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:15:41.278122", + "name": "og535jj3n4", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:16:00.964768", + "name": "omalmvkjnr", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:16:35.766532", + "name": "p1623pd81p", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-14 14:57:00.648682", + "name": "bbugbuh7ns", + "parent": "Bin", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-01-15 09:47:33.172467", + "name": "1pjd1jja6d", + "parent": "Inspection", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-01-15 10:16:18.783283", + "name": "ig3s7km7v6", + "parent": "Version", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:31:07.367517", + "name": "dchkk85e1t", + "parent": "Customer", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:31:40.714367", + "name": "dn0clqnevv", + "parent": "Supplier", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:31:56.833217", + "name": "ds1locnto0", + "parent": "Brand", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:32:43.951221", + "name": "eaol458e47", + "parent": "Asset Depreciation Schedule", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 12:33:24.503944", + "name": "endd65jiq7", + "parent": "Asset Movement", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 18:35:22.657257", + "name": "2qa6lbrhfb", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 18:35:41.533004", + "name": "3077obnri8", + "parent": "Support Plans", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-19 12:08:34.022602", + "name": "3dkrt9h3gl", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 14:22:53.198236", + "name": "ts5o5l3rs7", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 14:23:04.504290", + "name": "tvle5utjn7", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Manager", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:00:28.619748", + "name": "jsuo7jc040", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:00:41.335688", + "name": "k0tungg1tr", + "parent": "LDAP Settings", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:00:56.238618", + "name": "k5jeksk4qj", + "parent": "Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:01:08.350795", + "name": "k9c3es8ubo", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:01:27.128393", + "name": "kf87c4mdcl", + "parent": "Asset Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:01:45.685563", + "name": "kl1flhq8f1", + "parent": "User", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:03:12.980853", + "name": "lga17of1rr", + "parent": "Issue", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:03:24.753665", + "name": "lk03g9jqbo", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:08:34.934016", + "name": "oktc792jki", + "parent": "Company", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:13.274236", + "name": "cfk8j19v2f", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:56.869644", + "name": "ct8lnut0e4", + "parent": "Building", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 15:13:56.684907", + "name": "j9enalbedl", + "parent": "Role Profile", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 17:11:00.598307", + "name": "nse8tah2el", + "parent": "User", + "permlevel": 1, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 0, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:08:07.277632", + "name": "ph8fpbo49a", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:14:08.861591", + "name": "t29jurk1j5", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:44:25.330629", + "name": "ept3mghv89", + "parent": "Custom DocPerm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:10:42.677440", + "name": "u6q632gllg", + "parent": "Custom DocPerm", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:26:01.301911", + "name": "75t21ja4bk", + "parent": "Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:26:25.961185", + "name": "7dki7che05", + "parent": "Building", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:26:42.432014", + "name": "7ip1td5n2o", + "parent": "Building", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:27:30.271849", + "name": "81nenejua7", + "parent": "Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:28:00.679057", + "name": "8b7lhgdpkv", + "parent": "Extension Directory", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:28:29.761612", + "name": "8kad5lk6ke", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:31:01.079100", + "name": "a3iiq2303i", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:31:49.243495", + "name": "aikh31h8hh", + "parent": "Room", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 17:32:03.350346", + "name": "an20a780h9", + "parent": "Building", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:02.248740", + "name": "mvmslj9sso", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:29.852035", + "name": "n8a9cjt09l", + "parent": "Modality", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:17:52.813721", + "name": "o28snm961n", + "parent": "Technical Department", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:23:57.216870", + "name": "rk403hj1s4", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-01-29 10:24:19.874966", + "name": "rr7vmh3vnj", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Supervisor", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:24:37.175682", + "name": "s0k43b3vfh", + "parent": "Asset Maintenance Team", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:30:33.321615", + "name": "vftha6fapi", + "parent": "Issue Type", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:21:55.843307", + "name": "9e6o2aqj56", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:22:07.199919", + "name": "9hogqtsv30", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:22:27.521619", + "name": "9o43pojned", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:22:43.366684", + "name": "9t2l39e23e", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-05 16:36:35.012891", + "name": "86uiqd48c4", + "parent": "Feedback", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:12.166758", + "name": "sh11lpsvvp", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:23.631783", + "name": "skll7dr281", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "End user", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:36.126937", + "name": "sohu3rjcce", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:44.856970", + "name": "sr9msbco2c", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 09:23:51.976849", + "name": "stgmlpnhqv", + "parent": "Workflow", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Technician", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:37:50.671738", + "name": "hnit2tdo0e", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:38:24.392119", + "name": "i24hdtksvn", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:38:34.784770", + "name": "i5ckossvhk", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:38:44.801919", + "name": "i8g9tpb51j", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:39:14.084968", + "name": "ihkn08alhk", + "parent": "Comment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:09:58.720372", + "name": "as3btp0p31", + "parent": "Inspection", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:02.326479", + "name": "d87cu21is0", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:12.525865", + "name": "dbeo6a4ikl", + "parent": "Item", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:24.105269", + "name": "df2usohp9g", + "parent": "Asset Maintenance", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:14:44.101899", + "name": "dl9o81620m", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 16:15:03.834040", + "name": "drf22tqpb6", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 10:27:08.256951", + "name": "8fq1lcfomh", + "parent": "Asset", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Quality Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 10:27:33.857692", + "name": "8nr9hbojaj", + "parent": "Work_Order", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Quality Supervisor", + "select": 0, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 15:42:25.699757", + "name": "17hl7icg1d", + "parent": "Delete Request", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 0, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 08:39:04.482293", + "name": "m5ko8ni0qa", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Engineer", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:13:33.491841", + "name": "ac7gtnobo8", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Work Control", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:20:53.258801", + "name": "elkm1gh9eu", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Contractor Supervisor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:36:18.748372", + "name": "nmr4ml5i8q", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 09:36:31.788144", + "name": "nqus9rp2il", + "parent": "Custom Field", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2025-12-16 10:29:59.276623", + "name": "q58qgnms8s", + "parent": "Extension Directory", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:03:44.813879", + "name": "hg8ls2es05", + "parent": "Inspection", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 1, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-12 13:15:26.325895", + "name": "obfgpjkfm3", + "parent": "Technical Department", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-16 18:35:22.563820", + "name": "2q99fd9uc8", + "parent": "PM Schedule Generator", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-01-19 12:08:33.975731", + "name": "3djn60mi8b", + "parent": "Workflow", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-20 15:00:41.177976", + "name": "k0s2u5055l", + "parent": "LDAP Settings", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:13.230383", + "name": "cfk3nj29mu", + "parent": "Room", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-21 18:06:56.664137", + "name": "ct7vnk5jmv", + "parent": "Building", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 15:13:56.631686", + "name": "j9ejv6qcas", + "parent": "Role Profile", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-28 16:44:25.281868", + "name": "epsvedj4aa", + "parent": "Custom DocPerm", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:02.202294", + "name": "mvmh1d93lu", + "parent": "Mobile Team Site", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-29 10:16:29.767102", + "name": "n89jq1a3nk", + "parent": "Modality", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-02 10:21:55.787768", + "name": "9e5sh1n78l", + "parent": "Infrastructure Location", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-11 09:58:29.478058", + "name": "5enfhlumru", + "parent": "Notification Log", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:37:50.585546", + "name": "hnii80cgai", + "parent": "Comment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-18 15:42:25.613244", + "name": "17gm9rij9s", + "parent": "Delete Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 08:39:04.194864", + "name": "m5i9jfv1m7", + "parent": "Custom Field", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Administrator", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-01-22 15:13:56.673640", + "name": "j9eomfnjri", + "parent": "Role Profile", + "permlevel": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-02-12 13:37:50.650707", + "name": "hnij6i5bg8", + "parent": "Comment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Website Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "modified": "2026-03-02 08:39:04.439826", + "name": "m5k3o3fahe", + "parent": "Custom Field", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:11.831691", + "name": "eu6pnjm5uj", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:24.487528", + "name": "f263cc8u4a", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 1, + "role": "Contractor", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:44.699904", + "name": "f8guoduuat", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:29:04.253690", + "name": "fejrvqeqk4", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Projects Manager", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-01 16:33:02.607536", + "name": "1o23tmkhsk", + "parent": "Project Checklist", + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Project Base Role", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-07-01 16:33:32.419477", + "name": "21df080m0b", + "parent": "Project Checklist", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Contractor Engineer", + "select": 1, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 1, + "modified": "2026-07-01 16:35:03.507104", + "name": "2tskvpru0o", + "parent": "Project Checklist", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Consultant Office", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 0, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-08 17:06:09.366461", + "name": "7ct7fc1457", + "parent": "WO Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 0, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:25.652519", + "name": "q58i303ec0", + "parent": "Project Request", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-12 17:13:44.863016", + "name": "qb9ac4uqak", + "parent": "Year", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-19 12:13:06.033834", + "name": "se44ggplmc", + "parent": "Site Visit", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:36:40.000527", + "name": "5s0gchecpm", + "parent": "Technical Submittal", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-23 16:37:01.356321", + "name": "62m9jldbv1", + "parent": "Contractor Information", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-06-25 13:28:11.743163", + "name": "eu5jbkmn1t", + "parent": "Risk Assessment", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-01 16:33:02.429049", + "name": "1o0hqncn0k", + "parent": "Project Checklist", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "docstatus": 0, + "doctype": "Custom DocPerm", + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "modified": "2026-07-08 17:06:09.076882", + "name": "7cq1v9fjt6", + "parent": "WO Feedback", + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "select": 0, + "share": 1, + "submit": 0, + "write": 1 + } +] \ No newline at end of file diff --git a/sfda_parser/fixtures/custom_field.json b/sfda_parser/fixtures/custom_field.json new file mode 100644 index 0000000..395408a --- /dev/null +++ b/sfda_parser/fixtures/custom_field.json @@ -0,0 +1,59 @@ +[ + { + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": null, + "columns": 0, + "default": null, + "depends_on": null, + "description": null, + "docstatus": 0, + "doctype": "Custom Field", + "dt": "Asset", + "fetch_from": null, + "fetch_if_empty": 0, + "fieldname": "custom_recalled", + "fieldtype": "Select", + "hidden": 0, + "hide_border": 0, + "hide_days": 0, + "hide_seconds": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_preview": 0, + "in_standard_filter": 0, + "insert_after": "custom_category", + "is_system_generated": 0, + "is_virtual": 0, + "label": "Recalled", + "length": 0, + "link_filters": null, + "mandatory_depends_on": null, + "modified": "2026-06-05 12:26:39.091744", + "module": "SFDA Parser", + "name": "Asset-custom_recalled", + "no_copy": 0, + "non_negative": 0, + "options": "\nYes\nNo", + "permlevel": 0, + "placeholder": null, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": null, + "read_only": 0, + "read_only_depends_on": null, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "show_dashboard": 0, + "sort_options": 0, + "translatable": 0, + "unique": 0, + "width": null + } +] \ No newline at end of file diff --git a/sfda_parser/fixtures/property_setter.json b/sfda_parser/fixtures/property_setter.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/sfda_parser/fixtures/property_setter.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/sfda_parser/fixtures/report.json b/sfda_parser/fixtures/report.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/sfda_parser/fixtures/report.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/sfda_parser/fixtures/server_script.json b/sfda_parser/fixtures/server_script.json new file mode 100644 index 0000000..106a7b1 --- /dev/null +++ b/sfda_parser/fixtures/server_script.json @@ -0,0 +1,21 @@ +[ + { + "allow_guest": 0, + "api_method": null, + "cron_format": null, + "disabled": 0, + "docstatus": 0, + "doctype": "Server Script", + "doctype_event": "Before Insert", + "enable_rate_limit": 0, + "event_frequency": "Daily", + "modified": "2026-06-09 13:40:45.248212", + "module": "SFDA Parser", + "name": "Check the Serial nos present from sfda parser", + "rate_limit_count": 5, + "rate_limit_seconds": 86400, + "reference_doctype": null, + "script": "def normalize_values(raw):\r\n if not raw:\r\n return []\r\n return [v.strip() for v in str(raw).split(\",\") if v.strip()]\r\n\r\n\r\n# Users having BOTH \"System Manager\" and \"Cluster Manager\"\r\nboth_roles = frappe.get_all(\r\n \"Has Role\",\r\n filters={\r\n \"role\": [\"in\", [\"System Manager\", \"Cluster Manager\"]],\r\n \"parenttype\": \"User\"\r\n },\r\n fields=[\"parent\", \"role\"],\r\n limit_page_length=0\r\n)\r\n\r\nrole_map = {}\r\nfor r in both_roles:\r\n role_map.setdefault(r.parent, set()).add(r.role)\r\n\r\nrecall_users = [\r\n u for u, roles in role_map.items()\r\n if {\"System Manager\", \"Cluster Manager\"}.issubset(roles)\r\n]\r\n\r\nrecall_users = frappe.get_all(\r\n \"User\",\r\n filters={\"name\": [\"in\", recall_users], \"enabled\": 1},\r\n pluck=\"name\",\r\n limit_page_length=0\r\n) if recall_users else []\r\n\r\nsite_url = frappe.utils.get_url()\r\n\r\nsfda_entries = frappe.get_all(\r\n \"SFDA Entries\",\r\n filters={\"passed\": 0},\r\n fields=[\"name\"],\r\n limit_page_length=0\r\n)\r\n\r\nfor entry in sfda_entries:\r\n doc = frappe.get_doc(\"SFDA Entries\", entry.name)\r\n\r\n entry_link = f\"{site_url}/asm_app/sfda-entries/{doc.name}\"\r\n\r\n # rows that matched (asset found) and rows that did NOT match\r\n matched_rows = [] # list of dicts: {ncmdr_ref, serial, asset}\r\n unmatched_refs = [] # list of ncmdr_ref values with no match\r\n\r\n for row in doc.device_list:\r\n catalog_numbers = normalize_values(row.catalog_number)\r\n serial_numbers = normalize_values(row.serial_no)\r\n all_values = list(set(catalog_numbers + serial_numbers))\r\n\r\n row_matched = False\r\n\r\n if all_values:\r\n matched_assets = frappe.get_all(\r\n \"Asset\",\r\n filters={\"custom_serial_number\": [\"in\", all_values]},\r\n fields=[\"name\", \"custom_serial_number\"],\r\n limit_page_length=0\r\n )\r\n\r\n for asset in matched_assets:\r\n frappe.db.set_value(\r\n \"Asset\", asset.name, \"custom_recalled\", \"Yes\"\r\n )\r\n matched_rows.append({\r\n \"ncmdr_ref\": row.ncmdr_ref or \"N/A\",\r\n \"serial\": asset.custom_serial_number,\r\n \"asset\": asset.name\r\n })\r\n row_matched = True\r\n\r\n # Set Serial No Matching on the child row\r\n row.serial_no_matching = \"Yes\" if row_matched else \"No\"\r\n\r\n if not row_matched:\r\n unmatched_refs.append(row.ncmdr_ref or \"N/A\")\r\n\r\n # Persist serial_no_matching changes on child rows\r\n doc.save(ignore_permissions=True)\r\n\r\n # ------------------------------------------------------------------\r\n # NOTIFICATION 1 -> Matching list (serial no + asset id)\r\n # ------------------------------------------------------------------\r\n if matched_rows:\r\n rows_html = \"\".join(\r\n f\"\"\r\n f\"{m['ncmdr_ref']}\"\r\n f\"{m['serial']}\"\r\n f\"{m['asset']}\"\r\n f\"\"\r\n for m in matched_rows\r\n )\r\n\r\n subject = f\"SFDA Recall Match Found: {doc.name}\"\r\n\r\n message = f\"\"\"\r\n

Recall Match Found

\r\n

The following assets matched a recall in SFDA Entry {doc.name}\r\n and have been marked as recalled.

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {rows_html}\r\n
NCMDR RefSerial / Catalog NoAsset ID
\r\n\r\n

\r\n \r\n Open SFDA Entry\r\n \r\n

\r\n \"\"\"\r\n\r\n for user in recall_users:\r\n frappe.get_doc({\r\n \"doctype\": \"Notification Log\",\r\n \"for_user\": user,\r\n \"type\": \"Alert\",\r\n \"subject\": subject,\r\n \"email_content\": message,\r\n \"document_type\": \"SFDA Entries\",\r\n \"document_name\": doc.name\r\n }).insert(ignore_permissions=True)\r\n\r\n if recall_users:\r\n frappe.sendmail(\r\n recipients=recall_users,\r\n subject=subject,\r\n message=message,\r\n reference_doctype=\"SFDA Entries\",\r\n reference_name=doc.name\r\n )\r\n\r\n frappe.log_error(\r\n title=f\"SFDA Recall Matched - {doc.name}\",\r\n message=(\r\n f\"SFDA Entry: {doc.name}\\n\"\r\n f\"Matched: {matched_rows}\\n\"\r\n f\"Recipients: {', '.join(recall_users)}\"\r\n )\r\n )\r\n\r\n # ------------------------------------------------------------------\r\n # NOTIFICATION 2 -> Non-matching list (NCMDR Ref values)\r\n # ------------------------------------------------------------------\r\n if unmatched_refs:\r\n # de-duplicate while preserving order\r\n seen = set()\r\n unique_refs = [\r\n r for r in unmatched_refs if not (r in seen or seen.add(r))\r\n ]\r\n\r\n refs_html = \"\".join(\r\n f\"
  • {ref}
  • \" for ref in unique_refs\r\n )\r\n\r\n subject = f\"SFDA Manual Review Required: {doc.name}\"\r\n\r\n message = f\"\"\"\r\n

    Manual Review Required

    \r\n

    No matching asset was found for the following recall references in\r\n SFDA Entry {doc.name}. Please review these manually.

    \r\n\r\n
      \r\n {refs_html}\r\n
    \r\n\r\n

    \r\n \r\n Open SFDA Entry\r\n \r\n

    \r\n \"\"\"\r\n\r\n for user in recall_users:\r\n frappe.get_doc({\r\n \"doctype\": \"Notification Log\",\r\n \"for_user\": user,\r\n \"type\": \"Alert\",\r\n \"subject\": subject,\r\n \"email_content\": message,\r\n \"document_type\": \"SFDA Entries\",\r\n \"document_name\": doc.name\r\n }).insert(ignore_permissions=True)\r\n\r\n if recall_users:\r\n frappe.sendmail(\r\n recipients=recall_users,\r\n subject=subject,\r\n message=message,\r\n reference_doctype=\"SFDA Entries\",\r\n reference_name=doc.name\r\n )\r\n\r\n frappe.log_error(\r\n title=f\"SFDA Manual Review Required - {doc.name}\",\r\n message=(\r\n f\"SFDA Entry: {doc.name}\\n\"\r\n f\"Unmatched Refs: {', '.join(unique_refs)}\\n\"\r\n f\"Recipients: {', '.join(recall_users)}\"\r\n )\r\n )\r\n\r\n # Mark entry as processed\r\n doc.passed = 1\r\n doc.passed_date = frappe.utils.now_datetime()\r\n doc.save(ignore_permissions=True)\r\n\r\nfrappe.db.commit()", + "script_type": "Scheduler Event" + } +] \ No newline at end of file diff --git a/sfda_parser/hooks.py b/sfda_parser/hooks.py new file mode 100644 index 0000000..10a8b83 --- /dev/null +++ b/sfda_parser/hooks.py @@ -0,0 +1,262 @@ +app_name = "sfda_parser" +app_title = "SFDA Parser" +app_publisher = "seyfert" +app_description = "SFDA weekly alert scraper" +app_email = "support@seeraarabia.com" +app_license = "mit" + +# Apps +# ------------------ + +# required_apps = [] + +# Each item in the list will be shown as an app in the apps page +# add_to_apps_screen = [ +# { +# "name": "sfda_parser", +# "logo": "/assets/sfda_parser/logo.png", +# "title": "SFDA Parser", +# "route": "/sfda_parser", +# "has_permission": "sfda_parser.api.permission.has_app_permission" +# } +# ] + +# Includes in +# ------------------ + +# include js, css files in header of desk.html +# app_include_css = "/assets/sfda_parser/css/sfda_parser.css" +# app_include_js = "/assets/sfda_parser/js/sfda_parser.js" + +# include js, css files in header of web template +# web_include_css = "/assets/sfda_parser/css/sfda_parser.css" +# web_include_js = "/assets/sfda_parser/js/sfda_parser.js" + +# include custom scss in every website theme (without file extension ".scss") +# website_theme_scss = "sfda_parser/public/scss/website" + +# include js, css files in header of web form +# webform_include_js = {"doctype": "public/js/doctype.js"} +# webform_include_css = {"doctype": "public/css/doctype.css"} + +# include js in page +# page_js = {"page" : "public/js/file.js"} + +# include js in doctype views +# doctype_js = {"doctype" : "public/js/doctype.js"} +# doctype_list_js = {"doctype" : "public/js/doctype_list.js"} +# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} +# doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"} + +# Svg Icons +# ------------------ +# include app icons in desk +# app_include_icons = "sfda_parser/public/icons.svg" + +# Home Pages +# ---------- + +# application home page (will override Website Settings) +# home_page = "login" + +# website user home page (by Role) +# role_home_page = { +# "Role": "home_page" +# } + +# Generators +# ---------- + +# automatically create page for each record of this doctype +# website_generators = ["Web Page"] + +# Jinja +# ---------- + +# add methods and filters to jinja environment +# jinja = { +# "methods": "sfda_parser.utils.jinja_methods", +# "filters": "sfda_parser.utils.jinja_filters" +# } + +# Installation +# ------------ + +# before_install = "sfda_parser.install.before_install" +# after_install = "sfda_parser.install.after_install" + +# Uninstallation +# ------------ + +# before_uninstall = "sfda_parser.uninstall.before_uninstall" +# after_uninstall = "sfda_parser.uninstall.after_uninstall" + +# Integration Setup +# ------------------ +# To set up dependencies/integrations with other apps +# Name of the app being installed is passed as an argument + +# before_app_install = "sfda_parser.utils.before_app_install" +# after_app_install = "sfda_parser.utils.after_app_install" + +# Integration Cleanup +# ------------------- +# To clean up dependencies/integrations with other apps +# Name of the app being uninstalled is passed as an argument + +# before_app_uninstall = "sfda_parser.utils.before_app_uninstall" +# after_app_uninstall = "sfda_parser.utils.after_app_uninstall" + +# Desk Notifications +# ------------------ +# See frappe.core.notifications.get_notification_config + +# notification_config = "sfda_parser.notifications.get_notification_config" + +# Permissions +# ----------- +# Permissions evaluated in scripted ways + +# permission_query_conditions = { +# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", +# } +# +# has_permission = { +# "Event": "frappe.desk.doctype.event.event.has_permission", +# } + +# DocType Class +# --------------- +# Override standard doctype classes + +# override_doctype_class = { +# "ToDo": "custom_app.overrides.CustomToDo" +# } + +# Document Events +# --------------- +# Hook on document methods and events + +# doc_events = { +# "*": { +# "on_update": "method", +# "on_cancel": "method", +# "on_trash": "method" +# } +# } + +# Scheduled Tasks +# --------------- + +# SFDA recall scraper: every Monday 07:00 (server timezone). +# Always imports from the newest row on https://www.sfda.gov.sa/en/weekly-alert only. +scheduler_events = { + "cron": { + "0 7 * * 1": [ + "sfda_parser.sfda_scraper.jobs.run_weekly_sfda_import_scheduled", + ], + }, +} + +# Testing +# ------- + +# before_tests = "sfda_parser.install.before_tests" + +# Overriding Methods +# ------------------------------ +# +# override_whitelisted_methods = { +# "frappe.desk.doctype.event.event.get_events": "sfda_parser.event.get_events" +# } +# +# each overriding function accepts a `data` argument; +# generated from the base implementation of the doctype dashboard, +# along with any modifications made in other Frappe apps +# override_doctype_dashboards = { +# "Task": "sfda_parser.task.get_dashboard_data" +# } + +# exempt linked doctypes from being automatically cancelled +# +# auto_cancel_exempted_doctypes = ["Auto Repeat"] + +# Ignore links to specified DocTypes when deleting documents +# ----------------------------------------------------------- + +# ignore_links_on_delete = ["Communication", "ToDo"] + +# Request Events +# ---------------- +# before_request = ["sfda_parser.utils.before_request"] +# after_request = ["sfda_parser.utils.after_request"] + +# Job Events +# ---------- +# before_job = ["sfda_parser.utils.before_job"] +# after_job = ["sfda_parser.utils.after_job"] + +# User Data Protection +# -------------------- + +# user_data_fields = [ +# { +# "doctype": "{doctype_1}", +# "filter_by": "{filter_by}", +# "redact_fields": ["{field_1}", "{field_2}"], +# "partial": 1, +# }, +# { +# "doctype": "{doctype_2}", +# "filter_by": "{filter_by}", +# "partial": 1, +# }, +# { +# "doctype": "{doctype_3}", +# "strict": False, +# }, +# { +# "doctype": "{doctype_4}" +# } +# ] + +# Authentication and authorization +# -------------------------------- + +# auth_hooks = [ +# "sfda_parser.auth.validate" +# ] + +# Automatically update python controller files with type annotations for this app. +# export_python_type_annotations = True + +# default_log_clearing_doctypes = { +# "Logging DocType Name": 30 # days to retain logs +# } + +# Translation +# ------------ +# List of apps whose translatable strings should be excluded from this app's translations. +# ignore_translatable_strings_from = [] + +fixtures = [ + "Custom DocPerm", + + {"doctype": "Custom Field", "filters": [ + [ + "module", "=", "SFDA Parser" + ] + ]}, + {"doctype": "Property Setter", "filters": [ + [ + "module", "=", "SFDA Parser" + ] + ]}, + {"dt": "Print Format", "filters": {"custom_format": 1}}, + {"doctype": "Client Script", "filters": [["module","=","SFDA Parser"]]}, + {"doctype": "Server Script", "filters": [["module","=","SFDA Parser"]]}, + {"doctype": "Report", "filters": [["module","=","SFDA Parser"]]} + + +] + diff --git a/sfda_parser/modules.txt b/sfda_parser/modules.txt new file mode 100644 index 0000000..4f067ec --- /dev/null +++ b/sfda_parser/modules.txt @@ -0,0 +1 @@ +SFDA Parser \ No newline at end of file diff --git a/sfda_parser/patches.txt b/sfda_parser/patches.txt new file mode 100644 index 0000000..ac78702 --- /dev/null +++ b/sfda_parser/patches.txt @@ -0,0 +1,7 @@ +[pre_model_sync] +# Patches added in this section will be executed before doctypes are migrated +# Read docs to understand patches: https://frappeframework.com/docs/v14/user/en/database-migrations + +[post_model_sync] +# Patches added in this section will be executed after doctypes are migrated +sfda_parser.patches.reparse_sfda_device_lists_from_pdfs \ No newline at end of file diff --git a/sfda_parser/patches/__init__.py b/sfda_parser/patches/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/patches/__pycache__/__init__.cpython-310.pyc b/sfda_parser/patches/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dfb4c3a8657d3a1ad58e8cc2696b369117f67f2 GIT binary patch literal 181 zcmd1j<>g`kf(eSUSs?l`h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10EKO;XkRX;H& zE59^Nx1cCLMK`smK)19wwMaj$D6ya*RW~U$FF8XW$Sl?`PD@FQFGwr`$s)505=)XZ kQj7KD<1_OzOXB183My}L*yQG?l;)(`fov>h0un3?03swU%m4rY literal 0 HcmV?d00001 diff --git a/sfda_parser/patches/__pycache__/reparse_sfda_device_lists_from_pdfs.cpython-310.pyc b/sfda_parser/patches/__pycache__/reparse_sfda_device_lists_from_pdfs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c39108caa859ffa47cd6c72787c7f38be7716031 GIT binary patch literal 865 zcmY*X&2G~`5Z<*NI|+dcAaOxj36RLa$-P1dMCq|qw5J@fw%&2#$o5)08)&0)0j_{x3a9n$>9+SSy(V)0aDQ=t5Tv^wTjB%?mmKQ+?6QUR==A9Dt$5#9Qv$ksSSXown9X|p z5z@|7q6^xg7M>N{(c+0X5HHZhV2n1no^*jH{>|pV^F)+(B}A_4wgO8eektuj?BZ|y z@QA0lY!ozh9Jrn>Z3Ql=0a4CjJaBPgWZQxZ)H$`e@Xd`+b8)5Tb1*I{n?k#A4%Q9G zm35_EA~9Q{Zm4>KtGbrv@+UJ7De*T>7rKV2td@FJq^;2^1=FT0!aUtIOV6Rn7gOqs z(>+H1vs-EN1>p2<#9iF}U^Blte%v@|FI@r`kgqKC2?0JK^?*k_4u+(o+hG{-fRFg_ zPjqV@)6a3wC0V9)o@K_bzY}{fCY_Br@d9S@uYbo$m)kvZPd)Pa{a3YCs|sHG4MPti KV*OwgjKaUB3IB`$ literal 0 HcmV?d00001 diff --git a/sfda_parser/patches/reparse_sfda_device_lists_from_pdfs.py b/sfda_parser/patches/reparse_sfda_device_lists_from_pdfs.py new file mode 100644 index 0000000..4f8061a --- /dev/null +++ b/sfda_parser/patches/reparse_sfda_device_lists_from_pdfs.py @@ -0,0 +1,20 @@ +"""One-time post-migrate: refresh device_list from stored detail PDFs after header alias updates.""" + +import frappe + +from sfda_parser.sfda_scraper.reparse import reparse_all_stored_pdf_device_lists + + +def execute(): + if not frappe.db.exists("DocType", "SFDA Entries"): + return + + summary = reparse_all_stored_pdf_device_lists() + frappe.logger("sfda_parser").info( + "Re-parsed SFDA device lists from PDFs: %s", summary + ) + if summary.get("errors"): + frappe.log_error( + title="SFDA Parser: PDF reparse completed with errors", + message=frappe.as_json(summary, indent=2), + ) diff --git a/sfda_parser/public/.gitkeep b/sfda_parser/public/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/sfda_parser/__init__.py b/sfda_parser/sfda_parser/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/sfda_parser/__pycache__/__init__.cpython-310.pyc b/sfda_parser/sfda_parser/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17c82328ffad5622f6cbb5c27643506b66caf811 GIT binary patch literal 185 zcmd1j<>g`kfL(i$7kkc cmc+;F6;$5hu*uC&Da}c>1KC>41SD7(02B}}qyPW_ literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_parser/doctype/__init__.py b/sfda_parser/sfda_parser/doctype/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/sfda_parser/doctype/__pycache__/__init__.cpython-310.pyc b/sfda_parser/sfda_parser/doctype/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9a6748b716f1832fe81b7a665a3ca1be7d20760 GIT binary patch literal 193 zcmd1j<>g`kg6;9LSs?l`h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10HKO;XkRX;H& zE59^Nx1cCLMK`smK)19wwMaj$D6ya*RW~U$FF8XW$Sl?`PD@FQFGwr`$>L(C1KD281SD7(0O(*d1^@s6 literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_parser/doctype/sfda_device_entries/__init__.py b/sfda_parser/sfda_parser/doctype/sfda_device_entries/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/sfda_parser/doctype/sfda_device_entries/__pycache__/__init__.cpython-310.pyc b/sfda_parser/sfda_parser/doctype/sfda_device_entries/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05f48a44d2f65ec9895310b2672a44240e825be3 GIT binary patch literal 213 zcmd1j<>g`k0>)~&ED-$|L?8o3AjbiSi&=m~3PUi1CZpdy{ z3sNESDXC?d$*J+Fc_l@esm1#7@tJv~93EZwqLCcdbxlGxY@Qs?qB`~lyRfrW`* zVCp#;=m00(`R<+X^xo0zenG;9XsOG-!L} zC47j4Xk~*!3^O4bt@_&Mu@Eo4tf$U9*i%|JhM#@D)(z&e-s-+ejnyheYtr7K%_}R7 z!Sos1a-CD^a#txSjI_S{U#@i7?F>$RHS!ar%@h0!%goMlqT?w!f4~SrHX>fm#l#^a iC0J*)dc2bjJbyp+t7OU|!iMN(5`OE?H|~u2IX?hyuW}^- literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.json b/sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.json new file mode 100644 index 0000000..0eedb02 --- /dev/null +++ b/sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.json @@ -0,0 +1,120 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2026-06-01 00:00:00", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "ncmdr_ref", + "manufacturer", + "detail_pdf", + "ade_detail_url", + "column_break_alert", + "material", + "material_description", + "catalog_number", + "udi", + "serial_no", + "gstn", + "batch", + "serial_no_matching" + ], + "fields": [ + { + "fieldname": "ncmdr_ref", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "NCMDR Ref" + }, + { + "fieldname": "manufacturer", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Manufacturer", + "read_only": 1 + }, + { + "fieldname": "detail_pdf", + "fieldtype": "Attach", + "in_list_view": 1, + "label": "ADE Detail PDF", + "read_only": 1 + }, + { + "fieldname": "ade_detail_url", + "fieldtype": "Data", + "hidden": 1, + "label": "ADE Detail URL", + "read_only": 1 + }, + { + "fieldname": "column_break_alert", + "fieldtype": "Column Break" + }, + { + "fieldname": "material", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Material" + }, + { + "fieldname": "material_description", + "fieldtype": "Small Text", + "in_list_view": 1, + "label": "Material Description" + }, + { + "fieldname": "catalog_number", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Catalog Number" + }, + { + "fieldname": "udi", + "fieldtype": "Small Text", + "in_list_view": 1, + "label": "UDI" + }, + { + "fieldname": "serial_no", + "fieldtype": "Small Text", + "in_list_view": 1, + "label": "Serial No" + }, + { + "fieldname": "gstn", + "fieldtype": "Data", + "label": "GTIN" + }, + { + "fieldname": "batch", + "fieldtype": "Small Text", + "label": "Batch" + }, + { + "fieldname": "serial_no_matching", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Matching", + "options": "\nYes\nNo" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2026-06-09 13:37:08.969913", + "modified_by": "support@seeraarabia.com", + "module": "SFDA Parser", + "name": "SFDA Device Entries", + "owner": "Administrator", + "permissions": [], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.py b/sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.py new file mode 100644 index 0000000..0faaa47 --- /dev/null +++ b/sfda_parser/sfda_parser/doctype/sfda_device_entries/sfda_device_entries.py @@ -0,0 +1,8 @@ +# Copyright (c) 2026, seyfert and contributors +# For license information, please see license.txt + +from frappe.model.document import Document + + +class SFDADeviceEntries(Document): + pass diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/__init__.py b/sfda_parser/sfda_parser/doctype/sfda_entries/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/__pycache__/__init__.cpython-310.pyc b/sfda_parser/sfda_parser/doctype/sfda_entries/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..937a66a7d451c6c71d860084b61743362149de18 GIT binary patch literal 206 zcmd1j<>g`kg6;9LSs?l`h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5j-KO;XkRX;H& zE59^Nx1cCLMK`smK)19wwMaj$D6ya*RW~U$FF8XW$Sl?`PD@FQFGwr`$>L(C%mgG@7y#fuI5_|S literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/__pycache__/sfda_entries.cpython-310.pyc b/sfda_parser/sfda_parser/doctype/sfda_entries/__pycache__/sfda_entries.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20083caf1369de3c0366ea7ef11704da6a44b134 GIT binary patch literal 426 zcmZ`#u};J=40W0!s-w5Thy-JYwm*Q-Asw)>+}0%ujjQ9-HX&(-o8f0z`JAq>@C!^h z?Z7c$Db9O#>^xg9mkS{Kygc8%)BO?1p~Xa2ble3w1&X!Mv5GOc2Nfy)3W_6p;Z>yK z4P-}O^a?UICTm^$4*Q`FfkR_NR&-oS4xwTSsF+c4G@fkk);G8PV4u)EWPD77=w*jO zj0+(;t$Z7BD#Wvw?VNc7drXZc_wCEA?y!{YPWvV|R;wJX$-P5cHdY#g`6KrAwj}6E z*C;8Bv?2Q+R=OVc2IoAD6O{cSh1pw90)hw^mX$!vrbrmzZ2q+%?bsI7Y}$#9g5ps1 Wt9?cZ#m3}n9`!n`YU-KtQ~m?_fodZF literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.js b/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.js new file mode 100644 index 0000000..40ff19a --- /dev/null +++ b/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.js @@ -0,0 +1,199 @@ +// Copyright (c) 2026, seyfert and contributors + +const ADE_FIELD_LABELS = { + reference_number: "NCMDR / Reference", + manufacturer: "Manufacturer", + product_trade_name: "Product / Trade Name", + model: "Model", + authorized_representative: "Authorized Representative", + problem_reason: "Problem / Reason", + action: "Corrective Action", +}; + +function format_ade_value(value) { + if (!value) { + return "—"; + } + return frappe.utils.escape_html(String(value)).replace(/\n/g, "
    "); +} + +function build_ade_dialog_html(frm, data, child_row) { + let rows = ""; + for (const [key, label] of Object.entries(ADE_FIELD_LABELS)) { + rows += ` + ${label} + ${format_ade_value(data[key])} + `; + } + + const erp_count = (frm.doc.device_list || []).filter( + (row) => row.ncmdr_ref === child_row.ncmdr_ref + ).length; + const pdf_count = data.device_list_from_pdf_count || 0; + + let device_section = `

    Device rows for ${format_ade_value( + child_row.ncmdr_ref + )} in ERP: ${erp_count} row(s)

    `; + device_section += `

    Device rows parsed from PDF (live): ${pdf_count}

    `; + if (data.pdf_parse_error) { + device_section += `

    PDF note: ${format_ade_value( + data.pdf_parse_error + )}

    `; + } + if (pdf_count > 0 && data.device_list_from_pdf) { + device_section += ` + + `; + data.device_list_from_pdf.forEach((row) => { + device_section += ` + + + + + + + + `; + }); + device_section += "
    MaterialDescriptionCatalog NoUDISerial NoGTINBatch
    ${format_ade_value(row.material)}${format_ade_value(row.material_description)}${format_ade_value(row.catalog_number)}${format_ade_value(row.udi)}${format_ade_value(row.serial_no)}${format_ade_value(row.gstn)}${format_ade_value(row.batch)}
    "; + } + + const url_line = data.detail_url + ? `

    Source: ${format_ade_value(data.detail_url)}

    ` + : ""; + + const pdf_link = child_row.detail_pdf + ? `

    + ${__("Download original PDF")}

    ` + : ""; + + return `
    +

    Loaded via ERP server — ADE may be blocked in your local browser.

    + ${pdf_link} + ${url_line} + ${rows}
    + ${device_section} +
    `; +} + +const MATCHING_YES_ROW_COLOR = "#ffedd5"; + +function highlight_matching_device_rows(frm) { + const grid = frm.fields_dict.device_list?.grid; + if (!grid?.grid_rows) { + return; + } + + grid.grid_rows.forEach((grid_row) => { + const is_match = + String(grid_row.doc.serial_no_matching || "").trim() === "Yes"; + $(grid_row.row).css( + "background-color", + is_match ? MATCHING_YES_ROW_COLOR : "" + ); + }); +} + +function get_selected_device_row(frm) { + const grid = frm.fields_dict.device_list?.grid; + if (!grid) { + return null; + } + + const selected = grid.get_selected_children(); + if (selected?.length === 1) { + return selected[0]; + } + + if (grid.grid_rows?.length === 1) { + return grid.grid_rows[0].doc; + } + + return null; +} + +frappe.ui.form.on("SFDA Entries", { + refresh(frm) { + highlight_matching_device_rows(frm); + + frm.add_custom_button( + __("View ADE details"), + () => { + const child_row = get_selected_device_row(frm); + if (!child_row) { + frappe.msgprint( + __("Please select exactly one row in Device List to view ADE details.") + ); + return; + } + + frappe.call({ + method: "sfda_parser.api.sfda_scraper.get_ade_publish_details", + args: { + sfda_entries_name: frm.doc.name, + sfda_device_entry_name: child_row.name, + include_device_list_from_pdf: 1, + }, + freeze: true, + freeze_message: __("Loading from ADE (server)..."), + callback(r) { + if (!r.message) { + return; + } + const d = new frappe.ui.Dialog({ + title: __("ADE Publish Details"), + size: "large", + fields: [{ fieldtype: "HTML", fieldname: "body" }], + primary_action_label: __("Close"), + primary_action() { + d.hide(); + }, + }); + d.fields_dict.body.$wrapper.html( + build_ade_dialog_html(frm, r.message, child_row) + ); + d.show(); + + const needs_save = + (r.message.detail_url && !child_row.ade_detail_url) || + (r.message.manufacturer && !child_row.manufacturer); + if (r.message.detail_url && !child_row.ade_detail_url) { + frappe.model.set_value( + child_row.doctype, + child_row.name, + "ade_detail_url", + r.message.detail_url + ); + } + if (r.message.manufacturer && !child_row.manufacturer) { + frappe.model.set_value( + child_row.doctype, + child_row.name, + "manufacturer", + r.message.manufacturer + ); + } + if (needs_save) { + frm.save(); + } + }, + }); + }, + __("Actions") + ); + }, + device_list_on_form_rendered(frm) { + highlight_matching_device_rows(frm); + }, +}); + +frappe.ui.form.on("SFDA Device Entries", { + serial_no_matching(frm, cdt, cdn) { + const grid_row = frm.fields_dict.device_list?.grid?.grid_rows_by_docname?.[cdn]; + if (!grid_row) { + return; + } + const is_match = String(frappe.model.get_value(cdt, cdn, "serial_no_matching") || "").trim() === "Yes"; + $(grid_row.row).css("background-color", is_match ? MATCHING_YES_ROW_COLOR : ""); + }, +}); diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.json b/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.json new file mode 100644 index 0000000..120a00e --- /dev/null +++ b/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.json @@ -0,0 +1,98 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:title", + "creation": "2026-06-01 16:16:53.409449", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "title", + "column_break_dqny", + "date", + "section_break_qcgk", + "device_list", + "section_break_ihhu", + "passed_date", + "column_break_whlv", + "passed" + ], + "fields": [ + { + "fieldname": "title", + "fieldtype": "Data", + "in_global_search": 1, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Title", + "unique": 1 + }, + { + "fieldname": "column_break_dqny", + "fieldtype": "Column Break" + }, + { + "fieldname": "date", + "fieldtype": "Date", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Date" + }, + { + "fieldname": "section_break_qcgk", + "fieldtype": "Section Break" + }, + { + "fieldname": "device_list", + "fieldtype": "Table", + "label": "Device List", + "options": "SFDA Device Entries" + }, + { + "fieldname": "section_break_ihhu", + "fieldtype": "Section Break" + }, + { + "fieldname": "passed_date", + "fieldtype": "Datetime", + "label": "Passed Date" + }, + { + "fieldname": "column_break_whlv", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "passed", + "fieldtype": "Check", + "label": "Passed" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "links": [], + "modified": "2026-06-09 13:18:06.533455", + "modified_by": "support@seeraarabia.com", + "module": "SFDA Parser", + "name": "SFDA Entries", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "rows_threshold_for_grid_search": 20, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.py b/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.py new file mode 100644 index 0000000..217898b --- /dev/null +++ b/sfda_parser/sfda_parser/doctype/sfda_entries/sfda_entries.py @@ -0,0 +1,8 @@ +# Copyright (c) 2026, seyfert and contributors +# For license information, please see license.txt + +from frappe.model.document import Document + + +class SFDAEntries(Document): + pass diff --git a/sfda_parser/sfda_parser/doctype/sfda_entries/test_sfda_entries.py b/sfda_parser/sfda_parser/doctype/sfda_entries/test_sfda_entries.py new file mode 100644 index 0000000..bb7d4f1 --- /dev/null +++ b/sfda_parser/sfda_parser/doctype/sfda_entries/test_sfda_entries.py @@ -0,0 +1,8 @@ +# Copyright (c) 2026, seyfert and Contributors +# See license.txt + +from frappe.tests import IntegrationTestCase + + +class TestSFDAEntries(IntegrationTestCase): + pass diff --git a/sfda_parser/sfda_scraper/__init__.py b/sfda_parser/sfda_scraper/__init__.py new file mode 100644 index 0000000..16fcb72 --- /dev/null +++ b/sfda_parser/sfda_scraper/__init__.py @@ -0,0 +1 @@ +# SFDA weekly recall scraper for sfda_parser diff --git a/sfda_parser/sfda_scraper/__pycache__/__init__.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e7086242b434bf3bc280f76add2a9f1edb4e067 GIT binary patch literal 186 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 literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/__pycache__/detail_pdf.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/detail_pdf.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a723008778b25fb17140a9a5cd1fd0439ca0990 GIT binary patch literal 32778 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 literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/__pycache__/importer.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/importer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c63c8edccca3763be9a74eae825746504bf9790 GIT binary patch literal 10615 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 H#Vh{@^ZyBQ literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/__pycache__/jobs.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/jobs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7feb0350cb7332bfaeb0cd282ce743d2d80c9e38 GIT binary patch literal 1077 zcmZ{jOK%e~5P#fbmxbv0)g}`{8fH={^f8?urFkKhi85wTo9G;I zku4*Zp)xwQKC9)E(4gO*h2J5;csD-xZ~dEq2e-cOneeN3y{-+fyjx1@$|LXwyQTmg zpmkab4XiXWCyJP5*%I&z68@1CoGoEnBSIqOLJx~2#7c_Zu;V-rSeyV}U|d@KU8j3K zgpUPMM3-%iKXCX^usJ%L7ehEnG$hY`+b;}S%xMRux(@kBM^8_H2_Yf=sCxi zL-^pzqwP0PXmK@Am1TY30o6T4P0Wk5(8QK%iZ_Sjy`%k8vY+W*js7V?QM(l7G)r|t zPRs?Zk>O3aLj9x?swF{YSn_W<=DsTPjO|43G^N5QQg&EXleTJW?dqYESA$jGfXZd-qPZ;BHhX8a@g|pcY~R{B(pJ^* Ly1_=!4Z7hU#Bx5n literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/__pycache__/reparse.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/reparse.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21341437d05c9533f3e8777e79963985f599d874 GIT binary patch literal 3397 zcmaJ@TW=f36`q;BaJ3>C$(N*39Cs7DvDsQu+lRO)oYZM#J55ocunVM7W2{%4r9^qj zUCk`*h+P&zotG9U`dT0kKt2>jU-}dJL*_M4{tK>C_d7#fDA(;0JTp6Ub}r|f?>i@N zG(v{wZ{J+r{l_9>U(?I%hiq&w)~b{`oi06Naqe~ zMZ;US)0HAoI*nxdpxaL4tgFkYz0=KPr1FP4>ZrUI=`vTTjNV_r0ktyeX3;O#Z$?R3 zCheVG+AsC$6S`E3oB5>Q&&#Cj=6$_^_r`Ww#+`1K#zj)@U|`wq7AKuf+AdQW&unV~ zt2j`ZadfGSuhMd$`o`PZFH_y-w8g>Wp$+i=fK2yCbSgH6xh62)5*zW7SNstliAt!` zrPy`GZY3sMf4B6;zI3Ep@rg5X4rZJQR~IU0B>J_oCcTP%$-WYg`0sfcR6_cX#GmUU zw{pjG6ZSC^aFUDPBZsp)><3K0_mFc&zfbU&7;DuwhP5@iiC%m19FOsf!B*C78_y07 zPm%3lq^Oe*`Vvw_MyRb;XgpnH-BLNYj}f^xF4@fZT}>YvzoU|(NT(*%-EwMDvv?De z8+mz?R=c58u8f-(Y2UaiO=QbcWGgdAOT_)8m#SCn`|$$2^LM6}F!=P-wVk||t|i%S zKIp6zDwiv%Dpm$MRcq7DSGLlAduI*j&}+IQ6L=M|qyD?E+c+#HRBAO=i+%HIOb3F) zDS+Zac4F(-26onGAeubj3%tqe+~-X}^5S##x;<>a-IEHRcTNNW1%$xg2EhV46)S+1 zF`KY4pO7oWhJk=xOVurmH-Pz6i>q_cwKtxMWxSd*aX(kRBcBR&19Q{x(}@ci*Pa+~q|Brxg=6awm9?+*MCIw;tF^F#)CYJ(+7Gq~Z4*B)S ztGux*y$LVglK#lAeEm-4j6GSaJQ*x8$T=&+B_`(|yAz;(Z@GjX90uN~YG{KhP)QYF zz1K!_FZtTXD)fE*u~*HFg9-a97z^wCv~tV2DtN@NvXQ&D{Qtk4?p*P4C>z_jC1;g` z9fMJbF;6zCkjD0YTk+j_*_5yR2|JW*w?1x6z)%&#PGGmnE&hTY!c8uaMOur)k8Y=1 z1LFOec=%tL;5eY7ydR}V1JT9@zgWK=S(mR4>vwLhzaQP`19z!b1XR=L=QE+ua*RuC zbQFCQAEu`7cY#qk4LJ(v;c2_lx=l_;3t9l%*tB8kni?Xc+y}Z}nDNvPvB=EmQ7o(P zVB%LuNT<5nKt9McRlTm(l(<@sTB9S^r$jJ~cJ+M>wVDc9oS7P>HS9T!Pya!Z4N~9% zqsAwa?n}#DiqgBOB|4_KHBJUvb~Kb+ojgd5kXy!Y=e=IHY|X1H&{c1fxI|yom32pH zkz*E1WYz32TUujz_FUFfX6}eiVG3(2ZTx9RU8W_8-)GqF`~fe=mc)_4)&AkyQ~=QJ z^%g`OXmr8Iu7DJTQs7kh;AWq@&)nxC2&@KaO~(bz{LA;nQ~!B0bj69$=k+ikh8H0h zj?Y8xf1_?-8?$(H4#bOv`qL1!8dcFo-cL^eo_Li&Zvp>LbSkF&if!`|@B0XJFe()S zBXA`BwwZJuyWm?6klX^(3h8hh1aCPgpK>aV>tVS zirwd4nQXlTX!lNNKHN!F8g)DUL6%)UW`HZvrAw{o&3Dn9P`9vexrj}bw^OZCX=;N) zCaC(p2EAUQ_NVwpfvE=>aG8GAei0!T4iN$q z$J6@P)+{sRsQXx16Kq|8z!!o85OV^F3?O(G)E3ZENplV%AM%Sl_+0$kb=4g@mTSv0 zMZv6UB&eD_$lf!fG~W_ajW?$nmL`tBTcJ_Dfluk4>J|yRpq*%%T1-3@$0m&9&VcHH zI962Bs3r-^W=qrJZgo(0GrejnMbr<;HvHp2$y}Hz^;T{FpuAf>jsi<{Q__oQVM^Rn q2hn|JtZSLbmR!NLUM>e&`X2dSzY5_J;ow&%ig3b4=!T06Klu-aZD-#A literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/__pycache__/test_detail_pdf_expand.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/test_detail_pdf_expand.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04c3bf20276ff322a78157929cc5cb06db2e5eab GIT binary patch literal 7296 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
    |?k1#f2{m*jaIhf9ea- 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 literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/__pycache__/weekly_list.cpython-310.pyc b/sfda_parser/sfda_scraper/__pycache__/weekly_list.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..258d5b6bf7a23dea7577499cf4b2eb292db12a40 GIT binary patch literal 3543 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 literal 0 HcmV?d00001 diff --git a/sfda_parser/sfda_scraper/detail_page.py b/sfda_parser/sfda_scraper/detail_page.py new file mode 100644 index 0000000..81a448d --- /dev/null +++ b/sfda_parser/sfda_scraper/detail_page.py @@ -0,0 +1,192 @@ +"""Fetch and parse ADE PublishDetails pages.""" + +from __future__ import annotations + +import re +from typing import Any +from urllib.parse import urljoin + +from bs4 import BeautifulSoup + +from sfda_parser.sfda_scraper.detail_pdf import parse_affected_device_list +from sfda_parser.sfda_scraper.http_client import ADE_BASE, create_session, request_with_retry + +DOWNLOAD_PATTERN = re.compile( + r'formaction=["\'](?P/BaseService/DownloadDocument\?download=[^"\']+)["\']', + re.IGNORECASE, +) +TOKEN_PATTERN = re.compile( + r'name=["\']__RequestVerificationToken["\'][^>]*value=["\']([^"\']+)["\']', + re.IGNORECASE, +) +PUBLISH_ID_PATTERN = re.compile(r"/Fsca/PublishDetails/(\d+)", re.IGNORECASE) + +HTML_FIELD_MAP = { + "reference_number": "ReferenceNumber", + "manufacturer": "ManufacturerName", + "product_trade_name": "ProductTradeName", + "model": "ModelNbr", + "authorized_representative": "AuthorizedRepresentative", + "problem_reason": "ProblemReason", + "action": "Action", +} + + +class NoPdfDownloadLinkError(ValueError): + """ADE PublishDetails page has no DownloadDocument link.""" + + +def _field_value(soup: BeautifulSoup, field_name: str) -> str: + el = soup.find(attrs={"name": field_name}) + if not el: + return "" + if el.name == "textarea": + return el.get_text(strip=True) + return (el.get("value") or "").strip() + + +def _extract_download_path(html: str) -> str | None: + match = DOWNLOAD_PATTERN.search(html) + if match: + return match.group("path") + soup = BeautifulSoup(html, "html.parser") + button = soup.select_one("button[formaction*='DownloadDocument']") + if button and button.get("formaction"): + return button["formaction"] + return None + + +def _extract_verification_token(html: str) -> str | None: + match = TOKEN_PATTERN.search(html) + if match: + return match.group(1) + soup = BeautifulSoup(html, "html.parser") + inp = soup.find("input", {"name": "__RequestVerificationToken"}) + if inp and inp.get("value"): + return inp["value"] + return None + + +def parse_publish_details_html(html: str, detail_url: str = "") -> dict[str, Any]: + soup = BeautifulSoup(html, "html.parser") + publish_id = "" + if detail_url: + match = PUBLISH_ID_PATTERN.search(detail_url) + if match: + publish_id = match.group(1) + + download_path = _extract_download_path(html) + data: dict[str, Any] = { + "detail_url": detail_url, + "publish_id": publish_id, + "pdf_download_url": urljoin(ADE_BASE, download_path) if download_path else "", + } + for key, field_name in HTML_FIELD_MAP.items(): + data[key] = _field_value(soup, field_name) + return data + + +def fetch_publish_details_html(detail_url: str, session=None) -> dict[str, Any]: + session = session or create_session() + response = request_with_retry(session, "GET", detail_url, timeout=60) + return parse_publish_details_html(response.text, detail_url=detail_url) + + +def fetch_publish_details( + detail_url: str, + session=None, + include_device_list_from_pdf: bool = False, +) -> dict[str, Any]: + """ADE page fields; optionally parse Material/GTIN/Batch table from attached PDF.""" + session = session or create_session() + result = fetch_publish_details_html(detail_url, session=session) + + if include_device_list_from_pdf: + try: + pdf_bytes = download_detail_pdf(detail_url, session=session) + devices = parse_affected_device_list(pdf_bytes) + result["device_list_from_pdf"] = [d.as_dict() for d in devices] + result["device_list_from_pdf_count"] = len(devices) + except Exception as exc: + result["device_list_from_pdf"] = [] + result["device_list_from_pdf_count"] = 0 + result["pdf_parse_error"] = str(exc) + else: + result["device_list_from_pdf"] = [] + result["device_list_from_pdf_count"] = 0 + + return result + + +def resolve_detail_url_for_ncmdr_ref(ncmdr_ref: str, session=None) -> str | None: + """Resolve ADE URL from recent weekly PDFs when not stored on SFDA Entries.""" + from sfda_parser.sfda_scraper.weekly_list import fetch_recent_weekly_alerts + from sfda_parser.sfda_scraper.weekly_pdf import parse_safety_alerts_from_pdf + + session = session or create_session() + target = (ncmdr_ref or "").strip().upper() + for weekly in fetch_recent_weekly_alerts(session=session): + pdf_response = session.get(weekly.pdf_url, timeout=120) + pdf_response.raise_for_status() + for alert in parse_safety_alerts_from_pdf(pdf_response.content): + if alert.ncmdr_ref.strip().upper() == target: + return alert.detail_url + return None + + +def _download_detail_pdf_from_html( + html: str, detail_url: str, session +) -> bytes: + download_path = _extract_download_path(html) + token = _extract_verification_token(html) + if not download_path: + raise NoPdfDownloadLinkError(f"No PDF download link on ADE page: {detail_url}") + + download_url = urljoin(ADE_BASE, download_path) + headers = {"Referer": detail_url} + data = {} + if token: + data["__RequestVerificationToken"] = token + + pdf_response = request_with_retry( + session, + "POST", + download_url, + data=data, + headers=headers, + timeout=120, + ) + + content_type = (pdf_response.headers.get("Content-Type") or "").lower() + if "pdf" not in content_type and not pdf_response.content.startswith(b"%PDF"): + raise ValueError(f"ADE download did not return a PDF for {detail_url}") + + return pdf_response.content + + +def fetch_ade_detail( + detail_url: str, session=None +) -> tuple[bytes | None, dict[str, Any]]: + """Fetch ADE detail page; download PDF when available. + + Returns (pdf_bytes or None, publish_details). PDF is None when the ADE page + has no DownloadDocument link. + """ + session = session or create_session() + response = request_with_retry(session, "GET", detail_url, timeout=60) + html = response.text + publish_details = parse_publish_details_html(html, detail_url=detail_url) + + try: + pdf_bytes = _download_detail_pdf_from_html(html, detail_url, session) + except NoPdfDownloadLinkError: + return None, publish_details + + return pdf_bytes, publish_details + + +def download_detail_pdf(detail_url: str, session=None) -> bytes: + pdf_bytes, _publish_details = fetch_ade_detail(detail_url, session=session) + if pdf_bytes is None: + raise NoPdfDownloadLinkError(f"No PDF download link on ADE page: {detail_url}") + return pdf_bytes diff --git a/sfda_parser/sfda_scraper/detail_pdf.py b/sfda_parser/sfda_scraper/detail_pdf.py new file mode 100644 index 0000000..ffbf32f --- /dev/null +++ b/sfda_parser/sfda_scraper/detail_pdf.py @@ -0,0 +1,1295 @@ +"""Parse Affected Device List tables from ADE detail PDFs.""" + +from __future__ import annotations + +import io +import re +from dataclasses import dataclass + +import pdfplumber + +# Order matters: more specific aliases are checked first within each field. +HEADER_ALIASES: dict[str, tuple[str, ...]] = { + "catalog_number": ( + "procedure pack code", + "product code / part number", + "product code", + "manufacturer's product number/catalog number", + "product number/catalog number", + "catalogue number", + "catalog number", + "model number (ref)", + "model number", + "model no", + "model #", + "product number", + "part number", + "item number", + "list number", + "system code", + "unit model", + "article no", + "ref. number", + "ref#", + "ref no", + "catalog no", + "catalogue no", + "material n° (upn)", + "material n°", + "material id", + "upn", + "ref", + ), + "material_description": ( + "material description", + "product description", + "model description", + "material desc", + "description", + "product code", + ), + "serial_no": ( + "unit serial number", + "unit serial no", + "system serial number", + "system serial no", + "affected serial numbers", + "lot/serial number", + "serial numbers", + "serial number", + "serial no.", + "serial no", + "s/n", + "sn", + "lot numbers", + "lot number", + "batch lot", + "lot id", + "lot no.", + "lot no", + "lot", + ), + "udi": ( + "udi number", + "udi code", + "udi impacted", + "unique device identifier", + "basic udi di", + "basic udi-di", + "udi di", + "udi-di", + "udi - di", + "udi", + ), + "material": ( + "affected product name", + "commercial name", + "device name", + "material", + "product name", + "model name", + "product/trade name", + "trade name", + "brand name", + "system model", + "unit model", + ), + "gstn": ( + "gtin number", + "gtin", + "gstn", + "gtn", + ), + "batch": ( + "affected lot numbers", + "batch / lot number", + "batch/lot number", + "lot / batch n°", + "batch", + ), +} + +# Map fields in specificity order so e.g. "model number" maps to catalog_number, not material. +FIELD_PRIORITY = ( + "catalog_number", + "material_description", + "serial_no", + "udi", + "material", + "gstn", + "batch", +) + +PRODUCT_SECTION_KEYWORDS = ( + "affected device", + "affected devices", + "impacted product", + "affected product", + "affected products", + "product table", + "table 1", + "affected product information", + "affected product details", + "product affected", + "product details", + "list of affected", + "affected device list", + "device list", + "3. affected products", + "how to identify them", + "affected product codes and batches", + "procedure pack code", + "detail on affected devices", +) + +FORM_TABLE_KEYWORDS = ( + "signature", + "phone number", + "fax", + "e-mail", + "email address", + "printed name", + "facility name", + "purchased directly", + "end user with", + "quantity for return", + "customer contact", + "account/organisation", + "qty sent", + "qty to return", + "quantity distributed", + "quantity in inventory", + "quantity being returned", + "customer po", + "po no.", + "job-no.", + "distributor", + "distribution dates", + "actions to be", + "recalibration needed", + "pressure circ-value", + "software name", + "previous range", + "updated range", + "previous target", + "updated target", +) + +# Section titles / narrative blocks mis-detected as product tables. +NON_PRODUCT_HEADER_KEYWORDS = ( + "affected product information table", + "please follow your local", + "correction letter dated", + "figure ", + "this issue may potentially result", + "product(s) distributed", + "name/title", + "analyte", + # NOTE: do not include generic table columns like expiry/manufacturing dates here. + # They can appear in real affected-product tables. +) + + +def _is_strong_product_header(header_text: str) -> bool: + # Accept product tables even if they include operational columns like distribution/expiry dates. + strong_terms = ( + "procedure pack", + "udi", + "gtin", + "catalog", + "catalogue", + "batch", + "lot", + "serial", + "product description", + "material description", + "device name", + "product name", + "trade name", + "system model", + "unit model", + ) + if sum(1 for t in strong_terms if t in header_text) >= 2: + return True + # Installed-base / distribution list tables (e.g. System Model + Unit serial number). + if "system model" in header_text and "serial" in header_text: + return True + if "unit model" in header_text and "serial" in header_text: + return True + return False + + +@dataclass +class DeviceRow: + material: str + material_description: str + catalog_number: str + udi: str + serial_no: str + gstn: str + batch: str + + def as_dict(self) -> dict[str, str]: + return { + "material": self.material, + "material_description": self.material_description, + "catalog_number": self.catalog_number, + "udi": self.udi, + "serial_no": self.serial_no, + "gstn": self.gstn, + "batch": self.batch, + } + + +# Multi-value identifier fields in one cell → one ERP row per value. +_MULTI_VALUE_DEVICE_FIELDS = ("serial_no", "catalog_number", "batch", "udi", "gstn") + +_NUMERIC_ID_TOKEN_RE = re.compile(r"^\d{8,14}$") +_LOT_CODE_TOKEN_RE = re.compile(r"^\d{2}[A-Z]\d{4}$", re.IGNORECASE) +_SRN_ID_TOKEN_RE = re.compile(r"^[A-Z]{2}-MF-\d{9}$", re.IGNORECASE) +_ALPHANUM_CODE_TOKEN_RE = re.compile(r"^[A-Z0-9][A-Z0-9\-\/\.]+$", re.IGNORECASE) + +_DATE_VALUE_RES = ( + re.compile(r"^\d{1,2}[-/\s][A-Z]{3,9}[-/\s]\d{2,4}$", re.IGNORECASE), + re.compile(r"^\d{1,2}[-/]\d{1,2}[-/]\d{2,4}$"), + re.compile(r"^\d{4}[-/]\d{1,2}[-/]\d{1,2}$"), + re.compile(r"^\d{1,2}\s+[A-Z]{3,9}\s+\d{4}$", re.IGNORECASE), +) + +_PRODUCT_CONCERNED_PREFIX_RE = re.compile( + r"^(?:(?:name\s+)?of\s+the\s+product\s+concerned\s*:\s*)+", + re.IGNORECASE, +) + + +def _is_likely_date_value(value: str) -> bool: + candidate = (value or "").strip() + if not candidate: + return False + return any(pattern.fullmatch(candidate) for pattern in _DATE_VALUE_RES) + + +_PROSE_PREFIXES = ( + "dear ", + "the ", + "manufacturer", + "please ", + "required ", + "potential ", + "transmission", + "contact ", + "action", + "[enter", + "incorrectly", + "manufactured:", + "alternatively", + "you can", + "this notice", + "and notify", + "in the image", + "consequently", + "ensure effectiveness", + "radiological", + "examination is", + "the diagnosis", + "the correct", + "the dimensions", + "the synthetic", + "the x-ray", +) + + +def _is_likely_prose(value: str) -> bool: + """Reject narrative sentences mis-parsed as serial/UDI identifiers.""" + candidate = (value or "").strip() + if not candidate: + return True + parts = [part.strip() for part in re.split(r"[,;]+", candidate) if part.strip()] + if len(parts) > 1: + valid_parts = sum( + 1 + for part in parts + if not _is_likely_date_value(part) + and ( + _is_splittable_token(part) + or bool(re.fullmatch(r"\d{6,20}", part)) + ) + ) + if valid_parts >= 2: + return False + if len(candidate) > 45 and len(parts) <= 1: + return True + lower = candidate.lower() + if any(lower.startswith(prefix) for prefix in _PROSE_PREFIXES): + return True + if " " in candidate: + words = candidate.split() + if len(words) >= 3: + return True + if lower.endswith(":") and len(words) >= 2: + return True + if re.search(r"[.!?]", candidate) and len(candidate) > 20: + return True + return False + + +def _is_valid_device_identifier(value: str) -> bool: + candidate = (value or "").strip() + if not candidate or _is_likely_date_value(candidate) or _is_likely_prose(candidate): + return False + if _is_splittable_token(candidate): + return True + return bool(re.fullmatch(r"\d{6,20}", candidate)) + + +def _split_identifier_list(value: str) -> list[str]: + value = (value or "").strip() + if not value: + return [] + + if re.search(r"[,;]", value): + parts = [ + part.strip() + for part in re.split(r"[,;]+", value) + if part.strip() and _is_valid_device_identifier(part.strip()) + ] + if parts: + return parts + + tokens = value.split() + if len(tokens) >= 2 and all(_is_valid_device_identifier(token) for token in tokens): + return tokens + + if _is_valid_device_identifier(value): + return [value] + return [] + + +def _paired_rows_from_summary(summary: dict[str, str]) -> list[DeviceRow]: + """Zip parallel UDI-DI and SN lists from summary labels into one row per device.""" + udi_list = _split_identifier_list(summary.get("udi", "")) + sn_list = _split_identifier_list(summary.get("serial_no", "")) + if not udi_list or not sn_list: + return [] + + count = min(len(udi_list), len(sn_list)) + if count < 2: + return [] + + material = _clean_material_value(summary.get("material", "")) + material_description = summary.get("material_description", "") + return [ + DeviceRow( + material=material, + material_description=material_description, + catalog_number="", + udi=udi_list[index], + serial_no=sn_list[index], + gstn="", + batch="", + ) + for index in range(count) + ] + + +def _is_splittable_token(token: str) -> bool: + """True when a whitespace-separated token looks like an ID/code, not prose.""" + token = (token or "").strip() + if not token or " " in token or _is_likely_date_value(token): + return False + if _NUMERIC_ID_TOKEN_RE.fullmatch(token): + return True + if _LOT_CODE_TOKEN_RE.fullmatch(token): + return True + if _SRN_ID_TOKEN_RE.fullmatch(token): + return True + return ( + len(token) <= 25 + and _ALPHANUM_CODE_TOKEN_RE.fullmatch(token) is not None + and re.search(r"\d", token) is not None + ) + + +def _split_multi_values(value: str) -> list[str]: + value = re.sub(r"[\n\r]+", ", ", (value or "").strip()) + if not value: + return [""] + + if re.search(r"[,;]", value): + parts = [ + part.strip() + for part in re.split(r"[,;]+", value) + if part.strip() and not _is_likely_date_value(part.strip()) + ] + if len(parts) > 1: + return parts + + # Some ADE PDFs list UDIs/serials as space-separated 10-digit numbers in one cell. + tokens = value.split() + if len(tokens) >= 2 and all(_is_splittable_token(token) for token in tokens): + return [token for token in tokens if not _is_likely_date_value(token)] + + return [value] + + +def _expand_device_row(row: DeviceRow) -> list[DeviceRow]: + """Split one parsed row into many when serial, catalog, or batch lists several values.""" + field_parts = { + field: _split_multi_values(getattr(row, field)) + for field in _MULTI_VALUE_DEVICE_FIELDS + } + multi_fields = [field for field, parts in field_parts.items() if len(parts) > 1] + if not multi_fields: + return [row] + + if len(multi_fields) == 1: + field = multi_fields[0] + return [ + DeviceRow(**{**row.as_dict(), field: part}) + for part in field_parts[field] + ] + + lengths = {field: len(field_parts[field]) for field in multi_fields} + if len(set(lengths.values())) == 1: + count = next(iter(lengths.values())) + return [ + DeviceRow( + **{ + **row.as_dict(), + **{field: field_parts[field][index] for field in multi_fields}, + } + ) + for index in range(count) + ] + + primary_field = max(multi_fields, key=lambda field: len(field_parts[field])) + expanded: list[DeviceRow] = [] + for part in field_parts[primary_field]: + row_data = row.as_dict() + row_data[primary_field] = part + for field in multi_fields: + if field != primary_field: + row_data[field] = field_parts[field][0] + expanded.append(DeviceRow(**row_data)) + return expanded + + +def _expand_device_rows(devices: list[DeviceRow]) -> list[DeviceRow]: + expanded: list[DeviceRow] = [] + for device in devices: + expanded.extend(_expand_device_row(device)) + return expanded + + +def _normalize_header(cell: str | None) -> str: + if not cell: + return "" + return re.sub(r"\s+", " ", str(cell).strip().lower()) + + +_DATE_COLUMN_TERMS = ( + "date", + "manufacturing date", + "mfg date", + "prod date", + "production date", + "expiry date", + "expiration date", +) + + +def _is_date_column_header(header: str) -> bool: + normalized = _normalize_header(header) + if not normalized: + return False + if normalized in ("date", "dates"): + return True + if "update" in normalized: + return False + return any(term in normalized for term in _DATE_COLUMN_TERMS) + + +def _clean_material_value(value: str) -> str: + cleaned = (value or "").strip() + if not cleaned: + return "" + concerned_match = re.search( + r"product\s+concerned\s*:\s*(.+)$", + cleaned, + re.IGNORECASE, + ) + if concerned_match: + return concerned_match.group(1).strip() + while True: + stripped = _PRODUCT_CONCERNED_PREFIX_RE.sub("", cleaned).strip() + if stripped == cleaned: + break + cleaned = stripped + return cleaned + + +def _clean_serial_value(value: str) -> str: + cleaned = re.sub(r"[\n\r]+", ", ", (value or "").strip()) + if not cleaned or _is_likely_date_value(cleaned): + return "" + if re.search(r"[,;]", cleaned): + parts = [ + part.strip() + for part in re.split(r"[,;]+", cleaned) + if part.strip() and not _is_likely_date_value(part.strip()) + ] + valid_parts = [ + part + for part in parts + if not _is_likely_prose(part) or _is_valid_device_identifier(part) + ] + if len(valid_parts) > 1: + return ", ".join(valid_parts) + if len(valid_parts) == 1: + return valid_parts[0] + return "" + if _is_likely_prose(cleaned): + return "" + return cleaned + + +def _sanitize_device_row(row: DeviceRow) -> DeviceRow: + data = row.as_dict() + data["material"] = _clean_material_value(data["material"]) + data["serial_no"] = _clean_serial_value(data["serial_no"]) + return DeviceRow(**data) + + +def _header_matches(header: str, alias: str) -> bool: + if not header or not alias: + return False + if header == alias: + return True + if len(header) <= 3 or len(alias) <= 3: + return False + # e.g. header "product" must not match alias "product code" + if len(header) < len(alias) and header in alias: + return False + return alias in header or header in alias + + +def _map_columns_base(header_row: list) -> dict[str, int]: + normalized = [_normalize_header(c) for c in header_row] + mapping: dict[str, int] = {} + used_indices: set[int] = set() + + for field in FIELD_PRIORITY: + aliases = sorted(HEADER_ALIASES[field], key=len, reverse=True) + for idx, header in enumerate(normalized): + if idx in used_indices or not header: + continue + if field == "serial_no" and _is_date_column_header(header): + continue + if any(_header_matches(header, alias) for alias in aliases): + mapping[field] = idx + used_indices.add(idx) + break + + return mapping + + +def _apply_column_heuristics(header_row: list, mapping: dict[str, int]) -> dict[str, int]: + """GE-style tables: product name in column 0 with an empty header cell.""" + normalized = [_normalize_header(c) for c in header_row] + used_indices = set(mapping.values()) + + if ( + "material" not in mapping + and len(normalized) > 0 + and not normalized[0] + and 0 not in used_indices + ): + mapping["material"] = 0 + + # When both system and unit serial columns exist, prefer unit serial number. + for idx, header in enumerate(normalized): + if "unit serial" in header: + mapping["serial_no"] = idx + break + + return mapping + + +def _merge_header_rows(row0: list, row1: list) -> list[str]: + max_len = max(len(row0 or []), len(row1 or [])) + merged: list[str] = [] + for idx in range(max_len): + parts: list[str] = [] + for row in (row0, row1): + if row and idx < len(row) and row[idx]: + part = str(row[idx]).strip() + if part: + parts.append(part) + merged.append(" ".join(parts).strip()) + return merged + + +_LOT_BATCH_TOKEN_RE = re.compile(r"\b\d{2}[A-Z]\d{4}\b") + + +def _is_likely_header_continuation_row(row: list) -> bool: + """Detect sub-header rows like ['Code', '', 'return'] under 'Procedure Pack'.""" + if not row: + return False + cells = [str(cell).strip() for cell in row if cell is not None and str(cell).strip()] + if not cells: + return False + for cell in cells: + if _LOT_BATCH_TOKEN_RE.search(cell): + return False + if len(cell) > 40: + return False + return True + + +def _resolve_table_header(table: list) -> tuple[list, int]: + """Return (header_row, data_start_index), merging split headers when needed.""" + if not table: + return [], 0 + + mapping = _map_columns(table[0]) + if mapping and len(mapping) >= 2: + return table[0], 1 + + if len(table) >= 3 and _is_likely_header_continuation_row(table[1]): + merged = _merge_header_rows(table[0], table[1]) + merged_mapping = _map_columns(merged) + if merged_mapping and len(merged_mapping) >= 2: + return merged, 2 + + return table[0], 1 + + +def _map_columns(header_row: list) -> dict[str, int] | None: + mapping = _apply_column_heuristics(header_row, _map_columns_base(header_row)) + if len(mapping) < 2: + return None + return mapping + + +def _get_cell_value(cells: list, idx: int | None) -> str: + """Read cell; try adjacent columns when pdfplumber shifts values off header.""" + if idx is None or idx >= len(cells): + return "" + for try_idx in (idx, idx - 1, idx + 1): + if 0 <= try_idx < len(cells) and cells[try_idx] is not None: + val = re.sub(r"[\n\r]+", ", ", str(cells[try_idx]).strip()) + val = re.sub(r"\s+", " ", val).strip() + if val: + return val + return "" + + +def _cell_text(cells: list, idx: int) -> str: + if idx < 0 or idx >= len(cells) or cells[idx] is None: + return "" + return re.sub(r"[\n\r]+", ", ", str(cells[idx]).strip()) + + +def _best_cell_for_field(cells: list, field: str, used_indices: set[int]) -> str: + """Scan row cells when sparse tables shift values away from header indices.""" + best_value = "" + best_score = -1 + + for idx, raw in enumerate(cells): + if idx in used_indices or raw is None: + continue + text = _cell_text(cells, idx) + if not text: + continue + + score = 0 + if field in ("serial_no", "batch"): + parts = [p.strip() for p in re.split(r"[,;]+", text) if p.strip()] + identifier_parts = sum(1 for part in parts if _is_valid_device_identifier(part)) + if identifier_parts >= 2: + score = 100 + identifier_parts + elif identifier_parts == 1 and len(parts) == 1: + score = 40 + elif field in ("gstn", "udi"): + tokens = _UDI_TOKEN_RE.findall(text) + if tokens: + score = 80 + len(tokens) + elif field == "catalog_number": + if text and not _UDI_TOKEN_RE.fullmatch(text) and len(text) <= 40: + score = 30 + elif field == "material": + if text and not _UDI_TOKEN_RE.fullmatch(text): + score = 20 + + if score > best_score: + best_score = score + best_value = text + + return best_value if best_score > 0 else "" + + +def _resolve_sparse_row_values(cells: list, mapping: dict[str, int]) -> dict[str, str]: + """Fill empty mapped fields from other cells in misaligned sparse tables.""" + used_indices: set[int] = set() + values: dict[str, str] = {} + + for field in FIELD_PRIORITY: + idx = mapping.get(field) + value = _get_cell_value(cells, idx) + if value: + values[field] = value + if idx is not None: + used_indices.add(idx) + for offset in (-1, 1): + neighbor = idx + offset + if ( + 0 <= neighbor < len(cells) + and _cell_text(cells, neighbor) == value + ): + used_indices.add(neighbor) + + for field in ("serial_no", "gstn", "udi", "catalog_number", "batch", "material"): + if values.get(field): + continue + fallback = _best_cell_for_field(cells, field, used_indices) + if fallback: + values[field] = fallback + + return values + + +def _row_from_cells(cells: list, mapping: dict[str, int]) -> DeviceRow | None: + resolved = _resolve_sparse_row_values(cells, mapping) + + row = DeviceRow( + material=resolved.get("material", ""), + material_description=resolved.get("material_description", ""), + catalog_number=resolved.get("catalog_number", ""), + udi=resolved.get("udi", ""), + serial_no=resolved.get("serial_no", ""), + gstn=resolved.get("gstn", ""), + batch=resolved.get("batch", ""), + ) + + if not any(row.as_dict().values()): + return None + + return _sanitize_device_row(row) + + +def _is_form_table(header_row: list) -> bool: + text = " ".join(_normalize_header(c) for c in header_row) + if not any(keyword in text for keyword in FORM_TABLE_KEYWORDS): + return False + # If it's clearly an affected-product table, don't treat it as a response/form table. + return not _is_strong_product_header(text) + + +def _is_product_table( + header_row: list, page_text: str, mapping: dict[str, int] | None = None +) -> bool: + header_text = " ".join(_normalize_header(c) for c in header_row) + page_lower = page_text.lower() + + if _is_form_table(header_row): + return False + + # Section numbering only (e.g. "3. affected products") — not a column header row. + normalized_headers = [_normalize_header(c) for c in header_row if _normalize_header(c)] + if normalized_headers and all( + re.match(r"^\d+\.\s", h) or h in ("affected products", "actions to be taken") + for h in normalized_headers + ): + return False + + if mapping is None: + mapping = _map_columns(header_row) + + # If headers map cleanly and look product-like, accept even if they contain unrelated columns. + if mapping and len(mapping) >= 2 and _is_strong_product_header(header_text): + return True + + if any(keyword in header_text for keyword in NON_PRODUCT_HEADER_KEYWORDS): + return False + + # Appendix-style tables (system code + commercial name) without section keywords. + if mapping and len(mapping) >= 2: + return True + + product_header_terms = ( + "catalog", + "model", + "product", + "udi", + "gtin", + "serial", + "lot", + "material", + "ref", + "part", + "device", + "batch", + "system", + "commercial", + ) + product_term_count = sum(1 for term in product_header_terms if term in header_text) + + if any(keyword in page_lower for keyword in PRODUCT_SECTION_KEYWORDS): + return product_term_count >= 1 + + return product_term_count >= 2 + + +def parse_affected_device_list(pdf_bytes: bytes) -> list[DeviceRow]: + table_devices: list[DeviceRow] = [] + all_lines: list[str] = [] + + with pdfplumber.open(io.BytesIO(pdf_bytes)) as pdf: + for page in pdf.pages: + text = page.extract_text() or "" + all_lines.extend(_normalize_lines(text)) + + for table in page.extract_tables() or []: + if not table or len(table) < 2: + continue + + header, data_start = _resolve_table_header(table) + mapping = _map_columns(header) + if not mapping: + continue + + if not _is_product_table(header, text, mapping=mapping): + continue + + for row in table[data_start:]: + device = _row_from_cells(row, mapping) + if device: + table_devices.append(device) + + summary, text_rows = _parse_text_content(all_lines) + paired_rows = _paired_rows_from_summary(summary) + + if paired_rows and not table_devices: + devices = paired_rows + elif table_devices: + devices = _enrich_table_devices_from_text(table_devices, summary, text_rows) + else: + devices = _devices_from_text_only(summary, text_rows) + + devices = [_sanitize_device_row(device) for device in devices] + return _expand_device_rows(devices) + + +_LABEL_RE = re.compile( + r"^\s*(?P