diff --git a/.env b/.env index f9cfe7040ab..1daacb33da3 100644 --- a/.env +++ b/.env @@ -31,7 +31,7 @@ APP_USER_PASSWORD=specify_user # https://discourse.specifysoftware.org/t/allow-support-login-documentation/2838 ALLOW_SUPPORT_LOGIN=false # The amount of time in seconds each token is valid for -SUPPORT_LOGIN_TTL = 180 +SUPPORT_LOGIN_TTL=180 # Make sure to set the `SECRET_KEY` to a unique value SECRET_KEY=change_this_to_some_unique_random_string @@ -60,7 +60,7 @@ CELERY_RESULT_BACKEND=redis://redis/1 # timezone as the operating system. # If running in a Windows environment this must be set to the same as your # system time zone. -TIME_ZONE = America/Chicago +TIME_ZONE=America/Chicago # This variable controls the Specify 7 logging level. Possible values # are: diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 2b7c70abcec..d323dbd825b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -27,7 +27,7 @@ If applicable, add screenshots to help explain your problem. **Crash Report** -If the bug resulted in an error message, please click on "Download Error Message" and attach it here. If there is no error, please follow [these instructions](https://discourse.specifysoftware.org/t/download-specify-7-system-information/1614) to download your System Information. +If the bug resulted in an error message, please click on "Download Error Message" and attach it here. If there is no error, please follow [these instructions](https://speciforum.org/t/download-specify-7-system-information/1614) to download your System Information. Please fill out the following information manually: - OS: [e.g. Windows 10] diff --git a/.github/pull-request-template.md b/.github/pull-request-template.md index 270a13effb3..f8ae7f5ce69 100644 --- a/.github/pull-request-template.md +++ b/.github/pull-request-template.md @@ -13,6 +13,8 @@ Fixes # - [ ] Add pr to documentation list - [ ] Add automated tests - [ ] Add a reverse migration if a migration is present in the PR +- [ ] Add migration function to https://github.com/specify/specify7/blob/ea04665987e1b8a1b76955c7b7f702b7bf701b47/specifyweb/specify/management/commands/run_key_migration_functions.py#L50 + ### Testing instructions diff --git a/.github/workflows/README.md b/.github/workflows/README.md index ca5de021704..aa8fd99d3e8 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -69,5 +69,17 @@ Documentation for used GitHub secrets. + + COVERAGE_SCRIPT_CLONE + Yes + + Github Deploy token linked to the [development repo](https://github.com/specify/specify-development) to allow actions to clone it. + + + + #8278 + + + diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 9d347bcfb44..09e0b727cce 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -12,6 +12,10 @@ name: 'CodeQL' on: + push: + branches: [ main ] + pull_request: + branches: [ main ] schedule: - cron: '18 23 * * 0' @@ -47,7 +51,7 @@ jobs: # Prefix the list here with "+" to use these queries and those in the config file. # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality + queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # If this step fails, then you should remove it and run the build manually (see below) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000000..7b358ba6250 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,168 @@ +name: Coverage + +on: + pull_request: + push: + workflow_dispatch: + +jobs: + # copied from test.yml + changes: + name: Check if back-end or front-end files changed + # Don't run this for pushes generated by push.yml on weblate-localization + # branch → prevents an infinite loop of actions triggering actions + # + # Also, "push" event is not triggered for forks, so need to listen for + # pull_requests, but only for external ones, so as not to run the action + # twice + if: | + (github.event_name == 'workflow_dispatch' || + (github.event.head_commit.committer.name != 'Hosted Weblate' && + github.event.head_commit.committer.name != 'github-actions')) + && + ( + github.event_name != 'pull_request' || + github.event.pull_request.head.repo.fork == true + ) + runs-on: ubuntu-latest + outputs: + backend_changed: ${{ steps.back-end-check.outputs.changed }} + frontend: ${{ steps.filter.outputs.frontend }} + frontend_changes: ${{ steps.filter.outputs.frontend_files }} + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Find all changed files + uses: dorny/paths-filter@v3 + id: filter + with: + base: ${{ github.ref }} + list-files: escape + filters: | + frontend: + - 'specifyweb/frontend/**' + backend: + - '**' + + - name: Check if any non-front-end files changed + id: back-end-check + run: | + changed_files=`echo "${{steps.filter.outputs.backend_files}}" | tr " " "\n" | grep -v 'specifyweb/frontend/' || echo ""` + echo "Changed back-end files: ${changed_files}" + echo "changed=$([[ -z "${changed_files}" ]] && echo "" || echo "1")" >> $GITHUB_OUTPUT + + setup-and-run: + needs: changes + if: | + (needs.changes.outputs.backend_changed || + needs.changes.outputs.frontend) || + github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + + + steps: + - name: Install needed packages + id: apt + run: | + sudo apt update + sudo apt install docker-compose-v2 openssh-client + + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Fetch coverage script + id: clone-coverage + run: | + eval "$(ssh-agent -s)" + ssh-add - <<< '${{ secrets.COVERAGE_SCRIPT_CLONE }}' + cd ~ + git clone git@github.com:specify/specify-development + sudo install -m 0777 -o "$USER" specify-development/scripts/tests/{run-coverage,test_coverage.py} /usr/bin/ + cd - + + - name: Configure specify + id: config-specify + run: | + cat > .env <<-EOS + DATABASE_HOST=mariadb + DATABASE_PORT=3306 + MYSQL_ROOT_PASSWORD=password + DATABASE_NAME=specify + + MASTER_NAME=root + MASTER_PASSWORD=password + MASTER_HOST=% + + MIGRATOR_NAME=root + MIGRATOR_PASSWORD=password + MIGRATOR_HOST=% + + APP_USER_NAME=root + APP_USER_PASSWORD=password + APP_HOST=% + + ALLOW_SUPPORT_LOGIN=false + SUPPORT_LOGIN_TTL=180 + + SECRET_KEY=change_this_to_some_unique_random_string + + ASSET_SERVER_URL=http://host.docker.internal/web_asset_store.xml + ASSET_SERVER_KEY=your_asset_server_access_key + REDIS_HOST=redis + REDIS_PORT=6379 + REDIS_DB_INDEX=0 + + REPORT_RUNNER_HOST=report-runner + REPORT_RUNNER_PORT=8080 + + CELERY_BROKER_URL=redis://redis/0 + CELERY_RESULT_BACKEND=redis://redis/1 + + TIME_ZONE=America/Chicago + + LOG_LEVEL=WARNING + + SP7_DEBUG=true + EOS + + sed -i 's/#[ ]*\(.*requirements-testing.txt\)/\1/; s/\(COPY\) \(requirements-testing.txt\)/\1 --chown=specify:specify \2/' Dockerfile + sed -i 's/\(\(DATABASE_\|MASTER_\|MIGRATOR\|APP_USER_\)[^O].*\) = \(.*\)/\1 = os.environ.get("\1", "")/' specifyweb/settings/specify_settings.py + for i in range {0..3}; do + sudo chmod a+x $(find . -type d) + sudo chmod -R a+rw . + done + docker compose up --build -d + + - name: Fix mariadb + id: reboot-mariadb + run: | + sleep 10 + docker compose up -d mariadb + sleep 10 + docker exec mariadb mariadb -uroot -ppassword -e"DROP USER root; + CREATE USER 'root'@'%' IDENTIFIED BY 'password'; + GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; + DROP DATABASE IF EXISTS specify;" + docker compose down + docker compose up -d + sleep 10 + + + - name: Run the script + id: run-coverage + run: run-coverage -t pj -a pj -d pj -o html,csv + + + - name: Upload report as artifact + uses: actions/upload-artifact@v7 + with: + name: coverage-report + path: ./report.tar.bz2 + archive: false + retention-days: 1 + + diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8781e186bcb..bb6ac20625d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -69,16 +69,14 @@ jobs: MIGRATOR_NAME: MasterUser MIGRATOR_PASSWORD: MasterPassword APP_USER_NAME: MasterUser - APP_USER_PASSWORD: MasterPassword - options: - --health-cmd="mariadb-admin ping" --health-interval=5s + APP_USER_PASSWORD: MasterPassword + options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3 redis: image: redis:latest ports: - 6379 - steps: - name: Checkout Copy of Repo uses: actions/checkout@v4 @@ -97,27 +95,6 @@ jobs: fetch-depth: 0 - - name: Get Specify 6 from cache - id: cache-specify6 - uses: actions/cache@v3 - with: - path: Specify6 - key: specify6.8.02-cache - - - name: Install Specify 6 - if: steps.cache-specify6.outputs.cache-hit != 'true' - run: | - wget https://update.specifysoftware.org/6802/Specify_unix_64.sh - sh Specify_unix_64.sh -q -dir ./Specify6 - - - name: - Patch Specify datamodel (Sam, you made the Attachment.origFilename too - long) - run: - sed -i 's/name="origFilename" - type="java.lang.String"/name="origFilename" type="text"/' - ./Specify6/config/specify_datamodel.xml - - name: Install ubuntu dependencies run: | sudo apt update @@ -139,7 +116,7 @@ jobs: - name: Create settings file run: | - echo "THICK_CLIENT_LOCATION = '${{ github.workspace }}/Specify6'" >> specifyweb/settings/local_specify_settings.py + echo "THICK_CLIENT_LOCATION = '${{ github.workspace }}'" >> specifyweb/settings/local_specify_settings.py echo "DATABASE_HOST = '127.0.0.1'" >> specifyweb/settings/local_specify_settings.py echo "DATABASE_PORT = ${{ job.services.mariadb.ports[3306] }}" >> specifyweb/settings/local_specify_settings.py echo "MASTER_NAME = 'MasterUser'" >> specifyweb/settings/local_specify_settings.py @@ -150,10 +127,9 @@ jobs: echo "APP_USER_PASSWORD = 'MasterPassword'" >> specifyweb/settings/local_specify_settings.py echo "REDIS_HOST = '127.0.0.1'" >> specifyweb/settings/local_specify_settings.py echo "REDIS_PORT = ${{ job.services.redis.ports[6379] }}" >> specifyweb/settings/local_specify_settings.py - + - name: Need these files to be present - run: - make specifyweb/settings/build_version.py + run: make specifyweb/settings/build_version.py specifyweb/settings/secret_key.py - name: Verify MariaDB connection @@ -163,7 +139,7 @@ jobs: while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do sleep 1 done - + - name: Run Mypy type checker run: VIRTUAL_ENV=./ve make typecheck @@ -195,7 +171,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version-file: specifyweb/frontend/js_src/package.json - cache: 'npm' + cache: "npm" cache-dependency-path: specifyweb/frontend/js_src/package-lock.json - name: Build frontend @@ -214,8 +190,7 @@ jobs: - name: Clone branch that stores localization strings # Listen for changes to production branch - if: - github.ref == format('refs/heads/{0}', + if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) id: weblate uses: actions/checkout@v3 @@ -230,8 +205,7 @@ jobs: npm run localizationTests -- --emit ../../../weblate-localization/strings - name: Sync localization strings with Weblate (only on production branch) - if: - github.ref == format('refs/heads/{0}', + if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) working-directory: weblate-localization run: | @@ -297,8 +271,7 @@ jobs: # - This would have already run on the feature branch by the time code # is pushed into production. # - There shouldn't be many direct pushes to production anyway - if: - github.ref != format('refs/heads/{0}', + if: github.ref != format('refs/heads/{0}', github.event.repository.default_branch) working-directory: specifyweb/frontend/js_src run: | @@ -337,4 +310,87 @@ jobs: -m 'Lint code with ESLint and Prettier' \ -m "Triggered by ${{ github.sha }} on branch ${{ github.ref }}" git push - fi \ No newline at end of file + fi + + eol-check: + name: Check dependency EOL + runs-on: ubuntu-latest + continue-on-error: true + timeout-minutes: 10 + + if: github.event_name == 'pull_request' + + permissions: + pull-requests: write + contents: read + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests + + - name: Run EOL check and comment + uses: actions/github-script@v7 + with: + script: | + const { execSync } = require('child_process'); + + const output = execSync('python -m scripts.eol.check_eol 2>&1 || true', { + encoding: 'utf-8', + cwd: process.env.GITHUB_WORKSPACE + }); + + console.log(output); + + // Only post a comment if there are warnings + if (!output.includes('STATUS=WARNING')) { + console.log('No EOL warnings — skipping comment'); + return; + } + + const marker = ''; + + const body = + marker + '\n' + + '> [!WARNING]\n' + + '> One or more dependencies are approaching or past End-of-Life.\n' + + '> Please plan upgrades accordingly.\n' + + '\n' + + '```text\n' + + output.replace(/```/g, '``\\`') + + '\n```'; + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + const existingComment = comments.find(comment => + comment.user.type === 'Bot' && + comment.body.includes(marker) + ); + + if (existingComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existingComment.id, + body + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body + }); + } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index bd3bb051fff..d290c1323b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,89 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [7.12.1](https://github.com/specify/specify7/compare/v7.12.0.7...v7.12.1) (28 August 2026) + +### Added + +- The Bulk Attachment Uploader supports a new **"match by mapping file"** option for attachment uploads ([#8311](https://github.com/specify/specify7/pull/8311) - *Requested by University of Michigan, University of Kansas, Queensland Herbarium, Muséum d'histoire naturelle Geneva, The University of Texas at Austin, and many others*) +- All-new **Batch Identify** tool, enabling users to create and assign a new Determination to a batch of Collection Objects at once ([#7769](https://github.com/specify/specify7/pull/7769) - *Requested by University of Kansas and many others* ) +- New visual editor for configuring **Express Search** ([#7976](https://github.com/specify/specify7/pull/7976)) +- The Query Builder now has dramatically **improved row density** and added **column resizing** ([#7908](https://github.com/specify/specify7/pull/7908)) +- Query Builder can now search on **taxon synonyms** ([#5137](https://github.com/specify/specify7/pull/5137)) +- **Catalog number ranges** are now supported when using the "In" filter in Query Builder ([#7814](https://github.com/specify/specify7/pull/7814)) +- **Export to Web Portal** has been added to the Query Builder ([#7994](https://github.com/specify/specify7/pull/7994)) +- **Attachments can now be added to an existing rows** in WorkBench data sets with attachments ([#7068](https://github.com/specify/specify7/pull/7068)) +- Major **WorkBench** & **Batch Edit** user interface improvements ([#8165](https://github.com/specify/specify7/pull/8165)) + - "Upload Plan" has been renamed "Mapping" + - Validation and Upload dialogs now show a breakdown of the record counts + - The "Import/Export Mapping" dialog now properly validates the JSON file defining the mapping. It disallows invalid JSON. + - Added a new button to "Choose Existing Mapping" when creating a new data set from scratch. + - Warns before clearing mappings to prevent accidental loss of progress. + - Added helper texts to various places to provide better guidance on WorkBench-specific terminology and features. + - Added a link to the documentation on the Speciforum. + - Fixed an issue with table icon appearance in Firefox. +- A new **biostratigraphy filter** has been added to the Chronostratigraphy tree ([#8257](https://github.com/specify/specify7/pull/8257)) +- A **Close button** has been added to App Resources ([#8137](https://github.com/specify/specify7/pull/8137)) +- WorkBench supports a **new "Pick first" disambiguation option** to arbitrarily choose a record to match to ([#8054](https://github.com/specify/specify7/pull/8054)) +- **HEIC/HEIF thumbnail support** for attachments ([#8247](https://github.com/specify/specify7/pull/8247)) +- New command-line tool to sync schema configuration ([#7689](https://github.com/specify/specify7/pull/7689)) +- A notification will now be shown while a new collection is being created using System Config ([#7827](https://github.com/specify/specify7/pull/7827)) +- Support for Norwegian Bokmål and Croatian in the interface ([#7958](https://github.com/specify/specify7/pull/7958), [#7819](https://github.com/specify/specify7/pull/7819)) +- The "Show Interactions" button in Preparations now shows **all interactions** associated with the preparation, not just loans and gifts ([#6110](https://github.com/specify/specify7/pull/6110)) +- The Chronostratigraphy tree is now **sorted by period instead of name**, and **displays date ranges** ([#8254](https://github.com/specify/specify7/pull/8254)) + + +### Changed +- Merging tree nodes has been made substantially faster across all trees ([#8031](https://github.com/specify/specify7/pull/8031)) +- New disciplines can now be deleted once they have no users or collections attached ([#7812](https://github.com/specify/specify7/pull/7812)) +- Added better schema field descriptions throughout the app ([#8075](https://github.com/specify/specify7/pull/8075)) +- Attachment ordering now uses an explicit ordinal value ([#8017](https://github.com/specify/specify7/pull/8017) - *Reported by Natural History Museum of Denmark*) +- Data model list is now sorted alphabetically ([#8139](https://github.com/specify/specify7/pull/8139)) +- Boolean form fields now correctly respect a `false` default value ([#7930](https://github.com/specify/specify7/pull/7930) - *Requested by Muséum d'histoire naturelle Geneva and California Academy of Sciences*) +- The WorkBench now preserves the mapped `createdByAgent` value ([#7931](https://github.com/specify/specify7/pull/7931) - *Requested by California Academy of Sciences, Commonwealth Scientific and Industrial Research Organisation, and others*) +- Updated the About dialog to add new members and update license mention to GLPv3 ([#8279](https://github.com/specify/specify7/pull/8279)) + +### Fixed +- Fixed query field order not being preserved during Batch Edit ([#8023](https://github.com/specify/specify7/pull/8023) - *Reported by Cornell University Insect Collection, University of Michigan, University of Kansas, and many others*) +- Custom view definitions for Attachment are now respected ([#7811](https://github.com/specify/specify7/pull/7811) - *Reported by Natural History Museum of Denmark, University of Kansas, Queensland Herbarium, and Muséum d'histoire naturelle Geneva*) +- Fixed resolved loans incorrectly blocking preparation count updates ([#7829](https://github.com/specify/specify7/pull/7829) - *Reported by South African Institute for Aquatic Biodiversity, Florida Fish and Wildlife, and Virginia Institute of Marine Science*) +- Fixed an issue where WorkBench and Batch Edit checks transfer permissions for both types of data sets ([#7834](https://github.com/specify/specify7/pull/7834) - *Reported by Royal Botanic Garden Edinburgh*) +- Fixed a crash that could occur when checking WorkBench attachment columns ([#7420](https://github.com/specify/specify7/pull/7420)) +- Fixed the "Preparation count cannot be negative" warning appearing repeatedly ([#7595](https://github.com/specify/specify7/pull/7595)) +- Removed duplicate "no preparation" warning ([#7902](https://github.com/specify/specify7/pull/7902)) +- Fixed the error message shown when deleting tree ranks that still have associated nodes ([#5029](https://github.com/specify/specify7/pull/5029)) +- Fixed an issue where setting an agent across collections in different divisions caused issues in Security & Accounts ([#7802](https://github.com/specify/specify7/pull/7802) - *Reported by Natural History Museum of Denmark*) +- Fixed the Chronostratigraphy tree name not appearing correctly in new disciplines ([#7824](https://github.com/specify/specify7/pull/7824)) +- Fixed formatted fields to trim leading zeros while preserving decimal digits ([#7809](https://github.com/specify/specify7/pull/7809)) +- Removed a non-functional "Add" button from `SpAppResource`'s collection preferences ([#7684](https://github.com/specify/specify7/pull/7684)) +- Bad requests to Specify Network are now handled gracefully instead of erroring ([#7951](https://github.com/specify/specify7/pull/7951)) +- Fixed an issue that caused invalid results to appear when using express search ([#7911](https://github.com/specify/specify7/pull/7911) - *Reported by Pioneer Trails Regional Museum and The Ohio State University Museum of Biological Diversity) +- Fixed autocomplete fields requiring a double click due to a blur/mousedown race condition ([#8011](https://github.com/specify/specify7/pull/8011)) +- Removed the limit on the number of record sets shown in the search dialog ([#7916](https://github.com/specify/specify7/pull/7916)) +- Fixed leading zeros being suppressed in Collection Object Catalog Numbers during data entry ([#8027](https://github.com/specify/specify7/pull/8027)) +- Fixed Query Builder crashes on Projects relationship queries ([#8087](https://github.com/specify/specify7/pull/8087)) +- Fixed miscellaneous console errors on the Collection Object form page ([#7907](https://github.com/specify/specify7/pull/7907)) +- Fixed WorkBench export using the wrong file extension for the selected delimiter ([#8051](https://github.com/specify/specify7/pull/8051)) +- Fixed `latitude2` not converting to `lat2text` in the WorkBench ([#8100](https://github.com/specify/specify7/pull/8100)) +- Fixed deleting attachments via the API alone ([#8073](https://github.com/specify/specify7/pull/8073)) +- Corrected "meta data" to "metadata" as one word ([#8135](https://github.com/specify/specify7/pull/8135)) +- Fixed the WorkBench column header sort toggle ([#8123](https://github.com/specify/specify7/pull/8123)) +- Fixed Query Builder CSV exports not respecting the applied sort order ([#8168](https://github.com/specify/specify7/pull/8168)) +- Fixed Accession Collection Object subview searches with multiple catalog numbers returning only the last number ([#8226](https://github.com/specify/specify7/pull/8226)) +- Fixed formatted Collection Object query results for nested relationship fields ([#7969](https://github.com/specify/specify7/pull/7969)) +- Fixed tree expand/collapse state syncing with the URL cache ([#8263](https://github.com/specify/specify7/pull/8263)) +- Fixed Record Sets created from queries so they can themselves be filtered by Record Set ([#8339](https://github.com/specify/specify7/pull/8339)) +- Fixed sort order not being preserved in exported CSVs ([#8394](https://github.com/specify/specify7/pull/8394)) +- Fixed duplicate roles being created when a role's description was edited ([#8391](https://github.com/specify/specify7/pull/8391)) + +### Internal + +- **Dependency upgrades:** flatted, lodash, fast-xml-parser, Django (4.2.27 → 4.2.30), react-router-dom, minimatch (transitive), Jest toolchain (28.1 → 30.3), underscore, handsontable, PyJWT, ([#7890](https://github.com/specify/specify7/pull/7890), [#7892](https://github.com/specify/specify7/pull/7892), [#7899](https://github.com/specify/specify7/pull/7899), [#7886](https://github.com/specify/specify7/pull/7886), [#7895](https://github.com/specify/specify7/pull/7895), [#7917](https://github.com/specify/specify7/pull/7917), [#7914](https://github.com/specify/specify7/pull/7914), [#7947](https://github.com/specify/specify7/pull/7947), [#7944](https://github.com/specify/specify7/pull/7944), [#7920](https://github.com/specify/specify7/pull/7920), [#7888](https://github.com/specify/specify7/pull/7888), [#7997](https://github.com/specify/specify7/pull/7997), [#8332](https://github.com/specify/specify7/pull/8332)) +- **CI/tooling:** enabled CodeQL on push/PR, added a code-coverage measurement action, added a Django end-of-life checker script, added missing test requirements ([#8092](https://github.com/specify/specify7/pull/8092), [#8278](https://github.com/specify/specify7/pull/8278), [#8068](https://github.com/specify/specify7/pull/8068), [#8280](https://github.com/specify/specify7/pull/8280), [#8377](https://github.com/specify/specify7/pull/8377), [#8229](https://github.com/specify/specify7/pull/8229)) +- **Added indexes to Django models** and migration files; added a missing migration for `SpecifyUser.spprincipals` ([#7568](https://github.com/specify/specify7/pull/7568), [#8237](https://github.com/specify/specify7/pull/8237)) +- **Automatic test coverage added** across the Query Builder operators, permits, WorkBench uploads/exports, attachments, and more. ([#8235](https://github.com/specify/specify7/pull/8235), [#8258](https://github.com/specify/specify7/pull/8258), [#8259](https://github.com/specify/specify7/pull/8259), [#8260](https://github.com/specify/specify7/pull/8260), [#8273](https://github.com/specify/specify7/pull/8273), [#8274](https://github.com/specify/specify7/pull/8274), [#8277](https://github.com/specify/specify7/pull/8277), [#8281](https://github.com/specify/specify7/pull/8281), [#8283](https://github.com/specify/specify7/pull/8283), [#8290](https://github.com/specify/specify7/pull/8290), [#8292](https://github.com/specify/specify7/pull/8292), [#8294](https://github.com/specify/specify7/pull/8294), [#8296](https://github.com/specify/specify7/pull/8296), [#8301](https://github.com/specify/specify7/pull/8301), [#8304](https://github.com/specify/specify7/pull/8304), [#8309](https://github.com/specify/specify7/pull/8309), [#8316](https://github.com/specify/specify7/pull/8316), [#8319](https://github.com/specify/specify7/pull/8319), [#8321](https://github.com/specify/specify7/pull/8321), [#8327](https://github.com/specify/specify7/pull/8327), [#8335](https://github.com/specify/specify7/pull/8335), [#8337](https://github.com/specify/specify7/pull/8337), [#8341](https://github.com/specify/specify7/pull/8341), [#8342](https://github.com/specify/specify7/pull/8342), [#8344](https://github.com/specify/specify7/pull/8344), [#8346](https://github.com/specify/specify7/pull/8346), [#8352](https://github.com/specify/specify7/pull/8352), [#8353](https://github.com/specify/specify7/pull/8353), [#8354](https://github.com/specify/specify7/pull/8354), [#8367](https://github.com/specify/specify7/pull/8367), [#8368](https://github.com/specify/specify7/pull/8368), [#8380](https://github.com/specify/specify7/pull/8380), [#8383](https://github.com/specify/specify7/pull/8383), [#8389](https://github.com/specify/specify7/pull/8389)) +- **Documented API schemas** for `download_all` and `series_autonumber_range` ([#7815](https://github.com/specify/specify7/pull/7815)) + ## [7.12.0.7](https://github.com/specify/specify7/compare/v7.12.0.6...v7.12.0.7) (28 July 2026) ### Updated @@ -182,7 +265,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). * The 'Ends With" operator to the Query Builder ([#7076](https://github.com/specify/specify7/pull/7076)) * Support for viewing `TIFF` image thumbnails ([#7121](https://github.com/specify/specify7/pull/7121)) * A user preference for showing or hiding subview borders ([#7041](https://github.com/specify/specify7/pull/7041)) -* A new [database backup utility](https://discourse.specifysoftware.org/t/how-to-create-a-full-database-backup-in-specify/2798) ([#7300](https://github.com/spcify/specify7/pull/7300)) +* A new [database backup utility](https://speciforum.org/t/how-to-create-a-full-database-backup-in-specify/2798) ([#7300](https://github.com/spcify/specify7/pull/7300)) * Support for time in timestamp fields (`TimestampCreated` and `TimestampModified`) ([#7317](https://github.com/specify/specify7/pull/7317)) * Feat(datamodel): Add agent fields to Loan and Gift ([#7190](https://github.com/specify/specify7/pull/7190)) * A “Linked Records” button to all data forms ([#6328](https://github.com/specify/specify7/pull/6328)) @@ -212,7 +295,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). * Fixes an issue preventing the Catalog Number field from displaying the format selector when accessing it via a related table ([#6994](https://github.com/specify/specify7/pull/6994)) * Fixes an issue where new Taxon trees used `, ` as a separator instead of ` ` ([#7285](https://github.com/specify/specify7/pull/7285)) * Fixes an issue that did not prompt the user to save when toggling `Distinct` or `Series` in the Query Builder ([#6605](https://github.com/specify/specify7/pull/6605)) -* Fixes an issue where a new record would not be created when [independent](https://discourse.specifysoftware.org/t/dependent-vs-independent-relationships/2635) relationship fields are cleared in Batch Edit ([#7087](https://github.com/specify/specify7/pull/7087)) +* Fixes an issue where a new record would not be created when [independent](https://speciforum.org/t/dependent-vs-independent-relationships/2635) relationship fields are cleared in Batch Edit ([#7087](https://github.com/specify/specify7/pull/7087)) * Fixes an issue causing “Deselect All” to remove even required Carry Forward fields ([#7286](https://github.com/specify/specify7/pull/7286)) * Fixes an issue with the position and appearance of the configure item and table list ([#7062](https://github.com/specify/specify7/pull/7062)) * Fixes an issue where white space was not preserved when modifying `textBefore` and `textAfter` for tree ranks ([#7332](https://github.com/specify/specify7/pull/7332)) @@ -282,7 +365,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [7.11.0](https://github.com/specify/specify7/compare/v7.10.2.3...v7.11.0) (8 July 2025) ### Added -* Extends **[Batch Edit](https://discourse.specifysoftware.org/t/batch-edit/2248/)** to support relationships +* Extends **[Batch Edit](https://speciforum.org/t/batch-edit/2248/)** to support relationships * Supports the following: * to-one and to-many relationships * matching existing records @@ -382,9 +465,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Added -- **[Batch Editing](https://discourse.specifysoftware.org/t/batch-edit/2248)** for simple fields ([#5417](https://github.com/specify/specify7/pull/5417) – _Requested by many, many members_) -- [**Added a 'Download' button** to record set and query results attachments](https://discourse.specifysoftware.org/t/bulk-download-attachments-from-a-query-result-or-record-set/2456) ([#6052](https://github.com/specify/specify7/pull/6052) – _Requested by The University of Michigan, Naturhistorisches Museum Bern, Beaty Biodiversity Museum, Agriculture and Agri-Food Canada, Muséum d'Histoire Naturelle Geneva, and Queensland Herbarium_) -- The [Form Meta menu](https://discourse.specifysoftware.org/t/form-meta-menu/844) is now accessible when using "View in Forms" ([#5416](https://github.com/specify/specify7/pull/5416)) +- **[Batch Editing](https://speciforum.org/t/batch-edit/2248)** for simple fields ([#5417](https://github.com/specify/specify7/pull/5417) – _Requested by many, many members_) +- [**Added a 'Download' button** to record set and query results attachments](https://speciforum.org/t/bulk-download-attachments-from-a-query-result-or-record-set/2456) ([#6052](https://github.com/specify/specify7/pull/6052) – _Requested by The University of Michigan, Naturhistorisches Museum Bern, Beaty Biodiversity Museum, Agriculture and Agri-Food Canada, Muséum d'Histoire Naturelle Geneva, and Queensland Herbarium_) +- The [Form Meta menu](https://speciforum.org/t/form-meta-menu/844) is now accessible when using "View in Forms" ([#5416](https://github.com/specify/specify7/pull/5416)) - A default value can now be used for a query combo box ([#6037]([https://github.com/specify/specify7/pull/6037]) – _Requested by South African Institute for Aquatic Biodiversity and The Ohio State University Mollusk Division_) - Adds tooltip for required fields in bulk carry forward config ([#6202](https://github.com/specify/specify7/pull/6202)) - Specify will use the default `TypeSearches` when a custom one is not defined for a table ([#6236](https://github.com/specify/specify7/pull/6236)) @@ -515,14 +598,14 @@ This release of Specify 7 now falls under the [GPL-3.0 license](https://github.c ### Added -- Added a **[tree rank editor](https://discourse.specifysoftware.org/t/editing-tree-definitions-ranks-in-specify-7/1783)** to add, edit, and remove tree ranks ([#4257](https://github.com/specify/specify7/pull/4257) – _Requested by University of Kansas, The University of Michigan, Commonwealth Scientific and Industrial Research Organisation, Natural Resources Canada, College of Idaho, New Mexico State Herbarium, and many others_) -- **[Extended record merging](https://discourse.specifysoftware.org/t/record-merging/1324#record-merging-1)** to several new tables ([#4606](https://github.com/specify/specify7/pull/4606) – _Requested by Calvert Marine Museum, Commonwealth Scientific and Industrial Research Organisation, Royal Botanic Garden Edinburgh, and many more_) +- Added a **[tree rank editor](https://speciforum.org/t/editing-tree-definitions-ranks-in-specify-7/1783)** to add, edit, and remove tree ranks ([#4257](https://github.com/specify/specify7/pull/4257) – _Requested by University of Kansas, The University of Michigan, Commonwealth Scientific and Industrial Research Organisation, Natural Resources Canada, College of Idaho, New Mexico State Herbarium, and many others_) +- **[Extended record merging](https://speciforum.org/t/record-merging/1324#record-merging-1)** to several new tables ([#4606](https://github.com/specify/specify7/pull/4606) – _Requested by Calvert Marine Museum, Commonwealth Scientific and Industrial Research Organisation, Royal Botanic Garden Edinburgh, and many more_) - Locality - Paleo Context - Collecting Event -- Added a new tool to [**bulk update Locality and Geo Coord Details records**](https://discourse.specifysoftware.org/t/locality-update-tool/1784) that were georeferenced in external applications such as [CoGe](https://coge.geo-locate.org/About.htm) ([#4548](https://github.com/specify/specify7/pull/4548) – _Requested by Specify users in the DigIn TCN, formalized by Dean Pentcheff and Nelson Rios_) -- Added a new tool to **[bulk move preparations](https://discourse.specifysoftware.org/t/trees-in-specify-7/534/7?u=specify)** from one storage location to another ([#4682](https://github.com/specify/specify7/pull/4682) – _Requested by University of Kansas_) -- Added **[Deaccessions](https://discourse.specifysoftware.org/t/interactions-in-specify/961#deaccessions-16)** to the Interactions list ([#4806](https://github.com/specify/specify7/pull/4806)) +- Added a new tool to [**bulk update Locality and Geo Coord Details records**](https://speciforum.org/t/locality-update-tool/1784) that were georeferenced in external applications such as [CoGe](https://coge.geo-locate.org/About.htm) ([#4548](https://github.com/specify/specify7/pull/4548) – _Requested by Specify users in the DigIn TCN, formalized by Dean Pentcheff and Nelson Rios_) +- Added a new tool to **[bulk move preparations](https://speciforum.org/t/trees-in-specify-7/534/7?u=specify)** from one storage location to another ([#4682](https://github.com/specify/specify7/pull/4682) – _Requested by University of Kansas_) +- Added **[Deaccessions](https://speciforum.org/t/interactions-in-specify/961#deaccessions-16)** to the Interactions list ([#4806](https://github.com/specify/specify7/pull/4806)) - The name of the accepted node will now show when hovering over a synonymized node ([#4704](https://github.com/specify/specify7/pull/4704) – _Requested by University of Kansas_) - Table aggregations can now be chosen explicitly in the Query Builder ([#4646](https://github.com/specify/specify7/pull/4646)) - Calculated fields for the total number of preparations and total items in Exchange Outs, Disposals, Gifts, and Deaccessions have been added ([#4824](https://github.com/specify/specify7/pull/4824) – _Requested by Royal Botanic Garden Edinburgh, Pioneer Trails Regional Museum, The University of Michigan, and Museu de Ciències Naturals de Barcelona_) @@ -571,13 +654,13 @@ Workbench functionalities remain unchanged but this release helps improve intern - **Added a visual editor for some app resources** ([#2796](https://github.com/specify/specify7/pull/2796)) - The initial release supports - - [Form Definitions](https://discourse.specifysoftware.org/t/editing-forms-in-specify-7/1557) - - [Table Formats](https://discourse.specifysoftware.org/t/editing-table-formats-and-aggregations-in-specify-7/1558) - - [Table Aggregation](https://discourse.specifysoftware.org/t/editing-table-formats-and-aggregations-in-specify-7/1558) + - [Form Definitions](https://speciforum.org/t/editing-forms-in-specify-7/1557) + - [Table Formats](https://speciforum.org/t/editing-table-formats-and-aggregations-in-specify-7/1558) + - [Table Aggregation](https://speciforum.org/t/editing-table-formats-and-aggregations-in-specify-7/1558) - Visual editors for additional app resources will be added in the future. - Enforce uniqueness requirements for name ([#4164](https://github.com/specify/specify7/pull/4164)) - Added query combo box for Specify Users in Export Feed ([#4345](https://github.com/specify/specify7/pull/4345)) - - Added support for [conditional forms](https://discourse.specifysoftware.org/t/editing-forms-in-specify-7/1557#conditional-rendering-22) + - Added support for [conditional forms](https://speciforum.org/t/editing-forms-in-specify-7/1557#conditional-rendering-22) - Added a preview for web links, table formats, and table aggregations ([#4343](https://github.com/specify/specify7/pull/4343)) - Added numerous improvements to distinct queries ([#4596](https://github.com/specify/specify7/pull/4596) – _Requested by University of Kansas, University of Michigan, Commonwealth Scientific and Industrial Research Organisation_) - Added links to records in distinct queries where all columns returned are the same @@ -651,14 +734,14 @@ This release fixes an issue that could cause an error when viewing an Accession - **Batch Attachment Upload** ([#3539](https://github.com/specify/specify7/pull/3539)) _– Requested by University of Michigan, Commonwealth Scientific and Industrial Research Organisation, and many others_ - This tool enables users to import attachments in bulk by matching the filenames of the uploaded attachments with identifiers for existing records! - - [User Documentation](https://discourse.specifysoftware.org/t/batch-attachment-uploader/1374) + - [User Documentation](https://speciforum.org/t/batch-attachment-uploader/1374) - **Add configurable uniqueness rules** ([#2712](https://github.com/specify/specify7/issues/2712)) – _Requested by Commonwealth Scientific and Industrial Research Organisation, University of Michigan, New Mexico State Herbarium, New Brunswick Museum, Natural History Museum Geneva_ - - The [Schema Config](https://discourse.specifysoftware.org/t/using-the-schema-config-in-specify-7/535) now allows configuration of Uniqueness Rules. + - The [Schema Config](https://speciforum.org/t/using-the-schema-config-in-specify-7/535) now allows configuration of Uniqueness Rules. - Each rule consists of two groups: 'fields' and 'scope'. - 'Fields' represent the values that must be unique within a specific scope. - For example, in the Collection Object, the `catalogNumber` field has a unique rule within the scope of the `Collection`. This ensures that each collection must have a unique catalog number. - - [User Documentation](https://discourse.specifysoftware.org/t/wip-configuring-uniqueness-rules/1487) + - [User Documentation](https://speciforum.org/t/wip-configuring-uniqueness-rules/1487) ### Changed @@ -707,7 +790,7 @@ This release fixes an issue that could cause an error when viewing an Accession ### Added - Added an "Attachment Gallery" for records with more than one attachment ([#3624](https://github.com/specify/specify7/pull/3624)) -- Added an all-new "[Tree Split Viewer](https://discourse.specifysoftware.org/t/trees-in-specify-7/534#split-tree-viewer-split_-11)", supporting both horizontal and vertical splits, syncing, and more ([#3969](https://github.com/specify/specify7/pull/3969) – _Requested by RBGE, UT Austin, and others_) +- Added an all-new "[Tree Split Viewer](https://speciforum.org/t/trees-in-specify-7/534#split-tree-viewer-split_-11)", supporting both horizontal and vertical splits, syncing, and more ([#3969](https://github.com/specify/specify7/pull/3969) – _Requested by RBGE, UT Austin, and others_) - This helps with performing synonymy, moves and merging nodes in large trees - New icons for tree actions and customization have been added - Made full name updates on tree changes more efficient ([#3175](https://github.com/specify/specify7/pull/3175)) @@ -748,12 +831,12 @@ This release fixes an issue that could cause an error when viewing an Accession ## [7.9.0](https://github.com/specify/specify7/compare/v7.8.13...v7.9.0) (25 September 2023) -Specify 7.9 is a major update, introducing the new **Statistics Page**, **Agent Merging**, **Basic Query View**, and numerous behind the scenes improvements and bug fixes. [Learn more](https://discourse.specifysoftware.org/t/specify-7-9-release-announcement/1308). +Specify 7.9 is a major update, introducing the new **Statistics Page**, **Agent Merging**, **Basic Query View**, and numerous behind the scenes improvements and bug fixes. [Learn more](https://speciforum.org/t/specify-7-9-release-announcement/1308). ### Added -- [Statistics page](https://discourse.specifysoftware.org/t/statistics-panel-for-specify-7/828) ([#501](https://github.com/specify/specify7/issues/501), [#3760](https://github.com/specify/specify7/issues/3760), [#3662](https://github.com/specify/specify7/issues/3662), [#3687](https://github.com/specify/specify7/issues/3687), [#3722](https://github.com/specify/specify7/issues/3722), [#3670](https://github.com/specify/specify7/issues/3670) _– Requested by CSIRO, CSIC, NHMD, SDSU, The University of Michigan, TERN, KU, Muséum d'histoire naturelle Genève, Cleveland Museum, and many others_) -- [Agent merging](https://discourse.specifysoftware.org/t/record-merging-in-specify-7/939/9) ([#3864](https://github.com/specify/specify7/pull/3864), [#3887](https://github.com/specify/specify7/issues/3887), [#3832](https://github.com/specify/specify7/pull/3832), [#3818](https://github.com/specify/specify7/pull/3818), [#3894](https://github.com/specify/specify7/pull/3894), [#3855](https://github.com/specify/specify7/pull/3855), [#3846](https://github.com/specify/specify7/pull/3846), [#3822](https://github.com/specify/specify7/issues/3822), [#3818](https://github.com/specify/specify7/pull/3818), [#3842](https://github.com/specify/specify7/pull/3842), [#3838](https://github.com/specify/specify7/pull/3838), [#3825](https://github.com/specify/specify7/pull/3825), [#3809](https://github.com/specify/specify7/pull/3809), [#3474](https://github.com/specify/specify7/pull/3474) _– Requested by RBGE, AAFC-AAC, CSIRO, CSIC, The University of Michigan, and many others_) +- [Statistics page](https://speciforum.org/t/statistics-panel-for-specify-7/828) ([#501](https://github.com/specify/specify7/issues/501), [#3760](https://github.com/specify/specify7/issues/3760), [#3662](https://github.com/specify/specify7/issues/3662), [#3687](https://github.com/specify/specify7/issues/3687), [#3722](https://github.com/specify/specify7/issues/3722), [#3670](https://github.com/specify/specify7/issues/3670) _– Requested by CSIRO, CSIC, NHMD, SDSU, The University of Michigan, TERN, KU, Muséum d'histoire naturelle Genève, Cleveland Museum, and many others_) +- [Agent merging](https://speciforum.org/t/record-merging-in-specify-7/939/9) ([#3864](https://github.com/specify/specify7/pull/3864), [#3887](https://github.com/specify/specify7/issues/3887), [#3832](https://github.com/specify/specify7/pull/3832), [#3818](https://github.com/specify/specify7/pull/3818), [#3894](https://github.com/specify/specify7/pull/3894), [#3855](https://github.com/specify/specify7/pull/3855), [#3846](https://github.com/specify/specify7/pull/3846), [#3822](https://github.com/specify/specify7/issues/3822), [#3818](https://github.com/specify/specify7/pull/3818), [#3842](https://github.com/specify/specify7/pull/3842), [#3838](https://github.com/specify/specify7/pull/3838), [#3825](https://github.com/specify/specify7/pull/3825), [#3809](https://github.com/specify/specify7/pull/3809), [#3474](https://github.com/specify/specify7/pull/3474) _– Requested by RBGE, AAFC-AAC, CSIRO, CSIC, The University of Michigan, and many others_) - Simple query interface ([#2479](https://github.com/specify/specify7/issues/2479) _– Requested by Muséum d'histoire naturelle Genève_) - The field mapper can now be hidden in query dialogs ([#3745](https://github.com/specify/specify7/issues/3745)) - The Specify logo now reflects the custom color chosen in User Preferences ([#2210](https://github.com/specify/specify7/issues/2210)) @@ -856,7 +939,7 @@ Specify 7.9 is a major update, introducing the new **Statistics Page**, **Agent - Records are now navigable using a paginator after creating new records in the same data entry session ([#511](https://github.com/specify/specify7/issues/511) – _Requested by many users_) - A new attachment picker has been added for choosing attachments stored on the asset server ([#2999](https://github.com/specify/specify7/issues/2999)) -- German (Switzerland) has been added to our localization platform, [Weblate](https://discourse.specifysoftware.org/t/get-started-with-specify-7-localization/956/5) ([#3455](https://github.com/specify/specify7/pull/3455) – _Requested by NMBE_) +- German (Switzerland) has been added to our localization platform, [Weblate](https://speciforum.org/t/get-started-with-specify-7-localization/956/5) ([#3455](https://github.com/specify/specify7/pull/3455) – _Requested by NMBE_) ### Changed @@ -1025,7 +1108,7 @@ Specify 7.9 is a major update, introducing the new **Statistics Page**, **Agent - Top menu has been redesigned. It looks better, takes less space and offers more customization options - you can change menu position, or order of menu - items. [More details](https://discourse.specifysoftware.org/t/seeking-feedback-new-vertical-navigation-menu/970) ([#2820](https://github.com/specify/specify7/issues/2820)) + items. [More details](https://speciforum.org/t/seeking-feedback-new-vertical-navigation-menu/970) ([#2820](https://github.com/specify/specify7/issues/2820)) - Instead of using default browser tooltips, Specify now displays modern tooltips - they are easier to read thanks to larger font-size and are easier to trigger. Plus, they even work on touch screen devices and you can @@ -1098,7 +1181,7 @@ Specify 7.9 is a major update, introducing the new **Statistics Page**, **Agent - Spanish localization has been improved - thanks to [@gallegonovato](https://github.com/gallegonovato) ([commits](https://github.com/specify/specify7/commits?author=gallegonovato)). If you would like to contribute too, - please [see the instructions](https://discourse.specifysoftware.org/t/get-started-with-specify-7-localization/956) + please [see the instructions](https://speciforum.org/t/get-started-with-specify-7-localization/956) - To be more security conscious, Specify 7 source code is now regularly scanned by GitHub's CodeQL tool, which is designed to find security vulnerabilities ([commit](https://github.com/specify/specify7/commit/9465b9e0972fcc7b03cfa1aadf50cc1a20749ee9)) @@ -1146,7 +1229,7 @@ Specify 7.9 is a major update, introducing the new **Statistics Page**, **Agent - A new preference has been added allowing users to add children to synonymized parents as well as synonymizing nodes with children ([#751](https://github.com/specify/specify7/issues/751) - – [Instructions](https://discourse.specifysoftware.org/t/enable-creating-children-for-synonymized-nodes/987/4) – + – [Instructions](https://speciforum.org/t/enable-creating-children-for-synonymized-nodes/987/4) – _Requested by FWRI, CSIRO, AAFC, RBGE, Ville de Genève, and more_) - Added a Specify crash report visualizer. The tool is mostly for internal use, but can be helpful for system administrators. See @@ -1211,7 +1294,7 @@ Specify's UI to support Spanish, French, Ukranian, and many more languages. If you are interested in helping support our localization effort, please see our guide -on \* \*[Getting Started with Specify 7 Localization](https://discourse.specifysoftware.org/t/get-started-with-specify-7-localization/956) +on \* \*[Getting Started with Specify 7 Localization](https://speciforum.org/t/get-started-with-specify-7-localization/956) \*\* and contact us at [support@specifysoftware.org](mailto:support@specifysoftware.org) if you have @@ -1255,7 +1338,7 @@ collections' assets in separate folders. _Requested By NHMD_) -[More information](https://discourse.specifysoftware.org/t/get-started-with-specify-7-localization/956) +[More information](https://speciforum.org/t/get-started-with-specify-7-localization/956) ## [7.8.1](https://github.com/specify/specify7/compare/v7.8.0...v7.8.1) (13 December 2022) @@ -1276,7 +1359,7 @@ This update introduces a new Form “Meta Menu”, reimplements the App Resource Editor, introduces spatial search in the Query Builder, adds numerous usability improvements and fixes many bugs. -[Full Release Notes](https://discourse.specifysoftware.org/t/specify-7-8-release-notes/) +[Full Release Notes](https://speciforum.org/t/specify-7-8-release-notes/) [Full List of Improvements](https://github.com/specify/specify7/milestone/27?closed=1) @@ -1573,13 +1656,13 @@ off the screen, rank information in autofill search box drop down lists and new action buttons to move, merge, and synonymize taxa. Technical documentation for the Specify Forms system and customization options is at: -[_https://github.com/specify/specify7/wiki/Form-System_](https://discourse.specifysoftware.org/t/editing-forms-in-specify/1557) +[_https://github.com/specify/specify7/wiki/Form-System_](https://speciforum.org/t/editing-forms-in-specify/1557) . _User Preferences_ are now accessible through the User Tools menu, click on user name to bring up the User Tools dialog. The Preferences page is documented here: -[_https://discourse.specifysoftware.org/t/user-preferences-page/538_](https://discourse.specifysoftware.org/t/user-preferences-page/538) +[_https://speciforum.org/t/user-preferences-page/538_](https://speciforum.org/t/user-preferences-page/538) . _The Query Builder_ has been wholly re-engineered by adding a field diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e62e3e00e8..8aad24b0f47 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,334 +1,3 @@ # Guide to contributing to Specify Software -Thank you for the interest in contributing to Specify's codebase! We welcome -contributions of all kinds, including bug fixes, improvements, documentation, -etc. - -We value contributions from all members of the community, regardless of -experience level. Whether you are a seasoned open source contributor or a -newcomer to the world of software development, your help is greatly appreciated. - -To get started with contributing to Specify 7, this guide will provide you with -the information you need to understand the project, its goals, and how you can -help. - -We also encourage you to reach out to the Specify 7 team with any questions you -may have. You can contact the team at support@specifysoftware.org. - -## Mission Statement - -The mission of the Specify Collections Consortium is to advance research and -applied uses of the information associated with specimens and samples held in -biological and earth science collections. With engagement and collaboration from -its member institutions, the Consortium does this by engineering innovative, -open-source software, and by offering training and services to members for the -digitization, integration, and curation of collections data. By collaboratively -creating and supporting robust platforms and tools, the Consortium advances the -mobilization and engagement of collections data in broader research and -computing initiatives for the benefit of its members, science, and society. - -_Our mission statement serves as a guiding principle for how our organization -should operate. It defines what our organization stands for, what it values, and -what its goals are. By developing in accordance with our mission statement, we -ensure that our efforts are aligned with our core values and purpose. This helps -us stay focused on our goals, and ensures that all of our efforts are working -together to achieve our mission._ - -## Getting Started - -Preferred way to do Specify 7 development is though our development composition. - -[Documentation for getting development Docker composition working](https://github.com/specify/specify7/wiki/Docker-Workflow-for-Development) - -## Issue Tracking - -All feature requests and bugs are tracked on GitHub. Each issue is sorted into a -project. Each project represents a major Specify 7 component. -[A list of all projects](https://github.com/specify/specify7/projects?type=classic) - -If you found a bug, feel free to open a GitHub issue. Similarly, if you are -interested in fixing some issue or adding new feature, feel free to do so! If -you want to work on a larger feature, it would be best if you -[get in touch with us](mailto:support@specifysoftware.org) first so that we can -make sure the process is smooth and efficient. - -Our entire workflow for reporting bugs, trianging them, prioritizing the fixes, -testing them and releasing the fixes - -https://github.com/specify/specify7/wiki/Issue-Workflow - -You don't have to read every part of that document, but some of the sections in -that document would be relevant - -Example workflow: - -1. Go through GitHub Projects -2. Find a ticket that you are interested in resolving -3. Fix it in a local fork of Specify 7 -4. Open a pull request in Specify 7 repository. In the pull request, mention the - issue you are solving by putting `Fixes #1234` in the description, where - `1234` is a number of GitHub issue -5. We will review the changes and merge them into next release. You will receive - credit in the release notes! - -### First Steps - -It's recomended to start with issues that are labled with -[good first issue](https://github.com/specify/specify7/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) -as those require less knowledge of the codebase and are as not urgent. These -would prepare you for taking on larger GitHub issues. - -## Code Documentation - -### Front-End - -On the front-end, we are using TypeScript, React and Tailwind CSS. - -Front-end root directory is in -[./specifyweb/frontend/js_src](https://github.com/specify/specify7/tree/testability/specifyweb/frontend/js_src) - -Each folder and sub-folder has a README.md file that describes the role of that -directory and provides other meta information. - -We have a -[video of a full front-end code overview from January 2023 available here](https://drive.google.com/file/d/11TDHSz54EhQ5eQPNyaogHOODO8_8Q9yg/view). - -## Back-End - -Back-end uses Python and Django. It also works closely with a MySQL/MariaDB -database both though Django ORM and though SQLAlchemy. - -Back-end root directory is -[./specifyweb/](https://github.com/specify/specify7/tree/main/specifyweb) - -[We have a video of a full back-end overview from January 2023 available here](https://drive.google.com/file/d/1OW60g99aiPw1Y8uHdCUxZCiVnLbFhObG/view?usp=sharing) - -## IDE Setup - -No special IDE configuration is required, but some optional plugins would -improve developer experience - -https://github.com/specify/specify7/tree/main/specifyweb/frontend/js_src#js_src - -That document includes a short list. For a full list, see -https://github.com/specifysystems/code-principles - -In the browser, you can install React Devtools extension to make debugging React -components easier. - -## Code-Style - -We prefer functional programming paradigm. In our opinion, perfect code\* -consist of small and pure functions that have clear unit tests, and can be -combined together to solve a complex task. - -> \*no code is perfect, but you can still strive for it - -On a static analysis side, we use strict TypeScript type checking and Prettier -formatting to make code less buggy and more consistent. - -Additionally, ESLint goes beyond that to provide close to a thousand of static -analysis checks and quick fixes, all in a name of clear and bug-free code. Our -ESLint configuration is located in -[@maxxxxxdlp/eslint-config-react](https://www.npmjs.com/package/@maxxxxxdlp/eslint-config-react) - -## Test Panel - -[Specify 7 Test Panel](https://github.com/specify/specify7-test-panel) is used -for testing bug fixes and pre-release versions of Specify 7. - -Once up and running, the test panel can be operated by non-technical users. - -If set up properly, it automatically rebuilds all active deployments when -someone pushes new changes on GitHub. It also automatically deploys bug fixes -once those are marked as ready for testing. - -The test panel is designed for usage by Quality Assurance people, but could also -be used by external users for quick evaluation or developers when they need to -quickly deploy an older version of Specify to compare behavior. - -## Support - -A great deal of user-facing documentation is available at our -[Discourse forum](https://discourse.specifysoftware.org/). Most of it is -available to users from member institutions only, thus -[consider joining the Specify Software Consortium](https://www.specifysoftware.org/membership-levels/) -if you are interested in becoming a power user of Specify 7. - -Besides the README.md files in most folders in this repository, there is also -some developer facing documentation in our -[GitHub Wiki](https://github.com/specify/specify7/wiki). - -If you are stuck and need help, consider emailing our support at -[support@specifysoftware.org](mailto:support@specifysoftware.org), opening a -[GitHub issue](https://github.com/specify/specify7/issues/new/choose) or posting -a question on our [Discourse forum](https://discourse.specifysoftware.org/) as -appropriate. - -| Contact Option | Link | -| --------------- | --------------------------------------------------------------------- | -| General Inquiry | [support@specifysoftware.org](mailto:support@specifysoftware.org) | -| Bug Report | [GitHub Issue](https://github.com/specify/specify7/issues/new/choose) | -| User Question | [Discourse Forum](https://discourse.specifysoftware.org/) | - - -# Installing Specify 7 Locally - -These instructions will guide you through setting up a local development environment for Specify 7. - -## 1) Install Required Software - -You will need the following software installed on your system: - -- **IDE:** [VS Code](https://code.visualstudio.com/) is recommended. -- **Database GUI (Optional):** A tool like [DBeaver CE](https://dbeaver.io/download/) makes it easier to inspect the database. -- **Containerization:** [Docker Desktop](https://www.docker.com/products/docker-desktop/) (which includes the Docker Compose plugin). -- **Version Control:** [Git](https://git-scm.com/downloads). -- **Database CLI:** A command-line client for MariaDB or MySQL. - -**Install the Database CLI (no server needed):** - -- **macOS (Homebrew):** - ```bash - brew install mysql-client - echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc - ``` -- **Ubuntu/Debian:** - ```bash - sudo apt-get update && sudo apt-get install -y mariadb-client - ``` -> **Note:** Do NOT install a local MariaDB/MySQL server. The database will run inside a Docker container. - ---- - -## 2) Get the Source Code - -Clone the repository to your local machine. This will check out the `main` branch, which is what you should use for contributions. - -```bash -git clone https://github.com/specify/specify7.git -cd specify7 -``` - ---- - -## 3) Set Up Python Virtual Environment - -While the application runs in Docker, a Python virtual environment is needed for running helper scripts. - -```bash -# Create the virtual environment -python3 -m venv ve - -# Activate it -# On macOS/Linux: -source ve/bin/activate -# On Windows (PowerShell): -# .\ve\Scripts\Activate.ps1 - -# Install dependencies -pip3 install wheel -pip3 install --upgrade -r requirements.txt -``` - ---- - -## 4) Download and Prepare the Demo Database - -We provide a demo database to get you started quickly. - -1. **Download the demo database:** [sp7demofish.sql.zip](https://drive.google.com/file/d/1b-403b6vHJvEQYaYTuDLsQS_m3QL1yCc/view?usp=sharing). -2. **Unzip** the file to get `sp7demofish.sql`. -3. **Move** the `sp7demofish.sql` file into the `seed_database/` directory at the root of the project. - ---- - -## 5) Configure Environment Variables - -Create a `.env` file in the project root by copying the example file: - -```bash -cp .env.example .env -``` - -Now, edit the `.env` file with the following values: - -```dotenv -# .env -MYSQL_ROOT_PASSWORD=specify -DATABASE_NAME=sp7demofish -MASTER_NAME=sp7demofish -MASTER_PASSWORD=specify -``` - -> **Important:** The `DATABASE_NAME` and `MASTER_NAME` must match the name of the database you are using (`sp7demofish`). - ---- - -## 6) Run Specify 7 - -With all the configuration in place, you can now start the application using Docker Compose. - -```bash -docker compose up --build -``` - -The first build will take some time as Docker downloads images and builds the containers. Once it's running, you can access the application at: - -- **URL:** [http://localhost/specify](http://localhost/specify) -- **Login:** - - **Username:** `sp7demofish` - - **Password:** `specify` - -Select any collection to begin. - ---- - -## 7) Connect to the Database (Optional) - -You can connect to the MariaDB container to inspect the database using a GUI tool or the command line. - -**Connection Details:** -- **Host:** `localhost` -- **Port:** `3306` -- **Database:** `sp7demofish` -- **Username:** `root` -- **Password:** `specify` (matches `MYSQL_ROOT_PASSWORD` in your `.env`) - -**Using the CLI:** - -```bash -mysql -h 127.0.0.1 -P 3306 -uroot -pspecify -``` - ---- - -## 8) Troubleshooting - -**Access Denied / Database Not Found** - -If Docker fails to initialize the database correctly, it may be due to old volumes or images. - -1. Stop the running containers (`Ctrl+C` in the terminal or use Docker Desktop). -2. Fully clean your Docker environment: - ```bash - docker compose down -v --remove-orphans # Stops and removes containers, networks, and volumes - docker image prune -a # Removes unused images - ``` -3. Rebuild and start the containers: - ```bash - docker compose up --build - ``` - -**Verify Database State in Container** - -If problems persist, you can check the database state directly inside the container: - -1. Find the container ID: `docker ps` -2. Open a shell in the container: `docker exec -it /bin/bash` -3. Connect to MariaDB: - ```bash - mysql -uroot -p$MYSQL_ROOT_PASSWORD - SHOW DATABASES; - USE sp7demofish; - SHOW TABLES; - ``` -This will help confirm if the database was created and seeded correctly. +Please [read our guide on the Speciforum](https://speciforum.org/t/guide-to-contributing-code-to-specify/3511) to learn more about contributing! diff --git a/README.md b/README.md index e1bfaf3cb47..15e25a70eb1 100644 --- a/README.md +++ b/README.md @@ -1,521 +1,135 @@ -# [Specify 7](https://www.specifysoftware.org/products/specify-7/) - -The [Specify Collections Consortium](https://www.specifysoftware.org) is pleased -to offer Specify 7, the web implementation of our biological collections data -management platform. - -We encourage members to use our -[Dockerized compositions](https://github.com/specify/docker-compositions) of -Specify 7. You can choose a version, make the necessary adjustments and then run -a single command to get everything working. It is very simple and can be easily -updated when new versions are released. Members can contact us at -[support@specifysoftware.org](mailto:support@specifysoftware.org) to gain access -to this repository. - -The new generation of Specify combines the interface design components and data -management foundation of Specify 6 with the efficiency and ease-of-use of -web-based data access and cloud computing. Specify 7 uses the same interface -layout language as Specify 6, so any user interface customization made in one -platform is mirrored in the other. Also Specify 6 and Specify 7 use the same -data model and can work from the same Specify MySQL or MariaDB database, which -means 6 and 7 can be run simultaneously with any Specify collection. Specify 7 -helps transition Specify 6 collections to cloud computing. It is also a great -starting platform for institutions that prefer zero workstation software -installation and ubiquitous web browser access. - -Specify 7’s architecture supports collaborative digitization projects and remote -hosting of specimen databases. Without the need for a local area or campus -network to connect to the MySQL data server, Specify 7 gives you and your -collaborators access to a shared specimen database through any web browser. -Finding it challenging to obtain IT support to maintain a local secure database -server? With the Specify 7 server software supported on generic Linux servers, -museums can utilize a server hosting service to provide support for the -technical complexities of systems administration, security management, and -backing-up. Want to create a joint database for a collaborative digitizing -effort? No problem! Host, hire a hosting service or use our -[Specify Cloud](https://www.specifysoftware.org/products/cloud/) service for -your Specify database, set up accounts and go. We provide the same efficient -user interface, report and labels customization and help desk support for -Specify 7 as we do for Specify 6. - -**Secure.** Support for Single Sign-On (SSO) integrates Specify 7 with a campus -or institutional identity providers. It supports all identity providers (IdPs) -that have an OpenID endpoints. - -The Security and Accounts tool allows administrators to give access based on -roles and policies. Create, edit, and copy roles among collections and -databases. Administrators can give users as many or few permissions as desired, -from guest accounts to collection managers. - -**Accessible.** It is important that web applications work for people with -disabilities. Specify 7 is developed with this top of mind, not only meeting -international accessibility standards but also providing a better experience for -everyone. - -Specify 7 is largely compliant with the main WWW accessibility standard – **WCAG -2.1 (AA)**. It supports screen readers and allows each user to customize their -color scheme and appearance as well as reduce motion and resize all elements. - -This accessible design respects system and web browser preferences for date -formats, language, theme, and animations. +Specify Collections Consortium ---- - -The Specify Collections Consortium is funded by its member institutions. The -Consortium web site is: https://specifysoftware.org - -Specify 7 Copyright © 2024 Specify Collections Consortium. Specify comes with -ABSOLUTELY NO WARRANTY. This is free software licensed under GNU General Public -License 3 (GPL3). - - Specify Collections Consortium - Biodiversity Institute - University of Kansas - 1345 Jayhawk Blvd. - Lawrence, KS 66045 USA - -## Table of Contents - -- [Specify 7](#specify-7) - - [Table of Contents](#table-of-contents) - - [Changelog](#changelog) -- [Installation](#installation) - - [Docker Installation (Recommended)](#docker-installation-recommended) - - [Specify Collections Consortium (SCC) Members:](#specify-collections-consortium-scc-members) - - [Non-Members:](#non-members) - - [Local Installation](#local-installation) - - [Installing system dependencies](#installing-system-dependencies) - - [Installing Specify 6](#installing-specify-6) - - [Cloning Specify 7 source repository](#cloning-specify-7-source-repository) - - [Adjusting settings files](#adjusting-settings-files) - - [Setting up Python Virtual Environment](#setting-up-python-virtual-environment) - - [Building](#building) - - [`make build`](#make-build) - - [`make frontend`](#make-frontend) - - [`make clean`](#make-clean) - - [`make pip_requirements`](#make-pip_requirements) - - [`make django_migrations`](#make-django_migrations) - - [`make runserver`](#make-runserver) - - [`make webpack_watch`](#make-webpack_watch) - - [Turning on debugging](#turning-on-debugging) - - [The development server](#the-development-server) - - [The Specify 7 Worker](#the-specify-7-worker) - - [Installing production requirements](#installing-production-requirements) - - [Setting up Apache](#setting-up-apache) - - [Restarting Apache](#restarting-apache) - - [Nginx configuration](#nginx-configuration) - - [Updating Specify 7](#updating-specify-7) - - [Updating the database (Specify 6) version](#updating-the-database-specify-6-version) - - [Localizing Specify 7](#localizing-specify-7) - -## Changelog - -Changelog is available in [CHANGELOG.md](./CHANGELOG.md) - -# Installation - -We encourage all users to read our documentation on the Community Forum -regarding installing and deploying Specify – -[**Specify 7 Installation Instructions**](https://discourse.specifysoftware.org/t/specify-7-installation-instructions/755). - -If you are an existing Specify 6 user who is looking to evaluate Specify 7, you -can contact [support@specifysoftware.org](mailto:support@specifysoftware.org) -along with a copy of your database and we can configure a temporary deployment -for evaluation purposes. - -## Docker Installation (Recommended) - -### Specify Collections Consortium (SCC) Members: - -We encourage members to use our -[Dockerized compositions](https://github.com/specify/docker-compositions) of -Specify 7. You can choose your desired version, make the necessary adjustments -and then run a single command to get everything working. It is very simple and -can be easily updated when new versions are released. Documentation for -deploying Specify using Docker is available within the repository. - -[**📨 Click here to request access**](mailto:support@specifysoftware.org?subject=Requesting%20Docker%20Repository%20Access&body=My%20GitHub%20username%20is%3A%20%0D%0AMy%20Specify%20Member%20Institution%20is%3A%20%0D%0AAdditional%20Questions%20or%20Notes%3A%20) -or email [support@specifysoftware.org](mailto:support@specifysoftware.org) with -your GitHub username, member institution or collection, and any additional -questions you have for us. - -### Non-Members: - -If your institution is not a member of the Specify Collections Consortium, you -can follow the [local installation instructions](#local-installation) below or -contact [membership@specifysoftware.org](mailto:membership@specifysoftware.org) -to learn more about joining the SCC to receiving configuration assistance, -support, and hosting services if you are interested. - -## Local Installation - -After completing these instructions you will be able to run the test server and -interact with the Django based Specify webapp in your browser on your local -machine. - -Instructions for deployment follow. - -**Note:** If updating from a previous version, some of the python dependencies -have changed. It is recommended to place the new version in a separate directory -next to the previous version and install all the new dependencies in a Python -virtualenv as described below. That will avoid version conflicts and allow the -previous version to continue working while the new version is being set up. When -the new version is working satisfactorily using the test server, the Apache conf -can be changed to point to it (or changed back to the old version, if problems -arise). - -### Installing system dependencies - -Specify 7 requires Python 3.8. Ubuntu 20.04 LTS is recommended. For other -distributions these instructions will have to be adapted. - -Ubuntu 20.04 LTS: - -```shell -sudo apt install -y curl -curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - -sudo apt-get -y install --no-install-recommends \ - build-essential \ - git \ - libldap2-dev \ - libmariadbclient-dev \ - libsasl2-dev \ - nodejs \ - python3-venv \ - python3.8 \ - python3.8-dev \ - redis \ - unzip -``` - -CentOS 7 / Red Hat 7: - -```shell -yum install -y epel-release sudo wget -yum install -y \ - gcc make \ - git \ - openldap-devel \ - mariadb-devel \ - nodejs \ - npm \ - java-11-openjdk-headless \ - python36-virtualenv \ - python36 \ - python36u-devel \ - redis \ - unzip -``` - -Afterward, please make sure you have Node.js 20 installed: - -``` -node -v -``` - -### Installing Specify 6 - -A copy of the most recent Specify 6 release is required on the server as Specify -7 makes use of resource files. A Java runtime is required to execute the Specify -6 installer, but is not needed to run Specify 7. It is possible to copy the -Specify 6 install from another Linux system to avoid the need to install Java on -the server. - -```shell -wget https://update.specifysoftware.org/Specify_unix_64.sh -sh Specify_unix_64.sh -q -dir ./Specify6.8.03 -sudo ln -s $(pwd)/Specify6.8.03 /opt/Specify -``` - -### Cloning Specify 7 source repository - -Clone this repository. - -```shell -git clone https://github.com/specify/specify7.git -``` - -You will now have a specify7 directory containing the source tree. - -Note, by default, `git clone` checks out the `main` branch of Specify 7. -That branch contains the latest tested features and bug fixes. If you prefer a -more stable release, you can switch to one of our tagged released. - -```shell -cd specify7 -git checkout tags/v7.8.6 -``` - -Tagged releases are coming out every other week and undergo more testing. - -See [the list of tags](https://github.com/specify/specify7/tags) to check what's -the latest stable release. - -### Adjusting settings files - -In the directory `specify7/specifyweb/settings` you will find the -`specify_settings.py` file. Make a copy of this file as -`local_specify_settings.py` and edit it. The file contains comments explaining -the various settings. - -### Setting up Python Virtual Environment - -Using a Python -[virtual environment](https://docs.python-guide.org/en/latest/dev/virtualenvs/) -will avoid version conflicts with other Python libraries on your system. Also, -it avoids having to use a superuser account to install the Python dependencies. - -```shell -python3.8 -m venv specify7/ve -specify7/ve/bin/pip install wheel -specify7/ve/bin/pip install --upgrade -r specify7/requirements.txt -``` - -### Building - -To build Specify 7 use the default make target. +## **Specify Collections Management Platform** -```shell -cd specify7 -source ve/bin/activate -make -``` +The [Specify Collections Consortium](https://www.specifysoftware.org) (SCC) is proud to present **Specify 7**, a web-based application for managing biological collections data. Specify supports and enhances data management for biological collections, with a focus on research collections at universities, natural history museums, biorepositories, seed banks, herbaria, and environmental organizations. It offers incredible tools for data management, superb accessibility, and a multitude of collaboration features. It is completely free-to-use and 100% open source, supported by an active community of institutions from around the world. [Click here to learn more about our members](https://www.specifysoftware.org/members/). -> Note, if `source` command is not available on your system, try running -> `. ve/bin/activate` instead +Specify manages species and specimen information to computerize biological collections, track museum specimen transactions, link images to specimen records, and publish catalog data online. It supports collaborative digitization projects and remote hosting of specimen databases. Users do not need to install the software, enabling you and your collaborators to access a shared collections database from any modern web browser. -Other make targets: +You can select, organize, rename, and resize the data entry forms to match your curatorial preferences, eliminating the need to tab through multiple forms. Specify's "tree" interface for taxonomy, geography, storage location, chronostratigraphy, and lithostratigraphy offer intuitive access to hierarchical data. This allows for easy editing, synonymization, re-parenting, and discovering linked collection objects and preparations. -#### `make build` +The platform supports data from specimens, taxonomic and stratigraphic classifications, field notebooks, DNA sequence runs, literature references, and other primary sources. It can manage information related to repository agreements, accessions, conservation treatments, collection object groups, images, and other document attachments. -Runs all necessary build steps. +Specify prioritizes security with support for Single Sign-On (SSO), integrating seamlessly with institutional identity providers that utilize OpenID endpoints. The Security and Accounts tool empowers administrators to manage user access based on defined roles and policies. You can easily create, edit, and replicate roles across collections and databases, granting users tailored permissions that range from guest access to full collection management. -#### `make frontend` +Specify is developed with accessibility at its core, meeting and exceeding international standards. It largely complies with the WCAG 2.1 (AA) guidelines, ensuring compatibility with screen readers. You can read more in our [Accessibility & Compatibility Summary (WCAG 2.1 Level AA)](https://speciforum.org/t/accessibility-compatibility-summary-wcag-2-1-level-aa/2870). Users can customize their visual experience by adjusting color schemes, reducing motion, and resizing elements. Our design respects user preferences for date formats, language, themes, and animations, creating a more personalized experience for everyone. -Installs or updates Javascript dependencies and builds the Javascript modules -only. +Whether you choose to self-host on your own infrastructure or use our [Specify Cloud](https://www.specifysoftware.org/products/cloud/) service, your institution retains full ownership and control of your data at all times. Specify imposes no vendor lock-in as your database runs on standard MariaDB, can be backed up or migrated at any time, and remains entirely yours. If your institution has strict data sovereignty or on-premises hosting requirements, the [self-hosted Docker/Podman deployment](#self-hosted-docker--podman) puts you in complete control of your infrastructure, security policies, and data access. -#### `make clean` +To get started, [send us a message to learn more](mailto:membership@specifysoftware.org)! We are happy to meet with you and your team to discuss how we can address your collections data management needs with Specify. -Removes all generated files. +> [!IMPORTANT] +> You can learn more about Specify, ask questions, share updates, and get involved with the community on the [Specify Community Forum](https://speciforum.org)! -The following targets require the virualenv to be activated: - -#### `make pip_requirements` - -Install or updates Python dependencies. - -#### `make django_migrations` - -Applies Specify schema changes to the database named in the settings. This step -may fail if the master user configured in the settings does not have DDL -privileges. Changing the `MASTER_NAME` and `MASTER_PASSWORD` settings to the -MySQL root user will allow the changes to be applied. Afterward, the master user -settings can be restored. - -#### `make runserver` - -A shortcut for running the Django development server. - -#### `make webpack_watch` - -Run webpack in watch mode so that changes to the frontend source code will be -automatically compiled. Useful during the development process. - -### Turning on debugging - -For development purposes, Django debugging should be turned on. It will enable -stack traces in responses that encounter exceptions, and allow operation with -the unoptimized Javascript files. - -Debugging can be enabled by creating the file -`specify7/specifyweb/settings/debug.py` with the contents, `DEBUG = True`. - -### The development server - -> NOTE: development server should only be run in debug mode. See previous -> section for instructions on how to turn on debugging. - -Specify7 can be run using the Django development server. - -```shell -cd specify7 -source ve/bin/activate -make runserver -``` - -This will start a development server for testing purposes on `localhost:8000`. - -When the server starts up, it will issue a warning that some migrations have not -been applied: - -``` -You have 11 unapplied migration(s). Your project may not work -properly until you apply the migrations for app(s): auth, -contenttypes, sessions. Run 'python manage.py migrate' to apply them. -``` - -Specify 7 makes use of functions from the listed Django apps (auth, -contenttypes, and sessions) but does not need the corresponding tables to be -added to the database. Running `make django_migrations` will apply only those -migrations needed for Specify 7 to operate. - -### The Specify 7 Worker - -Starting from version `v7.6.0`, the Specify WorkBench utilizes this dedicated -worker process to handle the upload and validation operations. - -Starting from version `v7.9.0`, the record merging functionality employs the -worker to handle all record merging activities. - -This worker process utilizes -[Celery](https://docs.celeryproject.org/en/master/index.html), a job queue -management system, with -[Redis](https://docs.celeryproject.org/en/master/getting-started/backends-and-brokers/redis.html) -serving as the broker. - -The worker process can be started from the commandline by executing: - -```shell -cd specify7 -celery -A specifyweb worker -l INFO --concurrency=1 -``` - -For deployment purposes it is recommended to configure a systemd unit to -automatically start the Specify 7 worker process on system start up by executing -the above command within the installation directory. It is possible to run Redis -and worker process on a separate server and to provision multiple worker -processes for high volume scenarios. Contact the Specify team about these use -cases. - -### Installing production requirements +--- -For production environments, Specify7 can be hosted by Apache. The following -packages are needed: +## Table of Contents -- Apache -- mod-wsgi to connect Python to Apache +- [Documentation](#documentation) + - [Demo Instance](#demo-instance) +- [Installation](#installation) + - [Specify Cloud (Recommended)](#specify-cloud-recommended) + - [Self-hosted (Docker / Podman)](#self-hosted-docker--podman) + - [Development Setup](#development-setup) +- [Tech Stack](#tech-stack) +- [Specify Components](#specify-components) + - [Specify 7](#specify-7) + - [Specify Worker](#specify-worker) + - [Specify Asset Server](#specify-asset-server) + - [Specify Report Runner](#specify-report-runner) + - [Localizing Specify](#localizing-specify) -Ubuntu: +--- -```shell -sudo apt-get install apache2 libapache2-mod-wsgi-py3 -``` +# Documentation -CentOS / Red Hat: +The **[Speciforum](https://discourse.specifysoftware.org)** is the official community forum and primary knowledge hub for the Specify Collections Consortium (SCC). It connects collections staff, member institutions, and informatics developers from around the world to collaborate and share their work. Members of the SCC can create an account and unlock tons of exclusive documentation, webinars, and begin asking questions of both the SCC staff and collections community. -```shell -yum install httpd python3-mod_wsgi -``` +Through the Speciforum, you can access: +* **[Comprehensive Documentation](https://speciforum.org/c/docs/39):** Step-by-step user guides, video and webinar training materials, software installation support, API documentation for developers, and system administration references. +* **[Community Support](https://speciforum.org/c/get-help/78):** A dedicated space to ask questions, report issues, and troubleshoot workflows with the Specify support team and fellow users. +* **[Community News & Announcements](https://speciforum.org/c/news/76):** Read here to stay up to date on new developments, software releases, and upcoming workshops and events. -Warning: This will replace the Python 2.7 version of mod-wsgi that was used by -Specify 7.4.0 and prior. If executed on a production server running one of those -versions, Specify 7 will stop working until the new deployment is configured. +## Demo Instance -### Setting up Apache +For those looking to evaluate Specify, we have an online demonstration database available at https://sp7demofish.specifycloud.org/specify/. If you are interested in requesting an evaluation instance for your institution, you can [fill out the form here](https://specifysoftware.org/#evaluation) to request one! -In the `specify7` directory you will find the `specifyweb_apache.conf` file. -Make a copy of the file as `local_specifyweb_apache.conf` and edit the contents -to reflect the location of Specify6 and Specify7 on your system. There are -comments showing what to change. +# Installation -Then remove the default Apache welcome page and make a link to your -`local_specifyweb_apache.conf` file. +We encourage all users to read our documentation on the Community Forum +regarding installing and deploying Specify – +[**Specify 7 Installation Instructions**](https://speciforum.org/t/specify-7-installation-instructions/755). -Ubuntu: +If you are an existing Specify 6 user who is looking to evaluate Specify 7, you can +contact [support@specifysoftware.org](mailto:support@specifysoftware.org) +along with a copy of your database and we can configure a temporary deployment +for evaluation purposes. -```shell -sudo rm /etc/apache2/sites-enabled/000-default.conf -sudo ln -s $(pwd)/specify7/local_specifyweb_apache.conf /etc/apache2/sites-enabled/ -``` +## Specify Cloud (Recommended) -CentOS / Red Hat: +Our hosting platform, Specify Cloud, enables biological collections to easily share their current Specify database with us. If a collection is new to Specify, we are happy to create a new database [upon request](mailto:membership@specifysoftware.org)! We handle all updates, maintenance, backups, resource management, billing, and asset management. Our cloud platform has regions located worldwide, enabling Specify to be hosted near your collection and staff. We will collaborate with your team to ensure compliance with all institutional and legal regulations regarding data storage and accessibility. Your local IT teams can request access to our cloud servers to prepare backups, access assets, and connect to your database directly whenever necessary. This platform also enables our support team to respond to inquiries quickly and resolve any issues. -```shell -sudo ln -s $(pwd)/specify7/local_specifyweb_apache.conf /etc/httpd/conf.d/ -``` +## Self-hosted (Docker / Podman) -### Restarting Apache +For institutions that require their collections data to remain on-site or in a region not served by Specify Cloud, Specify 7 is designed to be deployed using [Docker](https://www.docker.com/) or [Podman](https://podman.io/). The project provides a [Dockerfile](./Dockerfile) based on Ubuntu and [docker-compositions](https://github.com/specify/docker-compositions) that bundle Specify 7 with its supporting services (MariaDB, Redis, Asset Server, Report Runner). This is the only supported production self-hosted deployment method. -After changing Apache's config files restart the service. +We encourage SCC members to use our [Dockerized compositions](https://github.com/specify/docker-compositions) of Specify 7. You can choose your desired version, make the necessary adjustments and then run a single command to get everything working. It is very simple and can be easily updated when new versions are released. Documentation for deploying Specify using Docker/Podman is available within the repository. -Ubuntu: +[**📨 Click here to request access**](mailto:support@specifysoftware.org?subject=Requesting%20Docker%20Repository%20Access&body=My%20GitHub%20username%20is%3A%20%0D%0AMy%20Specify%20Member%20Institution%20is%3A%20%0D%0AAdditional%20Questions%20or%20Notes%3A%20), including your GitHub username, member institution, collection, and any additional questions or notes you have for us. -```shell -sudo systemctl restart apache2.service -``` +## Development Setup -CentOS / Red Hat: +For contributing to Specify 7, the recommended approach is a [Docker/Podman-based development workflow](https://speciforum.org/t/guide-to-contributing-code-to-specify/3511). The included [Dockerfile](./Dockerfile) provides a multi-stage build with a dedicated `run-development` stage that includes testing dependencies and tools like mypy. If you are interested in contributing to Specify, please read our [guide to contributing code to Specify](https://speciforum.org/t/guide-to-contributing-code-to-specify/3511) for instructions! -```shell -sudo systemctl restart httpd.service -``` +If you want to contribute to our code from an external institution, please reach out to a [member of our team](mailto:support@specifysoftware.org) for further guidance. We are always looking for new collaboration opportunities. -### Nginx configuration +--- -Specify 7 is web-server agnostic. Example -[nginx.conf](https://github.com/specify/specify7/blob/main/nginx.conf) -(note, you would have to adjust the host names and enable HTTPs). +# Tech Stack -## Updating Specify 7 +- **Host:** Ubuntu on Docker / Podman +- **Database Management System:** MariaDB +- **Front-end:** TypeScript, React, JavaScript, Tailwind CSS +- **Back-end:** Django and Python -Specify 7.4.0 and prior versions were based on Python 2.7. If updating from one -of these versions, it will be necessary to install Python 3.8 by running the -`apt-get` commands in the -[Install system dependencies](#install-system-dependencies) and the -[Production requirements](#production-requirements) steps. Then proceed as -follows: +You can learn more about the architecture here: https://speciforum.org/t/specify-7-architecture-overview/ -0. Backup your Specify database using MySQL dump or the Specify backup and - restore tool. +--- -1. Clone or download a new copy of this repository in a directory next to your - existing installation. +# Specify Components - `git clone https://github.com/specify/specify7.git specify7-new-version` +A full Specify 7 deployment consists of several services working together. The Docker / Podman compositions bundle all of these into a single, cohesive container stack. -2. Copy the settings from the existing to the new installation. +## Specify 7 - `cp specify7/specifyweb/settings/local* specify7-new-version/specifyweb/settings/` +The main web application — a Django-powered backend serving a React and TypeScript frontend. This is the browser-based interface that users interact with to manage their collections data. It handles authentication (including SSO via OpenID Connect), business logic, schema management, and all CRUD operations against the MariaDB database. The application is served via Gunicorn in production and includes a built-in development server for local testing. -3. Make sure to update the `THICK_CLIENT_LOCATION` setting in - `local_specify_settings.py`, if you are updating the Specify 6 version. +## Specify Worker -4. Update the system level dependencies by executing the _apt-get_ command in - the [Installing system dependencies](#installing-system-dependencies) - section. +A background job processor that handles long-running or resource-intensive operations asynchronously, keeping the main web application responsive. It is responsible for: -5. Create a new virtualenv for the new installation by following the - [Python Virtual Environment](#python-virtual-environment) section for the new - directory. +- **WorkBench uploads** — processing and validating large datasets uploaded through the Specify WorkBench tool +- **Record merging** — executing complex record merge operations across related tables +- **Batch attachment uploads** — handling bulk image and document attachment processing -6. [Build](#building) the new version of Specify 7. +The worker process is built on [Celery](https://docs.celeryproject.org/en/master/index.html), a distributed task queue, with [Redis](https://docs.celeryproject.org/en/master/getting-started/backends-and-brokers/redis.html) serving as the message broker. It is included alongside every Specify 7 deployment. -7. Test it out with the [development server](#the-development-server). +## Specify Asset Server -8. Deploy the new version by updating your Apache config to replace the old - installation paths with the new ones and restarting Apache. +The [Web Asset Server](https://speciforum.org/t/specify-web-asset-server-attachment-server/715) manages the storage and retrieval of binary file attachments such as specimen images, scanned documents, field notes, and other media files linked to collection records. It stores assets independently from the main application database, enabling efficient serving of large files without impacting database performance. The Asset Server supports configurable storage backends and collection-based organization of assets. -9. Configure the Specify 7 worker process to execute at system start up as - described in [The Specify 7 worker](#the-specify-7-worker) section. +* Learn about [Attachments in Specify](https://speciforum.org/t/attachments-in-specify/190) +* See how [Specify works with the Web Asset Server](https://speciforum.org/t/how-does-specify-7-work-with-the-web-asset-server/2817) +* Read the [technical docs for the Web Asset Server](https://speciforum.org/t/web-asset-server/657) -## Updating the database (Specify 6) version +## Specify Report Runner -The Specify database is updated from one version to the next by the Specify 6 -application. To update the database version connect to the database with a new -version of Specify 6 and follow the Specify 6 update procedures. +The [Report Runner Service](https://github.com/specify/report-runner-service) generates formatted, printable reports from Specify data. It processes report templates against collection records to produce PDFs of invoices and labels. This service handles the rendering pipeline independently so that complex report generation does not block the main application. If you are interested in adding additional fonts for use in reports and labels, see [these instructions here](https://speciforum.org/t/specify-report-runner-fonts/1659). -Once the database version is updated, a corresponding copy of Specify 6 must be -provided to the Specify 7 server by repeating the -[Installing Specify 6](#installing-specify-6) section of this guide for the new -version of Specify 6. +## Localizing Specify -[![analytics](https://www.google-analytics.com/collect?v=1&t=pageview&dl=https%3A%2F%2Fgithub.com%2Fspecify%2Fspecify7&uid=readme&tid=UA-169822764-3)]() +Specify 7 interface is available in several languages out of the box, including English, Ukrainian, Russian, German, and French. We are using [Weblate](https://hosted.weblate.org/projects/specify-7/) continuous localization platform, and if you are interested in amending our existing localization or would like us to add a new language to Specify, please see our [instructions on how you can contribute](https://speciforum.org/t/get-started-with-specify-7-localization/956). -## Localizing Specify 7 +--- -Specify 7 interface is localized to a few languages out of the box. We welcome -contributions of new translations. We are using -[Weblate](https://hosted.weblate.org/projects/specify-7/) continuous -localization platform. -[Instructions on how you can contribute](https://discourse.specifysoftware.org/t/get-started-with-specify-7-localization/956) +_The Specify Collections Consortium is funded by its member institutions. Find out more at [https://specifysoftware.org](https://specifysoftware.org)_ diff --git a/SECURITY.md b/SECURITY.md index ade2dcca50d..929b6f04b21 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -10,14 +10,14 @@ For non-security issues, our [support team](mailto:support@specifysoftware.org) is always available to help with troubleshooting and answer any questions. We also have a large online community of users who are willing to share their experiences and help each other out. You can visit the -[Specify Community Forum](https://discourse.specifysoftware.org/) to ask any +[Specify Community Forum](https://speciforum.org/) to ask any questions you may have about configuration or deployment. | Version | Supported | | ------- | ------------------ | -| 7.11.x | :white_check_mark: | -| 7.10.x | :white_check_mark: | -| < 7.9.x | :x: | +| 7.12.x | :white_check_mark: | +| 7.11.x | :white_check_mark: | +| < 7.10.x | :x: | We support the latest version of Specify 6 only. You can report vulnerabilities or other issues for that application on the diff --git a/config/backstop/global.views.xml b/config/backstop/global.views.xml index 98d087c9d5b..a22a630563a 100644 --- a/config/backstop/global.views.xml +++ b/config/backstop/global.views.xml @@ -1877,7 +1877,7 @@ - + @@ -1960,7 +1960,7 @@ - + diff --git a/config/common/schema_localization_en.json b/config/common/schema_localization_en.json index 44381d05640..ff65eccbad5 100644 --- a/config/common/schema_localization_en.json +++ b/config/common/schema_localization_en.json @@ -1,7 +1,7 @@ { "absoluteage": { "items": { - "absoluteage": {"name": "Absolute Age", "desc": "Absolute Age", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "absoluteage": {"name": "Absolute Age", "desc": "Records a numerical age determination for a Collection Object, such as a radiocarbon or potassium-argon date. Includes the age value, uncertainty, dating method, and agent who performed the analysis.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, "absoluteageattachments": {"name": "Absolute Age Attachments", "desc": "Absolute Age Attachments", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "absoluteagecitations": {"name": "Absolute Age Citations", "desc": "Absolute Age Citations", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "absoluteageid": {"name": "Absolute Age Id", "desc": "Absolute Age Id", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": true, "weblinkname": null}, @@ -9,7 +9,7 @@ "agetype": {"name": "Age Type", "desc": "Age Type", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": "AgeType", "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "ageuncertainty": {"name": "Age Uncertainty", "desc": "Age Uncertainty", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, "collectiondate": {"name": "Collection Date", "desc": "Collection Date", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.util.Date", "isrequired": false, "weblinkname": null}, - "collectionobject": {"name": "Collection Object", "desc": "Collection Object", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, + "collectionobject": {"name": "Collection Object", "desc": "The central record in Specify, representing any item in a collection: physical specimen, lot, observation, sound recording, slide, tissue sample, or extract. Ties together all related information (determinations, preparations, locality, collecting event, etc.).", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, "component": {"name": "Component", "desc": "Component", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "date1": {"name": "Date1", "desc": "Date1", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.util.Date", "isrequired": false, "weblinkname": null}, @@ -36,13 +36,13 @@ "aggregator": null, "defaultui": null, "name": "Absolute Age", - "desc": "Absolute Age" + "desc": "Records a numerical age determination for a Collection Object, such as a radiocarbon or potassium-argon date. Includes the age value, uncertainty, dating method, and agent who performed the analysis." }, "absoluteageattachment": { "items": { "absoluteage": {"name": "Absolute Age", "desc": "Absolute Age", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, "absoluteageattachmentid": {"name": "Absolute Age Attachment Id", "desc": "Absolute Age Attachment Id", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": true, "weblinkname": null}, - "attachment": {"name": "Attachment", "desc": "Attachment", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, + "attachment": {"name": "Attachment", "desc": "A digital file (image, PDF, audio, etc.) linked to a data record. Instead of storing the file in the database, Specify stores it on a Web Asset Server and keeps a reference (location, MIME type, original filename, metadata) in this table. Supports licensing, copyright, and visibility controls.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, "collectionmember": {"name": "Collection Member", "desc": "Collection Member", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, @@ -60,7 +60,7 @@ "aggregator": null, "defaultui": null, "name": "Absolute Age Attachment", - "desc": "Absolute Age Attachment" + "desc": "Links an Attachment (e.g., a lab report or data sheet) to an Absolute Age record, with an ordinal for ordering multiple attachments." }, "absoluteagecitation": { "items": { @@ -73,7 +73,7 @@ "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "pagenumber": {"name": "Page Number", "desc": "Page Number", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "platenumber": {"name": "Plate Number", "desc": "Plate Number", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, - "referencework": {"name": "Reference Work", "desc": "Reference Work", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, + "referencework": {"name": "Reference Work", "desc": "Stores bibliographic references (publications, books, articles, theses) that can be cited from Determinations, Localities, Taxa, and other records.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Remarks", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, "timestampcreated": {"name": "Timestamp Created", "desc": "Timestamp Created", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": true, "weblinkname": null}, "timestampmodified": {"name": "Timestamp Modified", "desc": "Timestamp Modified", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, @@ -87,7 +87,7 @@ "aggregator": null, "defaultui": null, "name": "Absolute Age Citation", - "desc": "Absolute Age Citation" + "desc": "Links a Reference Work (publication) to an Absolute Age record, capturing details like figure, plate, and page numbers where the age is reported." }, "accession": { "items": { @@ -97,7 +97,7 @@ "accessioncitations": {"name": "Accession Citations", "desc": "Accession Citations", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "accessioncondition": {"name": "Accession Condition", "desc": "Physical description of the condition of the accession.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "accessionnumber": {"name": "Accession Number", "desc": "Usually an integer or alphanumeric value that is assigned to the material when it enters the collection. The format of accession numbers varies among collections, but all refer to the acquisition of specimens, observations, or other collection objects.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": true, "weblinkname": null}, - "addressofrecord": {"name": "Address Of Record", "desc": "Address Of Record", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "addressofrecord": {"name": "Address Of Record", "desc": "Captures the legal address associated with an Accession, Loan, Exchange, or Repository Agreement at the time the transaction took place.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "appraisals": {"name": "Appraisals", "desc": "Appraisals", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "collectionobjects": {"name": "Collection Objects", "desc": "Collection Objects", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -111,7 +111,7 @@ "dateacknowledgedprecision": {"name": "Date Acknowledged Precision", "desc": "Date Acknowledged Precision", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, "datereceived": {"name": "Date Received", "desc": "Date material was received.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.util.Calendar", "isrequired": false, "weblinkname": null}, "datereceivedprecision": {"name": "Date Received Precision", "desc": "Date Received Precision", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, - "division": {"name": "Division", "desc": "Division", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": "Division", "type": null, "isrequired": false, "weblinkname": null}, + "division": {"name": "Division", "desc": "A division or department within an Institution (e.g., 'Vertebrate Zoology', 'Botany'). Contains Agents and may oversee multiple Disciplines.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": "Division", "type": null, "isrequired": false, "weblinkname": null}, "integer1": {"name": "Integer1", "desc": "Integer1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "integer2": {"name": "Integer2", "desc": "Integer2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "integer3": {"name": "Integer3", "desc": "Integer3", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -119,7 +119,7 @@ "number1": {"name": "Number1", "desc": "User definable.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Float", "isrequired": false, "weblinkname": null}, "number2": {"name": "Number2", "desc": "User definable.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Float", "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Additional Comments.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, - "repositoryagreement": {"name": "Repository Agreement", "desc": "Repository Agreement", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "repositoryagreement": {"name": "Repository Agreement", "desc": "Records a legal agreement that permits an Accession to occur without transferring ownership (e.g., a loan for study, a field repository agreement).", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "status": {"name": "Status", "desc": "Status of Accession, e.g. `In process`, `Complete` ...", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": "AccessionStatus", "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "text1": {"name": "Text1", "desc": "User definable.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "text2": {"name": "Text2", "desc": "User definable.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, @@ -144,17 +144,17 @@ "aggregator": null, "defaultui": null, "name": "Accession", - "desc": "Also called an acquisition. A consignment of specimens acquired either by field collecting of staff members, gifts, purchases, or exchange with another institution." + "desc": "Also called an acquisition. A consignment of specimens acquired either by field collecting of staff members, gifts, purchases, or exchange with another institution. Tracks the source, date received, status, and total value of the acquisition." }, "accessionagent": { "items": { "accession": {"name": "Accession", "desc": "Accession", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, - "agent": {"name": "Agent", "desc": "Agent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "agent": {"name": "Agent", "desc": "Central directory of people, groups, and organizations involved in the collection process. Roles include collector, determiner, preparer, cataloger, donor, permit issuer, and more. Supports both individuals (with name components) and organizations.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Additional Comments.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, "repositoryagreement": {"name": "Repository Agreement", "desc": "Repository Agreement", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, - "role": {"name": "Role", "desc": "Role the agent played in the accession process.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": "AccessionRole", "type": "java.lang.String", "isrequired": true, "weblinkname": null}, + "role": {"name": "Role", "desc": "System table: Stores user-defined roles with associated permissions for access control within a collection.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": "AccessionRole", "type": "java.lang.String", "isrequired": true, "weblinkname": null}, "timestampcreated": {"name": "Timestamp Created", "desc": "The timestamp the record was created.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, "timestampmodified": {"name": "Timestamp Modified", "desc": "The timestamp the record was last modified.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, "version": {"name": "Version", "desc": "Version", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null} @@ -167,7 +167,7 @@ "aggregator": null, "defaultui": null, "name": "Accession Agent", - "desc": "The person(s) requesting the Accession. This references an Agent." + "desc": "Links an Agent (person, group, or organization) to an Accession and defines their role in the accession process (e.g., donor, collector, requester)." }, "accessionattachment": { "items": { @@ -189,14 +189,14 @@ "aggregator": null, "defaultui": null, "name": "Accession Attachment", - "desc": "An attachment for the Accession. This may be one or more PDF files of paperwork or a photo of the Accession." + "desc": "Links digital files (PDFs, photos, etc.) to an Accession record, such as scanned import permits, deeds of gift, or correspondence." }, "accessionauthorization": { "items": { "accession": {"name": "Accession", "desc": "Accession", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "permit": {"name": "Permit", "desc": "Permit", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "permit": {"name": "Permit", "desc": "Records legal permits and licenses for collecting specimens, including the issuing authority, permit number, date range, and terms. Links to Accessions, Collecting Events, and Loans.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Additional comments.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, "repositoryagreement": {"name": "Repository Agreement", "desc": "Repository Agreement", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "timestampcreated": {"name": "Timestamp Created", "desc": "The timestamp the record was created.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, @@ -211,7 +211,7 @@ "aggregator": null, "defaultui": null, "name": "Accession Authorization", - "desc": "This represents the person authorizing the Accession. It references an existing Agent." + "desc": "Records authorization for an Accession, linking it to a Permit and optionally a Repository Agreement. Tracks who authorized the acquisition." }, "accessioncitation": { "items": { @@ -236,11 +236,11 @@ "aggregator": null, "defaultui": null, "name": "Accession Citations", - "desc": "Accession Citations" + "desc": "Links a Reference Work (publication) to an Accession, with optional figure, plate, and page numbers for citation details." }, "address": { "items": { - "address": {"name": "Address", "desc": "Address as it should appear on mailing labels.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, + "address": {"name": "Address", "desc": "Stores the postal address of an Agent (person or organization), including street, city, state, country, postal code, phone, and fax. Also captures the date range the agent was at that address and the position they held there.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "address2": {"name": "Address2", "desc": "Second line of address (optional).", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "address3": {"name": "Address3", "desc": "Address3", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "address4": {"name": "Address4", "desc": "Address4", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -279,7 +279,7 @@ "aggregator": null, "defaultui": null, "name": "Address", - "desc": "The address of an Agent. This also captures a start and end date for the address and the position held while at the address." + "desc": "Stores the postal address of an Agent (person or organization), including street, city, state, country, postal code, phone, and fax. Also captures the date range the agent was at that address and the position they held there." }, "addressofrecord": { "items": { @@ -310,7 +310,7 @@ "aggregator": null, "defaultui": null, "name": "Address Of Record", - "desc": "This is the address when the legal action took place." + "desc": "Captures the legal address associated with an Accession, Loan, Exchange, or Repository Agreement at the time the transaction took place." }, "agent": { "items": { @@ -353,7 +353,7 @@ "organization": {"name": "Organization", "desc": "Organization", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "orgmembers": {"name": "Org Members", "desc": "Org Members", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Additional comments.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, - "specifyuser": {"name": "Specify User", "desc": "Specify User", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "specifyuser": {"name": "Specify User", "desc": "System table: Represents a user account in Specify.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "suffix": {"name": "Suffix", "desc": "Suffix", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "text1": {"name": "Text1", "desc": "Text1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "text2": {"name": "Text2", "desc": "Text2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -377,7 +377,7 @@ "aggregator": null, "defaultui": null, "name": "Agent", - "desc": "Contains information about people, groups, and organizations. Some roles for an agent include collector, determiner, preparer, cataloger, donor, issuer of permits, and so forth." + "desc": "Central directory of people, groups, and organizations involved in the collection process. Roles include collector, determiner, preparer, cataloger, donor, permit issuer, and more. Supports both individuals (with name components) and organizations." }, "agentattachment": { "items": { @@ -399,13 +399,13 @@ "aggregator": null, "defaultui": null, "name": "Agent Attachment", - "desc": "This table can be used for a picture of the agent or anything else used to further describe the agent." + "desc": "Links digital files (photos, documents) to an Agent record, such as a portrait of a collector or a researcher's CV." }, "agentgeography": { "items": { "agent": {"name": "Agent", "desc": "Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "geography": {"name": "Geography", "desc": "The geographical region of specialization", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "geography": {"name": "Geography", "desc": "Hierarchical tree representing political boundaries (Country, State, Province, County, Township, etc.). Used to classify localities and agent collecting regions.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified by Agent", "desc": "Modified by Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Additional comments.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "role": {"name": "Role", "desc": "Role of the agent as \"author\" or \"collector\" within the geography.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -421,7 +421,7 @@ "aggregator": null, "defaultui": null, "name": "Agent Geography", - "desc": "The geographical region that a particular collector was known for collecting in." + "desc": "Records the geographic region(s) an Agent was known for collecting in or specializing on, with an optional role (e.g., author, collector)." }, "agentidentifier": { "items": { @@ -457,7 +457,7 @@ "aggregator": null, "defaultui": null, "name": "Agent Identifier", - "desc": "Describes an identifier of an Agent such an as ORCID." + "desc": "Stores external identifiers for an Agent, such as ORCID, ResearcherID, Scopus ID, or Wikidata ID, enabling integration with external authority systems." }, "agentspecialty": { "items": { @@ -478,7 +478,7 @@ "aggregator": null, "defaultui": null, "name": "Agent Specialty", - "desc": "The Taxonomic specialty that a particular agent was known for." + "desc": "Records the taxonomic or disciplinary specialty of an Agent (e.g., 'Coleoptera', 'Marine Invertebrates'), with an order number for ranking primary vs. secondary specialties." }, "agentvariant": { "items": { @@ -502,7 +502,7 @@ "aggregator": null, "defaultui": null, "name": "Agent Variant", - "desc": "This is primarily used by Botanists for capturing Variant and Vernacular names. This table is searchable but does not have any specific business rules associated with it." + "desc": "Captures variant and vernacular names for an Agent, primarily used by botanists. Includes language, country, and a type flag distinguishing variants from vernacular names." }, "appraisal": { "items": { @@ -528,13 +528,13 @@ "aggregator": null, "defaultui": null, "name": "Appraisal", - "desc": "The monetary appraisal of an Acession or Collection Object" + "desc": "Records the monetary appraisal value of an Accession or Collection Object, including the appraiser (Agent), appraisal date, and monetary unit." }, "attachment": { "items": { "accessionattachments": {"name": "Accession Attachments", "desc": "Accession Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "agentattachments": {"name": "Agent Attachments", "desc": "Agent Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, - "attachmentimageattribute": {"name": "Attachment Image Attribute", "desc": "Attachment Image Attribute", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "attachmentimageattribute": {"name": "Attachment Image Attribute", "desc": "Stores image-specific metadata for an Attachment, such as height, width, resolution, magnification, image type, and view description. Used primarily for specimen images.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "attachmentlocation": {"name": "Attachment Location", "desc": "Location of attachment repository.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "attachmentstorageconfig": {"name": "Attachment Storage Config", "desc": "Attachment Storage Config", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "borrowattachments": {"name": "Borrow Attachments", "desc": "Borrow Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -602,7 +602,7 @@ "aggregator": null, "defaultui": null, "name": "Attachment", - "desc": "An attachment is any digital file linked to a specific data record to provide supplementary information or media. This could be a photograph of a specimen, a scanned permit document, a field notes PDF, or an audio recording. Instead of storing the file directly in the database, which would make it large and slow, Specify saves the file to a dedicated Web Asset Server and stores only a reference to that file in the database record." + "desc": "A digital file (image, PDF, audio, etc.) linked to a data record. Instead of storing the file in the database, Specify stores it on a Web Asset Server and keeps a reference (location, MIME type, original filename, metadata) in this table. Supports licensing, copyright, and visibility controls." }, "attachmentimageattribute": { "items": { @@ -614,7 +614,7 @@ "magnification": {"name": "Magnification", "desc": "Magnification", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "mbimageid": {"name": "Mb Image Id", "desc": "Mb Image Id", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "morphbankview": {"name": "Morph Bank View", "desc": "Morph Bank View", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "morphbankview": {"name": "Morph Bank View", "desc": "Links to MorphBank (a morphological image database) views, providing integration with external image repositories.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "number1": {"name": "Number1", "desc": "Number1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "number2": {"name": "Number2", "desc": "Number2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Remarks", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -639,7 +639,7 @@ "aggregator": null, "defaultui": null, "name": "Attachment Image Attribute", - "desc": "Attachment Image Attribute" + "desc": "Stores image-specific metadata for an Attachment, such as height, width, resolution, magnification, image type, and view description. Used primarily for specimen images." }, "attachmentmetadata": { "items": { @@ -660,7 +660,7 @@ "aggregator": null, "defaultui": null, "name": "Attachment Metadata", - "desc": "This holds metadata about the attachment. It is a set of named value pairs." + "desc": "Key-value metadata pairs associated with an Attachment, allowing flexible storage of custom metadata fields (e.g., EXIF data, capture device info)." }, "attachmenttag": { "items": { @@ -680,15 +680,15 @@ "aggregator": null, "defaultui": null, "name": "Attachment Tag", - "desc": "An attribute tag of an attachment. This consists of a single text field for storing a tag. In later versions, users will be allowed to search attachments by their tag." + "desc": "User-defined keyword tags for Attachments, enabling search and categorization of digital media files." }, "attributedef": { "items": { "collectingeventattrs": {"name": "Collecting Event Attrs", "desc": "Collecting Event Attrs", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "collectionobjectattrs": {"name": "Collection Object Attrs", "desc": "Collection Object Attrs", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "datatype": {"name": "Data Type", "desc": "The data type of the attribute.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": false, "weblinkname": null}, - "discipline": {"name": "Discipline", "desc": "Discipline", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "datatype": {"name": "Data Type", "desc": "Defines the core data types used in the Specify data model (e.g., String, Number, Date, Boolean), used for schema and attribute definitions.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": false, "weblinkname": null}, + "discipline": {"name": "Discipline", "desc": "Organizational unit that may contain one or more Collections sharing the same Taxon, Geography, Lithostratigraphy, and Chronostratigraphy trees, as well as shared Localities, Agents, and Determination statuses.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "fieldname": {"name": "Field Name", "desc": "The field name of the attribute.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "preparationattrs": {"name": "Preparation Attrs", "desc": "Preparation Attrs", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, @@ -706,7 +706,7 @@ "aggregator": null, "defaultui": null, "name": "Attribute Definition", - "desc": "The definition of an attribute." + "desc": "Defines a custom attribute field that can be applied to Collection Objects, Collecting Events, or Preparations. Specifies the data type, field name, and which Prep Type it applies to." }, "author": { "items": { @@ -728,7 +728,7 @@ "aggregator": null, "defaultui": null, "name": "Author", - "desc": "An Author is a reference to an Agent and provides the order for a list of authors of a Reference Work." + "desc": "Links an Agent as an author to a Reference Work, with an order number to specify the author sequence (first author, second author, etc.)." }, "autonumberingscheme": { "items": { @@ -754,7 +754,7 @@ "aggregator": null, "defaultui": null, "name": "Auto Numbering Scheme", - "desc": "This is an internal table used to group parts of a collection with the same numbering scheme." + "desc": "Internal configuration table that defines auto-numbering formats for catalog numbers, accessions, or other identifiers. Groups collections, disciplines, or divisions that share the same numbering scheme." }, "borrow": { "items": { @@ -796,7 +796,7 @@ "aggregator": null, "defaultui": null, "name": "Borrow", - "desc": "Contains information about loans from another institution. When one institution borrows a group of objects from another institution, all objects in the borrowed group share a common set of attributes that are defined for the loan." + "desc": "Tracks incoming loans (borrows) from other institutions. Records the lender, dates (borrow date, due date, received date, closed date), invoice number, and status of the borrowed material." }, "borrowagent": { "items": { @@ -819,7 +819,7 @@ "aggregator": null, "defaultui": null, "name": "Borrow Agent", - "desc": "Refers to an Agent and describes their role in the borrowing process." + "desc": "Links an Agent to a Borrow record and defines their role (e.g., lender, contact person, shipper) in the borrowing transaction." }, "borrowattachment": { "items": { @@ -841,7 +841,7 @@ "aggregator": null, "defaultui": null, "name": "Borrow Attachment", - "desc": "Borrow Attachment" + "desc": "Links digital files (e.g., loan agreements, shipping documents) to a Borrow record." }, "borrowmaterial": { "items": { @@ -871,7 +871,7 @@ "aggregator": null, "defaultui": null, "name": "Borrow Material", - "desc": "Describes the material being borrowed." + "desc": "Describes individual items or lots included in a Borrow, with material number, description, quantity, and tracking of quantities returned or resolved." }, "borrowreturnmaterial": { "items": { @@ -895,15 +895,15 @@ "aggregator": null, "defaultui": null, "name": "Borrow Return Material", - "desc": "Describes the material that was returned." + "desc": "Tracks the return of borrowed material, recording the return date, quantity returned, and the Agent who received the return." }, "collectingevent": { "items": { "collectingeventattachments": {"name": "Collecting Event Attachments", "desc": "Collecting Event Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, - "collectingeventattribute": {"name": "Collecting Event Attribute", "desc": "Collecting Event Attribute", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToOne", "isrequired": false, "weblinkname": null}, + "collectingeventattribute": {"name": "Collecting Event Attribute", "desc": "A one-to-one extension table for Collecting Events, providing additional user-customizable attribute fields beyond the standard schema.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToOne", "isrequired": false, "weblinkname": null}, "collectingeventattrs": {"name": "Collecting Event Attrs", "desc": "Collecting Event Attrs", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "collectingeventauthorizations": {"name": "Collecting Event Authorizations", "desc": "Collecting Event Authorizations", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "collectingtrip": {"name": "Collecting Trip", "desc": "Collecting Trip", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "collectingtrip": {"name": "Collecting Trip", "desc": "Groups multiple Collecting Events into an expedition or field trip. Tracks the trip's start/end dates, participants, and purpose.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "collectionobjects": {"name": "Collection Objects", "desc": "Collection Objects", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "collectors": {"name": "Collectors", "desc": "Collectors", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -915,10 +915,10 @@ "guid": {"name": "GUID", "desc": "GUID", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "integer1": {"name": "Integer1", "desc": "Integer1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "integer2": {"name": "Integer2", "desc": "Integer2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "locality": {"name": "Locality", "desc": "Locality where collection took place.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "locality": {"name": "Locality", "desc": "Defines the 'where' of a collection: the specific place name, geographic coordinates (point, line, or polygon), coordinate determination method, datum, and elevation/depth. The foundation for georeferencing specimens.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "method": {"name": "Method", "desc": "A method, such as net or trap, which is used to obtain the specimen.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": "CollectingMethod", "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "paleocontext": {"name": "Paleo Context", "desc": "Paleo Context", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "paleocontext": {"name": "Paleo Context", "desc": "Provides paleontological context for a Collection Object, Collecting Event, or Locality, linking to chronostratigraphy, lithostratigraphy, and biostratigraphy data.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Remarks", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, "reservedinteger3": {"name": "Reserved Integer3", "desc": "Reserved Integer3", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "reservedinteger4": {"name": "Reserved Integer4", "desc": "Reserved Integer4", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -958,7 +958,7 @@ "aggregator": null, "defaultui": null, "name": "Collecting Event", - "desc": "A Collecting Event captures the “when” and “how” of a collection. It records the date, time, method, and the people (collectors) involved in capturing the specimen. Some disciplines identify CEs by a field number, while others rely on the unique combination of the locality name and date." + "desc": "Captures the 'when' and 'how' of a collection: the date(s), time, method, collectors, and field number. Links to a Locality for the 'where'. Some disciplines identify events by field number, others by locality+date combination." }, "collectingeventattachment": { "items": { @@ -981,11 +981,11 @@ "aggregator": null, "defaultui": null, "name": "Collecting Event Attachment", - "desc": "Refers to an attachment and provides an order." + "desc": "Links digital files (field photos, maps, audio recordings) to a Collecting Event, with ordinal for ordering." }, "collectingeventattr": { "items": { - "collectingevent": {"name": "Collecting Information", "desc": "Collecting Event", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "collectingevent": {"name": "Collecting Event", "desc": "Collecting Event", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "collectionmemberid": {"name": "Collection Member Id", "desc": "Collection Member Id", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "dblvalue": {"name": "Double Value", "desc": "Double Value", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Double", "isrequired": false, "weblinkname": null}, @@ -1004,7 +1004,7 @@ "aggregator": null, "defaultui": null, "name": "Collecting Event Attribute", - "desc": "User-customizable attributes that can be repurposed for various data collection needs." + "desc": "Stores values for user-customizable attributes defined by an AttributeDef, linked to a Collecting Event. Supports string and numeric value types." }, "collectingeventattribute": { "items": { @@ -1071,11 +1071,11 @@ "aggregator": null, "defaultui": null, "name": "Collecting Event Attribute", - "desc": "User-customizable attributes that can be repurposed for various data collection needs." + "desc": "A one-to-one extension table for Collecting Events, providing additional user-customizable attribute fields beyond the standard schema." }, "collectingeventauthorization": { "items": { - "collectingevent": {"name": "Collecting Information", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "collectingevent": {"name": "Collecting Event", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "permit": {"name": "Permit", "desc": "Permit", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -1092,15 +1092,15 @@ "aggregator": null, "defaultui": null, "name": "Collecting Event Authorization", - "desc": "Collecting Event Authorization" + "desc": "Records authorization for a Collecting Event, typically linking to a Permit that grants permission to collect at a specific time and place." }, "collectingtrip": { "items": { "agent1": {"name": "Agent1", "desc": "Agent1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "agent2": {"name": "Agent2", "desc": "Agent2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "collectingevents": {"name": "Collecting Information", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, + "collectingevents": {"name": "Collecting Event", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "collectingtripattachments": {"name": "Collecting Trip Attachments", "desc": "Collecting Trip Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "collectingtripattribute": {"name": "Collecting Trip Attribute", "desc": "Collecting Trip Attribute", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "collectingtripattribute": {"name": "Collecting Trip Attribute", "desc": "Stores values for user-customizable attributes linked to a Collecting Trip, supporting flexible data capture beyond the standard schema.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "collectingtripauthorizations": {"name": "Collecting Trip Authorizations", "desc": "Collecting Trip Authorizations", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "collectingtripname": {"name": "Trip Name", "desc": "Name of the collecting trip.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -1149,7 +1149,7 @@ "aggregator": null, "defaultui": null, "name": "Collecting Trip", - "desc": "Used to group Collecting Events together." + "desc": "Groups multiple Collecting Events into an expedition or field trip. Tracks the trip's start/end dates, participants, and purpose." }, "collectingtripattachment": { "items": { @@ -1172,7 +1172,7 @@ "aggregator": null, "defaultui": null, "name": "Collecting Trip Attachment", - "desc": "Collecting Trip Attachment" + "desc": "Links digital files (trip reports, maps, permits) to a Collecting Trip record." }, "collectingtripattribute": { "items": { @@ -1238,7 +1238,7 @@ "aggregator": null, "defaultui": null, "name": "Collecting Trip Attribute", - "desc": "User-customizable attributes that can be repurposed for various data collection needs" + "desc": "Stores values for user-customizable attributes linked to a Collecting Trip, supporting flexible data capture beyond the standard schema." }, "collectingtripauthorization": { "items": { @@ -1259,7 +1259,7 @@ "aggregator": null, "defaultui": null, "name": "Collecting Trip Authorization", - "desc": "Collecting Trip Authorization" + "desc": "Records authorization for a Collecting Trip, linking to a Permit that authorizes the overall expedition." }, "collection": { "items": { @@ -1267,7 +1267,7 @@ "catalognumformatname": {"name": "Catalog Num Format Name", "desc": "Name of catalog number format the collection uses.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": true, "weblinkname": null}, "code": {"name": "Code", "desc": "Unique code for collection.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "collectionname": {"name": "Collection Name", "desc": "The name of the collection.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, - "collectionobjecttype": {"name": "Collection Object Type", "desc": "Collection Object Type", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "collectionobjecttype": {"name": "Collection Object Type", "desc": "Categorizes Collection Objects by their nature (e.g., 'Specimen', 'Observation', 'Tissue Sample', 'DNA Extract', 'Sound Recording').", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "collectiontype": {"name": "Collection Type", "desc": "Textual description of collection. ABCD schema field.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "contentcontacts": {"name": "Content Contacts", "desc": "Content Contacts", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -1277,7 +1277,7 @@ "discipline": {"name": "Discipline", "desc": "Discipline", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "estimatedsize": {"name": "Estimated Size", "desc": "ABCD schema field.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "guid": {"name": "GUID", "desc": "GUID", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "institutionnetwork": {"name": "Institution Network", "desc": "Institution Network", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "institutionnetwork": {"name": "Institution Network", "desc": "Records affiliations or partnerships between Institutions (e.g., consortium memberships, collaborative agreements).", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "institutiontype": {"name": "Institution Type", "desc": "ABCD schema field.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "isanumber": {"name": "ISA Number", "desc": "ISA number.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "isembeddedcollectingevent": {"name": "Is Embedded Collecting Event", "desc": "Yes if collecting event is a one-to-one relationship.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": true, "weblinkname": null}, @@ -1310,7 +1310,7 @@ "aggregator": null, "defaultui": null, "name": "Collection", - "desc": "A collection holds Collection Objects that are of the same discipline type." + "desc": "Defines a collection within a Discipline, grouping Collection Objects of the same type (e.g., 'Birds', 'Insects', 'Paleobotany'). Each collection has its own catalog numbering and default preparation types." }, "collectionobject": { "items": { @@ -1326,7 +1326,7 @@ "cataloger": {"name": "Cataloger", "desc": "In Specify, the person who recorded the specimen data in the catalog. Cataloger records are stored in the Agent table.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "catalognumber": {"name": "Catalog Number", "desc": "The number that identifies an individual specimen, a lot of specimens, or an observation as a part of a museum collection.", "format": null, "ishidden": false, "isuiformatter": true, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "cojo": {"name": "Parent Group", "desc": "Connects a Collection Object to its Collection Object Group", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "OneToOne", "isrequired": false, "weblinkname": null}, - "collectingevent": {"name": "Collecting Information", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "collectingevent": {"name": "Collecting Event", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "collection": {"name": "Collection", "desc": "Collection", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "collectionmemberid": {"name": "Collection Member Id", "desc": "Collection Member Id", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": true, "weblinkname": null}, "collectionobjectattachments": {"name": "Collection Object Attachments", "desc": "Collection Object Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, @@ -1336,7 +1336,7 @@ "collectionobjectproperties": {"name": "Collection Object Properties", "desc": "Collection Object Properties", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "collectionobjecttype": {"name": "Type", "desc": "The type of object, such as a fish, mammal, mineral, rock, or meteorite.", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": "CollectionObjectType", "type": "ManyToOne", "isrequired": true, "weblinkname": null}, "conservdescriptions": {"name": "Conserv Descriptions", "desc": "Conserv Descriptions", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, - "container": {"name": "Container", "desc": "Container", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "container": {"name": "Container", "desc": "Represents a physical or logical container that can hold Collection Objects (e.g., a drawer, cabinet, box, or freezer rack). Containers can optionally be cataloged as Collection Objects themselves.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "containerowner": {"name": "Container Owner", "desc": "Container Owner", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "countamt": {"name": "Count Amount", "desc": "The number of objects (specimens, slides, pieces) prepared.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -1353,7 +1353,7 @@ "embargostartdate": {"name": "Embargo Start Date", "desc": "Embargo Start Date", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "embargostartdateprecision": {"name": "Embargo Start Date Precision", "desc": "Embargo Start Date Precision", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "exsiccataitems": {"name": "Exsiccata Items", "desc": "Exsiccata Items", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "fieldnotebookpage": {"name": "Field Notebook Page", "desc": "Field Notebook Page", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "fieldnotebookpage": {"name": "Field Notebook Page", "desc": "Describes an individual page within a Field Notebook, capturing the page number and date.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "fieldnumber": {"name": "Field Number", "desc": "A unique number a collector assigns to each specimen at the time of collection. For example, botanists often keep a running count of the individual specimens they have collected (LKK1023, LKK1024, etc.).", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "guid": {"name": "GUID", "desc": "Global Unique Identifier", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "integer1": {"name": "Integer1", "desc": "Integer1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -1418,7 +1418,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object", - "desc": "A general term for any item that can be part of a collection. This includes a physical specimen, a specimen lot, an observation, a sound recording, a slide, a tissue sample, or an extract. This is the central record that ties all other information together" + "desc": "The central record in Specify, representing any item in a collection: physical specimen, lot, observation, sound recording, slide, tissue sample, or extract. Ties together all related information (determinations, preparations, locality, collecting event, etc.)." }, "collectionobjectattachment": { "items": { @@ -1441,7 +1441,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Attachment", - "desc": "An attachment for a collection object and provides order." + "desc": "Links digital files (specimen photos, X-rays, field notes) to a Collection Object, with ordinal for ordering." }, "collectionobjectattr": { "items": { @@ -1464,7 +1464,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Attribute", - "desc": "User-customizable attributes that can be repurposed for various data collection needs." + "desc": "Stores values for user-customizable attributes defined by an AttributeDef, linked to a Collection Object. Supports string and numeric value types." }, "collectionobjectattribute": { "items": { @@ -1605,7 +1605,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Attribute", - "desc": "User-customizable attributes that can be repurposed for various data collection needs." + "desc": "A one-to-one extension table for Collection Objects, providing additional user-customizable attribute fields beyond the standard schema." }, "collectionobjectcitation": { "items": { @@ -1631,7 +1631,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Citation", - "desc": "Refers to a citation for a Collection Object." + "desc": "Links a Reference Work (publication) to a Collection Object, with optional figure, plate, and page numbers for citation details." }, "collectionobjectgroup": { "items": { @@ -1670,7 +1670,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Group", - "desc": "Collection Object Group" + "desc": "Groups multiple Collection Objects together for a specific purpose (e.g., a type series, a teaching collection, or a loan set). Uses CollectionObjectGroupType to define the grouping category." }, "collectionobjectgroupjoin": { "items": { @@ -1702,7 +1702,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Group Join", - "desc": "Collection Object Group Join" + "desc": "Join table linking Collection Objects to Collection Object Groups, enabling many-to-many relationships between objects and groups." }, "collectionobjectgrouptype": { "items": { @@ -1724,7 +1724,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Group Type", - "desc": "Collection Object Group Type" + "desc": "Defines the types or categories of Collection Object Groups (e.g., 'Type Series', 'Teaching Collection', 'Exhibit')." }, "collectionobjectproperty": { "items": { @@ -1906,7 +1906,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Property", - "desc": "Collection Object Property" + "desc": "Stores additional properties or measurements for a Collection Object, such as weight, length, or other quantitative attributes." }, "collectionobjecttype": { "items": { @@ -1932,7 +1932,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Object Type", - "desc": "Collection Object Type" + "desc": "Categorizes Collection Objects by their type (e.g., 'Fish', 'Observation', 'Tissue Sample', 'DNA Extract', 'Sound Recording')." }, "collectionrelationship": { "items": { @@ -1955,7 +1955,7 @@ "aggregator": null, "defaultui": null, "name": "Collection Relationship", - "desc": "Enables two collection objects to refer to each other, for example, voucher and tissue." + "desc": "Links two Collection Objects to each other, defining a relationship between them (e.g., voucher specimen to tissue sample, host to parasite, parent to offspring)." }, "collectionreltype": { "items": { @@ -1977,12 +1977,12 @@ "aggregator": null, "defaultui": null, "name": "Collection Relationship Type", - "desc": "Describes the type of relationship between two collection objects." + "desc": "Defines the types of relationships that can exist between Collection Objects (e.g., 'voucher for', 'parasite of', 'host to', 'derived from')." }, "collector": { "items": { "agent": {"name": "Agent", "desc": "Agent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, - "collectingevent": {"name": "Collecting Information", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "collectingevent": {"name": "Collecting Event", "desc": "Collecting Event", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "division": {"name": "Division", "desc": "Division", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "isprimary": {"name": "Is Primary", "desc": "Is Primary", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": true, "weblinkname": null}, @@ -2005,7 +2005,7 @@ "aggregator": null, "defaultui": null, "name": "Collector", - "desc": "In Specify, the person or persons who collected a specimen. Collector records are stored in the Agent table." + "desc": "Join table linking an Agent (as collector) to a Collecting Event, with an order field for listing multiple collectors in sequence." }, "commonnametx": { "items": { @@ -2016,7 +2016,7 @@ "language": {"name": "Language", "desc": "The language code.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "name": {"name": "Name", "desc": "Name", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, - "taxon": {"name": "Taxon", "desc": "Taxon", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "taxon": {"name": "Taxon", "desc": "Hierarchical tree representing the taxonomic classification of organisms (Kingdom > Phylum > Class > Order > Family > Genus > Species). Used for determinations and organizing collection objects.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "timestampcreated": {"name": "Timestamp Created", "desc": "The timestamp the record was created.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, "timestampmodified": {"name": "Timestamp Modified", "desc": "The timestamp the record was last modified.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, "variant": {"name": "Variant", "desc": "The variant code of the language.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, @@ -2030,7 +2030,7 @@ "aggregator": null, "defaultui": null, "name": "Common Name", - "desc": "Describes a common name and the localization of the name. This table is used to describe additional Common Names in other languages." + "desc": "Stores common (vernacular) names for a Taxon, with localization support including language, country, and variant information." }, "commonnametxcitation": { "items": { @@ -2061,51 +2061,50 @@ "aggregator": null, "defaultui": null, "name": "Common Name Tx Citation", - "desc": "Common Name Tx Citation" + "desc": "Links a Reference Work to a Common Name record, citing the source where the common name was published or used." }, "component": { "items": { - "absoluteages": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null, "name": "Absolute Ages", "desc": "Absolute Ages"}, - "catalognumber": {"format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null, "name": "Catalog Number", "desc": "User-assigned identifier for the component"}, - "collectionobject": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null, "name": "Collection Object", "desc": "Collection Object"}, - "createdbyagent": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null, "name": "Created By Agent", "desc": "Created By Agent"}, - "identifiedby": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null, "name": "Identified By", "desc": "Identified By"}, - "identifieddate": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.util.Calendar", "isrequired": false, "weblinkname": null, "name": "Identified Date", "desc": "Identified Date"}, - "integer1": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Integer1", "desc": "Integer1"}, - "integer2": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Integer2", "desc": "Integer2"}, - "integer3": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Integer3", "desc": "Integer3"}, - "integer4": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Integer4", "desc": "Integer4"}, - "integer5": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Integer5", "desc": "Integer5"}, - "integer6": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Integer6", "desc": "Integer6"}, - "modifiedbyagent": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null, "name": "Modified By Agent", "desc": "Modified By Agent"}, - "name": {"format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null, "name": "Name", "desc": "The name from a taxon tree corresponding to the chosen type."}, - "number1": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null, "name": "Number1", "desc": "Number1"}, - "number2": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null, "name": "Number2", "desc": "Number2"}, - "number3": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null, "name": "Number3", "desc": "Number3"}, - "number4": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null, "name": "Number4", "desc": "Number4"}, - "number5": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null, "name": "Number5", "desc": "Number5"}, - "number6": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null, "name": "Number6", "desc": "Number6"}, - "proportion": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Proportion", "desc": "Specify the proportion of the component relative to the whole."}, - "relativeages": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null, "name": "Relative Ages", "desc": "Relative Ages"}, - "role": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null, "name": "Role", "desc": "Define the role or purpose of the component in the overall collection."}, - "text1": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Text1", "desc": "Text1"}, - "text2": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Text2", "desc": "Text2"}, - "text3": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Text3", "desc": "Text3"}, - "text4": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Text4", "desc": "Text4"}, - "text5": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Text5", "desc": "Text5"}, - "text6": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Text6", "desc": "Text6"}, - "timestampcreated": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": true, "weblinkname": null, "name": "Timestamp Created", "desc": "Timestamp Created"}, - "timestampmodified": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null, "name": "Timestamp Modified", "desc": "Timestamp Modified"}, - "type": {"format": null, "ishidden": false, "isuiformatter": null, "picklistname": "CollectionObjectType", "type": "ManyToOne", "isrequired": true, "weblinkname": null, "name": "Type", "desc": "Determines the valid options for component names."}, - "uniqueidentifier": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null, "name": "Unique Identifier", "desc": "Uniquely identifies each component record"}, - "verbatimname": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null, "name": "Verbatim Name", "desc": "The original name printed or associated with the component."}, - "version": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null, "name": "Version", "desc": "Version"}, - "yesno1": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null, "name": "Yes No1", "desc": "Yes No1"}, - "yesno2": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null, "name": "Yes No2", "desc": "Yes No2"}, - "yesno3": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null, "name": "Yes No3", "desc": "Yes No3"}, - "yesno4": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null, "name": "Yes No4", "desc": "Yes No4"}, - "yesno5": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null, "name": "Yes No5", "desc": "Yes No5"}, - "yesno6": {"format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null, "name": "Yes No6", "desc": "Yes No6"} + "catalognumber": {"name": "Catalog Number", "desc": "User-assigned identifier for the component", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, + "collectionobject": {"name": "Collection Object", "desc": "Collection Object", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": true, "weblinkname": null}, + "componentid": {"name": "Component Id", "desc": "Component Id", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": true, "weblinkname": null}, + "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "identifiedby": {"name": "Identified By", "desc": "Identified By", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "identifieddate": {"name": "Identified Date", "desc": "Identified Date", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.util.Date", "isrequired": false, "weblinkname": null}, + "integer1": {"name": "Integer1", "desc": "Integer1", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "integer2": {"name": "Integer2", "desc": "Integer2", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "integer3": {"name": "Integer3", "desc": "Integer3", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "integer4": {"name": "Integer4", "desc": "Integer4", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "integer5": {"name": "Integer5", "desc": "Integer5", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "integer6": {"name": "Integer6", "desc": "Integer6", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "name": {"name": "Name", "desc": "The name from a taxon tree corresponding to the chosen type.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "number1": {"name": "Number1", "desc": "Number1", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "number2": {"name": "Number2", "desc": "Number2", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "number3": {"name": "Number3", "desc": "Number3", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "number4": {"name": "Number4", "desc": "Number4", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "number5": {"name": "Number5", "desc": "Number5", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "number6": {"name": "Number6", "desc": "Number6", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.math.BigDecimal", "isrequired": false, "weblinkname": null}, + "proportion": {"name": "Proportion", "desc": "Specify the proportion of the component relative to the whole.", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "role": {"name": "Role", "desc": "Define the role or purpose of the component in the overall collection.", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": true, "weblinkname": null}, + "text1": {"name": "Text1", "desc": "Text1", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "text2": {"name": "Text2", "desc": "Text2", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "text3": {"name": "Text3", "desc": "Text3", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "text4": {"name": "Text4", "desc": "Text4", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "text5": {"name": "Text5", "desc": "Text5", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "text6": {"name": "Text6", "desc": "Text6", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "timestampcreated": {"name": "Timestamp Created", "desc": "Timestamp Created", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": true, "weblinkname": null}, + "timestampmodified": {"name": "Timestamp Modified", "desc": "Timestamp Modified", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, + "type": {"name": "Type", "desc": "Determines the valid options for component names.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": "CollectionObjectType", "type": "ManyToOne", "isrequired": true, "weblinkname": null}, + "uniqueidentifier": {"name": "Unique Identifier", "desc": "Uniquely identifies each component record", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, + "verbatimname": {"name": "Verbatim Name", "desc": "The original name printed or associated with the component.", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "version": {"name": "Version", "desc": "Version", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, + "yesno1": {"name": "Yes No1", "desc": "Yes No1", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, + "yesno2": {"name": "Yes No2", "desc": "Yes No2", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, + "yesno3": {"name": "Yes No3", "desc": "Yes No3", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, + "yesno4": {"name": "Yes No4", "desc": "Yes No4", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, + "yesno5": {"name": "Yes No5", "desc": "Yes No5", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, + "yesno6": {"name": "Yes No6", "desc": "Yes No6", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null} }, "format": null, "ishidden": false, @@ -2115,7 +2114,7 @@ "aggregator": null, "defaultui": null, "name": "Component", - "desc": "Component" + "desc": "Represents a component part of a Collection Object, often featuring a unique number and/or taxonomic identification, with associated metadata like proportion, role, and identifiers." }, "conservdescription": { "items": { @@ -2154,7 +2153,7 @@ "number5": {"name": "Number5", "desc": "User definable", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Float", "isrequired": false, "weblinkname": null}, "objlength": {"name": "Object Length", "desc": "The length of the object.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.Float", "isrequired": false, "weblinkname": null}, "otherrecommendations": {"name": "Other Recommendations", "desc": "Other Recommendations", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "preparation": {"name": "Preparation", "desc": "Preparation", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "preparation": {"name": "Preparation", "desc": "Represents the distinct physical components of a Collection Object (e.g., skin, skeleton, tissue, slide, fluid-preserved jar). Supports extensible attributes and properties. A single Collection Object can have multiple Preparations.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Additional Comments", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, "shortdesc": {"name": "Short Description", "desc": "A short description of the object.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "source": {"name": "Source", "desc": "Source", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, @@ -2182,7 +2181,7 @@ "aggregator": null, "defaultui": null, "name": "Conservator Description", - "desc": "Describes an object that has participated in a Conservator action. There is only one of these for each Collection Object." + "desc": "Describes the conservation status and treatment history of a Collection Object. Each Collection Object can have at most one Conservation Description, which groups multiple treatment events." }, "conservdescriptionattachment": { "items": { @@ -2204,7 +2203,7 @@ "aggregator": null, "defaultui": null, "name": "Conservator Description Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (condition reports, treatment photos) to a Conservation Description." }, "conservevent": { "items": { @@ -2248,7 +2247,7 @@ "aggregator": null, "defaultui": null, "name": "Conservator Event", - "desc": "An action that takes place as part of a Conservation Description. Over a period of time there may be multiple incidents that require a Conservator to take action." + "desc": "Records a specific conservation or restoration action performed on a Collection Object as part of a Conservation Description. Multiple events can occur over time (e.g., cleaning, repair, pest treatment)." }, "conserveventattachment": { "items": { @@ -2270,7 +2269,7 @@ "aggregator": null, "defaultui": null, "name": "Conservator Event Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (treatment photos, before/after images) to a specific Conservation Event." }, "container": { "items": { @@ -2284,7 +2283,7 @@ "name": {"name": "Name", "desc": "The name of the container", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "number": {"name": "Number", "desc": "User definable", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, "parent": {"name": "Parent", "desc": "Parent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "storage": {"name": "Storage", "desc": "Storage", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "storage": {"name": "Storage", "desc": "Hierarchical tree representing the physical storage locations in the collection (e.g., Building > Room > Cabinet > Drawer > Tray). Used to track where Preparations are physically housed.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "timestampcreated": {"name": "Timestamp Created", "desc": "The timestamp the record was created.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, "timestampmodified": {"name": "Timestamp Modified", "desc": "The timestamp the record was last modified.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.sql.Timestamp", "isrequired": false, "weblinkname": null}, "type": {"name": "Type", "desc": "The type of container", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": "ContainerType", "type": "java.lang.Short", "isrequired": false, "weblinkname": null}, @@ -2298,7 +2297,7 @@ "aggregator": null, "defaultui": null, "name": "Container", - "desc": "A container can optionally be cataloged as a collection object and it contains other collection objects. Describes a logical or physical container." + "desc": "Represents a physical or logical container that can hold Collection Objects (e.g., a drawer, cabinet, box, or freezer rack). Containers can optionally be cataloged as Collection Objects themselves." }, "datatype": { "items": { @@ -2317,7 +2316,7 @@ "aggregator": null, "defaultui": null, "name": "Data Type", - "desc": "A data type represents a core type of collection data." + "desc": "Defines the core data types used in the Specify data model (e.g., String, Number, Date, Boolean), used for schema and attribute definitions." }, "deaccession": { "items": { @@ -2369,7 +2368,7 @@ "aggregator": null, "defaultui": null, "name": "Deaccession", - "desc": "Removal of a biological object (specimen, observation, or preparation type) from the collection. Deaccessions may include loans to other collections that are subsequently given to the borrower, lost specimens, and specimens that are destroyed." + "desc": "Records the permanent removal of Collection Objects from the collection, whether by transfer, exchange, gift, destruction, or loss. Tracks the reason, date, and method of deaccession." }, "deaccessionagent": { "items": { @@ -2391,7 +2390,7 @@ "aggregator": null, "defaultui": null, "name": "Deaccession Agent", - "desc": "Refers to an agent and contains their role in the deaccession." + "desc": "Links an Agent to a Deaccession and defines their role (e.g., recipient, authorizer, witness) in the deaccession process." }, "deaccessionattachment": { "items": { @@ -2413,7 +2412,7 @@ "aggregator": null, "defaultui": null, "name": "Deaccession Attachment", - "desc": "Deaccession Attachment" + "desc": "Links digital files (transfer agreements, disposal certificates) to a Deaccession record." }, "determination": { "items": { @@ -2426,7 +2425,7 @@ "determinationcitations": {"name": "Determination Citations", "desc": "Determination Citations", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "determineddate": {"name": "Determined Date", "desc": "The date it was determined.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.util.Calendar", "isrequired": false, "weblinkname": null}, "determineddateprecision": {"name": "Determined Date Precision", "desc": "Determined Date Precision", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "determiner": {"name": "Determiner", "desc": "Individual who assigned or made the decision regarding the taxonomic name of specimen. In some instances, determiner may be an organization or institute. In Specify, determiner information is stored in the Agent table.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "determiner": {"name": "Determiner", "desc": "Join table linking an Agent (as determiner) to a Determination, with an order field for listing multiple determiners in sequence.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "determiners": {"name": "Determiners", "desc": "Determiners", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "featureorbasis": {"name": "Feature Or Basis", "desc": "Body part, or characteristic used as the basis of a determination.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "guid": {"name": "GUID", "desc": "GUID", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -2476,7 +2475,7 @@ "aggregator": null, "defaultui": null, "name": "Determination", - "desc": "Sometimes referred to as an ‘Identification’, this record captures the taxonomic name assigned to a Collection Object. It includes data such as the determiner (the person who identified it), the date it was determined, confidence qualifiers (like “cf.” or “?”), type statuses, and remarks. A single Collection Object can have a history of many Determinations over time." + "desc": "Also called an Identification. Records the taxonomic name assigned to a Collection Object, including the determiner, determination date, confidence qualifiers (cf., aff., ?), type status, and remarks. A Collection Object can have a history of multiple determinations over time." }, "determinationcitation": { "items": { @@ -2502,7 +2501,7 @@ "aggregator": null, "defaultui": null, "name": "Determination Citation", - "desc": "Refers to a citation for the determination." + "desc": "Links a Reference Work to a Determination, citing the publication used to make the identification." }, "determiner": { "items": { @@ -2529,7 +2528,7 @@ "aggregator": null, "defaultui": null, "name": "Determiner", - "desc": "Individual who assigned or made the decision regarding the taxonomic name of specimen. In some instances, determiner may be an organization or institute. In Specify, determiner information is stored in the Agent table." + "desc": "Join table linking an Agent (as determiner) to a Determination, with an order field for listing multiple determiners in sequence." }, "discipline": { "items": { @@ -2564,7 +2563,7 @@ "aggregator": null, "defaultui": null, "name": "Discipline", - "desc": "May include one or more collections that share the Taxon, Geography, LithoStratigraphy, and Chronostratigraphy Trees, Localities, Agents and Determination Status." + "desc": "Organizational unit that may contain one or more Collections sharing the same Taxon, Geography, Lithostratigraphy, and Chronostratigraphy trees, as well as shared Localities, Agents, and Determination statuses." }, "disposal": { "items": { @@ -2597,7 +2596,7 @@ "aggregator": null, "defaultui": null, "name": "Disposal", - "desc": "A specific record documenting the physical removal or destruction of a preparation during a deaccession or process (e.g., a tissue sample being consumed for DNA analysis). This may be a destructive sample, item lost in transport, the item was disposed, or simply no longer found in the collection. These are linked to Preparations." + "desc": "Records the physical removal or destruction of a specific Preparation during deaccession (e.g., tissue consumed for DNA extraction, specimen lost in transit, or destroyed). Linked to Preparations." }, "disposalagent": { "items": { @@ -2619,7 +2618,7 @@ "aggregator": null, "defaultui": null, "name": "Disposal Agent", - "desc": "Disposal Agent" + "desc": "Links an Agent to a Disposal record and defines their role (e.g., authorizer, witness) in the disposal process." }, "disposalattachment": { "items": { @@ -2641,13 +2640,13 @@ "aggregator": null, "defaultui": null, "name": "Disposal Attachment", - "desc": "Disposal Attachment" + "desc": "Links digital files (disposal certificates, destruction records) to a Disposal record." }, "disposalpreparation": { "items": { "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "disposal": {"name": "Disposal", "desc": "Disposal", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "loanreturnpreparation": {"name": "Loan Return Preparation", "desc": "Loan Return Preparation", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "loanreturnpreparation": {"name": "Loan Return Preparation", "desc": "Tracks the return of loaned Preparations, recording the return date, condition, and quantity returned.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "preparation": {"name": "Preparation", "desc": "Preparation", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "quantity": {"name": "Quantity", "desc": "Quantity", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -2664,7 +2663,7 @@ "aggregator": null, "defaultui": null, "name": "Disposal Preparation", - "desc": "Disposal Preparation" + "desc": "Join table linking a Preparation to a Disposal, recording which specific preparations were disposed of and in what quantity." }, "division": { "items": { @@ -2676,7 +2675,7 @@ "discipline": {"name": "Discipline", "desc": "The discipline of the division", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "disciplines": {"name": "Disciplines", "desc": "The list of Disciplines that belong to this Division", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "iconuri": {"name": "Icon URL", "desc": "The URL to their icon", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, - "institution": {"name": "Institution", "desc": "The institution the division belongs to.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "institution": {"name": "Institution", "desc": "The top-level organization (e.g., museum, university) that owns the collections. An Institution contains one or more Divisions.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "members": {"name": "Members", "desc": "Members", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToMany", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "name": {"name": "Name", "desc": "The name of the division", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, @@ -2697,7 +2696,7 @@ "aggregator": null, "defaultui": null, "name": "Division", - "desc": "The division (or department) containing agents." + "desc": "A division or department within an Institution (e.g., 'Vertebrate Zoology', 'Botany'). Contains Agents and may oversee multiple Disciplines." }, "dnaprimer": { "items": { @@ -2741,7 +2740,7 @@ "aggregator": null, "defaultui": null, "name": "DNA Primer", - "desc": "DNA Primer" + "desc": "Stores DNA primer sequences used in molecular work, including the primer name, sequence, and direction (forward/reverse)." }, "dnasequence": { "items": { @@ -2761,11 +2760,11 @@ "dnasequencingruns": {"name": "DNA Sequencing Runs", "desc": "DNA Sequencing Runs", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "extractiondate": {"name": "Extraction Date", "desc": "Extraction Date", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "extractiondateprecision": {"name": "Extraction Date Precision", "desc": "Extraction Date Precision", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "extractor": {"name": "Extractor", "desc": "Extractor", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "extractor": {"name": "Extractor", "desc": "Links an Agent to a DNA Sequence record as the person who performed the extraction, with an order field for multiple extractors.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "extractors": {"name": "Extractors", "desc": "Extractors", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "genbankaccessionnumber": {"name": "Genbank Acc #", "desc": "Genbank Acc #", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "genesequence": {"name": "Gene Sequence", "desc": "The actual sequence", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "materialsample": {"name": "Material Sample", "desc": "Material Sample", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "materialsample": {"name": "Material Sample", "desc": "Records a material sample taken from a Collection Object for analysis (e.g., a tissue sample for DNA, a rock sample for geochemistry).", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "moleculetype": {"name": "Molecule Type", "desc": "Molecule Type", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": "MoleculeType", "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "number1": {"name": "Number1", "desc": "Number1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -2796,7 +2795,7 @@ "aggregator": null, "defaultui": null, "name": "DNA Sequence", - "desc": "Tracks DNA Sequencing information for a Collection Object." + "desc": "Stores DNA sequence data associated with a Collection Object, including the sequence itself, GenBank accession number, and primer information." }, "dnasequenceattachment": { "items": { @@ -2818,13 +2817,13 @@ "aggregator": null, "defaultui": null, "name": "DNA Sequence Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (chromatograms, sequence alignments) to a DNA Sequence record." }, "dnasequencerunattachment": { "items": { "attachment": {"name": "Attachment", "desc": "Attachment", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "createdbyagent": {"name": "Created By Agent", "desc": "Created By Agent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "dnasequencingrun": {"name": "DNA Sequencing Run", "desc": "DNA Sequencing Run", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "dnasequencingrun": {"name": "DNA Sequencing Run", "desc": "Records a DNA sequencing run, including the run date, protocol, machine used, and links to the resulting DNA sequences.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "ordinal": {"name": "Ordinal", "desc": "Ordinal", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Remarks", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -2840,7 +2839,7 @@ "aggregator": null, "defaultui": null, "name": "DNA Sequencing Run Attachment", - "desc": "DNA Sequencing Run Attachment" + "desc": "Records a DNA sequencing run, including the run date, protocol, machine used, and links to the resulting DNA sequences." }, "dnasequencingrun": { "items": { @@ -2894,7 +2893,7 @@ "aggregator": null, "defaultui": null, "name": "DNA Sequencing Run", - "desc": "DNA Sequencing Run" + "desc": "Records a DNA sequencing run, including the run date, protocol, machine used, and links to the resulting DNA sequences." }, "dnasequencingrunattachment": { "items": { @@ -2907,7 +2906,7 @@ "aggregator": null, "defaultui": null, "name": "dnasequencingrunattachment", - "desc": "dnasequencingrunattachment" + "desc": "Links digital files (run logs, quality reports) to a DNA Sequencing Run." }, "dnasequencingruncitation": { "items": { @@ -2938,7 +2937,7 @@ "aggregator": null, "defaultui": null, "name": "DNA Sequencing Run Citation", - "desc": "DNA Sequencing Run Citation" + "desc": "Links a Reference Work to a DNA Sequencing Run, citing the publication where the sequence data was reported." }, "exchangein": { "items": { @@ -2976,7 +2975,7 @@ "aggregator": null, "defaultui": null, "name": "Exchange In", - "desc": "Describes an incoming Exchanged Specimen from a different institution." + "desc": "Tracks specimens received from another institution as part of an exchange agreement. Records the sender, date received, and associated terms." }, "exchangeinattachment": { "items": { @@ -2998,7 +2997,7 @@ "aggregator": null, "defaultui": null, "name": "Exchange In Attachment", - "desc": "Exchange In Attachment" + "desc": "Links digital files (exchange agreements, shipping documents) to an incoming Exchange record." }, "exchangeinprep": { "items": { @@ -3025,7 +3024,7 @@ "aggregator": null, "defaultui": null, "name": "Exchange In Prep", - "desc": "Exchange In Prep" + "desc": "Links specific Preparations received as part of an incoming exchange, with quantity information." }, "exchangeout": { "items": { @@ -3065,7 +3064,7 @@ "aggregator": null, "defaultui": null, "name": "Exchange Out", - "desc": "Describes an outgoing Exchanged Specimen to a different institution." + "desc": "Tracks specimens sent to another institution as part of an exchange agreement. Records the recipient, date sent, and associated terms." }, "exchangeoutattachment": { "items": { @@ -3087,7 +3086,7 @@ "aggregator": null, "defaultui": null, "name": "Exchange Out Attachment", - "desc": "Exchange Out Attachment" + "desc": "Links digital files (exchange agreements, shipping documents) to an outgoing Exchange record." }, "exchangeoutprep": { "items": { @@ -3114,7 +3113,7 @@ "aggregator": null, "defaultui": null, "name": "Exchange Out Prep", - "desc": "Exchange Out Prep" + "desc": "Links specific Preparations sent as part of an outgoing exchange, with quantity information." }, "exsiccata": { "items": { @@ -3137,7 +3136,7 @@ "aggregator": null, "defaultui": null, "name": "Exsiccata", - "desc": "Exsiccata" + "desc": "Records an exsiccata series\u2014a published, numbered set of preserved specimens distributed to institutions. Common in botany and mycology." }, "exsiccataitem": { "items": { @@ -3159,7 +3158,7 @@ "aggregator": null, "defaultui": null, "name": "Exsiccata Item", - "desc": "Exsiccata Item" + "desc": "Links a specific Collection Object to an Exsiccata series, recording its number within the series." }, "extractor": { "items": { @@ -3185,7 +3184,7 @@ "aggregator": null, "defaultui": null, "name": "Extractor", - "desc": "Extractor" + "desc": "Links an Agent to a DNA Sequence record as the person who performed the extraction, with an order field for multiple extractors." }, "fieldnotebook": { "items": { @@ -3213,7 +3212,7 @@ "aggregator": null, "defaultui": null, "name": "Field Notebook", - "desc": "Describes a physical Field NoteBook." + "desc": "Describes a physical field notebook, including its identifier, owner, and storage location." }, "fieldnotebookattachment": { "items": { @@ -3235,7 +3234,7 @@ "aggregator": null, "defaultui": null, "name": "Field Notebook Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (scanned notebook pages, covers) to a Field Notebook record." }, "fieldnotebookpage": { "items": { @@ -3260,7 +3259,7 @@ "aggregator": null, "defaultui": null, "name": "Field Notebook Page", - "desc": "Describes a page from a Field Note Book." + "desc": "Describes an individual page within a Field Notebook, capturing the page number and date." }, "fieldnotebookpageattachment": { "items": { @@ -3282,7 +3281,7 @@ "aggregator": null, "defaultui": null, "name": "Field Notebook Page Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (scanned images) to a specific Field Notebook Page." }, "fieldnotebookpageset": { "items": { @@ -3310,7 +3309,7 @@ "aggregator": null, "defaultui": null, "name": "Field Notebook Page Set", - "desc": "Describes a set of Field Note Book pages. This can be used to group pages together that were scanned in together." + "desc": "Groups multiple Field Notebook Pages together, typically representing pages that were scanned together as a batch." }, "fieldnotebookpagesetattachment": { "items": { @@ -3332,7 +3331,7 @@ "aggregator": null, "defaultui": null, "name": "Field Notebook Page Set Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files to a Field Notebook Page Set." }, "fundingagent": { "items": { @@ -3357,7 +3356,7 @@ "aggregator": null, "defaultui": null, "name": "Funding Agent", - "desc": "Funding Agent" + "desc": "Links a funding agency (Agent) to a Collecting Trip or Project, recording the grant or funding source that supported the work." }, "geocoorddetail": { "items": { @@ -3415,7 +3414,7 @@ "aggregator": null, "defaultui": null, "name": "Geo Coord Detail", - "desc": "Describes extra detail for a Locality for Manis data." + "desc": "Stores additional georeferencing details for a Locality, originally designed for MANIS (Mammal Networked Information System) data compatibility." }, "geography": { "items": { @@ -3460,7 +3459,7 @@ "aggregator": null, "defaultui": null, "name": "Geography", - "desc": "Represents political boundary (Country, State, County, Township, etc.)." + "desc": "Hierarchical tree representing political boundaries (Country, State, Province, County, Township, etc.). Used to classify localities and agent collecting regions." }, "geographytreedef": { "items": { @@ -3485,7 +3484,7 @@ "aggregator": null, "defaultui": null, "name": "Geography Tree Definition", - "desc": "Defines the levels of the Geography tree." + "desc": "Defines the number, names, and hierarchy of levels in the Geography tree (e.g., Continent > Country > State > County)." }, "geographytreedefitem": { "items": { @@ -3516,7 +3515,7 @@ "aggregator": null, "defaultui": null, "name": "Geography Tree Definition Item", - "desc": "Describes a level in the definition of the tree." + "desc": "Describes a single level in the Geography tree definition, specifying its name, rank, and position in the hierarchy." }, "geologictimeperiod": { "items": { @@ -3534,7 +3533,7 @@ "guid": {"name": "GUID", "desc": "GUID", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "highestchildnodenumber": {"name": "Highest Child Node Number", "desc": "Highest Child Node Number", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, "isaccepted": {"name": "Is Preferred", "desc": "Is Preferred", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, - "isbiostrat": {"name": "Is BioStratigraphy", "desc": "Is BioStratigraphy", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "isbiostrat": {"name": "Is Biostratigraphy", "desc": "Is Biostratigraphy", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "name": {"name": "Name", "desc": "Name", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "nodenumber": {"name": "Node Number", "desc": "Node Number", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, @@ -3558,7 +3557,7 @@ "aggregator": null, "defaultui": null, "name": "Chronostratigraphy", - "desc": "Describes Chronostratigraphy." + "desc": "Hierarchical tree representing chronostratigraphic/geologic time units (Eon > Era > Period > Epoch > Age). Used for dating paleontological specimens." }, "geologictimeperiodtreedef": { "items": { @@ -3583,7 +3582,7 @@ "aggregator": null, "defaultui": null, "name": "Geological Time Period Tree Definition", - "desc": "Defines the levels of the GTP tree." + "desc": "Defines the levels and hierarchy of the Geologic Time Period tree." }, "geologictimeperiodtreedefitem": { "items": { @@ -3614,7 +3613,7 @@ "aggregator": null, "defaultui": null, "name": "Geological Time Period Tree Definition Item", - "desc": "Describes a level in the definition of the tree." + "desc": "Describes a single level in the Geologic Time Period tree definition." }, "gift": { "items": { @@ -3671,7 +3670,7 @@ "aggregator": null, "defaultui": null, "name": "Gift", - "desc": "Describes a Gift." + "desc": "Records specimens given as gifts to other institutions or individuals. Tracks the recipient, date, and purpose of the gift." }, "giftagent": { "items": { @@ -3695,7 +3694,7 @@ "aggregator": null, "defaultui": null, "name": "Gift Agent", - "desc": "Describes the role the Agent played in the giving of a Gift." + "desc": "Links an Agent to a Gift record and defines their role (e.g., donor, recipient, authorizer) in the gift transaction." }, "giftattachment": { "items": { @@ -3717,7 +3716,7 @@ "aggregator": null, "defaultui": null, "name": "Gift Attachment", - "desc": "Gift Attachment" + "desc": "Links digital files (gift agreements, correspondence) to a Gift record." }, "giftpreparation": { "items": { @@ -3750,7 +3749,7 @@ "aggregator": null, "defaultui": null, "name": "Gift Preparation", - "desc": "Points a gift to a preparation." + "desc": "Links specific Preparations included in a Gift, with quantity information." }, "groupperson": { "items": { @@ -3773,7 +3772,7 @@ "aggregator": null, "defaultui": null, "name": "Group Person", - "desc": "This is a join table for Agents that are Institutions and Organizations that contain other Agents. It also provides order." + "desc": "Join table for hierarchical Agent relationships, linking member Agents to parent organization Agents (e.g., a department within a university). Provides ordering." }, "inforequest": { "items": { @@ -3802,7 +3801,7 @@ "aggregator": null, "defaultui": null, "name": "Information Request", - "desc": "Describes a request for information on a collection and refers to a Bundle of Collection Objects." + "desc": "Records a request for information about Collection Objects, linking to a set of records and tracking the requester, date, and purpose." }, "institution": { "items": { @@ -3852,7 +3851,7 @@ "aggregator": null, "defaultui": null, "name": "Institution", - "desc": "The parent institution. An institution is made up of one or more divisions." + "desc": "The top-level organization (e.g., museum, university) that owns the collections. An Institution contains one or more Divisions." }, "institutionnetwork": { "items": { @@ -3885,7 +3884,7 @@ "aggregator": null, "defaultui": null, "name": "Institution Network", - "desc": "Institution Network" + "desc": "Records affiliations or partnerships between Institutions (e.g., consortium memberships, collaborative agreements)." }, "journal": { "items": { @@ -3911,7 +3910,7 @@ "aggregator": null, "defaultui": null, "name": "Journal", - "desc": "Refers to a published journal." + "desc": "Stores metadata about academic journals, used for citing Reference Works that are journal articles." }, "latlonpolygon": { "items": { @@ -3935,7 +3934,7 @@ "aggregator": null, "defaultui": null, "name": "Lat Lon Polygon", - "desc": "Lat Lon Polygon" + "desc": "Stores a geographic polygon (e.g., a collecting area boundary or protected area) defined by a series of latitude/longitude points." }, "latlonpolygonpnt": { "items": { @@ -3953,7 +3952,7 @@ "aggregator": null, "defaultui": null, "name": "Lat Lon Polygon Pnt", - "desc": "Lat Lon Polygon Pnt" + "desc": "Stores individual latitude/longitude points that make up a LatLonPolygon, with sequence order." }, "libraryrole": { "items": { @@ -3969,7 +3968,7 @@ "aggregator": null, "defaultui": null, "name": "Library Role", - "desc": "Stores names and descriptions of default roles that can be added to any collection." + "desc": "System table: Stores predefined (library/default) roles that can be assigned to users within any collection. Defines the base set of permissions available." }, "libraryrolepolicy": { "items": { @@ -3986,7 +3985,7 @@ "aggregator": null, "defaultui": null, "name": "Library Role Policy", - "desc": "Stores resource and action permissions for library roles within a collection." + "desc": "System table: Stores resource and action permissions associated with library (default) roles within a collection." }, "lithostrat": { "items": { @@ -4025,7 +4024,7 @@ "aggregator": null, "defaultui": null, "name": "Lithostratigraphy", - "desc": "The Lithostratigraphy tree." + "desc": "Hierarchical tree representing lithostratigraphic units (Supergroup > Group > Formation > Member > Bed). Used for geological context of specimens." }, "lithostrattreedef": { "items": { @@ -4050,7 +4049,7 @@ "aggregator": null, "defaultui": null, "name": "Lithostratigraphy Tree Definition", - "desc": "Defines the levels of the tree." + "desc": "Defines the levels and hierarchy of the Lithostratigraphy tree." }, "lithostrattreedefitem": { "items": { @@ -4081,7 +4080,7 @@ "aggregator": null, "defaultui": null, "name": "Lithostratigraphy Tree Definition Item", - "desc": "Describes a level in the definition of the tree." + "desc": "Describes a single level in the Lithostratigraphy tree definition." }, "loan": { "items": { @@ -4140,7 +4139,7 @@ "aggregator": null, "defaultui": null, "name": "Loan", - "desc": "A group of specimens that another institution borrows from your collection. Specify lets you manage all aspects of loans electronically so that you always have an up-to-date record of which specimen have been loaned and which have been returned." + "desc": "Tracks specimens loaned out to other institutions. Manages all aspects including loan date, due date, return tracking, and shipping. Each loan can include multiple preparations." }, "loanagent": { "items": { @@ -4163,7 +4162,7 @@ "aggregator": null, "defaultui": null, "name": "Loan Agent", - "desc": "An agent associated with a loan. Each agent includes the role played in the loan process." + "desc": "Links an Agent to a Loan and defines their role (e.g., Borrower, Benefactor, Sponsor, Preparer) in the loan transaction." }, "loanattachment": { "items": { @@ -4185,7 +4184,7 @@ "aggregator": null, "defaultui": null, "name": "Loan Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (loan agreements, shipping labels, insurance documents) to a Loan record." }, "loanpreparation": { "items": { @@ -4220,7 +4219,7 @@ "aggregator": null, "defaultui": null, "name": "Loan Preparation", - "desc": "A join table between the Loan and the Preparation. It contains comments and quantity fields." + "desc": "Join table linking a Preparation to a Loan, recording which specimens were loaned and in what quantity." }, "loanreturnpreparation": { "items": { @@ -4246,7 +4245,7 @@ "aggregator": null, "defaultui": null, "name": "Loan Return Preparation", - "desc": "This is used for tracking a returned Preparation for a loan." + "desc": "Tracks the return of loaned Preparations, recording the return date, condition, and quantity returned." }, "locality": { "items": { @@ -4316,7 +4315,7 @@ "aggregator": null, "defaultui": null, "name": "Locality", - "desc": "Locality records define the “where.” They include the specific name of a locale, its geographic coordinates (point, line, or rectangle), the method used to determine latitude/longitude, the datum, and other georeferencing details." + "desc": "Defines the 'where' of a collection: the specific place name, geographic coordinates (point, line, or polygon), coordinate determination method, datum, and elevation/depth. The foundation for georeferencing specimens." }, "localityattachment": { "items": { @@ -4338,7 +4337,7 @@ "aggregator": null, "defaultui": null, "name": "Locality Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (maps, site photos) to a Locality record." }, "localitycitation": { "items": { @@ -4364,7 +4363,7 @@ "aggregator": null, "defaultui": null, "name": "Locality Citation", - "desc": "A join table to link a Locality to a Citation." + "desc": "Links a Reference Work to a Locality, citing a publication that describes or mentions the locality." }, "localitydetail": { "items": { @@ -4430,7 +4429,7 @@ "aggregator": null, "defaultui": null, "name": "Locality Detail", - "desc": "Describes additional Locality detail. For example, water body and island information. Includes UTM fields." + "desc": "Stores additional locality information such as water body, island group, UTM coordinates, and other supplementary geographic details." }, "localitynamealias": { "items": { @@ -4452,7 +4451,7 @@ "aggregator": null, "defaultui": null, "name": "Locality Name Alias", - "desc": "Describes additional names for a given Locality." + "desc": "Stores alternate names or spellings for a Locality (e.g., historical names, variant spellings in different languages)." }, "materialsample": { "items": { @@ -4513,7 +4512,7 @@ "aggregator": null, "defaultui": null, "name": "Material Sample", - "desc": "Material Sample" + "desc": "Records a material sample taken from a Collection Object for analysis (e.g., a tissue sample for DNA, a rock sample for geochemistry)." }, "message": { "items": { @@ -4531,7 +4530,7 @@ "aggregator": null, "defaultui": null, "name": "Message", - "desc": "Stores user notifications." + "desc": "System table: Stores user notifications and messages within the application." }, "morphbankview": { "items": { @@ -4559,7 +4558,7 @@ "aggregator": null, "defaultui": null, "name": "Morph Bank View", - "desc": "Morph Bank View" + "desc": "Links to MorphBank (a morphological image database) views, providing integration with external image repositories." }, "otheridentifier": { "items": { @@ -4598,7 +4597,7 @@ "aggregator": null, "defaultui": null, "name": "Other Identifier", - "desc": "Describes an identifier (Catalog Number) of a Collection Object from a different Institution." + "desc": "Stores an identifier (catalog number or other ID) assigned to a Collection Object by another institution, enabling cross-referencing between collections." }, "paleocontext": { "items": { @@ -4619,7 +4618,7 @@ "number5": {"name": "Number5", "desc": "Number5", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "paleocontextname": {"name": "Context Name", "desc": "Context Name", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Remarks", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, - "tectonicunit": {"name": "Tectonic Unit", "desc": "Tectonic Unit", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "tectonicunit": {"name": "Tectonic Unit", "desc": "Hierarchical tree representing tectonic/terrane units used in geology and paleontology for describing the tectonic setting of specimens.", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "text1": {"name": "Bio Strat", "desc": "Bio Strat", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "text2": {"name": "Text2", "desc": "Text2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "text3": {"name": "Text3", "desc": "Text3", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -4642,7 +4641,7 @@ "aggregator": null, "defaultui": null, "name": "Paleo Context", - "desc": "Paleo Context provides contextual information on the chronostratigraphy, lithostratigraphy, and biostratigraphy of a collection object, collecting event, or locality." + "desc": "Provides paleontological context for a Collection Object, Collecting Event, or Locality, linking to chronostratigraphy, lithostratigraphy, and biostratigraphy data." }, "pcrperson": { "items": { @@ -4668,7 +4667,7 @@ "aggregator": null, "defaultui": null, "name": "Pcr Persons", - "desc": "Pcr Persons" + "desc": "Links an Agent to a DNA Sequencing Run as the person who performed the PCR (polymerase chain reaction) amplification." }, "permit": { "items": { @@ -4716,7 +4715,7 @@ "aggregator": null, "defaultui": null, "name": "Permit", - "desc": "The permit transaction window is designed to hold information linked to legal paperwork for permission from a government agency to collect a specimen or specimens. Preparation: A subdivision of a collection object that refers to the preparation method." + "desc": "Records legal permits and licenses for collecting specimens, including the issuing authority, permit number, date range, and terms. Links to Accessions, Collecting Events, and Loans." }, "permitattachment": { "items": { @@ -4738,7 +4737,7 @@ "aggregator": null, "defaultui": null, "name": "Permit Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (scanned permits, letters of authorization) to a Permit record." }, "picklist": { "items": { @@ -4769,7 +4768,7 @@ "aggregator": null, "defaultui": null, "name": "Pick List", - "desc": "System Table: A list of items that can be choosen to produce a controlled vocabulary." + "desc": "System table: Defines a controlled vocabulary (picklist) for a field, providing a dropdown list of selectable values to ensure data consistency." }, "picklistitem": { "items": { @@ -4791,7 +4790,7 @@ "aggregator": null, "defaultui": null, "name": "Pick List Item", - "desc": "Pick List Item" + "desc": "System table: An individual value within a Picklist, representing one selectable option in a controlled vocabulary." }, "preparation": { "items": { @@ -4824,7 +4823,7 @@ "number1": {"name": "Number1", "desc": "Number1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "number2": {"name": "Number2", "desc": "Number2", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "preparationattachments": {"name": "Preparation Attachments", "desc": "Preparation Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, - "preparationattribute": {"name": "Preparation Attribute", "desc": "Preparation Attribute", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToOne", "isrequired": false, "weblinkname": null}, + "preparationattribute": {"name": "Preparation Attribute", "desc": "A one-to-one extension table for Preparations, providing additional user-customizable attribute fields beyond the standard schema.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToOne", "isrequired": false, "weblinkname": null}, "preparationattrs": {"name": "Preparation Attrs", "desc": "Preparation Attrs", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "preparationproperties": {"name": "Preparation Properties", "desc": "Preparation Properties", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "preparedbyagent": {"name": "Prepared By", "desc": "Prepared By", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, @@ -4866,7 +4865,7 @@ "aggregator": null, "defaultui": null, "name": "Preparation", - "desc": "Preparations represent the distinct physical components of a Collection Object (e.g., a skin, a tissue sample, a skeleton, a fluid-preserved jar, or a microscope slide). It supports a large number of extensible attributes and properties." + "desc": "Represents the distinct physical components of a Collection Object (e.g., skin, skeleton, tissue, slide, fluid-preserved jar). Supports extensible attributes and properties. A single Collection Object can have multiple Preparations." }, "preparationattachment": { "items": { @@ -4889,7 +4888,7 @@ "aggregator": null, "defaultui": null, "name": "Preparation Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (preparation photos, X-rays) to a Preparation record." }, "preparationattr": { "items": { @@ -4912,7 +4911,7 @@ "aggregator": null, "defaultui": null, "name": "Preparation Attr", - "desc": "One-to-many user-customizable attributes that can be repurposed for various data collection needs." + "desc": "Stores values for user-customizable attributes defined by an AttributeDef, linked to a Preparation. Supports string and numeric value types." }, "preparationattribute": { "items": { @@ -4973,7 +4972,7 @@ "aggregator": null, "defaultui": null, "name": "Preparation Attribute", - "desc": "User-customizable attributes that can be repurposed for various data collection needs." + "desc": "A one-to-one extension table for Preparations, providing additional user-customizable attribute fields beyond the standard schema." }, "preparationproperty": { "items": { @@ -5155,7 +5154,7 @@ "aggregator": null, "defaultui": null, "name": "Preparation Property", - "desc": "Preparation Property" + "desc": "Stores additional properties or measurements for a Preparation, such as weight, dimensions, or preservation method." }, "preptype": { "items": { @@ -5177,7 +5176,7 @@ "aggregator": null, "defaultui": null, "name": "Preparation Type", - "desc": "Describe a Preparation Type. For example, Cleared and Stained, Mounted, etc." + "desc": "Defines the types of Preparations available in a collection (e.g., 'Cleared and Stained', 'Mounted', 'Frozen Tissue', 'Microscope Slide', 'Skeleton')." }, "project": { "items": { @@ -5213,7 +5212,7 @@ "aggregator": null, "defaultui": null, "name": "Project", - "desc": "Describes a grouping of Collection Objects." + "desc": "Groups Collection Objects together under a research project or study, enabling project-level organization and reporting." }, "recordset": { "items": { @@ -5243,7 +5242,7 @@ "aggregator": null, "defaultui": null, "name": "Record Set", - "desc": "Describes a set of records of any type that can be acted upon within the applicatiton." + "desc": "System table: Stores a set of record IDs of any type, used for batch operations, query results, and temporary selections within the application." }, "recordsetitem": { "items": { @@ -5259,7 +5258,7 @@ "aggregator": null, "defaultui": null, "name": "Record Set Item", - "desc": "Record Set Item" + "desc": "System table: An individual record ID within a Record Set." }, "referencework": { "items": { @@ -5309,7 +5308,7 @@ "aggregator": null, "defaultui": null, "name": "Reference Work", - "desc": "A literary reference work." + "desc": "Stores bibliographic references (publications, books, articles, theses) that can be cited from Determinations, Localities, Taxa, and other records." }, "referenceworkattachment": { "items": { @@ -5331,7 +5330,7 @@ "aggregator": null, "defaultui": null, "name": "Reference Work Attachment", - "desc": "Reference Work Attachment" + "desc": "Links digital files (PDFs, scans) to a Reference Work record." }, "relativeage": { "items": { @@ -5375,7 +5374,7 @@ "aggregator": null, "defaultui": null, "name": "Relative Age", - "desc": "Relative Age" + "desc": "Records a relative age determination (e.g., 'Early Miocene', 'Late Cretaceous') for a Collection Object, based on biostratigraphy or other relative dating methods." }, "relativeageattachment": { "items": { @@ -5399,7 +5398,7 @@ "aggregator": null, "defaultui": null, "name": "Relative Age Attachment", - "desc": "Relative Age Attachment" + "desc": "Links digital files to a Relative Age record." }, "relativeagecitation": { "items": { @@ -5426,7 +5425,7 @@ "aggregator": null, "defaultui": null, "name": "Relative Age Citation", - "desc": "Relative Age Citation" + "desc": "Links a Reference Work to a Relative Age record, citing the publication where the age determination was reported." }, "repositoryagreement": { "items": { @@ -5464,7 +5463,7 @@ "aggregator": null, "defaultui": null, "name": "Repository Agreement", - "desc": "An agreement for allowing an Accession to occur, but does not include ownership." + "desc": "Records a legal agreement that permits an Accession to occur without transferring ownership (e.g., a loan for study, a field repository agreement)." }, "repositoryagreementattachment": { "items": { @@ -5486,7 +5485,7 @@ "aggregator": null, "defaultui": null, "name": "Repository Agreement Attachment", - "desc": "Refers to an attachment and provides order." + "desc": "Links digital files (signed agreements, terms of deposit) to a Repository Agreement." }, "role": { "items": { @@ -5503,7 +5502,7 @@ "aggregator": null, "defaultui": null, "name": "Role", - "desc": "Stores names, descriptions, and collection information for user-created roles." + "desc": "System table: Stores user-defined roles with associated permissions for access control within a collection." }, "rolepolicy": { "items": { @@ -5520,7 +5519,7 @@ "aggregator": null, "defaultui": null, "name": "Role Policy", - "desc": "Stores resource and action permissions for user-created roles within a collection." + "desc": "System table: Stores resource and action permissions for user-defined roles within a collection." }, "shipment": { "items": { @@ -5559,7 +5558,7 @@ "aggregator": null, "defaultui": null, "name": "Shipment", - "desc": "Describes the shipment of a Loan or Exchange." + "desc": "Tracks the physical shipment of specimens for Loans, Exchanges, or Borrows, including carrier, tracking number, date sent, and date received." }, "spappresource": { "items": { @@ -5569,7 +5568,7 @@ "group": {"name": "Group", "desc": "Group", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "grouppermissionlevel": {"name": "Group Permission Level", "desc": "Group Permission Level", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, "level": {"name": "Level", "desc": "Level", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": true, "weblinkname": null}, - "metadata": {"name": "Meta Data", "desc": "Meta Data", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, + "metadata": {"name": "Metadata", "desc": "Metadata", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "mimetype": {"name": "Mime Type", "desc": "Mime Type", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "name": {"name": "Name", "desc": "Name", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": true, "weblinkname": null}, @@ -5589,7 +5588,7 @@ "aggregator": null, "defaultui": null, "name": "App Resource", - "desc": "System Table: This represents a resource, typically XML, that the application uses during run time." + "desc": "System table: Stores application resources (typically XML configuration) used by Specify at runtime for forms, views, and other UI components." }, "spappresourcedata": { "items": { @@ -5610,7 +5609,7 @@ "aggregator": null, "defaultui": null, "name": "App Resource Data", - "desc": "System Table: The data associated with an application resource." + "desc": "System table: Stores the data content associated with an application resource." }, "spappresourcedir": { "items": { @@ -5636,7 +5635,7 @@ "aggregator": null, "defaultui": null, "name": "App Resource Default", - "desc": "System Table: the default for application resources." + "desc": "System table: Defines the directory structure for organizing application resources." }, "spattachmentdataset": { "items": { @@ -5644,6 +5643,7 @@ "createdbyagent": {"name": "Createdbyagent", "desc": "Createdbyagent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "data": {"name": "Data", "desc": "Data", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "json", "isrequired": false, "weblinkname": null}, "importedfilename": {"name": "Importedfilename", "desc": "Importedfilename", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, + "matchingmode": {"name": "Matching Mode", "desc": "Determines which method to use when matching records", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modifiedbyagent", "desc": "Modifiedbyagent", "format": null, "ishidden": true, "isuiformatter": null, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "name": {"name": "Name", "desc": "Name", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "java.lang.String", "isrequired": true, "weblinkname": null}, "remarks": {"name": "Remarks", "desc": "Remarks", "format": null, "ishidden": false, "isuiformatter": null, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, @@ -5662,7 +5662,7 @@ "aggregator": null, "defaultui": null, "name": "Spattachmentdataset", - "desc": "Holds attachment data sets." + "desc": "System table: Groups attachments into datasets for batch processing or export." }, "spauditlog": { "items": { @@ -5687,7 +5687,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Audit Log", - "desc": "Sp Audit Log" + "desc": "System table: Records audit log entries tracking data changes (create, update, delete) for data entry tables." }, "spauditlogfield": { "items": { @@ -5709,7 +5709,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Audit Log Field", - "desc": "Sp Audit Log Field" + "desc": "System table: Records individual field-level changes within an audit log entry." }, "spdataset": { "items": { @@ -5739,7 +5739,7 @@ "aggregator": null, "defaultui": null, "name": "Spdataset", - "desc": "Stores Specify Data Sets created during bulk import using the WorkBench, typically through spreadsheet uploads." + "desc": "Stores data sets created during bulk import via the Specify 7 WorkBench, typically from spreadsheet uploads. Contains the mapping between spreadsheet columns and database fields." }, "spdatasetattachment": { "items": { @@ -5763,7 +5763,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Data Set Attachment", - "desc": "An attachment temporarily associated with a Specify Data Set for use in a WorkBench upload." + "desc": "Links digital files (specimen images, field notes) temporarily associated with a Specify 7 WorkBench data set during import." }, "specifyuser": { "items": { @@ -5799,7 +5799,7 @@ "aggregator": null, "defaultui": null, "name": "Specify User", - "desc": "System Table: This represents Specify User within the application." + "desc": "System table: Represents a user account in Specify." }, "spexportschema": { "items": { @@ -5823,7 +5823,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Export Schema", - "desc": "System Table:" + "desc": "System table: Defines export schemas for data export/import operations." }, "spexportschemaitem": { "items": { @@ -5847,7 +5847,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Export Schema Item", - "desc": "System Table:" + "desc": "System table: Defines individual fields within an export schema." }, "spexportschemaitemmapping": { "items": { @@ -5872,7 +5872,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Export Schema Item Mapping", - "desc": "Sp Export Schema Item Mapping" + "desc": "System table: Maps export schema items to database fields for data transformation." }, "spexportschemamapping": { "items": { @@ -5897,7 +5897,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Export Schema Mapping", - "desc": "Sp Export Schema Mapping" + "desc": "System table: Defines the mapping between export schemas and database tables." }, "spfieldvaluedefault": { "items": { @@ -5920,7 +5920,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Field Value Default", - "desc": "System Table: This represents a default field value for a form." + "desc": "System table: Stores default values for form fields, used to pre-populate data entry forms." }, "splocalecontainer": { "items": { @@ -5952,7 +5952,7 @@ "aggregator": null, "defaultui": null, "name": "Locale Container", - "desc": "System Table: This is used for localizing the database schema it has a localized name and description but can also contain localizable items." + "desc": "System table: Stores localized names and descriptions for database tables (schema containers), enabling multi-language support in the user interface." }, "splocalecontaineritem": { "items": { @@ -5983,7 +5983,7 @@ "aggregator": null, "defaultui": null, "name": "Locale Container Item", - "desc": "System Table: This is used for localizing the database schema it has a localized name and description." + "desc": "System table: Stores localized names and descriptions for individual database fields (schema container items), enabling multi-language support." }, "splocaleitemstr": { "items": { @@ -6009,7 +6009,7 @@ "aggregator": null, "defaultui": null, "name": "Locale Item String", - "desc": "System Table: This is used for localizing the database schema it represents a string and also a Language, Country and Variant for that string." + "desc": "System table: Stores localized string values with language, country, and variant identifiers for internationalization." }, "spmerging": { "items": { @@ -6037,7 +6037,7 @@ "aggregator": null, "defaultui": null, "name": "Spmerging", - "desc": "Tracks record and task IDs of records being merged." + "desc": "System table: Tracks records that are being merged, storing record IDs and task IDs for the merge process." }, "sppermission": { "items": { @@ -6055,7 +6055,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Permission", - "desc": "System Table:" + "desc": "Deprecated Specify 6 table: Stores individual permission records defining access rights to resources and actions." }, "spprincipal": { "items": { @@ -6081,7 +6081,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Principal", - "desc": "System Table:" + "desc": "Deprecated Specify 6 table: Stores security principals (users and groups) for the permission system." }, "spquery": { "items": { @@ -6114,7 +6114,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Query", - "desc": "System Table: This represents a saved Query." + "desc": "System table: Stores saved queries, including the query definition and configuration." }, "spqueryfield": { "items": { @@ -6152,7 +6152,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Query Field", - "desc": "System Table: This represents a single field in a saved Query." + "desc": "System table: Stores individual field definitions within a saved query." }, "spreport": { "items": { @@ -6178,7 +6178,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Report", - "desc": "System Table: This represents a saved Report." + "desc": "System table: Stores saved report definitions and configurations." }, "spsymbiotainstance": { "items": { @@ -6205,7 +6205,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Symbiota Instance", - "desc": "Sp Symbiota Instance" + "desc": "Deprecated Specify 6 table: Stores configuration for Symbiota integration instances, enabling data sharing with the Symbiota biodiversity platform." }, "sptasksemaphore": { "items": { @@ -6233,7 +6233,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Task Semaphore", - "desc": "System Table:" + "desc": "System table: Internal semaphore mechanism for coordinating background tasks and preventing concurrent execution." }, "spuserexternalid": { "items": { @@ -6252,7 +6252,7 @@ "aggregator": null, "defaultui": null, "name": "Spuserexternalid", - "desc": "Stores provider identifiers and tokens for users who sign in using Single Sign On (SSO)." + "desc": "Stores external provider identifiers and authentication tokens for users who sign in using Single Sign-On (SSO) providers (e.g., Entra ID/Azure AD, Keycloak, Google)." }, "spversion": { "items": { @@ -6276,7 +6276,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Version", - "desc": "Sp Version" + "desc": "System table: Tracks the Specify and database schema version." }, "spviewsetobj": { "items": { @@ -6284,7 +6284,7 @@ "description": {"name": "Description", "desc": "Description", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "filename": {"name": "File Name", "desc": "File Name", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "level": {"name": "Level", "desc": "Level", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": true, "weblinkname": null}, - "metadata": {"name": "Meta Data", "desc": "Meta Data", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, + "metadata": {"name": "Metadata", "desc": "Metadata", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "name": {"name": "Name", "desc": "Name", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": true, "weblinkname": null}, "spappresourcedatas": {"name": "App Resource Datas", "desc": "App Resource Datas", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, @@ -6301,7 +6301,7 @@ "aggregator": null, "defaultui": null, "name": "View Set Object", - "desc": "System Table: This represents a View Set used in the form system." + "desc": "System table: Stores view set definitions used by the Specify form system to define data entry forms and layouts." }, "spvisualquery": { "items": { @@ -6323,7 +6323,7 @@ "aggregator": null, "defaultui": null, "name": "Sp Visual Query", - "desc": "Sp Visual Query" + "desc": "System table: Stores visual query builder configurations." }, "storage": { "items": { @@ -6364,7 +6364,7 @@ "aggregator": null, "defaultui": null, "name": "Storage", - "desc": "A tree data structure for describing where Collection Objects are physically stored." + "desc": "Hierarchical tree representing the physical storage locations in the collection (e.g., Building > Room > Cabinet > Drawer > Tray). Used to track where Preparations are physically housed." }, "storageattachment": { "items": { @@ -6386,7 +6386,7 @@ "aggregator": null, "defaultui": null, "name": "Storage Attachment", - "desc": "Storage Attachment" + "desc": "Links digital files (storage maps, shelf photos) to a Storage location record." }, "storagetreedef": { "items": { @@ -6411,7 +6411,7 @@ "aggregator": null, "defaultui": null, "name": "Storage Tree Definition", - "desc": "Defines the levels of the tree." + "desc": "Defines the levels and hierarchy of the Storage tree." }, "storagetreedefitem": { "items": { @@ -6442,7 +6442,7 @@ "aggregator": null, "defaultui": null, "name": "Storage Tree Definition Item", - "desc": "Describes a level in the definition of the tree." + "desc": "Describes a single level in the Storage tree definition." }, "taxon": { "items": { @@ -6494,7 +6494,7 @@ "remarks": {"name": "Remarks", "desc": "Additional Comments", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "text", "isrequired": false, "weblinkname": null}, "source": {"name": "Source", "desc": "If the record has been imported then this field holds information about the authority file it was obtained from, else it is user-editable.", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "taxonattachments": {"name": "Taxon Attachments", "desc": "Taxon Attachments", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, - "taxonattribute": {"name": "Taxon Attribute", "desc": "Taxon Attribute", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, + "taxonattribute": {"name": "Taxon Attribute", "desc": "Stores additional attributes or properties for a Taxon (e.g., author citation, publication year, common characteristics).", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "taxoncitations": {"name": "Taxon Citations", "desc": "Taxon Citations", "format": null, "ishidden": false, "isuiformatter": false, "picklistname": null, "type": "OneToMany", "isrequired": false, "weblinkname": null}, "taxonomicserialnumber": {"name": "Taxonomic Serial Number", "desc": "If the record has been imported from an Authority File then this field stores a unique ID assigned by the provider, else it is null", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "text1": {"name": "Text 1", "desc": "Text 1", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, @@ -6559,7 +6559,7 @@ "aggregator": null, "defaultui": null, "name": "Taxon", - "desc": "Describes the taxonomy of a Determination." + "desc": "Hierarchical tree representing the taxonomic classification of organisms (Kingdom > Phylum > Class > Order > Family > Genus > Species). Used for determinations and organizing collection objects." }, "taxonattachment": { "items": { @@ -6581,7 +6581,7 @@ "aggregator": null, "defaultui": null, "name": "Taxon Attachment", - "desc": "This refers to an attachment and provides order." + "desc": "Links digital files (illustrations, distribution maps) to a Taxon record." }, "taxonattribute": { "items": { @@ -6764,7 +6764,7 @@ "aggregator": null, "defaultui": null, "name": "Taxon Attribute", - "desc": "Taxon Attribute" + "desc": "Stores additional attributes or properties for a Taxon (e.g., author citation, publication year, common characteristics)." }, "taxoncitation": { "items": { @@ -6795,7 +6795,7 @@ "aggregator": null, "defaultui": null, "name": "Taxon Citation", - "desc": "Linkage from the Taxonomic record to a published document." + "desc": "Links a Reference Work to a Taxon record, citing the publication where the taxon was described or revised." }, "taxontreedef": { "items": { @@ -6819,7 +6819,7 @@ "aggregator": null, "defaultui": null, "name": "Taxon Tree Definition", - "desc": "Defines the levels of the tree." + "desc": "Defines the levels and hierarchy of the Taxon tree (e.g., Kingdom, Phylum, Class, Order, Family, Genus, Species)." }, "taxontreedefitem": { "items": { @@ -6851,7 +6851,7 @@ "aggregator": null, "defaultui": null, "name": "Taxon Tree Definition Item", - "desc": "Describes a level in the definition of the tree." + "desc": "Describes a single level in the Taxon tree definition, specifying its name, rank, and position in the hierarchy." }, "tectonicunit": { "items": { @@ -6890,7 +6890,7 @@ "aggregator": null, "defaultui": null, "name": "Tectonic Unit", - "desc": "Tectonic Unit" + "desc": "Hierarchical tree representing tectonic/terrane units used in geology and paleontology for describing the tectonic setting of specimens." }, "tectonicunittreedef": { "items": { @@ -6915,7 +6915,7 @@ "aggregator": null, "defaultui": null, "name": "Tectonic Unit Tree Def", - "desc": "Tectonic Unit Tree Def" + "desc": "Defines the levels and hierarchy of the Tectonic Unit tree." }, "tectonicunittreedefitem": { "items": { @@ -6947,7 +6947,7 @@ "aggregator": null, "defaultui": null, "name": "Tectonic Unit Tree Def Item", - "desc": "Tectonic Unit Tree Def Item" + "desc": "Describes a single level in the Tectonic Unit tree definition." }, "treatmentevent": { "items": { @@ -6996,7 +6996,7 @@ "aggregator": null, "defaultui": null, "name": "Treatment Event", - "desc": "An action that occurs to a Conservation Description." + "desc": "Records a specific conservation treatment action performed on a Collection Object (e.g., pest eradication, cleaning, repair, stabilization). Part of a Conservation Description." }, "treatmenteventattachment": { "items": { @@ -7018,7 +7018,7 @@ "aggregator": null, "defaultui": null, "name": "Treatment Event Attachment", - "desc": "Treatment Event Attachment" + "desc": "Links digital files (treatment reports, before/after photos) to a Treatment Event." }, "uniquenessrule": { "items": { @@ -7035,7 +7035,7 @@ "aggregator": null, "defaultui": null, "name": "Uniqueness Rule", - "desc": "Stores table names in the data model that have uniqueness rules configured for each discipline." + "desc": "Stores table names that have uniqueness constraints configured per discipline, defining which tables require unique field combinations." }, "uniquenessrulefield": { "items": { @@ -7052,7 +7052,7 @@ "aggregator": null, "defaultui": null, "name": "Uniqueness Rule Field", - "desc": "Stores field names in the data model that have uniqueness rules configured for each discipline, linked to UniquenessRule records." + "desc": "Stores field names that participate in uniqueness constraints per discipline, linked to UniquenessRule records." }, "userpolicy": { "items": { @@ -7070,7 +7070,7 @@ "aggregator": null, "defaultui": null, "name": "User Policy", - "desc": "Records permissions for a user within a collection." + "desc": "Records specific resource and action permissions granted to a user within a collection." }, "userrole": { "items": { @@ -7086,7 +7086,7 @@ "aggregator": null, "defaultui": null, "name": "User Role", - "desc": "Records roles associated with ecify users." + "desc": "Records the roles assigned to a user within a collection, linking users to their role-based permissions." }, "voucherrelationship": { "items": { @@ -7123,7 +7123,7 @@ "aggregator": null, "defaultui": null, "name": "Voucher Relationship", - "desc": "Voucher Relationship" + "desc": "Links a voucher specimen (Collection Object) to a taxon concept or DNA sequence, establishing the specimen as the physical voucher for that identification or genetic data." }, "workbench": { "items": { @@ -7156,14 +7156,14 @@ "aggregator": null, "defaultui": null, "name": "WorkBench", - "desc": "A WorkBench DataSet." + "desc": "Deprecated table: Represents a Specify 6 WorkBench data set created during bulk data import, typically from a spreadsheet. Contains the import configuration and mapping metadata." }, "workbenchdataitem": { "items": { "celldata": {"name": "Cell Data", "desc": "Cell Data", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "rownumber": {"name": "Row Number", "desc": "Row Number", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": false, "weblinkname": null}, "validationstatus": {"name": "Validation Status", "desc": "Validation Status", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": false, "weblinkname": null}, - "workbenchrow": {"name": "Workbench Row", "desc": "Workbench Row", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, + "workbenchrow": {"name": "Workbench Row", "desc": "Deprecated table: Represents a single row of data in a Specify 6 WorkBench data set, containing multiple data items.", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null}, "workbenchtemplatemappingitem": {"name": "Workbench Template Mapping Item", "desc": "Workbench Template Mapping Item", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "ManyToOne", "isrequired": false, "weblinkname": null} }, "format": null, @@ -7174,7 +7174,7 @@ "aggregator": null, "defaultui": null, "name": "WorkBench Data Item", - "desc": "A cell of data." + "desc": "Deprecated table: Stores the value of a single cell in a Specify 6 WorkBench data set row." }, "workbenchrow": { "items": { @@ -7204,7 +7204,7 @@ "aggregator": null, "defaultui": null, "name": "Workbench Row", - "desc": "A row of data." + "desc": "Deprecated table: Represents a single row of data in a Specify 6 WorkBench data set, containing multiple data items." }, "workbenchrowexportedrelationship": { "items": { @@ -7227,7 +7227,7 @@ "aggregator": null, "defaultui": null, "name": "Workbench Row Exported Relationship", - "desc": "Workbench Row Exported Relationship" + "desc": "Deprecated table: Tracks relationships created between records during Specify 6 WorkBench data export/import operations." }, "workbenchrowimage": { "items": { @@ -7245,7 +7245,7 @@ "aggregator": null, "defaultui": null, "name": "Workbench Row Image", - "desc": "An image associated with a row." + "desc": "Deprecated table: Links an image file to a specific row in a Specify 6 WorkBench data set, used for associating media during import." }, "workbenchtemplate": { "items": { @@ -7269,7 +7269,7 @@ "aggregator": null, "defaultui": null, "name": "WorkBench Template", - "desc": "The mapping description of the WorkBench." + "desc": "Deprecated table: Defines the column mapping template for a Specify 6 WorkBench data set, specifying how spreadsheet columns map to database fields." }, "workbenchtemplatemappingitem": { "items": { @@ -7284,7 +7284,7 @@ "isexportabletocontent": {"name": "Is Exportable To Content", "desc": "Is Exportable To Content", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, "isincludedintitle": {"name": "Is Included In Title", "desc": "Is Included In Title", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, "isrequired": {"name": "Is Required", "desc": "Is Required", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Boolean", "isrequired": false, "weblinkname": null}, - "metadata": {"name": "Meta Data", "desc": "Meta Data", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, + "metadata": {"name": "Metadata", "desc": "Metadata", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.String", "isrequired": false, "weblinkname": null}, "modifiedbyagent": {"name": "Modified By Agent", "desc": "Modified By Agent", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": null, "isrequired": false, "weblinkname": null}, "origimportcolumnindex": {"name": "Original Import Column Index", "desc": "Original Import Column Index", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Short", "isrequired": false, "weblinkname": null}, "srctableid": {"name": "Source Table Id", "desc": "Source Table Id", "format": null, "ishidden": true, "isuiformatter": false, "picklistname": null, "type": "java.lang.Integer", "isrequired": false, "weblinkname": null}, @@ -7306,6 +7306,6 @@ "aggregator": null, "defaultui": null, "name": "WorkBench Template Mapping Item", - "desc": "One column of the mapped description." + "desc": "Deprecated table: Defines the mapping for a single column in a Specify 6 WorkBench template, specifying the target database field and transformation rules." } } diff --git a/nginx.conf b/nginx.conf index c83f380bf56..8073f00ecee 100644 --- a/nginx.conf +++ b/nginx.conf @@ -29,7 +29,11 @@ server { location / { client_max_body_size 400M; client_body_buffer_size 400M; - client_body_timeout 120; + client_body_timeout 600s; + proxy_connect_timeout 600s; + proxy_send_timeout 600s; + proxy_read_timeout 600s; + send_timeout 600s; resolver 127.0.0.11 valid=30s; set $backend "http://specify7:8000"; proxy_pass $backend; diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 00000000000..c5c37d97a12 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +DJANGO_SETTINGS_MODULE = specifyweb.settings diff --git a/requirements-testing.txt b/requirements-testing.txt index 21bba85648c..aab161ee7f1 100644 --- a/requirements-testing.txt +++ b/requirements-testing.txt @@ -3,4 +3,6 @@ mypy==1.5.1 hypothesis>=6.131.9,<7 hypothesis-jsonschema==0.19.0 types-requests==2.28.5 -lxml \ No newline at end of file +lxml +coverage +pytest-django diff --git a/requirements.txt b/requirements.txt index 4b96e10aac3..e424999bd63 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,13 +5,13 @@ wheel kombu==5.5.2 redis==6.4.0 celery==5.5.1 -Django==4.2.27 +Django==4.2.30 mysqlclient==2.1.1 SQLAlchemy==1.4.54 sqlalchemy2-stubs requests==2.32.4 pycryptodome==3.21.0 -PyJWT==2.4.0 +PyJWT==2.12.1 django-auth-ldap==1.2.17 jsonschema==4.0.1 typing-extensions==4.12.2 diff --git a/scripts/__init__.py b/scripts/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/scripts/eol/__init__.py b/scripts/eol/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/scripts/eol/check_eol.py b/scripts/eol/check_eol.py new file mode 100644 index 00000000000..dd4cf5213af --- /dev/null +++ b/scripts/eol/check_eol.py @@ -0,0 +1,11 @@ +import sys + +from scripts.eol.runner import run_all + + +if __name__ == "__main__": + if len(sys.argv) == 1: + run_all() + else: + from scripts.eol.runner import run_one + run_one(sys.argv[1].lower()) \ No newline at end of file diff --git a/scripts/eol/eol_api.py b/scripts/eol/eol_api.py new file mode 100644 index 00000000000..18146317aed --- /dev/null +++ b/scripts/eol/eol_api.py @@ -0,0 +1,32 @@ +import requests +import datetime +import sys +from requests import RequestException + + +def get_eol_date(api_url: str, cycle: str): + try: + response = requests.get(api_url, timeout=10) + response.raise_for_status() + except RequestException as exc: + print(f"ERROR: Failed to fetch EOL data: {exc}") + sys.exit(1) + + for release in response.json(): + if str(release["cycle"]) == cycle: + return release["eol"] + + print(f"ERROR: No EOL data found for cycle {cycle}") + sys.exit(1) + + +def calculate_days_remaining(eol_date: str): + if not isinstance(eol_date, str) or not eol_date or eol_date is False: + return None + + try: + today = datetime.date.today() + eol = datetime.datetime.strptime(eol_date, "%Y-%m-%d").date() + return (eol - today).days + except ValueError: + return None \ No newline at end of file diff --git a/scripts/eol/runner.py b/scripts/eol/runner.py new file mode 100644 index 00000000000..3446880ac17 --- /dev/null +++ b/scripts/eol/runner.py @@ -0,0 +1,43 @@ +from scripts.eol.scanner import scan_repo +from scripts.eol.runtimes import RUNTIMES +from scripts.eol.eol_api import get_eol_date, calculate_days_remaining + +THRESHOLD_DAYS = 180 + + +def run_one(product): + run_all(filter_product=product) + + +def run_all(filter_product=None): + detected = scan_repo() + + if filter_product: + detected = {filter_product: detected.get(filter_product)} + + for name, version in detected.items(): + if not version: + continue + + runtime = RUNTIMES.get(name) + if not runtime: + continue + + eol_date = get_eol_date(runtime.api, version) + days = calculate_days_remaining(eol_date) + + if days is None: + status = "UNKNOWN" + else: + status = "WARNING" if days < THRESHOLD_DAYS else "OK" + + print(f"STATUS={status}") + print(f"{name.upper()}_VERSION={version}") + print(f"{name.upper()}_CYCLE={version}") + print(f"EOL_DATE={eol_date}") + print(f"DAYS_REMAINING={days}") + + print(f"\n--- {runtime.display_name} ---") + print(f"Version: {version}") + print(f"EOL: {eol_date}") + print(f"Status: {status}\n") \ No newline at end of file diff --git a/scripts/eol/runtimes.py b/scripts/eol/runtimes.py new file mode 100644 index 00000000000..6918c4d9e89 --- /dev/null +++ b/scripts/eol/runtimes.py @@ -0,0 +1,24 @@ +class Runtime: + def __init__(self, name, api, display_name): + self.name = name + self.api = api + self.display_name = display_name + + +RUNTIMES = { + "python": Runtime( + "python", + "https://endoflife.date/api/python.json", + "Python", + ), + "node": Runtime( + "node", + "https://endoflife.date/api/nodejs.json", + "Node.js", + ), + "django": Runtime( + "django", + "https://endoflife.date/api/django.json", + "Django", + ), +} \ No newline at end of file diff --git a/scripts/eol/scanner.py b/scripts/eol/scanner.py new file mode 100644 index 00000000000..db30b93c52c --- /dev/null +++ b/scripts/eol/scanner.py @@ -0,0 +1,132 @@ +import json +import re +from pathlib import Path + + +def detect_node(): + # Search for package.json files recursively + for pkg in Path(".").rglob("package.json"): + try: + data = json.loads(pkg.read_text()) + engines = data.get("engines", {}) + node = engines.get("node") + + if not node: + continue + + m = re.search(r"(\d+)", node) + if m: + return m.group(1) + except (json.JSONDecodeError, OSError, ValueError): + continue + + return None + + +def detect_python(): + # Try pyproject.toml + pyproject = Path("pyproject.toml") + if pyproject.exists(): + try: + content = pyproject.read_text() + # Look for requires-python in pyproject.toml + match = re.search(r'requires-python\s*=\s*["\']([^"\']+)["\']', content) + if match: + version_spec = match.group(1) + # Extract X.Y format from version specs like ">=3.12" or "^3.12" + version_match = re.search(r"(\d+)\.(\d+)", version_spec) + if version_match: + return f"{version_match.group(1)}.{version_match.group(2)}" + except (OSError, ValueError): + return None + + # Try .python-version + python_version = Path(".python-version") + if python_version.exists(): + try: + content = python_version.read_text().strip() + except OSError: + content = "" + # Extract X.Y format + match = re.search(r"^(\d+)\.(\d+)", content) + if match: + return f"{match.group(1)}.{match.group(2)}" + + # Try runtime.txt + runtime = Path("runtime.txt") + if runtime.exists(): + try: + content = runtime.read_text().strip() + # Look for python-X.Y pattern + match = re.search(r"python-(\d+)\.(\d+)", content) + if match: + return f"{match.group(1)}.{match.group(2)}" + except OSError: + # Ignore unreadable runtime.txt and continue with other detection strategies. + pass + + # Try GitHub Actions workflows + workflows_dir = Path(".github/workflows") + if workflows_dir.exists(): + try: + for workflow in workflows_dir.glob("*.yml"): + try: + content = workflow.read_text() + # Look for setup-python with python-version + match = re.search(r"python-version:\s*[\"']?(\d+\.\d+)", content) + if match: + return match.group(1) + except OSError: + continue + except OSError: + pass + + return None + + +def detect_django(): + req_file = Path("requirements.txt") + + if not req_file.exists(): + return None + + try: + content = req_file.read_text() + except OSError: + return None + + match = re.search( + r"(?i)^django\b\s*([<>=!~]=?)\s*([\d\.]+)", + content, + re.MULTILINE + ) + + if not match: + return None + + version = match.group(2) + + # Normalize to major.minor + parts = version.split(".") + if len(parts) >= 2: + return f"{parts[0]}.{parts[1]}" + + return f"{parts[0]}.0" + + +def scan_repo(): + results = {} + + node = detect_node() + if node: + results["node"] = node + + python = detect_python() + if python: + results["python"] = python + + django = detect_django() + if django: + results["django"] = django + + return results \ No newline at end of file diff --git a/sp7_db_setup_check.sh b/sp7_db_setup_check.sh index 0cb250b7145..8d73a7fddd1 100644 --- a/sp7_db_setup_check.sh +++ b/sp7_db_setup_check.sh @@ -169,13 +169,21 @@ fi # Detect client host as seen by MariaDB CLIENT_HOST="$(mariadb -N -B -h "$DB_HOST" -P "$DB_PORT" \ -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ - -sse "SELECT SUBSTRING_INDEX(USER(),'@',-1);")" || CLIENT_HOST="" + -sse "SELECT SUBSTRING_INDEX(CURRENT_USER(),'@',-1);")" || CLIENT_HOST="" CLIENT_HOST="${CLIENT_HOST%% *}" -if [[ -n "$CLIENT_HOST" ]]; then - echo "Client host as seen by MariaDB: '$CLIENT_HOST'" +if [[ "$SAME_MASTER_AND_MIGRATOR" == true ]]; then + MIGRATOR_USER_HOST="${CLIENT_HOST:-}" +else + MIGRATOR_USER_HOST="${MIGRATOR_USER_HOST:-${CLIENT_HOST:-}}" +fi + +if [[ "$SAME_MASTER_AND_APP" == true ]]; then + APP_USER_HOST="${CLIENT_HOST:-}" +elif [[ "$SAME_MIGRATOR_AND_APP" == true ]]; then + APP_USER_HOST="${MIGRATOR_USER_HOST:-}" else - echo "Warning: Could not detect client host via USER(); will only create users for explicit *_HOST values." + APP_USER_HOST="${APP_USER_HOST:-${CLIENT_HOST:-}}" fi # Create database if it doesn't exist @@ -203,13 +211,13 @@ if [[ "$SAME_MASTER_AND_MIGRATOR" == true ]]; then echo "Relying on master privileges for runtime connections." else USER_EXISTS=$(mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -sse \ -"SELECT COUNT(*) FROM mysql.user WHERE user = '$SQL_MIGRATOR_NAME' AND host = '$CLIENT_HOST';") +"SELECT COUNT(*) FROM mysql.user WHERE user = '$SQL_MIGRATOR_NAME' AND host = '$MIGRATOR_USER_HOST';") if [[ "$USER_EXISTS" -eq 0 && "$MIGRATOR_NAME" != "root" ]]; then echo "Creating migrator user '$MIGRATOR_NAME'..." - echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"CREATE USER '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}' IDENTIFIED BY '';\"" + echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"CREATE USER '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}' IDENTIFIED BY '';\"" if mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ - -e "CREATE USER '$SQL_MIGRATOR_NAME'@'$CLIENT_HOST' IDENTIFIED BY '$SQL_MIGRATOR_PASSWORD';"; then + -e "CREATE USER '$SQL_MIGRATOR_NAME'@'$MIGRATOR_USER_HOST' IDENTIFIED BY '$SQL_MIGRATOR_PASSWORD';"; then NEW_MIGRATOR_USER_CREATED=1 else echo "Error: Failed to create user." @@ -225,20 +233,20 @@ else echo "Migrator user already exists. Refreshing privileges on '${DB_NAME}'..." fi -echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;\"" +echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}'; FLUSH PRIVILEGES;\"" if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ - -e "GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;"; then + -e "GRANT ALL PRIVILEGES ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}'; FLUSH PRIVILEGES;"; then echo "Error: Failed to grant privileges to migrator user." exit 1 fi GRANTS_OUTPUT="$(mysql -N -B --raw -h "$DB_HOST" -P "$DB_PORT" \ -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ - -e "SHOW GRANTS FOR '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}';" 2>/dev/null || true)" + -e "SHOW GRANTS FOR '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}';" 2>/dev/null || true)" if [[ -z "$GRANTS_OUTPUT" ]]; then - echo "Error: Could not retrieve grants for '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}'." + echo "Error: Could not retrieve grants for '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}'." exit 1 fi @@ -253,9 +261,9 @@ for g in "${MIGRATOR_GRANTS_LINES[@]}"; do done if [[ "$migrator_has_required_permissions" == true ]]; then - echo "Verified: '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}' has migration privileges on '${DB_NAME}'." + echo "Verified: '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}' has migration privileges on '${DB_NAME}'." else - echo "Error: '${SQL_MIGRATOR_NAME}'@'${CLIENT_HOST}' lacks migration privileges on '${DB_NAME}'." + echo "Error: '${SQL_MIGRATOR_NAME}'@'${MIGRATOR_USER_HOST}' lacks migration privileges on '${DB_NAME}'." echo "Required for migrations (any one GRANT must include all of): ${MIGRATION_REQUIRED_PRIVS[*]}" echo "Grants found:" echo "$GRANTS_OUTPUT" @@ -263,18 +271,20 @@ else fi fi +# BUG: this should probably be skipped if the app user is the same as the +# master or migrator # Create app user if it doesn't exist USER_EXISTS=$(mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -sse \ -"SELECT COUNT(*) FROM mysql.user WHERE user = '$SQL_APP_USER_NAME' AND host = '$CLIENT_HOST';") +"SELECT COUNT(*) FROM mysql.user WHERE user = '$SQL_APP_USER_NAME' AND host = '$APP_USER_HOST';") if [[ "$USER_EXISTS" -eq 0 && "$APP_USER_NAME" != "root" ]]; then echo "Creating app user '$SQL_APP_USER_NAME'..." - echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"CREATE USER '${SQL_APP_USER_NAME}'@'${CLIENT_HOST}' IDENTIFIED BY '';\"" + echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"CREATE USER '${SQL_APP_USER_NAME}'@'${APP_USER_HOST}' IDENTIFIED BY '';\"" if mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ - -e "CREATE USER '$SQL_APP_USER_NAME'@'$CLIENT_HOST' IDENTIFIED BY '$SQL_APP_USER_PASSWORD';"; then + -e "CREATE USER '$SQL_APP_USER_NAME'@'$APP_USER_HOST' IDENTIFIED BY '$SQL_APP_USER_PASSWORD';"; then NEW_APP_USER_CREATED=1 else - echo "Error: Failed to create app user '${APP_USER_NAME}'@'${CLIENT_HOST}'." + echo "Error: Failed to create app user '${APP_USER_NAME}'@'${APP_USER_HOST}'." echo "Falling back to migrator credentials for app user." APP_USER_NAME="$MIGRATOR_NAME" APP_USER_PASSWORD="$MIGRATOR_PASSWORD" @@ -304,17 +314,17 @@ else echo "App user already exists. Refreshing privileges on '${DB_NAME}'..." fi -echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER}\`.* TO ${SQL_APP_USER_NAME}@'${CLIENT_HOST}'; FLUSH PRIVILEGES;\"" -if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -e "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_APP_USER_NAME}'@'${CLIENT_HOST}'; FLUSH PRIVILEGES;"; then +echo "Executing: mysql -h \"$DB_HOST\" -P \"$DB_PORT\" -u \"$MASTER_USER_NAME\" --password=\"\" -e \"GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER}\`.* TO ${SQL_APP_USER_NAME}@'${APP_USER_HOST}'; FLUSH PRIVILEGES;\"" +if ! mysql -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" -e "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE ON \`${SQL_DB_IDENTIFIER}\`.* TO '${SQL_APP_USER_NAME}'@'${APP_USER_HOST}'; FLUSH PRIVILEGES;"; then echo "Error: Failed to grant privileges to app user." exit 1 fi APP_GRANTS_RAW="$(mysql -N -B -h "$DB_HOST" -P "$DB_PORT" -u "$MASTER_USER_NAME" --password="$MASTER_USER_PASSWORD" \ - -e "SHOW GRANTS FOR '${SQL_APP_USER_NAME}'@'${CLIENT_HOST}';" 2>/dev/null || true)" + -e "SHOW GRANTS FOR '${SQL_APP_USER_NAME}'@'${APP_USER_HOST}';" 2>/dev/null || true)" if [[ -z "$APP_GRANTS_RAW" ]]; then - echo "Error: Could not retrieve grants for '${SQL_APP_USER_NAME}'@'${CLIENT_HOST}'." + echo "Error: Could not retrieve grants for '${SQL_APP_USER_NAME}'@'${APP_USER_HOST}'." exit 1 fi @@ -330,9 +340,9 @@ for g in "${APP_GRANTS_LINES[@]}"; do done if [[ "$app_has_required_permissions" == true ]]; then - echo "Verified: '${APP_USER_NAME}'@'${CLIENT_HOST}' has required privileges on '${DB_NAME}'." + echo "Verified: '${APP_USER_NAME}'@'${APP_USER_HOST}' has required privileges on '${DB_NAME}'." else - echo "Error: '${APP_USER_NAME}'@'${CLIENT_HOST}' lacks required privileges on '${DB_NAME}'." + echo "Error: '${APP_USER_NAME}'@'${APP_USER_HOST}' lacks required privileges on '${DB_NAME}'." echo "Required (any one GRANT must include all of): ${APP_REQUIRED_PRIVS[*]}" echo "Grants found:" echo "$APP_GRANTS_RAW" diff --git a/specifyweb/backend/attachment_gw/dataset_views.py b/specifyweb/backend/attachment_gw/dataset_views.py index e3d77983fed..ab69d4ef71d 100644 --- a/specifyweb/backend/attachment_gw/dataset_views.py +++ b/specifyweb/backend/attachment_gw/dataset_views.py @@ -12,6 +12,17 @@ class AttachmentDataSetPT(PermissionTarget): upload = PermissionTargetAction() rollback = PermissionTargetAction() +VALID_MATCHING_MODES = {'mappingFile'} + +def _get_validated_matchingmode(data, existing=None): + """Return a validated matchingmode value or raise ValueError.""" + if 'matchingmode' not in data: + return existing + value = data['matchingmode'] + if value is not None and value not in VALID_MATCHING_MODES: + raise ValueError(f"Invalid matchingmode: {value!r}") + return value + def datasets_view(request): if request.method == 'GET': return http.JsonResponse(Spattachmentdataset.get_meta_fields(request), safe=False) @@ -28,6 +39,7 @@ def datasets_view(request): createdbyagent=request.specify_user_agent, modifiedbyagent=request.specify_user_agent, uploaderstatus="main", + matchingmode=_get_validated_matchingmode(data), # A bit more flexible than workbench. Handles creating datasets with an uploadplan from the start. uploadplan=json.dumps(data['uploadplan']) if 'uploadplan' in data else None ) @@ -49,6 +61,7 @@ def dataset_view(request, ds: Spattachmentdataset): ds.name = attrs.get('name', ds.name) ds.remarks = attrs.get('remarks', ds.remarks) ds.data = attrs.get('rows', ds.data) + ds.matchingmode = _get_validated_matchingmode(attrs, ds.matchingmode) ds.uploadplan = json.dumps(attrs['uploadplan'] if 'uploadplan' in attrs else ds.uploadplan) # Never preserve uploaderstatus. Making it required for all requests. old_status = ds.uploaderstatus diff --git a/specifyweb/backend/attachment_gw/migrations/0002_add_matchingmode.py b/specifyweb/backend/attachment_gw/migrations/0002_add_matchingmode.py new file mode 100644 index 00000000000..02bfd79adc9 --- /dev/null +++ b/specifyweb/backend/attachment_gw/migrations/0002_add_matchingmode.py @@ -0,0 +1,39 @@ +# Generated manually + +from django.db import migrations, models +from specifyweb.specify.migration_utils.schema_writer import ( + update_table_field_schema_config_with_defaults, + revert_table_field_schema_config, +) + + +def apply_schema_config(apps, schema_editor): + Discipline = apps.get_model('specify', 'Discipline') + for discipline_id, discipline_type in Discipline.objects.all().order_by('type').values_list('pk', 'type'): + update_table_field_schema_config_with_defaults( + table_name='Spattachmentdataset', + discipline_id=discipline_id, + discipline_type=discipline_type, + field_name='matchingmode', + apps=apps, + ) + + +def revert_schema_config(apps, schema_editor): + revert_table_field_schema_config('spattachmentdataset', 'matchingmode', apps) + + +class Migration(migrations.Migration): + + dependencies = [ + ('attachment_gw', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='spattachmentdataset', + name='matchingmode', + field=models.CharField(max_length=32, null=True, default=None), + ), + migrations.RunPython(apply_schema_config, revert_schema_config, atomic=True), + ] diff --git a/specifyweb/backend/attachment_gw/models.py b/specifyweb/backend/attachment_gw/models.py index 39834301034..3898b1f52c2 100644 --- a/specifyweb/backend/attachment_gw/models.py +++ b/specifyweb/backend/attachment_gw/models.py @@ -8,6 +8,15 @@ class Spattachmentdataset(Dataset): id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID') + matchingmode = models.CharField( + max_length=32, null=True, default=None + ) + + object_response_fields = [ + *Dataset.object_response_fields, + 'matchingmode', + ] + class Meta: db_table = 'attachmentdataset' diff --git a/specifyweb/backend/attachment_gw/views.py b/specifyweb/backend/attachment_gw/views.py index 92aad2ce428..fec4bed676a 100644 --- a/specifyweb/backend/attachment_gw/views.py +++ b/specifyweb/backend/attachment_gw/views.py @@ -307,6 +307,53 @@ def proxy(request): (chunk for chunk in response.iter_content(512 * 1024)), content_type=response.headers['Content-Type']) +@openapi(schema={ + "post": { + "requestBody": { + "required": True, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachmentlocations": { + "type": "array", + "items": {"type": "string"}, + "description": "URL locations of the attachments to download", + }, + "origfilenames": { + "type": "array", + "items": {"type": "string"}, + "description": "Original attachment filenames of the attachments to be downloaded", + }, + "recordsetid": { + "type": "integer", + "description": "Optional. Will download all attachments in the recordset. Using this will ignore all other properties.", + }, + }, + "anyOf": [ + {"required": ["attachmentlocations", "origfilenames"]}, + {"required": ["recordsetid"]} + ], + } + } + } + }, + "responses": { + "200": { + "description": "A zip file containing all requested attachments.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary", + } + } + }, + }, + } + } +}) @require_POST @login_maybe_required @never_cache diff --git a/specifyweb/backend/batch_identify/__init__.py b/specifyweb/backend/batch_identify/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/specifyweb/backend/batch_identify/api_schemas.py b/specifyweb/backend/batch_identify/api_schemas.py new file mode 100644 index 00000000000..704bb22292e --- /dev/null +++ b/specifyweb/backend/batch_identify/api_schemas.py @@ -0,0 +1,234 @@ +_TAXON_TREE_GROUP_ITEM_SCHEMA = { + 'type': 'object', + 'properties': { + 'taxonTreeDefId': { + 'oneOf': [ + {'type': 'integer'}, + {'type': 'null'}, + ] + }, + 'taxonTreeName': { + 'oneOf': [ + {'type': 'string'}, + {'type': 'null'}, + ] + }, + 'collectionObjectIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + 'catalogNumbers': { + 'type': 'array', + 'items': {'type': 'string'}, + }, + 'collectionObjectTypeNames': { + 'type': 'array', + 'items': {'type': 'string'}, + }, + }, + 'required': [ + 'taxonTreeDefId', + 'taxonTreeName', + 'collectionObjectIds', + 'catalogNumbers', + 'collectionObjectTypeNames', + ], + 'additionalProperties': False, +} + +_ERROR_RESPONSE_SCHEMA = { + 'description': 'Invalid request payload.', + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': {'error': {'type': 'string'}}, + 'required': ['error'], + 'additionalProperties': False, + } + } + }, +} + +BATCH_IDENTIFY_VALIDATE_RECORD_SET_OPENAPI_SCHEMA = { + 'post': { + 'requestBody': { + 'required': True, + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': { + 'collectionObjectIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + } + }, + 'required': ['collectionObjectIds'], + 'additionalProperties': False, + } + } + }, + }, + 'responses': { + '200': { + 'description': ( + 'Validated collection objects for Batch Identify and' + ' grouped them by effective taxon tree.' + ), + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': { + 'collectionObjectIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + 'hasMixedTaxonTrees': {'type': 'boolean'}, + 'taxonTreeGroups': { + 'type': 'array', + 'items': _TAXON_TREE_GROUP_ITEM_SCHEMA, + }, + }, + 'required': [ + 'collectionObjectIds', + 'hasMixedTaxonTrees', + 'taxonTreeGroups', + ], + 'additionalProperties': False, + } + } + }, + }, + '400': _ERROR_RESPONSE_SCHEMA, + }, + } +} + +BATCH_IDENTIFY_RESOLVE_OPENAPI_SCHEMA = { + 'post': { + 'requestBody': { + 'required': True, + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': { + 'catalogNumbers': { + 'type': 'array', + 'items': {'type': 'string'}, + }, + 'validateOnly': {'type': 'boolean'}, + }, + 'required': ['catalogNumbers'], + 'additionalProperties': False, + } + } + }, + }, + 'responses': { + '200': { + 'description': ( + 'Resolved collection objects and validation details for' + ' catalog number input.' + ), + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': { + 'collectionObjectIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + 'currentDeterminationIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + 'unmatchedCatalogNumbers': { + 'type': 'array', + 'items': {'type': 'string'}, + }, + 'hasMixedTaxonTrees': {'type': 'boolean'}, + 'taxonTreeGroups': { + 'type': 'array', + 'items': _TAXON_TREE_GROUP_ITEM_SCHEMA, + }, + }, + 'required': [ + 'collectionObjectIds', + 'currentDeterminationIds', + 'unmatchedCatalogNumbers', + 'hasMixedTaxonTrees', + 'taxonTreeGroups', + ], + 'additionalProperties': False, + } + } + }, + }, + '400': _ERROR_RESPONSE_SCHEMA, + }, + } +} + +BATCH_IDENTIFY_OPENAPI_SCHEMA = { + 'post': { + 'requestBody': { + 'required': True, + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': { + 'collectionObjectIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + 'determination': { + 'type': 'object', + 'additionalProperties': True, + }, + }, + 'required': ['collectionObjectIds', 'determination'], + 'additionalProperties': False, + } + } + }, + }, + 'responses': { + '200': { + 'description': ( + 'Created determination records for all selected collection' + ' objects.' + ), + 'content': { + 'application/json': { + 'schema': { + 'type': 'object', + 'properties': { + 'createdCount': {'type': 'integer'}, + 'collectionObjectIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + 'determinationIds': { + 'type': 'array', + 'items': {'type': 'integer'}, + }, + }, + 'required': [ + 'createdCount', + 'collectionObjectIds', + 'determinationIds', + ], + 'additionalProperties': False, + } + } + }, + }, + '400': _ERROR_RESPONSE_SCHEMA, + }, + } +} diff --git a/specifyweb/backend/batch_identify/tests.py b/specifyweb/backend/batch_identify/tests.py new file mode 100644 index 00000000000..ac0901e40c0 --- /dev/null +++ b/specifyweb/backend/batch_identify/tests.py @@ -0,0 +1,181 @@ +import json + +from django.test import Client + +from specifyweb.specify.models import ( + Collectionobject, + Collectionobjecttype, + Determination, + Taxontreedef, +) +from specifyweb.specify.tests.test_api import ApiTests + +class TestBatchIdentify(ApiTests): + def setUp(self): + super().setUp() + self.c = Client() + self.c.force_login(self.specifyuser) + self.c.cookies['collection'] = str(self.collection.id) + + def _post_json(self, url: str, payload: dict): + return self.c.post(url, json.dumps(payload), content_type='application/json') + + def test_batch_identify_resolve_parses_numeric_and_year_catalog_numbers(self): + numeric_one = Collectionobject.objects.create( + collection=self.collection, + catalognumber='000271806', + collectionobjecttype=self.collectionobjecttype, + ) + numeric_two = Collectionobject.objects.create( + collection=self.collection, + catalognumber='000687972', + collectionobjecttype=self.collectionobjecttype, + ) + year_based = Collectionobject.objects.create( + collection=self.collection, + catalognumber='2025-000001', + collectionobjecttype=self.collectionobjecttype, + ) + + response = self._post_json( + '/api/specify/batch_identify/resolve/', + { + 'catalogNumbers': [ + 'SEMC000271806,000687972', + '2025-000001', + '2025-000002', + ], + 'validateOnly': True, + }, + ) + self._assertStatusCodeEqual(response, 200) + + data = json.loads(response.content.decode()) + self.assertEqual( + set(data['collectionObjectIds']), + {numeric_one.id, numeric_two.id, year_based.id}, + ) + self.assertEqual(data['currentDeterminationIds'], []) + self.assertEqual(data['unmatchedCatalogNumbers'], ['2025-000002']) + self.assertEqual(data['hasMixedTaxonTrees'], False) + self.assertEqual(len(data['taxonTreeGroups']), 1) + self.assertEqual( + data['taxonTreeGroups'][0]['collectionObjectIds'], + sorted([numeric_one.id, numeric_two.id, year_based.id]), + ) + + def test_validate_record_set_reports_counts_for_mixed_trees(self): + other_tree = Taxontreedef.objects.create(name='Other Taxon Tree') + other_type = Collectionobjecttype.objects.create( + name='Other CO Type', + collection=self.collection, + taxontreedef=other_tree, + ) + + first_tree_object = Collectionobject.objects.create( + collection=self.collection, + catalognumber='000000001', + collectionobjecttype=self.collectionobjecttype, + ) + second_tree_object = Collectionobject.objects.create( + collection=self.collection, + catalognumber='000000002', + collectionobjecttype=other_type, + ) + + response = self._post_json( + '/api/specify/batch_identify/validate_record_set/', + { + 'collectionObjectIds': [ + first_tree_object.id, + second_tree_object.id, + ] + }, + ) + self._assertStatusCodeEqual(response, 200) + + data = json.loads(response.content.decode()) + self.assertEqual(data['hasMixedTaxonTrees'], True) + self.assertEqual( + sorted(len(group['collectionObjectIds']) for group in data['taxonTreeGroups']), + [1, 1], + ) + self.assertEqual( + sorted(group['taxonTreeName'] for group in data['taxonTreeGroups']), + sorted([self.taxontreedef.name, other_tree.name]), + ) + + def test_validate_record_set_rejects_missing_collection_object_ids(self): + response = self._post_json( + '/api/specify/batch_identify/validate_record_set/', + {'collectionObjectIds': [999999]}, + ) + self._assertStatusCodeEqual(response, 400) + + data = json.loads(response.content.decode()) + self.assertIn('do not exist', data['error']) + + def test_batch_identify_keeps_existing_current_when_new_determination_not_current(self): + collection_object = Collectionobject.objects.create( + collection=self.collection, + catalognumber='000000003', + collectionobjecttype=self.collectionobjecttype, + ) + existing = Determination.objects.create( + collectionobject=collection_object, + collectionmemberid=self.collection.id, + iscurrent=True, + ) + + response = self._post_json( + '/api/specify/batch_identify/', + { + 'collectionObjectIds': [collection_object.id], + 'determination': {'isCurrent': False, 'remarks': 'batch identify'}, + }, + ) + self._assertStatusCodeEqual(response, 200) + + data = json.loads(response.content.decode()) + self.assertEqual(data['createdCount'], 1) + created = Determination.objects.get(id=data['determinationIds'][0]) + existing.refresh_from_db() + + self.assertEqual(existing.iscurrent, True) + self.assertEqual(created.iscurrent, False) + self.assertEqual(created.collectionobject_id, collection_object.id) + + def test_batch_identify_sets_new_determination_current_when_requested(self): + collection_object = Collectionobject.objects.create( + collection=self.collection, + catalognumber='000000004', + collectionobjecttype=self.collectionobjecttype, + ) + existing = Determination.objects.create( + collectionobject=collection_object, + collectionmemberid=self.collection.id, + iscurrent=True, + ) + + response = self._post_json( + '/api/specify/batch_identify/', + { + 'collectionObjectIds': [collection_object.id], + 'determination': {'isCurrent': True, 'remarks': 'new current'}, + }, + ) + self._assertStatusCodeEqual(response, 200) + + data = json.loads(response.content.decode()) + created = Determination.objects.get(id=data['determinationIds'][0]) + existing.refresh_from_db() + + self.assertEqual(existing.iscurrent, False) + self.assertEqual(created.iscurrent, True) + self.assertEqual( + Determination.objects.filter( + collectionobject=collection_object, + iscurrent=True, + ).count(), + 1, + ) diff --git a/specifyweb/backend/batch_identify/urls.py b/specifyweb/backend/batch_identify/urls.py new file mode 100644 index 00000000000..cb3d477f44c --- /dev/null +++ b/specifyweb/backend/batch_identify/urls.py @@ -0,0 +1,9 @@ +from django.urls import re_path + +from . import views + +urlpatterns = [ + re_path(r'^batch_identify/resolve/$', views.batch_identify_resolve), + re_path(r'^batch_identify/validate_record_set/$', views.batch_identify_validate_record_set), + re_path(r'^batch_identify/$', views.batch_identify), +] diff --git a/specifyweb/backend/batch_identify/view_helpers.py b/specifyweb/backend/batch_identify/view_helpers.py new file mode 100644 index 00000000000..77d6515918f --- /dev/null +++ b/specifyweb/backend/batch_identify/view_helpers.py @@ -0,0 +1,524 @@ +import re +from collections.abc import Iterable +from typing import Any, Literal + +from django.db.models import IntegerField, Prefetch, Q +from django.db.models.functions import Cast + +from specifyweb.specify.models import Collectionobject, Determination + +_YEAR_CATALOG_NUMBER_DELIMITERS = '-/|._:; *$%#@' +_YEAR_CATALOG_NUMBER_DELIMITER_CLASS = re.escape(_YEAR_CATALOG_NUMBER_DELIMITERS) +_STORED_YEAR_CATALOG_NUMBER_RE = re.compile( + rf'(?\d{{4}})[{_YEAR_CATALOG_NUMBER_DELIMITER_CLASS}]+(?P\d+)$' +) +_ENTRY_YEAR_CATALOG_NUMBER_RE = re.compile( + rf'(?\d{{4}})[{_YEAR_CATALOG_NUMBER_DELIMITER_CLASS}]+(?P\d+)(?!\d)' +) +MAX_RESOLVE_COLLECTION_OBJECTS = 1000 +_NUMERIC_CATALOG_NUMBER_QUERY_REGEX = r'^[0-9]+$' +_METADATA_KEYS = { + 'id', + 'resource_uri', + 'recordset_info', + '_tablename', + 'version', +} + +CatalogToken = int | Literal['-'] +YearBasedCatalogRange = tuple[int, int, int] + +def _is_possible_catalog_year(year: int) -> bool: + return 1000 <= year <= 2999 + +def _tokenize_catalog_entry(entry: str) -> list[CatalogToken]: + tokens: list[CatalogToken] = [] + current_number: list[str] = [] + + for character in entry: + if character.isdigit(): + current_number.append(character) + continue + + if len(current_number) > 0: + tokens.append(int(''.join(current_number))) + current_number = [] + + if character == '-': + tokens.append('-') + + if len(current_number) > 0: + tokens.append(int(''.join(current_number))) + + return tokens + +def parse_catalog_number_requests( + entries: Iterable[str], +) -> tuple[list[tuple[int, int]], dict[int, list[YearBasedCatalogRange]]]: + numeric_ranges: list[tuple[int, int]] = [] + year_based_ranges: dict[int, list[YearBasedCatalogRange]] = {} + + for raw_entry in entries: + entry = raw_entry.strip() + if entry == '': + continue + + year_matches = [ + match + for match in _ENTRY_YEAR_CATALOG_NUMBER_RE.finditer(entry) + if _is_possible_catalog_year(int(match.group('year'))) + ] + if len(year_matches) > 0: + index = 0 + while index < len(year_matches): + current_match = year_matches[index] + year = int(current_match.group('year')) + start_text = current_match.group('number') + start = int(start_text) + end = start + width = len(start_text) + + if index + 1 < len(year_matches): + next_match = year_matches[index + 1] + if ( + int(next_match.group('year')) == year + and '-' in entry[current_match.end() : next_match.start()] + ): + end_text = next_match.group('number') + end = int(end_text) + width = max(width, len(end_text)) + index += 1 + + if start > end: + start, end = end, start + year_based_ranges.setdefault(year, []).append((start, end, width)) + index += 1 + + entry_segments: list[str] = [] + cursor = 0 + for match in year_matches: + entry_segments.append(entry[cursor : match.start()]) + entry_segments.append(' ' * (match.end() - match.start())) + cursor = match.end() + entry_segments.append(entry[cursor:]) + + numeric_entry = ''.join(entry_segments) + tokens = _tokenize_catalog_entry(numeric_entry) + if not any(isinstance(token, int) for token in tokens): + continue + + index = 0 + while index < len(tokens): + token = tokens[index] + if token == '-': + index += 1 + continue + + start = token + end = start + if ( + index + 2 < len(tokens) + and tokens[index + 1] == '-' + and isinstance(tokens[index + 2], int) + ): + end = tokens[index + 2] + index += 3 + else: + index += 1 + + if start > end: + start, end = end, start + numeric_ranges.append((start, end)) + + if len(numeric_ranges) == 0 and len(year_based_ranges) == 0: + raise ValueError('Provide at least one catalog number.') + + return numeric_ranges, year_based_ranges + +def _build_catalog_query(ranges: Iterable[tuple[int, int]]) -> Q: + range_query = Q() + for start, end in ranges: + if start == end: + range_query |= Q(catalog_number_int=start) + else: + range_query |= Q( + catalog_number_int__gte=start, + catalog_number_int__lte=end, + ) + return Q(catalognumber__regex=_NUMERIC_CATALOG_NUMBER_QUERY_REGEX) & range_query + +def _build_year_based_catalog_candidate_query( + year_based_ranges: dict[int, list[YearBasedCatalogRange]] +) -> Q: + query = Q() + for year in year_based_ranges: + query |= Q( + catalognumber__regex=( + rf'(^|.*[^0-9]){year}[{_YEAR_CATALOG_NUMBER_DELIMITER_CLASS}]+[0-9]+$' + ) + ) + return query + +def _extract_year_based_catalog_identifier( + catalog_number: str, +) -> tuple[int, int, int] | None: + year_match = _STORED_YEAR_CATALOG_NUMBER_RE.search(catalog_number) + if year_match is None: + return None + + year = int(year_match.group('year')) + if not _is_possible_catalog_year(year): + return None + + number_text = year_match.group('number') + return year, int(number_text), len(number_text) + +def _matches_year_based_ranges( + year_based_ranges: dict[int, list[YearBasedCatalogRange]], + catalog_number: str, +) -> bool: + identifier = _extract_year_based_catalog_identifier(catalog_number) + if identifier is None: + return False + + year, sequence_number, _width = identifier + return any( + start <= sequence_number <= end + for start, end, _range_width in year_based_ranges.get(year, []) + ) + +def _sort_collection_objects( + collection_objects: Iterable[Collectionobject], +) -> list[Collectionobject]: + return sorted( + collection_objects, + key=lambda collection_object: (collection_object.catalognumber, collection_object.id), + ) + +def find_unmatched_catalog_numbers( + numeric_ranges: Iterable[tuple[int, int]], + year_based_ranges: dict[int, list[YearBasedCatalogRange]], + matched_catalog_numbers: set[int], + matched_year_based_catalog_numbers: set[tuple[int, int]], +) -> list[str]: + requested_numbers: set[int] = set() + for start, end in numeric_ranges: + requested_numbers.update(range(start, end + 1)) + + requested_year_based_numbers: set[tuple[int, int]] = set() + requested_year_based_widths: dict[tuple[int, int], int] = {} + for year, ranges in year_based_ranges.items(): + for start, end, width in ranges: + for number in range(start, end + 1): + requested_year_based_numbers.add((year, number)) + requested_year_based_widths[(year, number)] = max( + requested_year_based_widths.get((year, number), 0), + width, + ) + + unmatched_numeric_numbers = sorted( + requested_numbers - matched_catalog_numbers, + key=int, + ) + unmatched_year_based_numbers = sorted( + requested_year_based_numbers - matched_year_based_catalog_numbers + ) + + return [ + *(str(number) for number in unmatched_numeric_numbers), + *( + f'{year:04d}-{number:0{requested_year_based_widths[(year, number)]}d}' + for year, number in unmatched_year_based_numbers + ), + ] + +def sanitize_determination_payload(payload: dict[str, Any]) -> dict[str, Any]: + return { + key: value + for key, value in payload.items() + if key.lower() not in _METADATA_KEYS and key.lower() != 'collectionobject' + } + +def parse_catalog_numbers(request_data: dict[str, Any]) -> list[str]: + catalog_numbers = request_data.get('catalogNumbers') + if not isinstance(catalog_numbers, list): + raise ValueError("'catalogNumbers' must be a list of strings.") + if not all(isinstance(entry, str) for entry in catalog_numbers): + raise ValueError("'catalogNumbers' must be a list of strings.") + return catalog_numbers + +def parse_validate_only(request_data: dict[str, Any]) -> bool: + validate_only = request_data.get('validateOnly', False) + if not isinstance(validate_only, bool): + raise ValueError("'validateOnly' must be a boolean.") + return validate_only + +def fetch_collection_objects_by_catalog_requests( + collection_id: int, + numeric_ranges: list[tuple[int, int]], + year_based_ranges: dict[int, list[YearBasedCatalogRange]], + include_current_determinations: bool = True, + max_results: int | None = None, +) -> list[Collectionobject]: + queryset = ( + Collectionobject.objects.filter(collectionmemberid=collection_id) + .exclude(catalognumber__isnull=True) + .exclude(catalognumber='') + .select_related('collectionobjecttype__taxontreedef') + .only( + 'id', + 'catalognumber', + 'collectionobjecttype_id', + 'collectionobjecttype__name', + 'collectionobjecttype__taxontreedef_id', + 'collectionobjecttype__taxontreedef__name', + ) + ) + if include_current_determinations: + queryset = queryset.prefetch_related( + Prefetch( + 'determinations', + queryset=Determination.objects.only('id', 'iscurrent'), + to_attr='prefetched_determinations', + ) + ) + + collection_objects_by_id: dict[int, Collectionobject] = {} + if len(numeric_ranges) > 0: + numeric_queryset = ( + queryset.annotate(catalog_number_int=Cast('catalognumber', IntegerField())) + .filter(_build_catalog_query(numeric_ranges)) + .order_by('catalognumber', 'id') + ) + for collection_object in numeric_queryset: + collection_objects_by_id[collection_object.id] = collection_object + + if len(year_based_ranges) > 0: + year_queryset = queryset.filter( + _build_year_based_catalog_candidate_query(year_based_ranges) + ).order_by('catalognumber', 'id') + for collection_object in year_queryset: + if _matches_year_based_ranges(year_based_ranges, collection_object.catalognumber): + collection_objects_by_id[collection_object.id] = collection_object + + collection_objects = _sort_collection_objects(collection_objects_by_id.values()) + if isinstance(max_results, int): + collection_objects = collection_objects[:max_results] + return collection_objects + +def fetch_collection_objects_by_ids( + collection_id: int, + collection_object_ids: list[int], + order_by_id: bool = False, +) -> tuple[list[Collectionobject], list[int]]: + queryset = Collectionobject.objects.filter( + collectionmemberid=collection_id, + id__in=collection_object_ids, + ).select_related('collectionobjecttype__taxontreedef') + if order_by_id: + queryset = queryset.order_by('id') + + collection_objects = list(queryset) + existing_collection_object_ids = { + collection_object.id for collection_object in collection_objects + } + missing_collection_object_ids = [ + collection_object_id + for collection_object_id in collection_object_ids + if collection_object_id not in existing_collection_object_ids + ] + return collection_objects, missing_collection_object_ids + +def fetch_matched_catalog_number_identifiers( + collection_id: int, + numeric_ranges: list[tuple[int, int]], + year_based_ranges: dict[int, list[YearBasedCatalogRange]], +) -> tuple[set[int], set[tuple[int, int]]]: + base_queryset = ( + Collectionobject.objects.filter(collectionmemberid=collection_id) + .exclude(catalognumber__isnull=True) + .exclude(catalognumber='') + ) + + matched_numeric_numbers: set[int] = set() + if len(numeric_ranges) > 0: + matched_numeric_numbers = { + catalog_number + for catalog_number in base_queryset.annotate( + catalog_number_int=Cast('catalognumber', IntegerField()) + ) + .filter(_build_catalog_query(numeric_ranges)) + .values_list('catalog_number_int', flat=True) + if isinstance(catalog_number, int) + } + + matched_year_based_numbers: set[tuple[int, int]] = set() + if len(year_based_ranges) > 0: + for catalog_number in ( + base_queryset.filter( + _build_year_based_catalog_candidate_query(year_based_ranges) + ).values_list('catalognumber', flat=True) + ): + if not isinstance(catalog_number, str): + continue + identifier = _extract_year_based_catalog_identifier(catalog_number) + if identifier is None: + continue + year, sequence_number, _width = identifier + if any( + start <= sequence_number <= end + for start, end, _range_width in year_based_ranges.get(year, []) + ): + matched_year_based_numbers.add((year, sequence_number)) + + return matched_numeric_numbers, matched_year_based_numbers + +def extract_matched_catalog_number_identifiers( + collection_objects: Iterable[Collectionobject], +) -> tuple[set[int], set[tuple[int, int]]]: + matched_numeric_numbers: set[int] = set() + matched_year_based_numbers: set[tuple[int, int]] = set() + + for collection_object in collection_objects: + catalog_number = collection_object.catalognumber + if not isinstance(catalog_number, str): + continue + + if catalog_number.isdigit(): + matched_numeric_numbers.add(int(catalog_number)) + continue + + identifier = _extract_year_based_catalog_identifier(catalog_number) + if identifier is None: + continue + + year, sequence_number, _width = identifier + matched_year_based_numbers.add((year, sequence_number)) + + return matched_numeric_numbers, matched_year_based_numbers + +def extract_current_determination_ids(collection_objects: Iterable[Collectionobject]) -> list[int]: + current_determination_ids: list[int] = [] + for collection_object in collection_objects: + determinations = getattr(collection_object, 'prefetched_determinations', []) + current_determination_id = next( + ( + determination.id + for determination in determinations + if determination.iscurrent is True + ), + None, + ) + if isinstance(current_determination_id, int): + current_determination_ids.append(current_determination_id) + + return current_determination_ids + +def parse_collection_object_ids(request_data: dict[str, Any]) -> list[int]: + collection_object_ids = request_data.get('collectionObjectIds') + if not isinstance(collection_object_ids, list): + raise ValueError("'collectionObjectIds' must be a list of numbers.") + if not all( + isinstance(collection_object_id, int) + for collection_object_id in collection_object_ids + ): + raise ValueError("'collectionObjectIds' must be a list of numbers.") + + deduplicated_ids: list[int] = [] + seen: set[int] = set() + for collection_object_id in collection_object_ids: + if collection_object_id <= 0 or collection_object_id in seen: + continue + seen.add(collection_object_id) + deduplicated_ids.append(collection_object_id) + + if len(deduplicated_ids) == 0: + raise ValueError('Provide at least one collection object ID.') + + return deduplicated_ids + +def _resolve_collection_object_taxon_tree_def_id( + collection_object: Collectionobject, + fallback_taxon_tree_def_id: int | None, +) -> int | None: + return ( + collection_object.collectionobjecttype.taxontreedef_id + if collection_object.collectionobjecttype is not None + else fallback_taxon_tree_def_id + ) + +def _resolve_collection_object_taxon_tree_name( + collection_object: Collectionobject, + fallback_taxon_tree_name: str | None, +) -> str | None: + return ( + collection_object.collectionobjecttype.taxontreedef.name + if collection_object.collectionobjecttype is not None + else fallback_taxon_tree_name + ) + +def has_single_effective_collection_object_taxon_tree( + collection_objects: Iterable[Collectionobject], + fallback_taxon_tree_def_id: int | None, +) -> bool: + effective_taxon_tree_def_ids = { + _resolve_collection_object_taxon_tree_def_id( + collection_object, + fallback_taxon_tree_def_id, + ) + for collection_object in collection_objects + } + if len(effective_taxon_tree_def_ids) == 0: + return True + if None in effective_taxon_tree_def_ids: + return False + return len(effective_taxon_tree_def_ids) == 1 + +def build_taxon_tree_groups( + collection_objects: Iterable[Collectionobject], + fallback_taxon_tree_def_id: int | None, + fallback_taxon_tree_name: str | None, +) -> list[dict[str, Any]]: + grouped: dict[int | None, dict[str, Any]] = {} + for collection_object in collection_objects: + tree_def_id = _resolve_collection_object_taxon_tree_def_id( + collection_object, + fallback_taxon_tree_def_id, + ) + tree_name = _resolve_collection_object_taxon_tree_name( + collection_object, + fallback_taxon_tree_name, + ) + group = grouped.setdefault( + tree_def_id, + { + 'taxonTreeDefId': tree_def_id, + 'taxonTreeName': tree_name, + 'collectionObjectIds': [], + 'catalogNumbers': [], + 'collectionObjectTypeNames': set(), + }, + ) + group['collectionObjectIds'].append(collection_object.id) + if isinstance(collection_object.catalognumber, str): + group['catalogNumbers'].append(collection_object.catalognumber) + + collection_object_type_name = ( + collection_object.collectionobjecttype.name + if collection_object.collectionobjecttype is not None + else None + ) + if isinstance(collection_object_type_name, str): + group['collectionObjectTypeNames'].add(collection_object_type_name) + else: + group['collectionObjectTypeNames'].add('Default Collection Object Type') + + groups = sorted( + grouped.values(), + key=lambda group: (group['taxonTreeName'] is None, group['taxonTreeName'] or ''), + ) + for group in groups: + group['collectionObjectIds'] = sorted(group['collectionObjectIds']) + group['catalogNumbers'] = sorted(group['catalogNumbers']) + group['collectionObjectTypeNames'] = sorted(group['collectionObjectTypeNames']) + return groups diff --git a/specifyweb/backend/batch_identify/views.py b/specifyweb/backend/batch_identify/views.py new file mode 100644 index 00000000000..e4c0859190c --- /dev/null +++ b/specifyweb/backend/batch_identify/views.py @@ -0,0 +1,261 @@ +import json + +from django import http +from django.db import transaction +from django.views.decorators.http import require_POST + +from specifyweb.backend.permissions.permissions import check_table_permissions +from specifyweb.specify.api.crud import post_resource +from specifyweb.specify.models import Collectionobject, Determination +from specifyweb.specify.views import login_maybe_required, openapi + +from .view_helpers import ( + MAX_RESOLVE_COLLECTION_OBJECTS, + build_taxon_tree_groups, + extract_current_determination_ids, + extract_matched_catalog_number_identifiers, + fetch_collection_objects_by_catalog_requests, + fetch_collection_objects_by_ids, + fetch_matched_catalog_number_identifiers, + find_unmatched_catalog_numbers, + has_single_effective_collection_object_taxon_tree, + parse_catalog_number_requests, + parse_catalog_numbers, + parse_collection_object_ids, + parse_validate_only, + sanitize_determination_payload, +) +from .api_schemas import ( + BATCH_IDENTIFY_OPENAPI_SCHEMA, + BATCH_IDENTIFY_RESOLVE_OPENAPI_SCHEMA, + BATCH_IDENTIFY_VALIDATE_RECORD_SET_OPENAPI_SCHEMA, +) + +@openapi(schema=BATCH_IDENTIFY_VALIDATE_RECORD_SET_OPENAPI_SCHEMA) +@login_maybe_required +@require_POST +def batch_identify_validate_record_set(request: http.HttpRequest): + check_table_permissions( + request.specify_collection, request.specify_user, Collectionobject, 'read' + ) + + try: + request_data = json.loads(request.body) + except json.JSONDecodeError: + return http.JsonResponse({'error': 'Invalid JSON body.'}, status=400) + + try: + collection_object_ids = parse_collection_object_ids(request_data) + except ValueError as error: + return http.JsonResponse({'error': str(error)}, status=400) + + collection_objects, missing_collection_object_ids = fetch_collection_objects_by_ids( + request.specify_collection.id, + collection_object_ids, + order_by_id=True, + ) + if len(missing_collection_object_ids) > 0: + return http.JsonResponse( + { + 'error': ( + 'One or more collection object IDs do not exist or are not in' + ' the active collection.' + ) + }, + status=400, + ) + + has_mixed_taxon_trees = not has_single_effective_collection_object_taxon_tree( + collection_objects, + request.specify_collection.discipline.taxontreedef_id, + ) + taxon_tree_groups = build_taxon_tree_groups( + collection_objects, + request.specify_collection.discipline.taxontreedef_id, + ( + request.specify_collection.discipline.taxontreedef.name + if request.specify_collection.discipline.taxontreedef is not None + else None + ), + ) + + return http.JsonResponse( + { + 'collectionObjectIds': [collection_object.id for collection_object in collection_objects], + 'hasMixedTaxonTrees': has_mixed_taxon_trees, + 'taxonTreeGroups': taxon_tree_groups, + } + ) + +@openapi(schema=BATCH_IDENTIFY_RESOLVE_OPENAPI_SCHEMA) +@login_maybe_required +@require_POST +def batch_identify_resolve(request: http.HttpRequest): + check_table_permissions( + request.specify_collection, request.specify_user, Collectionobject, 'read' + ) + + try: + request_data = json.loads(request.body) + except json.JSONDecodeError: + return http.JsonResponse({'error': 'Invalid JSON body.'}, status=400) + + try: + catalog_numbers = parse_catalog_numbers(request_data) + numeric_ranges, year_based_ranges = parse_catalog_number_requests(catalog_numbers) + validate_only = parse_validate_only(request_data) + except ValueError as error: + return http.JsonResponse({'error': str(error)}, status=400) + + collection_objects = fetch_collection_objects_by_catalog_requests( + request.specify_collection.id, + numeric_ranges, + year_based_ranges, + include_current_determinations=not validate_only, + max_results=MAX_RESOLVE_COLLECTION_OBJECTS, + ) + has_mixed_taxon_trees = not has_single_effective_collection_object_taxon_tree( + collection_objects, + request.specify_collection.discipline.taxontreedef_id, + ) + taxon_tree_groups = build_taxon_tree_groups( + collection_objects, + request.specify_collection.discipline.taxontreedef_id, + ( + request.specify_collection.discipline.taxontreedef.name + if request.specify_collection.discipline.taxontreedef is not None + else None + ), + ) + + if len(collection_objects) < MAX_RESOLVE_COLLECTION_OBJECTS: + ( + matched_catalog_numbers, + matched_year_based_catalog_numbers, + ) = extract_matched_catalog_number_identifiers(collection_objects) + else: + ( + matched_catalog_numbers, + matched_year_based_catalog_numbers, + ) = fetch_matched_catalog_number_identifiers( + request.specify_collection.id, + numeric_ranges, + year_based_ranges, + ) + + collection_object_ids = [collection_object.id for collection_object in collection_objects] + current_determination_ids = ( + extract_current_determination_ids(collection_objects) + if not validate_only + else [] + ) + unmatched_catalog_numbers = find_unmatched_catalog_numbers( + numeric_ranges, + year_based_ranges, + matched_catalog_numbers, + matched_year_based_catalog_numbers, + ) + return http.JsonResponse( + { + 'collectionObjectIds': collection_object_ids, + 'currentDeterminationIds': current_determination_ids, + 'unmatchedCatalogNumbers': unmatched_catalog_numbers, + 'hasMixedTaxonTrees': has_mixed_taxon_trees, + 'taxonTreeGroups': taxon_tree_groups, + } + ) + +@openapi(schema=BATCH_IDENTIFY_OPENAPI_SCHEMA) +@login_maybe_required +@require_POST +@transaction.atomic +def batch_identify(request: http.HttpRequest): + check_table_permissions( + request.specify_collection, request.specify_user, Collectionobject, 'read' + ) + check_table_permissions( + request.specify_collection, request.specify_user, Determination, 'create' + ) + + try: + request_data = json.loads(request.body) + except json.JSONDecodeError: + return http.JsonResponse({'error': 'Invalid JSON body.'}, status=400) + + try: + collection_object_ids = parse_collection_object_ids(request_data) + except ValueError as error: + return http.JsonResponse({'error': str(error)}, status=400) + + determination_payload = request_data.get('determination') + if not isinstance(determination_payload, dict): + return http.JsonResponse( + {'error': "'determination' must be an object."}, status=400 + ) + + collection_objects, missing_collection_object_ids = fetch_collection_objects_by_ids( + request.specify_collection.id, + collection_object_ids, + ) + if len(missing_collection_object_ids) > 0: + return http.JsonResponse( + { + 'error': ( + 'One or more collection object IDs do not exist or are not in' + ' the active collection.' + ) + }, + status=400, + ) + + if not has_single_effective_collection_object_taxon_tree( + collection_objects, + request.specify_collection.discipline.taxontreedef_id, + ): + return http.JsonResponse( + { + 'error': ( + 'Selected collection objects must all use collection object' + ' types in the same taxon tree, or all default to the' + " discipline's taxon tree." + ) + }, + status=400, + ) + + cleaned_payload = sanitize_determination_payload(determination_payload) + mark_as_current = cleaned_payload.get('isCurrent') is True + if mark_as_current: + check_table_permissions( + request.specify_collection, request.specify_user, Determination, 'update' + ) + + determination_ids: list[int] = [] + for collection_object_id in collection_object_ids: + if mark_as_current: + Determination.objects.filter( + collectionmemberid=request.specify_collection.id, + collectionobject_id=collection_object_id, + iscurrent=True, + ).update(iscurrent=False) + + determination = post_resource( + request.specify_collection, + request.specify_user_agent, + 'determination', + { + **cleaned_payload, + 'collectionobject': ( + f"/api/specify/collectionobject/{collection_object_id}/" + ), + }, + ) + determination_ids.append(determination.id) + + return http.JsonResponse( + { + 'createdCount': len(determination_ids), + 'collectionObjectIds': collection_object_ids, + 'determinationIds': determination_ids, + } + ) diff --git a/specifyweb/backend/businessrules/migration_utils.py b/specifyweb/backend/businessrules/migration_utils.py index 0bea9455998..b370ff2c9b1 100644 --- a/specifyweb/backend/businessrules/migration_utils.py +++ b/specifyweb/backend/businessrules/migration_utils.py @@ -1,3 +1,5 @@ +from django.db.models.functions import Lower + def catnum_rule_editable(apps, schema_editor=None): """ Find any CollectionObject catalogNumber must be unique to Collection rules which are readonly on the frontend (have isDatabaseConstraint=True) @@ -9,22 +11,30 @@ def catnum_rule_editable(apps, schema_editor=None): UniquenessRule = apps.get_model("businessrules", "UniquenessRule") model_rules = UniquenessRule.objects.filter( - modelName="Collectionobject", + modelName__iexact="Collectionobject", isDatabaseConstraint=True ) catalog_number_rules: list[int] = [] for rule in model_rules: - rule_fields = rule.uniquenessrulefield_set.all() + rule_fields = (rule + .uniquenessrulefield_set + .all() + .values_list(Lower("fieldPath"), "isScope")) - fields = rule_fields.filter(isScope=False) - scopes = rule_fields.filter(isScope=True) + fields = [] + scopes = [] + for field_path, is_scope in rule_fields: + if is_scope: + scopes.append(field_path) + else: + fields.append(field_path) # We're only interested in the rule "CollectionObject catalogNumber # must be unique to Collection" - # We check for length of fields and scopes because get() raises an - # exception if more than one result is returned - if (len(fields) == 1 and len(scopes) == 1) and (fields.get().fieldPath.lower() == "catalognumber" and scopes.get().fieldPath.lower() == "collection"): + # There can be other rules which include Catalog Number and Collection + # with other fields: ignore these + if (len(fields) == 1 and len(scopes) == 1) and (fields[0] == "catalognumber" and scopes[0] == "collection"): catalog_number_rules.append(rule.id) rules_to_update = UniquenessRule.objects.filter(id__in=catalog_number_rules) diff --git a/specifyweb/backend/businessrules/migrations/0004_catnum_uniquerule.py b/specifyweb/backend/businessrules/migrations/0004_catnum_uniquerule.py index b35a3283d67..b2a69c18706 100644 --- a/specifyweb/backend/businessrules/migrations/0004_catnum_uniquerule.py +++ b/specifyweb/backend/businessrules/migrations/0004_catnum_uniquerule.py @@ -1,11 +1,13 @@ from django.db import migrations +from django.db.models.functions import Lower from specifyweb.backend.businessrules.migration_utils import catnum_rule_editable from specifyweb.backend.businessrules.uniqueness_rules import create_uniqueness_rule def catnum_rule_uneditable(apps, schema_editor): - """ Find any CollectionObject catalogNumber must be unique to Collection + """ + Find any CollectionObject catalogNumber must be unique to Collection rules which are editable on the frontend (have isDatabaseConstraint=False) and set their isDatabaseConstraint=True. @@ -18,7 +20,7 @@ def catnum_rule_uneditable(apps, schema_editor): # REFACTOR: Some of these queries should be able to be combined to # improve performance and limit how often we need to hit the database model_rules = UniquenessRule.objects.filter( - modelName="Collectionobject", + modelName__iexact="Collectionobject", discipline_id=discipline.id, isDatabaseConstraint=False ) @@ -26,16 +28,24 @@ def catnum_rule_uneditable(apps, schema_editor): has_catalognumber_rule = False matching_rule_ids: list[int] = [] for rule in model_rules: - rule_fields = rule.uniquenessrulefield_set.all() + rule_fields = (rule + .uniquenessrulefield_set + .all() + .values_list(Lower("fieldPath"), "isScope")) - fields = rule_fields.filter(isScope=False) - scopes = rule_fields.filter(isScope=True) + fields = [] + scopes = [] + for field_path, is_scope in rule_fields: + if is_scope: + scopes.append(field_path) + else: + fields.append(field_path) # We're only interested in the rule "CollectionObject catalogNumber # must be unique to Collection" - # We check for length of fields and scopes because get() raises an - # exception if more than one result is returned - if (len(fields) == 1 and len(scopes) == 1) and (fields.get().fieldPath.lower() == "catalognumber" and scopes.get().fieldPath.lower() == "collection"): + # There can be other rules which include Catalog Number and Collection + # with other fields: ignore these + if (len(fields) == 1 and len(scopes) == 1) and (fields[0] == "catalognumber" and scopes[0] == "collection"): has_catalognumber_rule = True matching_rule_ids.append(rule.id) diff --git a/specifyweb/backend/businessrules/tests/test_groupperson.py b/specifyweb/backend/businessrules/tests/test_groupperson.py index e48622946b2..b6355cd6b4a 100644 --- a/specifyweb/backend/businessrules/tests/test_groupperson.py +++ b/specifyweb/backend/businessrules/tests/test_groupperson.py @@ -30,4 +30,3 @@ def test_group_members_unique_within_group(self): group=group, member=self.agent, division=self.division) - diff --git a/specifyweb/backend/businessrules/tests/test_permit.py b/specifyweb/backend/businessrules/tests/test_permit.py index 7b16435f2eb..cab325a1f99 100644 --- a/specifyweb/backend/businessrules/tests/test_permit.py +++ b/specifyweb/backend/businessrules/tests/test_permit.py @@ -2,7 +2,9 @@ from specifyweb.specify import models from specifyweb.specify.tests.test_api import ApiTests from ..exceptions import BusinessRuleException - +import datetime +from specifyweb.specify.api.crud import update_obj, get_resource +from specifyweb.specify.api.exceptions import StaleObjectException class PermitTests(ApiTests): def test_number_is_unique(self): @@ -31,3 +33,159 @@ def test_delete_blocked_by_accessionauthorization(self): aa.delete() permit.delete() + + def test_create_permit_with_fields(self): + # Fill in Permit#, Type, and Dates fields + # Fill in remaining fields + permit = models.Permit.objects.create( #creating a permit object + institution=self.institution, + permitnumber='P-FIELDS-001', + type='Collection', + startdate=datetime.datetime(2024, 1, 1), + enddate=datetime.datetime(2024, 12, 31), + issueddate=datetime.datetime(2024, 1, 15), + renewaldate=datetime.datetime(2025, 1, 15), + status='Active', + remarks='Annual collection permit', + permittext='Authorized for scientific collection', + yesno1=True, + text1='Filed under drawer 3', + number1=42.5, + ) + + # Save + verify all fields persisted + self.assertIsNotNone(permit.id) + fetched = models.Permit.objects.get(id=permit.id) # fetch the permit object + self.assertEqual(fetched.permitnumber, 'P-FIELDS-001') # check all the things in + self.assertEqual(fetched.type, 'Collection') + self.assertEqual(fetched.startdate, datetime.datetime(2024, 1, 1)) + self.assertEqual(fetched.enddate, datetime.datetime(2024, 12, 31)) + self.assertEqual(fetched.issueddate, datetime.datetime(2024, 1, 15)) + self.assertEqual(fetched.renewaldate, datetime.datetime(2025, 1, 15)) + self.assertEqual(fetched.status, 'Active') + self.assertEqual(fetched.remarks, 'Annual collection permit') + self.assertEqual(fetched.yesno1, True) + + + def test_create_permit_with_agents(self): + # Create new Issued By agent + new_issuedby = models.Agent.objects.create( + agenttype=0, + firstname="Issued", + lastname="ByAgent", + division=self.division, + ) + # Create new Issued To agent + new_issuedto = models.Agent.objects.create( + agenttype=0, + firstname="Issued", + lastname="ToAgent", + division=self.division, + ) + # Create permit with existing agent + new agents + permit = models.Permit.objects.create( + institution=self.institution, + permitnumber='P-AGENTS-001', + issuedby=self.agent, # Issue By (existing agent) + issuedto=new_issuedto, # Issue To (new agent) + ) + # Verify save + agent relationships + self.assertIsNotNone(permit.id) + fetched = models.Permit.objects.get(id=permit.id) + self.assertEqual(fetched.issuedby, self.agent) + self.assertEqual(fetched.issuedby.firstname, 'Test') + self.assertEqual(fetched.issuedto, new_issuedto) + self.assertEqual(fetched.issuedto.firstname, 'Issued') + + + def test_add_and_delete_attachment(self): + # Create a permit first + permit = models.Permit.objects.create( + institution=self.institution, + permitnumber='P-ATT-001', + ) + + # Create an attachment + attachment = models.Attachment.objects.create( + origfilename='permit_doc.pdf', + tableid=permit.specify_model.tableId, + title='Field Permit', + ) + permit_attachment = models.Permitattachment.objects.create( + permit=permit, + attachment=attachment, + ordinal=0, + ) + + # Verify attachment is linked + self.assertEqual(permit.permitattachments.count(), 1) + self.assertEqual( + permit.permitattachments.first().attachment.origfilename, + 'permit_doc.pdf' + ) + + # Delete the permit_attachment connector first + permit_attachment.delete() + # The Attachment is auto-deleted by a post_delete signal handler in + # attachment_rules.py (attachment_jointable_deletion). When a Permitattachment join row is deleted, + # the signal fires and calls obj.attachment.delete(). The test passes as-is. + + + # Verifying it's gone + self.assertEqual(permit.permitattachments.count(), 0) + self.assertEqual(models.Attachment.objects.filter(id=attachment.id).count(), 0) + + + def test_delete_permit_without_blockers(self): + permit = models.Permit.objects.create( + institution=self.institution, + permitnumber='P-DEL-001', + ) + permit_id = permit.id + + permit.delete() + + self.assertEqual( + models.Permit.objects.filter(id=permit_id).count(), + 0, + ) + + def test_edit_permit_updates_version(self): + permit = models.Permit.objects.create( + institution=self.institution, + permitnumber='P-EDIT-001', + ) + def skip_perms_check(_): + return None + data = get_resource('permit', permit.id, skip_perms_check) # fetches the permit from the database and stores in the data dictionary + data['remarks'] = 'Updated remark' + + updated = update_obj( + self.collection, + self.agent, + 'permit', + data['id'], + data['version'], + data, + ) + self.assertEqual(updated.version, permit.version + 1) + + fetched = models.Permit.objects.get(id=permit.id) + self.assertEqual(fetched.remarks, 'Updated remark') + self.assertEqual(fetched.version, permit.version + 1) + + # Stale object detection + data['version'] = 0 + with self.assertRaises(StaleObjectException): + update_obj( + self.collection, + self.agent, + 'permit', + data['id'], + data['version'], + data, + ) + + + + diff --git a/specifyweb/backend/businessrules/uniqueness_rules.py b/specifyweb/backend/businessrules/uniqueness_rules.py index ca69f3f1c49..265d302d0fe 100644 --- a/specifyweb/backend/businessrules/uniqueness_rules.py +++ b/specifyweb/backend/businessrules/uniqueness_rules.py @@ -8,9 +8,8 @@ from typing import Any, TypedDict, Iterable from django.apps import apps -from django.db import connections, router, transaction -from django.db.models import Q, Count, Exists, OuterRef, F, Func -from django.db import models as dj_models +from django.db import connections, transaction +from django.db.models import Q, Count from django.db.migrations.recorder import MigrationRecorder from django.core.exceptions import ObjectDoesNotExist, FieldDoesNotExist from specifyweb.specify.api.crud import get_model diff --git a/specifyweb/backend/cache/redis/__init__.py b/specifyweb/backend/cache/redis/__init__.py index a2642045fd8..1496d59c66c 100644 --- a/specifyweb/backend/cache/redis/__init__.py +++ b/specifyweb/backend/cache/redis/__init__.py @@ -1,11 +1 @@ -from .store import ( - set_bytes, - set_string, - get_bytes, - get_string, - add_to_set, - delete_key, - remove_from_set, - set_members, - redis_type -) \ No newline at end of file +from .connect import RedisConnection, RedisSet, RedisList, RedisString diff --git a/specifyweb/backend/cache/redis/connect.py b/specifyweb/backend/cache/redis/connect.py index 8c8f9d3862e..f0935967f94 100644 --- a/specifyweb/backend/cache/redis/connect.py +++ b/specifyweb/backend/cache/redis/connect.py @@ -1,6 +1,18 @@ +from typing import Literal + from redis import Redis from django.conf import settings +# https://redis.io/docs/latest/commands/type/ +Redis_Type = Literal["none", "string", "list", "set", "hash", "stream", "vectorset"] + +# REFACTOR: It might make more sense to move this to a setting on +# RedisConnection, rather than having it as a flag on each adapter +def _format_key(key: str): + db_name = getattr(settings, "DATABASE_NAME") + key_parts = ["specify", db_name, key] + return ":".join(key_parts) + class RedisConnection: def __init__(self, host=getattr(settings, "REDIS_HOST", None), @@ -21,9 +33,16 @@ def __init__(self, decode_responses=self.decode_responses ) - def delete(self, key: str): + def delete(self, key: str, format_key=True): + if format_key: + key = _format_key(key) return self.connection.delete(key) + def key_type(self, key: str, format_key=True) -> Redis_Type: + if format_key: + key = _format_key(key) + return self.connection.type(key) + class RedisDataType: def __init__(self, established: RedisConnection) -> None: @@ -33,36 +52,55 @@ def __init__(self, established: RedisConnection) -> None: def connection(self): return self._established.connection - def delete(self, key: str): - return self._established.delete(key) + def delete(self, key: str, format_key=True): + return self._established.delete(key, format_key=format_key) + + def key_type(self, key: str, format_key=True) -> Redis_Type: + return self._established.key_type(key, format_key=format_key) class RedisList(RedisDataType): """ See https://redis.io/docs/latest/develop/data-types/lists/ """ - def left_push(self, key: str, value) -> int: + def left_push(self, key: str, value, format_key=True) -> int: + if format_key: + key = _format_key(key) return self.connection.lpush(key, value) - def right_push(self, key: str, value) -> int: + def right_push(self, key: str, value, format_key=True) -> int: + if format_key: + key = _format_key(key) return self.connection.rpush(key, value) - def right_pop(self, key: str) -> str | bytes | None: + def right_pop(self, key: str, format_key=True) -> str | bytes | None: + if format_key: + key = _format_key(key) return self.connection.rpop(key) - def left_pop(self, key: str) -> str | bytes | None: + def left_pop(self, key: str, format_key=True) -> str | bytes | None: + if format_key: + key = _format_key(key) return self.connection.lpop(key) - def length(self, key: str) -> int: + def length(self, key: str, format_key=True) -> int: + if format_key: + key = _format_key(key) return self.connection.llen(key) - def range(self, key: str, start_index: int, end_index: int) -> list[str] | list[bytes]: + def range(self, key: str, start_index: int, end_index: int, format_key=True) -> list[str] | list[bytes]: + if format_key: + key = _format_key(key) return self.connection.lrange(key, start_index, end_index) - def trim(self, key: str, start_index: int, end_index: int) -> list[str] | list[bytes]: + def trim(self, key: str, start_index: int, end_index: int, format_key=True) -> list[str] | list[bytes]: + if format_key: + key = _format_key(key) return self.connection.ltrim(key, start_index, end_index) - def blocking_left_pop(self, key: str, timeout: int) -> str | bytes | None: + def blocking_left_pop(self, key: str, timeout: int, format_key=True) -> str | bytes | None: + if format_key: + key = _format_key(key) # This will block the thread until either an item is pushed into the # List or timeout seconds have passed # https://redis.io/docs/latest/commands/blpop/ @@ -76,44 +114,66 @@ class RedisSet(RedisDataType): """ See https://redis.io/docs/latest/develop/data-types/sets/ """ - def add(self, key: str, *values: str) -> int: + def add(self, key: str, *values: str, format_key=True) -> int: + if format_key: + key = _format_key(key) return self.connection.sadd(key, *values) - def is_member(self, key: str, value: str) -> bool: + def is_member(self, key: str, value: str, format_key=True) -> bool: + if format_key: + key = _format_key(key) is_member = int(self.connection.sismember(key, value)) return is_member == 1 - def remove(self, key: str, value: str): - return self.connection.srem(key, value) + def remove(self, key: str, *values: str, format_key=True): + if format_key: + key = _format_key(key) + return self.connection.srem(key, *values) - def size(self, key: str) -> int: + def size(self, key: str, format_key=True) -> int: + if format_key: + key = _format_key(key) return self.connection.scard(key) - def members(self, key: str) -> set[str]: + def members(self, key: str, format_key=True) -> set[str]: + if format_key: + key = _format_key(key) return self.connection.smembers(key) - def union(self, *keys: str) -> set[str]: + def union(self, *keys: str, format_keys=True) -> set[str]: + if format_keys: + keys = tuple((_format_key(key) for key in keys)) return self.connection.sunion(*keys) - def intersection(self, *keys: str) -> set[str]: + def intersection(self, *keys: str, format_keys=True) -> set[str]: + if format_keys: + keys = tuple((_format_key(key) for key in keys)) return self.connection.sinter(*keys) - def difference(self, *keys: str) -> set[str]: + def difference(self, *keys: str, format_keys=True) -> set[str]: + if format_keys: + keys = tuple((_format_key(key) for key in keys)) return self.connection.sdiff(*keys) +# REFACTOR: Make a dedicated RedisBytes class to make working with bytes more +# intuitive class RedisString(RedisDataType): """ See https://redis.io/docs/latest/develop/data-types/strings/ """ - def set(self, key, value, time_to_live=None, override_existing=True): + def set(self, key, value, time_to_live=None, override_existing=True, format_key=True): + if format_key: + key = _format_key(key) flags = { "ex": time_to_live, "nx": not override_existing } self.connection.set(key, value, **flags) - def get(self, key, delete_key=False) -> str | bytes | None: + def get(self, key, delete_key=False, format_key=True) -> str | bytes | None: + if format_key: + key = _format_key(key) if delete_key: return self.connection.getdel(key) return self.connection.get(key) diff --git a/specifyweb/backend/cache/redis/rqueue.py b/specifyweb/backend/cache/redis/rqueue.py deleted file mode 100644 index e7ab1bf1d11..00000000000 --- a/specifyweb/backend/cache/redis/rqueue.py +++ /dev/null @@ -1,61 +0,0 @@ -import json - -from typing import Callable, Generator, Iterable, cast - -from specifyweb.backend.cache.redis.connect import RedisConnection, RedisList - -type Serialized = str | bytes | bytearray - -type Serializer[T] = Callable[[T], str] -type Deserializer[T] = Callable[[Serialized], T] - -def default_serializer(obj) -> str: - return str(obj) - -def default_deserializer(serialized: Serialized): - return serialized - -class RedisQueue[T]: - def __init__(self, connection: RedisConnection, key: str, - serializer: Serializer[T] | None = None, - deserializer: Deserializer[T] | None = None): - self.connection = RedisList(connection) - self.key = key - self.serializer = serializer or cast(Serializer[T], default_serializer) - self.deserializer = deserializer or cast(Deserializer[T], default_deserializer) - - def key_name(self, *name_parts: str | None): - key_name = "_".join([self.key, *(part for part in name_parts if part is not None)]) - return key_name - - def push(self, *objs: T, sub_key: str | None = None) -> int: - key_name = self.key_name(sub_key) - return self.connection.right_push(key_name, *self._serialize_objs(*objs)) - - def pop(self, sub_key: str | None = None) -> T | None: - key_name = self.key_name(sub_key) - popped = self.connection.left_pop(key_name) - if popped is None: - return None - return self.deserializer(popped) - - def wait_and_pop(self, timeout: int = 0, sub_key: str | None = None) -> T: - key_name = self.key_name(sub_key) - popped = self.connection.blocking_left_pop(key_name, timeout) - if popped is None: - raise TimeoutError("No items in queue after timeout") - return self.deserializer(popped) - - def peek(self, sub_key: str | None = None) -> T | None: - key_name = self.key_name(sub_key) - top_value = self._deserialize_objs(*self.connection.range(key_name, 0, 0)) - if len(top_value) == 0: - return None - return top_value[0] - - def _serialize_objs(self, *objs: T) -> Generator[str, None, None]: - return (self.serializer(obj) for obj in objs) - - def _deserialize_objs(self, *serialized: Serialized): - return tuple(self.deserializer(obj) for obj in serialized) - diff --git a/specifyweb/backend/cache/redis/store.py b/specifyweb/backend/cache/redis/store.py deleted file mode 100644 index 1e9576b2303..00000000000 --- a/specifyweb/backend/cache/redis/store.py +++ /dev/null @@ -1,38 +0,0 @@ -from .utils import _set_string, _get_string, _delete_key, _add_to_set, _remove_from_set, _set_elements, _redis_type, format_key - -# REFACTOR: Replace these with RedisConnection adapters - -def set_string(key: str | bytes, value: str, time_to_live=None, override_existing=True): - return _set_string(format_key(key), value, time_to_live=time_to_live, override_existing=override_existing, decode_responses=True) - - -def set_bytes(key: str | bytes, value: bytes, time_to_live=None, override_existing=True): - return _set_string(format_key(key), value, time_to_live=time_to_live, override_existing=override_existing, decode_responses=False) - - -def get_string(key: str | bytes, delete_key=False) -> str: - return _get_string(format_key(key), delete_key=delete_key, decode_responses=True) - - -def get_bytes(key: str | bytes, delete_key=False) -> bytes: - return _get_string(format_key(key), delete_key=delete_key, decode_responses=False) - - -def add_to_set(key: str | bytes, *elements: str): - return _add_to_set(format_key(key), *elements) - - -def remove_from_set(key: str | bytes, *elements: str): - return _remove_from_set(format_key(key), *elements) - - -def set_members(key: str | bytes): - return _set_elements(format_key(key)) - - -def delete_key(key: str | bytes): - return _delete_key(format_key(key)) - - -def redis_type(key: str | bytes): - return _redis_type(format_key(key)) diff --git a/specifyweb/backend/cache/redis/utils.py b/specifyweb/backend/cache/redis/utils.py deleted file mode 100644 index 5682b559358..00000000000 --- a/specifyweb/backend/cache/redis/utils.py +++ /dev/null @@ -1,79 +0,0 @@ -from typing import overload, Literal - -from redis import Redis -from django.conf import settings - - -def redis_connection(decode_responses=True): - redis_host = getattr(settings, "REDIS_HOST", None) - redis_port = getattr(settings, "REDIS_PORT", None) - redis_db_index = getattr(settings, "REDIS_DB_INDEX", 0) - if None in (redis_host, redis_port, redis_db_index): - raise ValueError("Redis is not correctly configured", redis_host, redis_port) - return Redis(host=redis_host, port=redis_port, db=redis_db_index, decode_responses=decode_responses) - -@overload -def format_key(key: str) -> str: ... - -@overload -def format_key(key: bytes) -> bytes: ... - -def format_key(key: str | bytes) -> str | bytes: - """Formats key to avoid collisions when specify instances are sharing a cache. - Expected format: specify:{database}:app:name""" - if isinstance(key, bytes): - return key - db_name = getattr(settings, "DATABASE_NAME") - return key.format(database=db_name) - -def _delete_key(key: str): - host = redis_connection() - host.delete(key) - -def _set_string(key: str, value: str, time_to_live=None, override_existing=True, decode_responses=True): - host = redis_connection(decode_responses=decode_responses) - # See https://redis.readthedocs.io/en/stable/commands.html#redis.commands.core.CoreCommands.set - flags = { - "ex": time_to_live, - "nx": not override_existing - } - host.set(key, value, **flags) - - -@overload -def _get_string(key: str, delete_key: bool, decode_responses: True) -> str | None: ... - - -@overload -def _get_string(key: str, delete_key: bool, decode_responses: False) -> bytes | None: ... - - -def _get_string(key: str, delete_key: bool=False, decode_responses=True) -> str | bytes | None: - host = redis_connection(decode_responses=decode_responses) - if delete_key: - return host.getdel(key) - - return host.get(key) - -def _add_to_set(key: str, *elements: str): - if len(elements) <= 0: - return 0 - host = redis_connection(decode_responses=True) - return host.sadd(key, *elements) - -def _remove_from_set(key: str, *elements: str) -> int: - if len(elements) <= 0: - return 0 - host = redis_connection(decode_responses=True) - return host.srem(key, *elements) - -def _set_elements(key: str) -> set: - host = redis_connection(decode_responses=True) - return host.smembers(key) - -# https://redis.io/docs/latest/commands/type/ -Redis_Type = Literal["none", "string", "list", "set", "hash", "stream", "vectorset"] - -def _redis_type(key: str) -> Redis_Type: - host = redis_connection(decode_responses=True) - return host.type(key) \ No newline at end of file diff --git a/specifyweb/backend/context/data/schemalocalization.json b/specifyweb/backend/context/data/schemalocalization.json index 8a3c4986ab4..c73463ba6a2 100644 --- a/specifyweb/backend/context/data/schemalocalization.json +++ b/specifyweb/backend/context/data/schemalocalization.json @@ -1 +1 @@ -{"conservevent": {"name": "Conservator Event", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treatmentcompdate": {"name": "Treatment Completion Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "treatmentCompDate"}, "conditionreport": {"name": "Condition Report", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A report on the condition"}, "completedcomments": {"name": "Completed Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "completedComments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "curatorapprovaldate": {"name": "Approval Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "curatorApprovalDate"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "examdate": {"name": "Exam Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date the object was examined"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "completeddate": {"name": "Completed Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "completedDate"}, "treatmentreport": {"name": "Treatment Report", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A description of the treatment that is needed."}, "treatedbyagent": {"name": "Treated By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treatedByAgent"}, "advtestingexam": {"name": "Advanced Testing Exam", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The advanced testing that was used to examine the object"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "conserveventattachments": {"name": "Conserv Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservEventAttachments"}, "examinedbyagent": {"name": "Examined By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "examinedByAgent"}, "conservdescription": {"name": "Conserv Description", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "conservDescription"}, "curator": {"name": "Curator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "curator"}, "photodocs": {"name": "Photo Documentation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Any documentation on the photos that were taken"}, "advtestingexamresults": {"name": "Advanced Testing Exam Results", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The results of the advanced testing"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "An action that takes place as part of a Conservation Description. Over a period of time there may be multiple incidents that require a Conservator to take action."}, "recordset": {"name": "Record Set", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "group": {"name": "Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "group"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "recordsetitems": {"name": "Record Set Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordSetItems"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "inforequest": {"name": "Info Request", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "infoRequest"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dbtableid": {"name": "Database Table Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "dbTableId"}, "allpermissionlevel": {"name": "All Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "allPermissionLevel"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "type"}, "grouppermissionlevel": {"name": "Group Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "groupPermissionLevel"}, "ownerpermissionlevel": {"name": "Owner Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ownerPermissionLevel"}}, "type": null, "picklistname": null, "desc": "Describes a set of records of any type that can be acted upon within the applicaiton."}, "borrowattachment": {"name": "Borrow Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrow"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "borrowattachment"}, "collectingeventattribute": {"name": "Collecting Event Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "collectingevents": {"name": "Collecting Events", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectingEvents"}, "text5": {"name": "Clarity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "text14": {"name": "Text14", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text14"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo4"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "text15": {"name": "Text15", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text15"}, "text16": {"name": "Text16", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text16"}, "text17": {"name": "Text17", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text17"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text11": {"name": "Text11", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text11"}, "text12": {"name": "Turbidity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text12"}, "text13": {"name": "Text13", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text13"}, "text10": {"name": "Text10", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text10"}, "yesno5": {"name": "Yes No5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo5"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "number10": {"name": "Number10", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number10"}, "number11": {"name": "Number11", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number11"}, "number12": {"name": "Number12", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number12"}, "number13": {"name": "Number13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number13"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "number6": {"name": "Number6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number6"}, "number7": {"name": "Number7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number7"}, "number4": {"name": "Number4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number4"}, "text1": {"name": "Min Depth", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text6": {"name": "Salinity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text7": {"name": "Turbidity", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text4": {"name": "Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "text8": {"name": "Vegetation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text9": {"name": "Habitat Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "HabitatType", "desc": null}, "number8": {"name": "Number8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number8"}, "number9": {"name": "Number9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number9"}, "text2": {"name": "Max Depth", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text3": {"name": "Temp", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number5": {"name": "Number5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number5"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "hosttaxon": {"name": "Host Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hostTaxon"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}}, "type": null, "picklistname": null, "desc": "Collecting Event Attributes that were also available in Specify 5."}, "accession": {"name": "Accession", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"accessionnumber": {"name": "Acc #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Usually an integer or alphanumeric value that is assigned to material when it enters the collection. The format of accession numbers varies among collections, but all refer to the acquisition of specimens, observations, or other collection objects."}, "accessionauthorizations": {"name": "Accession Authorizations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessionAuthorizations"}, "dateaccessioned": {"name": "Accessioned", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of Accession."}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The date and time the record was created."}, "accessioncondition": {"name": "Accession Condition", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Physical description of the condition of the accession."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "dateacknowledged": {"name": "Date Acknowledged", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateAcknowledged"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "type": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionType", "desc": "Source of Accession, e.g. `Collecting`, `Gift`, `Bequest` ..."}, "deaccessions": {"name": "Deaccessions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "deaccessions"}, "status": {"name": "Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionStatus", "desc": "Status of Accession, e.g. `In process`, `Complete` ..."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Division", "desc": "division"}, "accessionattachments": {"name": "Accession Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": ""}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text3": {"name": "Text3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number of Specimens\\nin Accession", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "verbatimdate": {"name": "Verbatim Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Accommodates historical accessions."}, "number1": {"name": "Number of lots\\nin Accession", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "A user-visible identifier of the Accession. Typically an integer, but may include alphanumeric characters as prefix, suffix, and separators."}, "remarks": {"name": "Description\\nof Material", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "totalvalue": {"name": "Total Value", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The total monetary value of the accession."}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "appraisals": {"name": "Appraisals", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appraisals"}, "treatmentevents": {"name": "Treatment Events", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "treatmentEvents"}, "datereceived": {"name": "Received", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date material was received."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "accessionagents": {"name": "Accession Agents", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": ""}}, "type": null, "picklistname": null, "desc": "Also called an acquisition. A consignment of specimens acquired either by field collecting of staff members, gifts, purchases, or exchange with another institution. "}, "workbenchrowexportedrelationship": {"name": "Workbench Row Exported Relationship", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"sequence": {"name": "Sequence", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequence"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableName"}, "relationshipname": {"name": "Relationship Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "relationshipName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "workbenchrow": {"name": "Workbench Row", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "workbenchRow"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "workbenchrowexportedrelationship"}, "collectingtrip": {"name": "Collecting Trip", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectingevents": {"name": "Collecting Information", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEvents"}, "enddateverbatim": {"name": "Haul", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "endDateVerbatim"}, "startdateprecision": {"name": "Start Date Precision", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDatePrecision"}, "sponsor": {"name": "Sponsor", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of sponsor of collecting trip."}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The start date of the collecting trip."}, "startdateverbatim": {"name": "Cruise", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "startDateVerbatim"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "enddateprecision": {"name": "End Date Precision", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDatePrecision"}, "collectingtripname": {"name": "Vessel", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of the collecting trip."}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "text4": {"name": "Text4", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text4"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "endtime": {"name": "End Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The ending time of the collecting trip."}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The ending date of the collecting trip."}, "fundingagents": {"name": "Funding Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fundingAgents"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "starttime": {"name": "Start Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The start time of the collecting trip."}}, "type": null, "picklistname": null, "desc": "Used to group Collecting Events together."}, "geography": {"name": "Geography", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"centroidlat": {"name": "Centroid Latitude", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "centroidLat"}, "centroidlon": {"name": "Centroid Longitude", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "centroidLon"}, "acceptedgeography": {"name": "Preferred Geo", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedGeography"}, "guid": {"name": "GUID", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "guid"}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Geographic Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "gml": {"name": "GML", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "gml"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "abbrev": {"name": "Abbreviation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "abbrev"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "localities": {"name": "Localities", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localities"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "commonname": {"name": "Common Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "commonName"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "The preferred name of a synonym."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "timestampversion": {"name": "Timestamp Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Date", "picklistname": null, "desc": "timestampVersion"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "geographycode": {"name": "Geography Code", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "geographyCode"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "iscurrent": {"name": "Is Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "`Yes` if the Name and/or Geographic/Political entity is currently valid."}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "Represents a politcal boundary (Country, State, County, Township, etc.)."}, "discipline": {"name": "Discipline", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"taxontreedef": {"name": "Taxon Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "taxonTreeDef"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "splocalecontainers": {"name": "Sp Locale Containers", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spLocaleContainers"}, "datatype": {"name": "Data Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dataType"}, "geologictimeperiodtreedef": {"name": "Chronostratigraphy Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geologicTimePeriodTreeDef"}, "lithostrattreedef": {"name": "Litho Strat Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lithoStratTreeDef"}, "geographytreedef": {"name": "Geography Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geographyTreeDef"}, "collections": {"name": "Collections", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collections"}, "spexportschemas": {"name": "Sp Export Schemas", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemas"}, "numberingschemes": {"name": "Numbering Schemes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "numberingSchemes"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attributedefs": {"name": "Attribute Defs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attributeDefs"}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "type"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "May include one or more collections that share the Taxon, Geography, LithoStratigraphy, and Chronostratigraphy Trees, Localities, Agents and Determination Status."}, "exchangeout": {"name": "Exchange Out", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"agentcatalogedby": {"name": "Cataloged By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Agent ID of person who recorded the exchange."}, "exchangeoutpreps": {"name": "Exchange Out Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOutPreps"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "exchangedate": {"name": "Exchange Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date exchange was sent."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "shipments"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "quantityexchanged": {"name": "Quantity Exchanged", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of items sent."}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "agentsentto": {"name": "Sent To", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agentSentTo"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "descriptionOfMaterial"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes an outgoing Exchanged Specimen to a different institution."}, "lithostrattreedefitem": {"name": "Lithostratigraphy Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "treedef": {"name": "Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "institution": {"name": "Institution", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"issecurityon": {"name": "Is Security On", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSecurityOn"}, "code": {"name": "Code", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "code"}, "technicalcontacts": {"name": "Technical Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "technicalContacts"}, "minimumpwdlength": {"name": "Minimum Pwd Length", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "minimumPwdLength"}, "issharinglocalities": {"name": "Is Sharing Localities", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSharingLocalities"}, "storagetreedef": {"name": "Storage Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "storageTreeDef"}, "contentcontacts": {"name": "Content Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "contentContacts"}, "ipr": {"name": "IPR", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A sequence of statements related to Intellectual Property Rights, credit and acknowledgement."}, "currentmanagedschemaversion": {"name": "Current Managed Schema Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "currentManagedSchemaVersion"}, "isserverbased": {"name": "Is Server Based", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isServerBased"}, "isanonymous": {"name": "Is Anonymous", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isAnonymous"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "copyright": {"name": "Copyright", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "copyright"}, "isaccessionsglobal": {"name": "Are Accessions Global", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isAccessionsGlobal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "iconuri": {"name": "Icon URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "iconURI"}, "isreleasemanagedglobally": {"name": "Is Release Managed Globally", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isReleaseManagedGlobally"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "lsidauthority": {"name": "LSID Authority", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lsidAuthority"}, "hasbeenasked": {"name": "Has Been Asked", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hasBeenAsked"}, "issinglegeographytree": {"name": "Is Single Geography Tree", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSingleGeographyTree"}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "address": {"name": "Address", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "divisions": {"name": "Divisions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "divisions"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "license": {"name": "License", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "license"}, "uri": {"name": "URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "uri"}, "termsofuse": {"name": "Terms Of Use", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Defines conditions under which the data may be analyzed, distributed or changed. "Terms of use" includes concepts like "Usage conditions" and "Specific Restrictions"."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "currentmanagedrelversion": {"name": "Current Managed Rel Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "currentManagedRelVersion"}, "altname": {"name": "Alt Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "altName"}, "disclaimer": {"name": "Disclaimer", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Disclaimer statement, e.g. concerning responsibility for data quality or legal implications."}}, "type": null, "picklistname": null, "desc": "The parent institution. An institution is made up of one or more divisions."}, "conservdescriptionattachment": {"name": "Conservator Description Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order or position"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "conservdescription": {"name": "Conserv Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "conservDescription"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "institutionnetwork": {"name": "Institution Network", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "code": {"name": "Code", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "license": {"name": "License", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "contacts": {"name": "Contacts", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "altname": {"name": "Alt Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "uri": {"name": "Uri", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "ipr": {"name": "Ipr", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "termsofuse": {"name": "Terms Of Use", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "iconuri": {"name": "Icon U R I", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "copyright": {"name": "Copyright", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "address": {"name": "Address", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "collections": {"name": "Collections", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "disclaimer": {"name": "Disclaimer", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}}, "type": null, "picklistname": null, "desc": null}, "loanpreparation": {"name": "Loan Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "quantityresolved": {"name": "Quantity Resolved", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Number of specimens returned, deaccessioned or otherwise accounted for. (necessary for Lots)."}, "outcomments": {"name": "Out Comments", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Comments on item when loaned."}, "loan": {"name": "Loan", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Loan containing the Preparation."}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "incomments": {"name": "In Comments", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Comments on item when returned."}, "isresolved": {"name": "Is Resolved", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isResolved"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "loanreturnpreparations": {"name": "Loan Return Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanReturnPreparations"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "quantityreturned": {"name": "Quantity Returned", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Number of specimens returned. (necessary for Lots)"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of loaned material (intended to be used for non-cataloged items, i.e. when PreparationID is null)"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The total number of specimens loaned (necessary for lots)."}}, "type": null, "picklistname": null, "desc": "A join table between the Loan and the Preparation. It contains comments and quantity fields."}, "attachment": {"name": "Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repositoryagreementattachments": {"name": "Repository Agreement Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAttachments"}, "copyrightdate": {"name": "Copyright Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Date of copyright of attachment."}, "origfilename": {"name": "Original Filename", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Original name of file."}, "preparationattachments": {"name": "Preparation Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttachments"}, "attachmentimageattribute": {"name": "Attachment Image Attribute", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachmentImageAttribute"}, "title": {"name": "Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Title of attachment."}, "conservdescriptionattachments": {"name": "Conserv Description Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservDescriptionAttachments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "loanattachments": {"name": "Loan Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanAttachments"}, "collectionobjectattachments": {"name": "Collection Object Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttachments"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "fieldnotebookpageattachments": {"name": "Field Notebook Page Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPageAttachments"}, "fieldnotebookattachments": {"name": "Field Notebook Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookAttachments"}, "giftattachments": {"name": "Gift Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftAttachments"}, "localityattachments": {"name": "Locality Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityAttachments"}, "taxonattachments": {"name": "Taxon Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonAttachments"}, "tags": {"name": "Tags", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User defined key words for attachments."}, "filecreateddate": {"name": "File Created Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "fileCreatedDate"}, "accessionattachments": {"name": "Accession Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessionAttachments"}, "fieldnotebookpagesetattachments": {"name": "Field Notebook Page Set Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPageSetAttachments"}, "dnasequenceattachments": {"name": "Dna Sequence Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequenceAttachments"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "borrowattachments": {"name": "Borrow Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrowAttachments"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "dnasequencingrunattachments": {"name": "Dna Sequencing Run Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequencingRunAttachments"}, "permitattachments": {"name": "Permit Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "permitAttachments"}, "mimetype": {"name": "Mime Type", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Describes the attachment file type."}, "conserveventattachments": {"name": "Conserv Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservEventAttachments"}, "license": {"name": "License", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Attachment license information."}, "metadata": {"name": "Metadata", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "metadata"}, "credit": {"name": "Credit", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Attachment credit."}, "copyrightholder": {"name": "Copyright Holder", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "copyrightHolder"}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referenceworkattachments": {"name": "Reference Work Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWorkAttachments"}, "agentattachments": {"name": "Agent Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "agentAttachments"}, "attachmentlocation": {"name": "Attachment Location", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Location of attachment repository."}, "dateimaged": {"name": "Date Imaged", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateImaged"}, "collectingeventattachments": {"name": "Collecting Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttachments"}}, "type": null, "picklistname": null, "desc": "The information in this record identifies everything the application will need to load and display the attachment. The attachment location is an absolute path to the file. The file itself is not stored in the database."}, "division": {"name": "Division", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The discipline of the division"}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The list of Disciplines that belong to this Division"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "address": {"name": "Address", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address"}, "uri": {"name": "URI", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A URI (web site) address for the department"}, "numberingschemes": {"name": "Numbering Schemes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "numberingSchemes"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "abbrev": {"name": "Abbreviation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The abbreviation for the division."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "members": {"name": "Members", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "members"}, "altname": {"name": "Alt Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "altName"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "iconuri": {"name": "Icon URI", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The URL to their icon"}, "institution": {"name": "Institution", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The institution the division belongs to."}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the division"}}, "type": null, "picklistname": null, "desc": "The division (or department) containing agents. "}, "taxon": {"name": "Taxon", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"groupnumber": {"name": "Group Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Taxonomic group number"}, "usfwscode": {"name": "USFWS Code", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "usfwsCode"}, "acceptedtaxon": {"name": "Preferred Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedTaxon"}, "cultivarname": {"name": "Cultivar Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "cultivarName"}, "citesstatus": {"name": "CITES Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "citesStatus"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "children": {"name": "Child Taxa", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Taxonomic Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "unitname4": {"name": "Unit Name4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName4"}, "determinations": {"name": "Determinations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "determinations"}, "labelformat": {"name": "Label Format", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "TaxonLabelFormatter", "desc": "labelFormat"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "author": {"name": "Author", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "author"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "hybridparent1": {"name": "Hybrid Parent1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridParent1"}, "environmentalprotectionstatus": {"name": "Protected Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "environmentalProtectionStatus"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "If the record has been imported then this field holds information about the authority file it was obtained from, else it is user-editable."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "unitname1": {"name": "Unit Name1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName1"}, "unitname2": {"name": "Unit Name2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName2"}, "unitname3": {"name": "Unit Name3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName3"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "esastatus": {"name": "ESA Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "esaStatus"}, "taxoncitations": {"name": "Taxon Citations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonCitations"}, "taxonomicserialnumber": {"name": "Taxonomic Serial Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "If the record has been imported from an Authority File then this field stores a unique ID assigned by the provider, else it is null"}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "taxonattachments": {"name": "Taxon Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonAttachments"}, "rankid": {"name": "Rank ID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "ncbitaxonnumber": {"name": "NCBI Taxon Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ncbiTaxonNumber"}, "hybridchildren1": {"name": "Hybrid Children1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridChildren1"}, "commonname": {"name": "Common Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "commonName"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "text2": {"name": "Text 2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text 1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number 2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "colstatus": {"name": "Col Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "colStatus"}, "number1": {"name": "Number 1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "collectingeventattributes": {"name": "Collecting Event Attributes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectingEventAttributes"}, "unitind2": {"name": "Unit Ind2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd2"}, "isisnumber": {"name": "ISIS Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isisNumber"}, "unitind4": {"name": "Unit Ind4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd4"}, "unitind3": {"name": "Unit Ind3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd3"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "unitind1": {"name": "Unit Ind1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd1"}, "hybridchildren2": {"name": "Hybrid Children2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridChildren2"}, "ishybrid": {"name": "Is Hybrid", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isHybrid"}, "hybridparent2": {"name": "Hybrid Parent2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridParent2"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "commonnames": {"name": "Common Names", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "commonNames"}}, "type": null, "picklistname": null, "desc": "Describes the taxonomy of a Determination."}, "recordsetitem": {"name": "Record Set Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"recordset": {"name": "Record Set", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordSet"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}}, "type": null, "picklistname": null, "desc": "recordsetitem"}, "referencework": {"name": "Reference Work", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"isbn": {"name": "ISBN", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isbn"}, "authors": {"name": "Authors", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "authors"}, "ispublished": {"name": "Is Published", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isPublished"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "librarynumber": {"name": "Library Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "libraryNumber"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Title of reference"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "determinationcitations": {"name": "Determination Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "determinationCitations"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "taxoncitations": {"name": "Taxon Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonCitations"}, "workdate": {"name": "Work Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "workDate"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "journal": {"name": "Journal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "journal"}, "localitycitations": {"name": "Locality Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityCitations"}, "volume": {"name": "Volume", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Volume/Issue for Journal articles"}, "text1": {"name": "PDF of Citation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "containedreferenceworks": {"name": "Contained Reference Works", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containedReferenceWorks"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "pages": {"name": "Pages", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Number of pages or Page range for Journal articles"}, "exsiccatae": {"name": "Exsiccatae", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exsiccatae"}, "publisher": {"name": "Publisher", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "publisher"}, "collectionobjectcitations": {"name": "Collection Object Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectCitations"}, "url": {"name": "Url", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "url"}, "placeofpublication": {"name": "Place Of Publication", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "placeOfPublication"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "referenceworktype": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Byte", "picklistname": "ReferenceWorkType", "desc": "Type of Reference (Book(0), Electronic Media(1), Paper(2), Technical Report(3), Thesis(4), Section in book(5))"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "containedrfparent": {"name": "Contained R F Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containedRFParent"}, "referenceworkattachments": {"name": "Reference Work Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWorkAttachments"}}, "type": null, "picklistname": null, "desc": "A literary reference work."}, "paleocontext": {"name": "Paleo Context", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "direction": {"name": "Direction", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The direction of the measurement of the distance: up or down."}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "positionstate": {"name": "Position State", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "How it was found: float or in-situ"}, "lithostrat": {"name": "Litho Strat", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "lithoStrat"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "chronosstratend": {"name": "Chronos Strat End", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "chronosStratEnd"}, "distanceunits": {"name": "Distance Units", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The units for the distances, feet or meters"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "chronosstrat": {"name": "Chrono Strat", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "chronosStrat"}, "text1": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "biostrat": {"name": "Bio Strat", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "bioStrat"}, "topdistance": {"name": "Top Distance", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The distance to the top of the position."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "bottomdistance": {"name": "Bottom Distance", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The distance to the bottom of the position."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the paleontologic information for a Collection Object. This also references Chronostratigraphy and Bio Stratigray."}, "spexportschemamapping": {"name": "Sp Export Schema Mapping", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "mappings": {"name": "Mappings", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mappings"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampexported": {"name": "Timestamp Exported", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampExported"}, "spexportschemas": {"name": "Sp Export Schemas", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemas"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "mappingname": {"name": "Mapping Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mappingName"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}}, "type": null, "picklistname": null, "desc": "spexportschemamapping"}, "agentgeography": {"name": "Agent Geography", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"modifiedbyagent": {"name": "Modified by Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Role of the agent as \"author\" or \"collector\" within the geography."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "geography": {"name": "Geography", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The geographical region of specialization"}}, "type": null, "picklistname": null, "desc": "The geographical region that a particular collector was known for collecting in."}, "commonnametxcitation": {"name": "Common Name Tx Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "commonnametx": {"name": "Common Name Tx", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "commonNameTx"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWork"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "commonnametxcitation"}, "spappresource": {"name": "App Resource", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"mimetype": {"name": "Mime Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "mimeType"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "group": {"name": "Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "group"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "description"}, "level": {"name": "Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "level"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "allpermissionlevel": {"name": "All Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "allPermissionLevel"}, "metadata": {"name": "Meta Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "metaData"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "spappresourcedatas": {"name": "App Resource Datas", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "spAppResourceDatas"}, "spappresourcedir": {"name": "Sp App Resource Dir", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAppResourceDir"}, "grouppermissionlevel": {"name": "Group Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "groupPermissionLevel"}, "ownerpermissionlevel": {"name": "Owner Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ownerPermissionLevel"}, "spreports": {"name": "Sp Reports", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spReports"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a resource, typically XML, that the application uses during run time."}, "fieldnotebookpageattachment": {"name": "Field Notebook Page Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "fieldnotebookpage": {"name": "Field Notebook Page", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPage"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "repositoryagreement": {"name": "Repository Agreement", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"status": {"name": "Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionStatus", "desc": "status"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "startDate"}, "repositoryagreementnumber": {"name": "RA Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repositoryAgreementNumber"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "repositoryagreementauthorizations": {"name": "Repository Agreement Authorizations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAuthorizations"}, "repositoryagreementattachments": {"name": "Repository Agreement Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAttachments"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "originator": {"name": "Originator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "originator"}, "repositoryagreementagents": {"name": "Repository Agreement Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAgents"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "endDate"}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "dateReceived"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "accessions": {"name": "Accessions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessions"}}, "type": null, "picklistname": null, "desc": "An agreement for allowing an Accession to occur, but does not include ownership."}, "otheridentifier": {"name": "Other Identifier", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "identifier": {"name": "Identifier", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "identifier"}, "institution": {"name": "Institution", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "institution"}}, "type": null, "picklistname": null, "desc": "Describes an identifier (Catalog Number) of a Collection Object from a different Institution."}, "gift": {"name": "Gift", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"giftagents": {"name": "Gift Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftAgents"}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "giftnumber": {"name": "Gift Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "giftNumber"}, "giftpreparations": {"name": "Gift Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftPreparations"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "giftattachments": {"name": "Gift Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftAttachments"}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "shipments"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "purposeofgift": {"name": "Purpose Of Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "purposeOfGift"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "se"}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User defined."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "specialconditions": {"name": "Special Conditions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specialConditions"}, "giftdate": {"name": "Gift Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftDate"}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateReceived"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isfinancialresponsibility": {"name": "Is Financial Responsibility", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFinancialResponsibility"}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}}, "type": null, "picklistname": null, "desc": "Describes a Gift."}, "geographytreedef": {"name": "Geography Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "disciplines"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the Geography tree."}, "geologictimeperiodtreedef": {"name": "Geological Time Period Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "disciplines"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the GTP tree."}, "storagetreedefitem": {"name": "Storage Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "treedef": {"name": "Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "borrow": {"name": "Borrow", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"currentduedate": {"name": "Current Due Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date loan is currently due. (Same as Original Due Date unless loan period has been extended)"}, "borrowagents": {"name": "Borrow Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "borrowAgents"}, "dateclosed": {"name": "Date Closed", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date loan was closed."}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno1": {"name": "Extension Granted", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "invoicenumber": {"name": "Invoice Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Lender`s loan number."}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "shipments"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "borrowattachments": {"name": "Borrow Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrowAttachments"}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "borrowmaterials": {"name": "Borrow Materials", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "borrowMaterials"}, "receiveddate": {"name": "Received Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date material was received."}, "isclosed": {"name": "Is Closed", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "Indicates whether the borrow was closed (returned)."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isfinancialresponsibility": {"name": "Is Financial Responsibility", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFinancialResponsibility"}, "originalduedate": {"name": "Original Due Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Original due date for loan."}}, "type": null, "picklistname": null, "desc": "Contains information about loans from another institution. When one institution borrows a group of objects from another institution, all objects in the borrowed group share a common set of attributes that are defined for the loan. "}, "determinationcitation": {"name": "Determination Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of the publication citing the determination."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "determination": {"name": "Determination", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Determination being cited."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to a citation for the determination."}, "exsiccata": {"name": "Exsiccata", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"exsiccataitems": {"name": "Exsiccata Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exsiccataItems"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The title of the exsiccata"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The monograph or journal in which the exsiccata is listed"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "exsiccata"}, "collectingeventattr": {"name": "Collecting Event Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectingevent": {"name": "Collecting Event", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dblvalue": {"name": "Double Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "dblValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "strvalue": {"name": "String Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "strValue"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Extensible attributes introduced for Specify 6."}, "workbench": {"name": "WorkBench", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbenchrows": {"name": "Workbench Rows", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchRows"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "group": {"name": "Group", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "group"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "exportinstitutionname": {"name": "Export Institution Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "exportInstitutionName"}, "workbenchtemplate": {"name": "Workbench Template", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchTemplate"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "allpermissionlevel": {"name": "All Permission Level", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "allPermissionLevel"}, "lockedbyusername": {"name": "Locked By User Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lockedByUserName"}, "formid": {"name": "Form Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "formId"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dbtableid": {"name": "Database Table Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "dbTableId"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "srcfilepath": {"name": "Source File Path", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "srcFilePath"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "grouppermissionlevel": {"name": "Group Permission Level", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "groupPermissionLevel"}, "ownerpermissionlevel": {"name": "Owner Permission Level", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ownerPermissionLevel"}, "exportedfromtablename": {"name": "Exported From Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exportedFromTableName"}}, "type": null, "picklistname": null, "desc": "A WorkBench DataSet."}, "collectingeventattachment": {"name": "Collecting Event Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order or position of the attachment."}, "collectingevent": {"name": "Collecting Event", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additonal comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides an order."}, "morphbankview": {"name": "Morph Bank View", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"imagingtechnique": {"name": "Imaging Technique", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "imagingTechnique"}, "attachmentimageattributes": {"name": "Attachment Image Attributes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachmentImageAttributes"}, "viewname": {"name": "View Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "viewName"}, "form": {"name": "Form", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "form"}, "specimenpart": {"name": "Specimen Part", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specimenPart"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "morphbankexternalviewid": {"name": "Morph Bank External View Id", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "morphBankExternalViewId"}, "sex": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sex"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "imagingpreparationtechnique": {"name": "Imaging Preparation Technique", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "imagingPreparationTechnique"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "developmentstate": {"name": "Development State", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "developmentState"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "viewangle": {"name": "View Angle", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "viewAngle"}}, "type": null, "picklistname": null, "desc": "morphbankview"}, "lithostrattreedef": {"name": "Lithostratigraphy Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "disciplines"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the tree."}, "storagetreedef": {"name": "Storage Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "institutions": {"name": "Institutions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "institutions"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the tree."}, "picklist": {"name": "Pick List", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"filtervalue": {"name": "Filter Value", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "filterValue"}, "formatter": {"name": "Formatter", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "formatter"}, "sorttype": {"name": "Sort Type", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sortType"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "filterfieldname": {"name": "Filter Field Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "filterFieldName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "tableName"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "readonly": {"name": "Read Only", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "readOnly"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "sizelimit": {"name": "Size Limit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "sizeLimit"}, "picklistitems": {"name": "Pick List Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The items in the picklist."}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fieldName"}, "issystem": {"name": "Is System", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Where system form rely on this picklist, not user defined"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: A list of items that can be choosen to produce a controlled vocabulary."}, "geologictimeperiodtreedefitem": {"name": "Geological Time Period Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "treedef": {"name": "Tree Definition", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "accessionagent": {"name": "Accession Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "accession"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionRole", "desc": "Role the agent played in the accession process."}}, "type": null, "picklistname": null, "desc": "The person(s) requesting the Accession. This references an Agent."}, "collector": {"name": "Collector", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "collectingevent": {"name": "Collecting Event", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The position in the list of collectors."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "isprimary": {"name": "Is Primary", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPrimary"}}, "type": null, "picklistname": null, "desc": "In Specify, the person or persons who collected a specimen. Collector records are stored in the Agent table. \n"}, "spfieldvaluedefault": {"name": "Sp Field Value Default", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "idvalue": {"name": "Id Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "idValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}, "strvalue": {"name": "Str Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "strValue"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a default field value for a form."}, "groupperson": {"name": "Group Person", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "group": {"name": "Group", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Agent ID of group."}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Members position in group; i.e. 1st, 2nd, 3rd."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "member": {"name": "Member", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Agent ID of member (member must be of type Person)."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}}, "type": null, "picklistname": null, "desc": "This is a join table for Agents that are Institutions and Organizations that contain other Agents. It also provides order."}, "attachmentimageattribute": {"name": "Attachment Image Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "morphbankview": {"name": "Morph Bank View", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "morphBankView"}, "height": {"name": "Height", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "height"}, "imagetype": {"name": "Image Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "imageType"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "width": {"name": "Width", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "width"}, "magnification": {"name": "Magnification", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "magnification"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "creativecommons": {"name": "Creative Commons", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "creativeCommons"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestamplastupdatecheck": {"name": "Timestamp Last Update Check", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampLastUpdateCheck"}, "timestamplastsend": {"name": "Timestamp Last Send", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampLastSend"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "viewdescription": {"name": "View Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "viewDescription"}, "mbimageid": {"name": "Mb Image Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mbImageId"}, "resolution": {"name": "Resolution", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "resolution"}}, "type": null, "picklistname": null, "desc": "attachmentimageattribute"}, "attributedef": {"name": "Attribute Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "collectionobjectattrs": {"name": "Collection Object Attrs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttrs"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "datatype": {"name": "Data Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The data type of the attribute."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "preparationattrs": {"name": "Preparation Attrs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttrs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The field name of the attribute."}, "preptype": {"name": "Prep Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "prepType"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "tabletype": {"name": "Table Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The type of table it is attached to, this is internal to Specify."}, "collectingeventattrs": {"name": "Collecting Event Attrs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttrs"}}, "type": null, "picklistname": null, "desc": "The definition of an attribute."}, "container": {"name": "Container", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the container"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "storage": {"name": "Storage", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "storage"}, "number": {"name": "Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "collectionobjectkids": {"name": "Collection Object Kids", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjectKids"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The type of container"}, "children": {"name": "Children", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A description of the container"}}, "type": null, "picklistname": null, "desc": "A container can optionally be cataloged as a collection object and it contains other collection objects. Describes a logical or physical container."}, "dnasequencerunattachment": {"name": "D N A Sequencing Run Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "dnasequencingrun": {"name": "Dna Sequencing Run", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequencingRun"}}, "type": null, "picklistname": null, "desc": "dnasequencerunattachment"}, "latlonpolygonpnt": {"name": "Lat Lon Polygon Pnt", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "latitude": {"name": "Latitude", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "latitude"}, "elevation": {"name": "Elevation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "elevation"}, "longitude": {"name": "Longitude", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "longitude"}, "latlonpolygon": {"name": "Lat Lon Polygon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "latLonPolygon"}}, "type": null, "picklistname": null, "desc": "latlonpolygonpnt"}, "spversion": {"name": "Sp Version", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"isdbclosed": {"name": "Is D B Closed", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isDBClosed"}, "appname": {"name": "App Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "appversion": {"name": "App Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appVersion"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "schemaversion": {"name": "Schema Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemaVersion"}, "dbclosedby": {"name": "Db Closed By", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dbClosedBy"}}, "type": null, "picklistname": null, "desc": "spversion"}, "collectionreltype": {"name": "Collection Relationship Type", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"rightsidecollection": {"name": "Right Side Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rightSideCollection"}, "name": {"name": "Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the Collection Relationship."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "leftsidecollection": {"name": "Left Side Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "leftSideCollection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the type of relationship between two collection objects."}, "dnasequenceattachment": {"name": "DNA Sequence Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "dnasequence": {"name": "Dna Sequence", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequence"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "shipment": {"name": "Shipment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"weight": {"name": "Weight", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The weight of the shipment"}, "loan": {"name": "Loan", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loan"}, "numberofpackages": {"name": "# Of Packages", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of packages shipped"}, "shipmentmethod": {"name": "Method", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "ShipmentMethod", "desc": "Description of shipment. E.g. `Hand-carried`, `Overnight`, `Air`, `Land`, `Sea`, ..."}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "exchangeout": {"name": "Exchange Out", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOut"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "shippedby": {"name": "Packaged By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "shippedBy"}, "insuredforamount": {"name": "Insured For Amount", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "insuredForAmount"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "shipper": {"name": "Shipper", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "shipper"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "shipmentdate": {"name": "Shipment Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of shipment"}, "shippedto": {"name": "Shipped To", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "shippedTo"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrow"}, "shipmentnumber": {"name": "Shipment Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Shipper`s tracking number"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the shipment of a Loan or Exchange."}, "borrowmaterial": {"name": "Borrow Material", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"materialnumber": {"name": "Material Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "e.g. `FMNH 223456`"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "description": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of the material. `e.g. Bufo bufo skull`."}, "quantityresolved": {"name": "Quantity Resolved", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Quantity resolved (Returned, Accessioned, Lost, Discarded, Destroyed ...)."}, "outcomments": {"name": "Out Comments", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Notes concerning the return of the material."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of the borrow containing the prep."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "incomments": {"name": "In Comments", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Notes concerning the receipt of the material."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "borrowreturnmaterials": {"name": "Borrow Return Materials", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "borrowReturnMaterials"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "quantityreturned": {"name": "Quantity Returned", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Quantity returned."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of specimens (for lots)."}}, "type": null, "picklistname": null, "desc": "Describes the material being borrowed."}, "addressofrecord": {"name": "Address Of Record", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"city": {"name": "City", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "City of record."}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Country of record."}, "address2": {"name": "Address2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Secondary address of record."}, "address": {"name": "Address", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Primary address of record."}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "postalcode": {"name": "Postal Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Postal code of record (zip code)."}, "exchangeouts": {"name": "Exchange Outs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOuts"}, "state": {"name": "State", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "State of record."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "accessions": {"name": "Accessions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accessions"}, "repositoryagreements": {"name": "Repository Agreements", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repositoryAgreements"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "loans": {"name": "Loans", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loans"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "exchangeins": {"name": "Exchange Ins", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeIns"}}, "type": null, "picklistname": null, "desc": "This is the address when the legal action took place."}, "spexportschemaitemmapping": {"name": "Sp Export Schema Item Mapping", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"queryfield": {"name": "Query Field", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "queryField"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "exportschemamapping": {"name": "Export Schema Mapping", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exportSchemaMapping"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "exportschemaitem": {"name": "Export Schema Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exportSchemaItem"}}, "type": null, "picklistname": null, "desc": "spexportschemaitemmapping"}, "giftpreparation": {"name": "Gift Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "outcomments": {"name": "Out Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "outComments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparation"}, "incomments": {"name": "In Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "inComments"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "descriptionOfMaterial"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Number of preparations included in the gift."}}, "type": null, "picklistname": null, "desc": "Points a gift to a preparation."}, "splocalecontaineritem": {"name": "Locale Container Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spexportschemaitems": {"name": "Sp Export Schema Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemaItems"}, "container": {"name": "Container", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "container"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "format": {"name": "Format", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "format"}, "isuiformatter": {"name": "Is U I Formatter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isUIFormatter"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "descs": {"name": "Descs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "descs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "isrequired": {"name": "Is Required", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isRequired"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "names": {"name": "Names", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "names"}, "weblinkname": {"name": "Web Link Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "webLinkName"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "issystem": {"name": "Is System", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSystem"}, "ishidden": {"name": "Is Hidden", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isHidden"}, "picklistname": {"name": "Pick List Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickListName"}}, "type": null, "picklistname": null, "desc": "System Table: This is used for localizing the database schema it has a localized name and description."}, "collectingevent": {"name": "Collecting Event", "format": "CollectingEvent", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectors": {"name": "Collectors", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectors"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "collectingeventattribute": {"name": "Collecting Event Attribute", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEventAttribute"}, "startdateprecision": {"name": "Start Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "startDatePrecision"}, "collectingtrip": {"name": "Collecting Trip", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingTrip"}, "verbatimlocality": {"name": "Verbatim Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Original statement (literal quotation) of the location of the Collecting Event as given by the Collector."}, "collectingeventattrs": {"name": "Collecting Event Attrs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttrs"}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date collecting event began."}, "startdateverbatim": {"name": "Start Date Verbatim", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "startDateVerbatim"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "stationfieldnumber": {"name": "Field Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Station number or field number of the site where collecting event took place, A number or code recorded in field notes and/or written on field tags that identifies ALL material collected in a Collecting Event."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "enddateverbatim": {"name": "End Date Verbatim", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "endDateVerbatim"}, "enddateprecision": {"name": "End Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "endDatePrecision"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "locality": {"name": "Locality", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Locality where collection took place."}, "verbatimdate": {"name": "Verbatim Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Date which collector recorded in field book, exactly as reported by the collector. Should indicate whether reported as range, season, month, etc."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Free text to record information that does not conform to structured fields, or to explain data recorded in those fields, particularly problematic interpretations of data given by collector(s)."}, "endtime": {"name": "End Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "End time in military format."}, "enddate": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date collecting event ended."}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "method": {"name": "Gear", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "Gear2", "desc": "A method, such as net or trap, which is used to obtain the specimen."}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "starttime": {"name": "Start Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Start time in military format."}, "collectingeventattachments": {"name": "Collecting Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttachments"}}, "type": null, "picklistname": null, "desc": "A collecting event is the place and time that a collection is made. In some disciplines a field number is used as the primary designation for place and time information, while in others, locality name and date are used to link specimens."}, "collectionobjectcitation": {"name": "Collection Object Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "isfigured": {"name": "Is Figured", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFigured"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "Refers to a citation for a Collection Object."}, "geocoorddetail": {"name": "Geo Coord Detail", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"protocol": {"name": "Protocol", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "protocol"}, "uncertaintypolygon": {"name": "Uncertainty Polygon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "uncertaintyPolygon"}, "georefaccuracyunits": {"name": "Geo Ref Accuracy Units", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefAccuracyUnits"}, "namedplaceextent": {"name": "Named Place Extent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "namedPlaceExtent"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "locality"}, "georefdetdate": {"name": "Geo Ref Det Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefDetDate"}, "georefremarks": {"name": "Geo Ref Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefRemarks"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "source"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "georefdetby": {"name": "Geo Ref Det By", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefDetBy"}, "georefverificationstatus": {"name": "Geo Ref Verification Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefVerificationStatus"}, "maxuncertaintyestunit": {"name": "Max Uncertainty Est Unit", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "maxUncertaintyEstUnit"}, "errorpolygon": {"name": "Error Polygon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "errorPolygon"}, "maxuncertaintyest": {"name": "Max Uncertainty Est", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "maxUncertaintyEst"}, "georefdetref": {"name": "Geo Ref Det Ref", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefDetRef"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "nogeorefbecause": {"name": "No Geo Ref Because", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "noGeoRefBecause"}, "validation": {"name": "Validation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "validation"}, "originalcoordsystem": {"name": "Original Coord System", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "originalCoordSystem"}}, "type": null, "picklistname": null, "desc": "Describes extra detail for a Locality for Manis data."}, "borrowagent": {"name": "Borrow Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of borrow in which Agent played role."}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "BorrowRole", "desc": "Role played by agent in the borrow."}}, "type": null, "picklistname": null, "desc": "Refers to an Agent and describes their role in the borrowing process."}, "geographytreedefitem": {"name": "Geography Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "treedef": {"name": "Tree Definition", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "journal": {"name": "Journal", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "journalname": {"name": "Journal Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Full name of hte journal."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "issn": {"name": "ISSN", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "issn"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referenceworks": {"name": "Reference Works", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "referenceWorks"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "journalabbreviation": {"name": "Journal Abbreviation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "journalAbbreviation"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "guid"}}, "type": null, "picklistname": null, "desc": "Refers to a published journal."}, "referenceworkattachment": {"name": "Reference Work Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}}, "type": null, "picklistname": null, "desc": "referenceworkattachment"}, "collectionobjectattribute": {"name": "Collection Object Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"number21": {"name": "Number21", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number21"}, "number20": {"name": "Number20", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number20"}, "number37": {"name": "Number37", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number37"}, "number22": {"name": "Number22", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number22"}, "number25": {"name": "Number25", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number25"}, "number24": {"name": "Number24", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number24"}, "number41": {"name": "Number41", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number41"}, "number40": {"name": "Number40", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number40"}, "number29": {"name": "Number29", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number29"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "number23": {"name": "Number23", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number23"}, "number28": {"name": "Number28", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number28"}, "number30": {"name": "Number30", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number30"}, "number13": {"name": "Number13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number13"}, "number5": {"name": "Number5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number5"}, "number42": {"name": "Number42", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number42"}, "yesno6": {"name": "Yes No6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo6"}, "text9": {"name": "Text9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text9"}, "text4": {"name": "Stage", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "BiologicalStage", "desc": null}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno7": {"name": "Yes No7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo7"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number26": {"name": "Number26", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number26"}, "text1": {"name": "Other ID #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "number10": {"name": "Number10", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number10"}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo4"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "text12": {"name": "Tissue Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Tissue type", "desc": "text12"}, "text13": {"name": "Text13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text13"}, "text10": {"name": "Preservation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Preservation", "desc": "text10"}, "number27": {"name": "Number27", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number27"}, "yesno5": {"name": "Yes No5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo5"}, "number12": {"name": "Number12", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number12"}, "text11": {"name": "Size", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text11"}, "number18": {"name": "Number18", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number18"}, "number19": {"name": "Number19", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number19"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "number38": {"name": "Number38", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number38"}, "number39": {"name": "Number39", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number39"}, "number36": {"name": "Number36", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number36"}, "number11": {"name": "Number11", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number11"}, "number34": {"name": "Number34", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number34"}, "number35": {"name": "Number35", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number35"}, "number14": {"name": "Number14", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number14"}, "number33": {"name": "Number33", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number33"}, "number16": {"name": "Number16", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number16"}, "number31": {"name": "Number31", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number31"}, "number6": {"name": "Number6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number6"}, "text3": {"name": "ReproCondition", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number4": {"name": "Number4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number4"}, "text14": {"name": "Text14", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text6": {"name": "SL", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text7": {"name": "Total Length", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number15": {"name": "Number15", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number15"}, "text5": {"name": "TL", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "remarks": {"name": "Restriction/\\nPermission\\n/Notification", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "text8": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Sex", "desc": null}, "number17": {"name": "Number17", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number17"}, "number32": {"name": "Number32", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number32"}, "number8": {"name": "Number8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number8"}, "number9": {"name": "Number9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number9"}, "text2": {"name": "Weight", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number7": {"name": "Number7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number7"}, "text15": {"name": "Text15", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text15"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}}, "type": null, "picklistname": null, "desc": "Collection Object attributes that were also available in Specify 5."}, "collection": {"name": "Collection", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"code": {"name": "Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Unique code for collection."}, "technicalcontacts": {"name": "Technical Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "technicalContacts"}, "institutiontype": {"name": "Institution Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "isembeddedcollectingevent": {"name": "Is Embedded Collecting Event", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Yes if collecting event is one-to-one relationship."}, "catalognumformatname": {"name": "Catalog Num Format Name", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of catalog number format the collection uses. "}, "websiteuri": {"name": "Web Site URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "webSiteURI"}, "isanumber": {"name": "ISA Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ISA number."}, "leftsidereltypes": {"name": "Left Side Rel Types", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "estimatedsize": {"name": "Estimated Size", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "rightsidereltypes": {"name": "Right Side Rel Types", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rightSideRelTypes"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "picklists": {"name": "Pick Lists", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickLists"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "institutionnetwork": {"name": "Institution Network", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "institutionNetwork"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "kingdomcoverage": {"name": "Kingdom Coverage", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "scope": {"name": "Scope", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "primaryfocus": {"name": "Primary Focus", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "developmentstatus": {"name": "Development Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "collectionname": {"name": "Collection Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the collection."}, "description": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Textual description of collection."}, "dbcontentversion": {"name": "Db Content Version", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "contentcontacts": {"name": "Content Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contentContacts"}, "collectiontype": {"name": "Collection Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Textual description of collection. ABCD schema field."}, "webportaluri": {"name": "Web Portal URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "webPortalURI"}, "preptypes": {"name": "Prep Types", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "prepTypes"}, "numberingschemes": {"name": "Numbering Schemes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "numberingSchemes"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "preservationmethodtype": {"name": "Preservation Method Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "primarypurpose": {"name": "Primary Purpose", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}}, "type": null, "picklistname": null, "desc": "A collection holds Collection Objects that are of the same discipline type."}, "address": {"name": "Address", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "positionheld": {"name": "Position Held", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The position held by the agent while at this address."}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The first date the the agent was at this address."}, "isshipping": {"name": "Is Shipping", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Indicates if this is the shipping address."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "state": {"name": "State", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The state within the country."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "typeofaddr": {"name": "Type Of Addr", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "TypeOfAddr", "desc": "typeOfAddr"}, "isprimary": {"name": "Is Primary", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "Indicates whether this is the primary address."}, "roomorbuilding": {"name": "Room/Building", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The room or building of the agent."}, "ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Allows multiple addresses to be ordered."}, "fax": {"name": "Fax", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The fax number."}, "phone1": {"name": "Phone1", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The primary phone number."}, "city": {"name": "City", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The city."}, "phone2": {"name": "Phone2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The secondary phone number."}, "address2": {"name": "Address2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Second line of address (optional)."}, "address3": {"name": "Address3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address3"}, "address4": {"name": "Address4", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address4"}, "address5": {"name": "Address5", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address5"}, "postalcode": {"name": "Postal Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Postal code (Zip Code)."}, "address": {"name": "Address", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Address as it should appear on mailing labels."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "divisions": {"name": "Divisions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "divisions"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The last date the agent was at the address."}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The country."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "iscurrent": {"name": "Is Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Indicates if this is the current address."}, "insitutions": {"name": "Insitutions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "insitutions"}}, "type": null, "picklistname": null, "desc": "The address of an Agent. This also captures a start and end date for the address and the position held while at the address."}, "collectionobjectattachment": {"name": "Collection Object Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order in the attachment list."}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "An attachment for a collection object and provides order."}, "spexportschemaitem": {"name": "Sp Export Schema Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"splocalecontaineritem": {"name": "Sp Locale Container Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spLocaleContainerItem"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "spexportschema": {"name": "Sp Export Schema", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchema"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "datatype": {"name": "Data Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dataType"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "formatter": {"name": "Formatter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "formatter"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "spauditlogfield": {"name": "Sp Audit Log Field", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spauditlog": {"name": "Sp Audit Log", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAuditLog"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "oldvalue": {"name": "Old Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "oldValue"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}, "newvalue": {"name": "New Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "newValue"}}, "type": null, "picklistname": null, "desc": "spauditlogfield"}, "loanreturnpreparation": {"name": "Loan Return Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "quantityresolved": {"name": "Quantity Resolved", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Number of specimens returned, deaccessioned or otherwise accounted for. (necessary for Lots)."}, "loanpreparation": {"name": "Loan Preparation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Preparation being loaned."}, "deaccessionpreparation": {"name": "Deaccession Preparation", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of associated (if present) Deaccession Physical Object record."}, "returneddate": {"name": "Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of return."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "receivedby": {"name": "Received By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Person processing the loan return."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "quantityreturned": {"name": "Quantity Returned", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Number of specimens returned. (necessary for Lots)."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "This is used for tracking a returned Preparation for a loan."}, "conservdescription": {"name": "Conservator Description", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"height": {"name": "Height", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The height of the object."}, "objlength": {"name": "Object Length", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The length of the object."}, "backgroundinfo": {"name": "Background Info", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Any background information on the object."}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "source"}, "conservdescriptionattachments": {"name": "Conserv Description Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservDescriptionAttachments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "width": {"name": "Width", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The width of the object."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "displayrecommendations": {"name": "Display Recommendations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "displayRecommendations"}, "units": {"name": "Units", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The units for the measurements (`feet` or `meters`)."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "composition": {"name": "Composition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "composition"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "division"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "description"}, "lightrecommendations": {"name": "Light Recommendations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lightRecommendations"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "otherrecommendations": {"name": "Other Recommendations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "otherRecommendations"}, "events": {"name": "Events", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "events"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The Collection Object that the description describes."}, "shortdesc": {"name": "Short Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A short description of the object."}}, "type": null, "picklistname": null, "desc": "Describes an object that has participated in a Conservator action. There is only one of these for each Collection Object."}, "spqueryfield": {"name": "Sp Query Field", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"contexttableident": {"name": "Context Table Ident", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contextTableIdent"}, "isnot": {"name": "Is Not", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isNot"}, "query": {"name": "Query", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "query"}, "operend": {"name": "Oper End", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "operEnd"}, "startvalue": {"name": "Start Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startValue"}, "isprompt": {"name": "Is Prompt", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPrompt"}, "mappings": {"name": "Mappings", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mappings"}, "operstart": {"name": "Oper Start", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "operStart"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "isdisplay": {"name": "Is Display", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isDisplay"}, "tablelist": {"name": "Table List", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableList"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "formatname": {"name": "Format Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "formatName"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "endvalue": {"name": "End Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endValue"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "alwaysfilter": {"name": "Always Filter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "alwaysFilter"}, "stringid": {"name": "String Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "stringId"}, "allownulls": {"name": "Allow Nulls", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "allowNulls"}, "columnalias": {"name": "Column Alias", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "columnAlias"}, "sorttype": {"name": "Sort Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sortType"}, "isrelfld": {"name": "Is Rel Fld", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isRelFld"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}, "position": {"name": "Position", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "position"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a single field in a saved Query."}, "collectionrelationship": {"name": "Collection Relationship", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "rightside": {"name": "Right Side", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "rightSide"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "collectionreltype": {"name": "Collection Rel Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionRelType"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "leftside": {"name": "Left Side", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "leftSide"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Enables two collection objects to refer to each other, for example, voucher and tissue."}, "splocalecontainer": {"name": "Locale Container", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "issystem": {"name": "Is System", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSystem"}, "aggregator": {"name": "Aggregator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "aggregator"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "descs": {"name": "Descs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "descs"}, "defaultui": {"name": "Default U I", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "defaultUI"}, "items": {"name": "Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "items"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "format": {"name": "Format", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "format"}, "picklistname": {"name": "Pick List Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickListName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "names": {"name": "Names", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "names"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "type"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "schematype": {"name": "Schema Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The type of schema it belongs to: the core schema or the workbench schema"}, "ishidden": {"name": "Is Hidden", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isHidden"}, "isuiformatter": {"name": "Is U I Formatter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isUIFormatter"}}, "type": null, "picklistname": null, "desc": "System Table: This is used for localizing the database schema it has a localized name and description but can also contain localizable items."}, "agentattachment": {"name": "Agent Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "This allows the attachments to be ordered."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "This table can be used for a picture of the agent or anything else used to further describe the agent."}, "permit": {"name": "Permit", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"accessionauthorizations": {"name": "Accession Authorizations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessionAuthorizations"}, "permitnumber": {"name": "Permit Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Identifier for the permit"}, "issuedby": {"name": "Issued By", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "issuedBy"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date permit becomes effective"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "type": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "PermitType", "desc": "Permit category - `CITES`, `Migratory Bird Treaty Act`, ..."}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "permitattachments": {"name": "Permit Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "permitAttachments"}, "issueddate": {"name": "Issued Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date permit was issued"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date permit expires"}, "issuedto": {"name": "Issued To", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "issuedTo"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "renewaldate": {"name": "Renewal Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of renewal"}}, "type": null, "picklistname": null, "desc": "The permit transaction window is designed to hold information linked to legal paperwork \nfor permission from a government agency to collect a specimen or specimens. \nPreparation: A subdivision of a collection object that refers to the preparation method."}, "preptype": {"name": "Preparation Type", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "attributedefs": {"name": "Attribute Defs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "attributeDefs"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isloanable": {"name": "Is Loanable", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isLoanable"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "Describe a Preparation Type. For example, Cleared and Stained, Mounted, etc."}, "loan": {"name": "Loan", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"loanagents": {"name": "Loan Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanAgents"}, "overduenotisentdate": {"name": "Overdue Noti Sent Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "overdueNotiSentDate"}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "loandate": {"name": "Loan Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the Loan was created."}, "dateclosed": {"name": "Date Closed", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date loan was closed."}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "purposeofloan": {"name": "Purpose Of Loan", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "purposeOfLoan"}, "loannumber": {"name": "Loan Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A field that contains a record of the loan number and which is automatically incremented when a loan is made. "}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "loanattachments": {"name": "Loan Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanAttachments"}, "loanpreparations": {"name": "Loan Preparations", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "Preparations included in the loan."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno1": {"name": "Extension Granted", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "Link to Shipments table."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "currentduedate": {"name": "Due Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the loan is due for return (Same as original Due date unless loan period has been extended)."}, "text2": {"name": "Institution", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Student", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Gen Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "specialconditions": {"name": "Special Conditions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specialConditions"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "isclosed": {"name": "Is Closed", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "'No' until all preparations in the loan have been returned/resolved."}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateReceived"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isfinancialresponsibility": {"name": "Is Financial Responsibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFinancialResponsibility"}, "originalduedate": {"name": "Orig Due Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the loan was originally due."}}, "type": null, "picklistname": null, "desc": "A group of specimens that another institution borrows from your collection. Specify lets you manage all aspects of loans electronically, so that you always have an up-to-date record of which specimen have been loaned and which have been returned."}, "deaccessionpreparation": {"name": "Deaccession Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"deaccession": {"name": "Deaccession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "deaccession"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "loanreturnpreparations": {"name": "Loan Return Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanReturnPreparations"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The number of items deaccessioned"}}, "type": null, "picklistname": null, "desc": "The preparation that was deaccessioned."}, "giftattachment": {"name": "Gift Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "giftattachment"}, "fieldnotebook": {"name": "Field Notebook", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDate"}, "pagesets": {"name": "Page Sets", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pageSets"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDate"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "owneragent": {"name": "Owner", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ownerAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "location": {"name": "Location", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "location"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}}, "type": null, "picklistname": null, "desc": "Describes a physical Field NoteBook."}, "exsiccataitem": {"name": "Exsiccata Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number": {"name": "Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The list number of the collection object within the exsiccata"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "exsiccata": {"name": "Exsiccata", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The exsiccata to which the collection object belongs"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fascicle": {"name": "Fascicle", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The fascicle number"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "exsiccataitem"}, "fieldnotebookpageset": {"name": "Field Notebook Page Set", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDate"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDate"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "orderNumber"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "method": {"name": "Method", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "method"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "fieldnotebook": {"name": "Field Notebook", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebook"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "sourceagent": {"name": "Source Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sourceAgent"}, "pages": {"name": "Pages", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pages"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}}, "type": null, "picklistname": null, "desc": "Describes a set of Field Note Book pages. This can be used to group pages together that were scanned in together."}, "workbenchtemplatemappingitem": {"name": "WorkBench Template Mapping Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"isincludedintitle": {"name": "Is Included In Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isIncludedInTitle"}, "ycoord": {"name": "Y Coordinate", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "yCoord"}, "caption": {"name": "Caption", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "caption"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "srctableid": {"name": "Source Table Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "srcTableId"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "tableName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "importedcolname": {"name": "Imported Column Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "importedColName"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fieldName"}, "metadata": {"name": "Meta Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "metaData"}, "isexportabletocontent": {"name": "Is Exportable To Content", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isExportableToContent"}, "datafieldlength": {"name": "Data Field Length", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "dataFieldLength"}, "xcoord": {"name": "X Coordinate", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "xCoord"}, "workbenchdataitems": {"name": "Workbench Data Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchDataItems"}, "carryforward": {"name": "Carry Forward", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "carryForward"}, "iseditable": {"name": "Is Editable", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isEditable"}, "origimportcolumnindex": {"name": "Original Import Column Index", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "origImportColumnIndex"}, "vieworder": {"name": "View Order", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "viewOrder"}, "workbenchtemplate": {"name": "Workbench Template", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchTemplate"}, "isrequired": {"name": "Is Required", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isRequired"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fieldtype": {"name": "Field Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "fieldType"}}, "type": null, "picklistname": null, "desc": "One column of the mapped description."}, "accessionauthorization": {"name": "Accession Authorization", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "accession"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "permit": {"name": "Permit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "permit"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "This represents the person authorizing the Accession. It references an existing Agent."}, "localitydetail": {"name": "Locality Detail", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"sectionpart": {"name": "Section Part", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sectionPart"}, "enddepth": {"name": "End Depth", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDepth"}, "utmoriglongitude": {"name": "UTM Orig Longitude", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmOrigLongitude"}, "mgrszone": {"name": "Mgrs Zone", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mgrsZone"}, "utmfalsenorthing": {"name": "UTM False Northing", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmFalseNorthing"}, "rangedirection": {"name": "Range Direction", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rangeDirection"}, "waterbody": {"name": "Water Body", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "waterBody"}, "startdepthunit": {"name": "Start Depth Unit", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDepthUnit"}, "startdepthverbatim": {"name": "Start Depth Verbatim", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDepthVerbatim"}, "enddepthverbatim": {"name": "End Depth Verbatim", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDepthVerbatim"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "locality"}, "section": {"name": "Sec", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "section"}, "utmeasting": {"name": "UTM Easting", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmEasting"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "utmfalseeasting": {"name": "UTM False Easting", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmFalseEasting"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "utmnorthing": {"name": "UTM Northing", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmNorthing"}, "islandgroup": {"name": "Island Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "islandGroup"}, "townshipdirection": {"name": "Township Direction", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "townshipDirection"}, "drainage": {"name": "Drainage", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "drainage"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "utmzone": {"name": "UTM Zone", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmZone"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "utmdatum": {"name": "UTM Datum", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmDatum"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "township": {"name": "twn", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "township"}, "basemeridian": {"name": "Base Meridian", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "baseMeridian"}, "huccode": {"name": "HUC Code", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hucCode"}, "enddepthunit": {"name": "End Depth Unit", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDepthUnit"}, "island": {"name": "Island", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "island"}, "gml": {"name": "Gml", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gml"}, "startdepth": {"name": "Start Depth", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDepth"}, "utmscale": {"name": "UTM Scale", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmScale"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "rangedesc": {"name": "Rng", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rangeDesc"}, "utmoriglatitude": {"name": "UTM Orig Latitude", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmOrigLatitude"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "nationalparkname": {"name": "National Park Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "nationalParkName"}}, "type": null, "picklistname": null, "desc": "Describes additional Locality detail. For example, water body and island information. Includes UTM fields."}, "taxontreedef": {"name": "Taxon Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the tree."}, "inforequest": {"name": "Information Request", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "requestdate": {"name": "Request Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "requestDate"}, "firstname": {"name": "First Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "firstName"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "lastname": {"name": "Last Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "lastName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "email": {"name": "Email", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Email of agent requesting the information."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "recordsets": {"name": "Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordSets"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "replydate": {"name": "Reply Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "replyDate"}, "inforeqnumber": {"name": "Info Req Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Number of Information Request."}, "institution": {"name": "Institution", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "institution"}}, "type": null, "picklistname": null, "desc": "Describes a request for information of a collection and refers to a Bundle of Collection Objects."}, "borrowreturnmaterial": {"name": "Borrow Return Material", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "returneddate": {"name": "Returned Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date the material was returned."}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "borrowmaterial": {"name": "Borrow Material", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Borrowed preparation returned."}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Quantity of preparations returned."}}, "type": null, "picklistname": null, "desc": "Describes the material that was returned."}, "workbenchdataitem": {"name": "WorkBench Data Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbenchtemplatemappingitem": {"name": "Workbench Template Mapping Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchTemplateMappingItem"}, "workbenchrow": {"name": "Workbench Row", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchRow"}, "celldata": {"name": "Cell Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "cellData"}, "rownumber": {"name": "Row Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "rowNumber"}, "validationstatus": {"name": "Validation Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "validationStatus"}}, "type": null, "picklistname": null, "desc": "A cell of data."}, "spvisualquery": {"name": "Sp Visual Query", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "polygons": {"name": "Polygons", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "polygons"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}}, "type": null, "picklistname": null, "desc": "spvisualquery"}, "dnasequence": {"name": "DNA Sequence", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "boldtranslationmatrix": {"name": "Bold Translation Matrix", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldTranslationMatrix"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "targetmarker": {"name": "Target Marker", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "targetMarker"}, "sequencer": {"name": "Sequencer", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequencer"}, "genbankaccessionnumber": {"name": "Genbank Accession Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "genbankAccessionNumber"}, "dnasequencingruns": {"name": "Dna Sequencing Runs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequencingRuns"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "genesequence": {"name": "Gene Sequence", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": "Genbank", "type": null, "picklistname": null, "desc": "The actual sequence"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "boldsampleid": {"name": "BOLD Sample Id", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldSampleId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "compc": {"name": "Comp C", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compC"}, "compa": {"name": "Comp A", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compA"}, "compg": {"name": "Comp G", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compG"}, "boldlastupdatedate": {"name": "BOLD Last Update", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldLastUpdateDate"}, "ambiguousresidues": {"name": "Ambiguous", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ambiguousResidues"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}, "compt": {"name": "Comp T", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compT"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "boldbarcodeid": {"name": "BOLD Barcode Id", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldBarcodeId"}, "moleculetype": {"name": "Molecule Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Molecule Type", "desc": "moleculeType"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "totalresidues": {"name": "Total Residues", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "totalResidues"}}, "type": null, "picklistname": null, "desc": "Tracks DNA Sequencing information for a Collection Object."}, "collectionobjectattr": {"name": "Collection Object Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dblvalue": {"name": "Double Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "dblValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "strvalue": {"name": "String Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "strValue"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Extensible attributes introduced for Specify 6."}, "workbenchrow": {"name": "Workbench Row", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbench": {"name": "Workbench", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The workbench this row is associated with"}, "cardimagedata": {"name": "Card Image Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A single image attached to the row"}, "cardimagefullpath": {"name": "Card Image Full Path", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The full path of the image"}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "biogeomancerresults": {"name": "Bio Geomancer Results", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The XML returned from Bio Geomancer"}, "long1text": {"name": "Long1 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "long1Text"}, "long2text": {"name": "Long2 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "long2Text"}, "rownumber": {"name": "Row Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The row number"}, "lat1text": {"name": "Lat1 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lat1Text"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}, "lat2text": {"name": "Lat2 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lat2Text"}, "workbenchrowexportedrelationships": {"name": "Workbench Row Exported Relationships", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "workbenchRowExportedRelationships"}, "workbenchdataitems": {"name": "Workbench Data Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "The data items associated wirth this row"}, "uploadstatus": {"name": "Upload Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "uploadStatus"}, "workbenchrowimages": {"name": "Workbench Row Images", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "The list of images associated with this row."}}, "type": null, "picklistname": null, "desc": "A row of data."}, "attachmentmetadata": {"name": "Attachment Metadata", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the meta data field."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "value": {"name": "Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The value of the meta data field."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "This holds meta data about the attachment. It is a set of named value pairs."}, "spreport": {"name": "Sp Report", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repeatfield": {"name": "Repeat Field", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repeatField"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "appresource": {"name": "App Resource", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appResource"}, "repeatcount": {"name": "Repeat Count", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repeatCount"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "workbenchtemplate": {"name": "Workbench Template", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "workbenchTemplate"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "query": {"name": "Query", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "query"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a saved Report."}, "treatmentevent": {"name": "Treatment Event", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "datecompleted": {"name": "Date Completed", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateCompleted"}, "datetreatmentstarted": {"name": "Start Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateTreatmentStarted"}, "dateboxed": {"name": "Date Boxed", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateBoxed"}, "datecleaned": {"name": "Date Cleaned", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateCleaned"}, "treatmentnumber": {"name": "Treat Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "treatmentNumber"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accession"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateReceived"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "location": {"name": "Location", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "location"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "fieldnumber": {"name": "Field Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNumber"}, "datetoisolation": {"name": "Date To Isolation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateToIsolation"}, "type": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "TreatmentType", "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "datetreatmentended": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateTreatmentEnded"}}, "type": null, "picklistname": null, "desc": "An action that occurrs to a Conservation Description."}, "spappresourcedir": {"name": "App Resource Default", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "disciplinetype": {"name": "Discipline Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "disciplineType"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "sppersistedappresources": {"name": "Sp Persisted App Resources", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spPersistedAppResources"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "usertype": {"name": "User Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "userType"}, "ispersonal": {"name": "Is Personal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPersonal"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "sppersistedviewsets": {"name": "Sp Persisted View Sets", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spPersistedViewSets"}}, "type": null, "picklistname": null, "desc": "System Table: the default for application resources."}, "project": {"name": "Project", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"projectdescription": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of project"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "grantagency": {"name": "Grant Agency", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "grantAgency"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date project began"}, "projectname": {"name": "Project Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Name of the project"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "projectnumber": {"name": "Project Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "projectNumber"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date project ended"}, "url": {"name": "URL", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "URL for project"}, "grantnumber": {"name": "Grant Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "grantNumber"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes a grouping of Collection Objects."}, "exchangeinprep": {"name": "Exchange In Prep", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "exchangein": {"name": "Exchange In", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeIn"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "comments": {"name": "Comments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "comments"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparation"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "descriptionofmaterial": {"name": "Description Of Material", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "descriptionOfMaterial"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "quantity"}}, "type": null, "picklistname": null, "desc": "exchangeinprep"}, "fieldnotebookpage": {"name": "Field Notebook Page", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "pagenumber": {"name": "Page Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pageNumber"}, "pageset": {"name": "Page Set", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pageSet"}, "scandate": {"name": "Scan Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scanDate"}}, "type": null, "picklistname": null, "desc": "Describes a page from a Field Note Book."}, "determination": {"name": "Determination", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"typestatusname": {"name": "Type Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "TypeStatus", "desc": "A pick list of all available type designations; Holotype, Paratype, Neotype. Specify ships with predetermined values which are editable for users."}, "determinationcitations": {"name": "Determination Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "determinationCitations"}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The determined name of the specimen."}, "subspqualifier": {"name": "Sub Sp Qualifier", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "subSpQualifier"}, "preferredtaxon": {"name": "Preferred Taxon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preferredTaxon"}, "confidence": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "DeterminationConfidence", "desc": "Confidence of determination."}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Link to lookup table for Method."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "In Question", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "alternatename": {"name": "Alternate Name", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "A free text field for insertion of a name (scientific or common) not recognized in the taxon tree authority. This field operates as an ?either/or? condition with Preferred Taxon; both cannot be entered in a single Determination."}, "method": {"name": "Method", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Taxonomic tools and information on which a determination is based. These include professional expertise, published taxonomic keys, molecular DNA, or comparisons with previously cataloged specimens."}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "qualifier": {"name": "Qualifier", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "A term to qualify the identification of the taxon name when doubts have arisen as to its identity or as a comparison to a given name (e.g. \"cf.\" or \"aff.\")."}, "text2": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Size", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "determineddate": {"name": "Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date it was determined."}, "featureorbasis": {"name": "Feature Or Basis", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Body part, or characteristic used as the basis of a determination."}, "determiner": {"name": "Determiner", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Individual who assigned or made the decision regarding the taxonomic name of specimen. In some instances, determiner may be an organization or institute. In Specify, determiner information is stored in the Agent table."}, "varqualifier": {"name": "Var Qualifier", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "varQualifier"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "iscurrent": {"name": "Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Yes if the determination is considered the 'best' (maybe even one of the better)."}, "addendum": {"name": "Addendum", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "A Pick List suffix element added to the taxon name to indicate a concept or citation for that name. For example; sensu lato."}, "determineddateprecision": {"name": "Determined Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "determinedDatePrecision"}, "nameusage": {"name": "Name Usage", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "NameUsages", "desc": "User customizable pick list used to describe the context of the name entered into the taxon or Alternate name fields. "}}, "type": null, "picklistname": null, "desc": "The determination of the collection object."}, "deaccession": {"name": "Deaccession", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "deaccessionnumber": {"name": "Deaccession Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Name institution assigns to the deaccession"}, "deaccessiondate": {"name": "Deaccession Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "deaccessionDate"}, "deaccessionagents": {"name": "Deaccession Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "deaccessionAgents"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accession"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of the Type of deaccession; i.e. Gift, disposal, lost"}, "deaccessionpreparations": {"name": "Deaccession Preparations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "deaccessionPreparations"}}, "type": null, "picklistname": null, "desc": "Removal of a biological object (specimen, observation, or preparation type) from the collection. Deaccessions may include loans to other collections that are subsequently given to the borrower, lost specimens, and specimens that are destroyed."}, "spquery": {"name": "Sp Query", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "countonly": {"name": "Count Only", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "countOnly"}, "contextname": {"name": "Context Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contextName"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "isfavorite": {"name": "Is Favorite", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFavorite"}, "fields": {"name": "Fields", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fields"}, "searchsynonymy": {"name": "Search Synonymy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "searchSynonymy"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "reports": {"name": "Reports", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "reports"}, "selectdistinct": {"name": "Select Distinct", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "selectDistinct"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "contexttableid": {"name": "Context Table Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contextTableId"}, "sqlstr": {"name": "Sql Str", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sqlStr"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a saved Query."}, "preparationattribute": {"name": "Preparation Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"text21": {"name": "Text21", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text21"}, "text20": {"name": "Text20", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text20"}, "text23": {"name": "Text23", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text23"}, "text22": {"name": "Text22", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text22"}, "text25": {"name": "Text25", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text25"}, "text24": {"name": "Text24", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text24"}, "text26": {"name": "Text26", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text26"}, "text14": {"name": "Text14", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text14"}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo4"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "text17": {"name": "Text17", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text17"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "text15": {"name": "Text15", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text15"}, "text16": {"name": "Text16", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text16"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "attrdate": {"name": "Attr Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attrDate"}, "text13": {"name": "Text13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text13"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text18": {"name": "Text18", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text18"}, "text19": {"name": "Text19", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text19"}, "text11": {"name": "Text11", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text11"}, "text5": {"name": "Text5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text5"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "text12": {"name": "Text12", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text12"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "text10": {"name": "Text10", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text10"}, "preparations": {"name": "Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparations"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "number4": {"name": "Number4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number4"}, "number5": {"name": "Number5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number5"}, "text6": {"name": "Text6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text6"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}, "text4": {"name": "Text4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text4"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "text8": {"name": "Text8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text8"}, "text9": {"name": "Text9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text9"}, "number8": {"name": "Number8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number8"}, "number9": {"name": "Number9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number9"}, "number6": {"name": "Number6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number6"}, "number7": {"name": "Number7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number7"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "text7": {"name": "Text7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text7"}}, "type": null, "picklistname": null, "desc": "Preparation attributes that were also available in Specify 5."}, "taxontreedefitem": {"name": "Taxon Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "formattoken": {"name": "Format Token", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "formatToken"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "treedef": {"name": "Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "fieldnotebookattachment": {"name": "Field Notebook Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "fieldnotebook": {"name": "Field Notebook", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebook"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "sppermission": {"name": "Sp Permission", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"permissionclass": {"name": "Permission Class", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "permissionClass"}, "principals": {"name": "Principals", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "principals"}, "targetid": {"name": "Target Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "targetId"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "actions": {"name": "Actions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "actions"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "agentvariant": {"name": "Agent Variant", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "THe full name used as a variant or vernacular name."}, "language": {"name": "Language", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "International character code for language as it pertains to the agent variant."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Country of variant or vernacular name."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "variant": {"name": "Variant", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "variant"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "vartype": {"name": "Var Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Byte", "picklistname": "AgentVariant", "desc": "Indicates whether the record is a variant (0) or a vernacular name (1)."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "This is primarily used by Botanists for capturing Variant and Vernacular names. This table is searchable but does not have any specific business rules associated with it."}, "workbenchtemplate": {"name": "WorkBench Template", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbenchtemplatemappingitems": {"name": "Workbench Template Mapping Items", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchTemplateMappingItems"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "workbenches": {"name": "Workbenches", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenches"}, "srcfilepath": {"name": "Source File Path", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "srcFilePath"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "The mapping description of the WorkBench."}, "spprincipal": {"name": "Sp Principal", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"grouptype": {"name": "Group Type", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "groupType"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "specifyusers": {"name": "Specify Users", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUsers"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "groupsubclass": {"name": "Group Sub Class", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "groupSubClass"}, "priority": {"name": "Priority", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "priority"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "scope": {"name": "Scope", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scope"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "permissions": {"name": "Permissions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "permissions"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "workbenchrowimage": {"name": "Workbench Row Image", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"attachtotablename": {"name": "Attach To Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachToTableName"}, "workbenchrow": {"name": "Workbench Row", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The row the image is attached to"}, "cardimagedata": {"name": "Card Image Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The thumbnail data"}, "cardimagefullpath": {"name": "Card Image Full Path", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The full path to the image"}, "imageorder": {"name": "Image Order", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The position in the list of images"}}, "type": null, "picklistname": null, "desc": "An image associated with a row."}, "preparation": {"name": "Preparation", "format": "Preparation", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": "Preparation", "items": {"storagelocation": {"name": "Storage Location", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "storageLocation"}, "storage": {"name": "Storage", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "storage"}, "prepareddate": {"name": "Prepared Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "preparedDate"}, "exchangeoutpreps": {"name": "Exchange Out Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOutPreps"}, "preparedbyagent": {"name": "Prepared By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparedByAgent"}, "giftpreparations": {"name": "Gift Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftPreparations"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "loanpreparations": {"name": "Loan Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanPreparations"}, "preparationattrs": {"name": "Preparation Attrs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttrs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "yesno1": {"name": "Used Up?", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "samplenumber": {"name": "Sample Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sampleNumber"}, "status": {"name": "Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "status"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "description": {"name": "Inventory", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "preparationattachments": {"name": "Preparation Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttachments"}, "text2": {"name": "File or URL link", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Storage", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number of Tubes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "preparationattribute": {"name": "Preparation Attribute", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparationAttribute"}, "countamt": {"name": "Count", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Number of items"}, "prepareddateprecision": {"name": "Prepared Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparedDatePrecision"}, "exchangeinpreps": {"name": "Exchange In Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeInPreps"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "preptype": {"name": "Object Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": "PrepType", "desc": "prepType"}, "deaccessionpreparations": {"name": "Deaccession Preparations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "deaccessionPreparations"}}, "type": null, "picklistname": null, "desc": "Preparation information describes the physical status of a specimen and its storage media. \nSpecify provides an extensive array of utilities for curatorial management of specimen preparations.\n"}, "taxonattachment": {"name": "Taxon Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "taxon"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "permitattachment": {"name": "Permit Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "permit": {"name": "Permit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "permit"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "localitynamealias": {"name": "Locality Name Alias", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The alias for the locality name."}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The source of the alias."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes additional names for a given Locaity."}, "appraisal": {"name": "Appraisal", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"appraisaldate": {"name": "Appraisal Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Date of the appraisal."}, "monetaryunittype": {"name": "Monetary Unit Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Type of monetary unit."}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "notes": {"name": "Notes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accession"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "appraisalvalue": {"name": "Appraisal Value", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Monetary value of the appraisal."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "appraisalnumber": {"name": "Appraisal Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Unique number for the appraisal."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "The monetary appraisal of an Acession or Collection Object"}, "conserveventattachment": {"name": "Conservator Event Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order or position"}, "conservevent": {"name": "Conserv Event", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "conservEvent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "specifyuser": {"name": "Specify User", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spappresources": {"name": "App Resources", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "spAppResources"}, "isloggedinreport": {"name": "Is Logged In Report", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isLoggedInReport"}, "loginouttime": {"name": "Login Out Time", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loginOutTime"}, "spprincipals": {"name": "Sp Principals", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spPrincipals"}, "spquerys": {"name": "Sp Querys", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spQuerys"}, "agents": {"name": "Agents", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agents"}, "logincollectionname": {"name": "Login Collection Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loginCollectionName"}, "accumminloggedin": {"name": "Accumulated Minutes Logged In", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accumMinLoggedIn"}, "isloggedin": {"name": "Is Logged In", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isLoggedIn"}, "tasksemaphores": {"name": "Task Semaphores", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "taskSemaphores"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "spappresourcedirs": {"name": "Sp App Resource Dirs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAppResourceDirs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "workbenches": {"name": "Workbenches", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenches"}, "email": {"name": "Email", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "email"}, "workbenchtemplates": {"name": "Workbench Templates", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchTemplates"}, "password": {"name": "Password", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "password"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "logindisciplinename": {"name": "Login Discipline Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loginDisciplineName"}, "usertype": {"name": "User Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "userType"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: This represents Specify User within the application."}, "commonnametx": {"name": "Common Name", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "language": {"name": "Language", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The language code."}, "author": {"name": "Author", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "author"}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The country code."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "variant": {"name": "Variant", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The variant code of the language."}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "taxon"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "citations": {"name": "Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "citations"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes a common name and the localization of the name. This table is used to describe additional Common Names in other languages."}, "fundingagent": {"name": "Funding Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "orderNumber"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "collectingtrip": {"name": "Collecting Trip", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectingTrip"}, "isprimary": {"name": "Is Primary", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPrimary"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "fundingagent"}, "dnasequencingruncitation": {"name": "D N A Sequencing Run Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "sequencingrun": {"name": "Sequencing Run", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequencingRun"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWork"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "dnasequencingruncitation"}, "agent": {"name": "Agent", "format": "Agent", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"dateofbirthprecision": {"name": "Date Of Birth Precision", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateOfBirthPrecision"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "addresses": {"name": "Addresses", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "addresses"}, "collectors": {"name": "Collectors", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectors"}, "middleinitial": {"name": "Middle Initial", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Middle initial of Person."}, "orgmembers": {"name": "Org Members", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "orgMembers"}, "abbreviation": {"name": "Abbreviation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Abbreviation of organization."}, "guid": {"name": "GUID", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Global Unique Identifier."}, "datetype": {"name": "Date Type", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateType"}, "insttechcontact": {"name": "Inst Tech Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "instTechContact"}, "dateofdeath": {"name": "Date Of Death", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateOfDeath"}, "title": {"name": "Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AgentTitles", "desc": "Title of Person."}, "jobtitle": {"name": "Job Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Agent`s (person) job title at specified address and organization."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dateofbirth": {"name": "Date Of Birth", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Date agent was born."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "email": {"name": "Email", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Email address for agent."}, "interests": {"name": "Org Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Interests of Person or Organization."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The division the agent belongs to (optional)."}, "firstname": {"name": "First Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "First name of agent."}, "lastname": {"name": "Last Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Last name of Person."}, "agenttype": {"name": "Agent Type", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Byte", "picklistname": null, "desc": "Discriminator between Organization(0), Person(1), Other(2), and Group(3)."}, "dateofdeathprecision": {"name": "Date Of Death Precision", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateOfDeathPrecision"}, "colltechcontact": {"name": "Coll Tech Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collTechContact"}, "members": {"name": "Members", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "members"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "agentspecialties": {"name": "Agent Specialties", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agentSpecialties"}, "variants": {"name": "Variants", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "variants"}, "agentgeographies": {"name": "Agent Geographies", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agentGeographies"}, "collcontentcontact": {"name": "Coll Content Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collContentContact"}, "groups": {"name": "Groups", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "groups"}, "url": {"name": "Url", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "An URL for the web site of a Person or Group."}, "instcontentcontact": {"name": "Inst Content Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "instContentContact"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "agentattachments": {"name": "Agent Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "agentAttachments"}, "organization": {"name": "Organization", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "organization"}, "initials": {"name": "Initials", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Initials of agent."}}, "type": null, "picklistname": null, "desc": "Contains information about people, groups, and organizations. Some roles for an agent include collector, determiner, preparer, cataloger, donor, issuer of permits, and so forth. "}, "spviewsetobj": {"name": "View Set Object", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spappresourcedir": {"name": "Sp App Resource Dir", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAppResourceDir"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "description"}, "level": {"name": "Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "level"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "filename": {"name": "File Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fileName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "spappresourcedatas": {"name": "App Resource Datas", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "spAppResourceDatas"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "metadata": {"name": "Meta Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "metaData"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a View Set used in the form system."}, "preparationattr": {"name": "Preparation Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dblvalue": {"name": "Double Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "dblValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "strvalue": {"name": "String Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "strValue"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Extensible attributes introduced for Specify 6."}, "agentspecialty": {"name": "Agent Specialty", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"specialtyname": {"name": "Specialty Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The name of the field of specialization."}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The priority of specialization, for agents with primary and secondary areas of specialization."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "The Taxonomic specialty that a particular agent was known for."}, "giftagent": {"name": "Gift Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "LoanAgentRole", "desc": "role"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the role the Agent played in the giving of a Gift."}, "loanagent": {"name": "Loan Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "loan": {"name": "Loan", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": ""}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "LoanAgentRole", "desc": "Role the agent played in the loan."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "An agent associated with a loan. Each agent includes the role played in the loan process."}, "spappresourcedata": {"name": "App Resource Data", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "spviewsetobj": {"name": "View Set Obj", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "spViewSetObj"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "data": {"name": "Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "data"}, "spappresource": {"name": "App Resource", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "spAppResource"}}, "type": null, "picklistname": null, "desc": "System Table: The data associated with an application resource."}, "taxoncitation": {"name": "Taxon Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "taxon"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Linkage from the Taxonomic record to a published document."}, "author": {"name": "Author", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "the order of AgentID relative to other authors of reference."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "An Author is a reference to an Agent and provides the order for a list of authors of a Reference Work."}, "exchangein": {"name": "Exchange In", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"agentcatalogedby": {"name": "Cataloged By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agentCatalogedBy"}, "agentreceivedfrom": {"name": "Received From", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agentReceivedFrom"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "exchangedate": {"name": "Exchange Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date exchange was received."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "quantityexchanged": {"name": "Quantity Exchanged", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of items received."}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "exchangeinpreps": {"name": "Exchange In Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeInPreps"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of material."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes an incoming Exchanged Specimen from a different institution."}, "geologictimeperiod": {"name": "Chronostratigraphy", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"startperiod": {"name": "Start Period", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "startPeriod"}, "biostratspaleocontext": {"name": "Bio Strats Paleo Context", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "bioStratsPaleoContext"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "startuncertainty": {"name": "Start Uncertainty", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "startUncertainty"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "acceptedgeologictimeperiod": {"name": "Preferred Chronostratigraphy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedGeologicTimePeriod"}, "chronosstratspaleocontext": {"name": "Chronos Strats Paleo Context", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "chronosStratsPaleoContext"}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Numeric representation of Items rank in stratigraphic hierarchy."}, "standard": {"name": "Standard", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The system of Stratigraphy the record is included in."}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "enduncertainty": {"name": "End Uncertainty", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "endUncertainty"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "isbiostrat": {"name": "Is BioStratigraphy", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isBioStrat"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "endperiod": {"name": "End Period", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "endPeriod"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "Describes Chronostratigraphy."}, "storage": {"name": "Storage", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Definition Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "acceptedstorage": {"name": "Preferred Storage", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedStorage"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "abbrev": {"name": "Abbreviation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "abbrev"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "containers": {"name": "Containers", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "containers"}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "preparations": {"name": "Preparations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparations"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "timestampversion": {"name": "Timestamp Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Date", "picklistname": null, "desc": "timestampVersion"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "acceptedchildren": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "A tree data structure for describing where Collection Objects are physically stored."}, "accessionattachment": {"name": "Accession Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Provides a sequencial order for the attachments."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Miscellaneous files can be attached."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "An attachment for the Accession. This may be one or more PDF files of paperwork or a photo of the Accession."}, "sptasksemaphore": {"name": "Sp Task Semaphore", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "usagecount": {"name": "Usage Count", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "usageCount"}, "machinename": {"name": "Machine Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "machineName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "islocked": {"name": "Is Locked", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isLocked"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "context": {"name": "Context", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "context"}, "scope": {"name": "Scope", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scope"}, "owner": {"name": "Owner", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "owner"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "taskname": {"name": "Task Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "taskName"}, "lockedtime": {"name": "Locked Time", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lockedTime"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "deaccessionagent": {"name": "Deaccession Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"deaccession": {"name": "Deaccession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "deaccession"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "role": {"name": "Role", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Role agent played in deaccession"}}, "type": null, "picklistname": null, "desc": "Refers to an agent and contains their role in the deaccession."}, "fieldnotebookpagesetattachment": {"name": "Field Notebook Page Set Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "fieldnotebookpageset": {"name": "Field Notebook Page Set", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPageSet"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "attachmenttag": {"name": "Attachment Tag", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "tag": {"name": "Tag", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of tag."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "An attribute tag of an attachment. This consists of a single text field for storing a tag. In later versions users will be allowed to search attachments by their tag. "}, "latlonpolygon": {"name": "Lat Lon Polygon", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"visualquery": {"name": "Visual Query", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "visualQuery"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "points": {"name": "Points", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "points"}, "ispolyline": {"name": "Is Polyline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPolyline"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}}, "type": null, "picklistname": null, "desc": "latlonpolygon"}, "lithostrat": {"name": "Lithostratigraphy", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"paleocontexts": {"name": "Paleo Contexts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "paleoContexts"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "acceptedlithostrat": {"name": "Preferred Litho Strat", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedLithoStrat"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "The Litho stratigraphy tree."}, "spauditlog": {"name": "Sp Audit Log", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"recordversion": {"name": "Record Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordVersion"}, "tablenum": {"name": "Table Num", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableNum"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}, "fields": {"name": "Fields", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fields"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "parentrecordid": {"name": "Parent Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parentRecordId"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "parenttablenum": {"name": "Parent Table Num", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parentTableNum"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "action": {"name": "Action", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "action"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "spauditlog"}, "picklistitem": {"name": "Pick List Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "value": {"name": "Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "value"}, "picklist": {"name": "Pick List", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickList"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "picklistitem"}, "repositoryagreementattachment": {"name": "Repository Agreement Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "loanattachment": {"name": "Loan Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "loan": {"name": "Loan", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "loan"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "preparationattachment": {"name": "Preparation Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "exchangeoutprep": {"name": "Exchange Out Prep", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "exchangeout": {"name": "Exchange Out", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOut"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "comments": {"name": "Comments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "comments"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparation"}, "descriptionofmaterial": {"name": "Description Of Material", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "descriptionOfMaterial"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "quantity"}}, "type": null, "picklistname": null, "desc": "exchangeoutprep"}, "splocaleitemstr": {"name": "Locale Item String", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"containername": {"name": "Container Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containerName"}, "language": {"name": "Language", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "language"}, "itemdesc": {"name": "Item Desc", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "itemDesc"}, "country": {"name": "Country", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "country"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "containerdesc": {"name": "Container Desc", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containerDesc"}, "variant": {"name": "Variant", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "variant"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "text": {"name": "Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "text"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "itemname": {"name": "Item Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "itemName"}}, "type": null, "picklistname": null, "desc": "System Table: This is used for localizing the database schema it represents a string and also a Language, Country and Variant for that string."}, "datatype": {"name": "Data Type", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "A data type represents a core type of collection data."}, "locality": {"name": "Locality", "format": "Locality", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"localityattachments": {"name": "Locality Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityAttachments"}, "verbatimelevation": {"name": "Verbatim Elevation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The verbatim elevation including units as given in the field notes"}, "elevationaccuracy": {"name": "Elevation Accuracy", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "Plus or minus -- in meters."}, "datum": {"name": "Datum", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "GPS Datum."}, "guid": {"name": "GUID", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "guid"}, "geography": {"name": "Geography", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Link to Country, State, County, WaterBody, Island, IslandGroup ... info."}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "gml": {"name": "GML", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "gml"}, "latitude1": {"name": "Latitude1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Latitude of first point"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "latitude2": {"name": "Latitude2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Latitude of second point"}, "latlongmethod": {"name": "Lat/Long Method", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "LatLonMethod", "desc": "the method used to determine the Latitude, Longitude"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "localityname": {"name": "Locality Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The full name of the locality."}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "shortname": {"name": "Short Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "shortName"}, "minelevation": {"name": "Min Elevation", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "The minimum elevation in Meters"}, "namedplace": {"name": "Named Place", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The named place the locality is closest to"}, "originallatlongunit": {"name": "Original Latitude Longitude Unit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "i.e. Decimal, Deg/Min/Sec, ..."}, "localitydetails": {"name": "Locality Details", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "localityDetails"}, "maxelevation": {"name": "Max Elevation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "The maximum elevation in Meters"}, "latlongtype": {"name": "Latitude/Longitude Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The type of area described by the Latitude Longitude data (Point, Line, Rectangle)"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "longitude2": {"name": "Longitude2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Longitude of second point"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "text2": {"name": "Field Notes LInk", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text1": {"name": "Locality Map Link", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "longitude1": {"name": "Longitude1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Longitude of first point"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "geocoorddetails": {"name": "Geo Coord Details", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoCoordDetails"}, "long1text": {"name": "Long1text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Longitude1"}, "relationtonamedplace": {"name": "Relation To Named Place", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Relation of the locality to the named place"}, "localitycitations": {"name": "Locality Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityCitations"}, "srclatlongunit": {"name": "Src Lat Long Unit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcLatLongUnit"}, "lat1text": {"name": "Lat1text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Latitude1"}, "long2text": {"name": "Long2text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Longitude2"}, "localitynamealiass": {"name": "Locality Name Alias", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityNameAliass"}, "originalelevationunit": {"name": "Original Elevation Unit", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "i.e. Meters, Feet, ..."}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "elevationmethod": {"name": "Water Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "Water Type", "desc": "The method used to determine the elevation."}, "lat2text": {"name": "Lat2text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Latitude2"}, "latlonpolygons": {"name": "Lat Lonpolygons", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "latLonpolygons"}, "latlongaccuracy": {"name": "Latitude/Longitude Accuracy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "radius -- in decimal degrees"}}, "type": null, "picklistname": null, "desc": "The name of the location where a specimen was collected or observed. Some taxonomic disciplines or collectors may use a locality name instead of a field number to associate a collecting event with a specimen. "}, "autonumberingscheme": {"name": "Auto Numbering Scheme", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"divisions": {"name": "Divisions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "divisions"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "disciplines"}, "schemeclassname": {"name": "Scheme Class Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemeClassName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablenumber": {"name": "Table Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableNumber"}, "formatname": {"name": "Format Name", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": ""}, "collections": {"name": "Collections", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collections"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "isnumericonly": {"name": "Is Numeric Only", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Yes if number scheme is only numeric."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "schemename": {"name": "Scheme Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of the scheme (sequence)."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "This is an internal table used to group together parts of a collection with the same numbering scheme."}, "spexportschema": {"name": "Sp Export Schema", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "spexportschemamappings": {"name": "Sp Export Schema Mappings", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemaMappings"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "spexportschemaitems": {"name": "Sp Export Schema Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemaItems"}, "schemaversion": {"name": "Schema Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemaVersion"}, "schemaname": {"name": "Schema Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemaName"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "localityattachment": {"name": "Locality Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "localitycitation": {"name": "Locality Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "A join table to link a Locality to a Citation."}, "collectionobject": {"name": "Collection Object", "format": "CollectionObject", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": "CollectionObject", "items": {"deaccessioned": {"name": "Deaccessioned", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "True if the object has been deaccessioned."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "accession": {"name": "Accession #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "accession"}, "leftsiderels": {"name": "Left Side Rels", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "leftSideRels"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "catalogeddate": {"name": "Cat Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the object was cataloged."}, "catalognumber": {"name": "Cat #", "format": "CatalogNumberNumeric", "isuiformatter": true, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The number that identifies an individual specimen, a lot of specimens, or an observation as a part of a museum collection. "}, "appraisal": {"name": "Appraisal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appraisal"}, "conservdescriptions": {"name": "Conserv Descriptions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservDescriptions"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Global Unique Identifier"}, "availability": {"name": "Availability", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "availability"}, "altcatalognumber": {"name": "Prev/Exch #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Alternate Catalog Number."}, "determinations": {"name": "Determinations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": true, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "determinations"}, "preparations": {"name": "Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": true, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparations"}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "modifiedbyagent": {"name": "Edited by", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "collectionobjectattachments": {"name": "Collection Object Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttachments"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "yesno5": {"name": "Yes No5", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "fieldnumber": {"name": "Voucher Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A unique number a collector assigns to each specimen at the time of collection. For example, botanists often keep a running count of the individual specimens they have collected (LKK1023, LKK1024, etc.). "}, "ocr": {"name": "Ocr", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ocr"}, "inventorydate": {"name": "Inventory Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "inventoryDate"}, "collectingevent": {"name": "Field No:Locality", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "description": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Image, Sound, Preparation, Container(Container Label?)."}, "timestampmodified": {"name": "Date Edited", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "fieldnotebookpage": {"name": "Field Notebook Page", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPage"}, "collectionobjectattrs": {"name": "Collection Object Attrs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttrs"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collection"}, "text2": {"name": "Inventory", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "notifications": {"name": "Notifications", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "notifications"}, "collectionobjectattribute": {"name": "Col Obj Attribute", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": true, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObjectAttribute"}, "text1": {"name": "Other number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "rightsiderels": {"name": "Right Side Rels", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "rightSideRels"}, "dnasequences": {"name": "DNA Sequences", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequences"}, "paleocontext": {"name": "Paleo Context", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "paleoContext"}, "container": {"name": "Container", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "container"}, "totalvalue": {"name": "Total Value", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "totalValue"}, "projects": {"name": "Projects", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "projects"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "restrictions": {"name": "Restrictions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "restrictions"}, "otheridentifiers": {"name": "Other Identifiers", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "otherIdentifiers"}, "collectionobjectcitations": {"name": "Collection Object Citations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectCitations"}, "catalogeddateverbatim": {"name": "Cataloged Date Verbatim", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The verbatim date the specimen was collected."}, "countamt": {"name": "Count Amount", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The number of objects (specimens, slides, pieces) prepared."}, "exsiccataitems": {"name": "Exsiccata Items", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exsiccataItems"}, "objectcondition": {"name": "Object Condition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "objectCondition"}, "treatmentevents": {"name": "Treatment Events", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "treatmentEvents"}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "cataloger": {"name": "Cataloger", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "In Specify, the person who recorded the specimen data in the catalog. Cataloger records are stored in the Agent table. "}, "containerowner": {"name": "Container Owner", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "containerOwner"}, "projectnumber": {"name": "Project Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "projectNumber"}, "yesno6": {"name": "Yes No6", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "modifier": {"name": "Modifier", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "modifier"}, "catalogeddateprecision": {"name": "Cataloged Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "catalogedDatePrecision"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "A general term for anything that can be a part of your collection: a specimen, a specimen lot, a sound recording, a slide, a tissue, an extract, or a spectrogram. "}, "dnasequencingrun": {"name": "D N A Sequencing Run", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"sequenceprimercode": {"name": "Seq Primer Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Sequence Primer Code"}, "rundate": {"name": "Run Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "runDate"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "sequenceprimersequence5_3": {"name": "Seq Primer Seq5_3", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Sequence Primer Sequence5_3"}, "pcrprimername": {"name": "Pcr Primer Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrPrimerName"}, "preparedbyagent": {"name": "Prepared By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparedByAgent"}, "runbyagent": {"name": "Run By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "runByAgent"}, "citations": {"name": "Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "citations"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "genesequence": {"name": "Gene Sequence", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geneSequence"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "dnasequence": {"name": "Dna Sequence", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequence"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "scorefilename": {"name": "Score File Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scoreFileName"}, "pcrcocktailprimer": {"name": "Pcr Cocktail Primer", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrCocktailPrimer"}, "ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "pcrprimersequence5_3": {"name": "Pcr Primer Seq5_3", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Pcr Primer Sequence5_3"}, "tracefilename": {"name": "Trace File Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "traceFileName"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text3": {"name": "Text3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "sequencecocktailprimer": {"name": "Seq Cocktail Primer", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequenceCocktailPrimer"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "readdirection": {"name": "Read Direction", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "readDirection"}, "sequenceprimername": {"name": "Seq Primer Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Sequence Primer Name"}, "pcrreverseprimercode": {"name": "Pcr Reverse Primer Code", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrReversePrimerCode"}, "pcrforwardprimercode": {"name": "Pcr Forward Primer Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrForwardPrimerCode"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "dnasequencingrun"}} \ No newline at end of file +{"conservevent": {"name": "Conservator Event", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treatmentcompdate": {"name": "Treatment Completion Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "treatmentCompDate"}, "conditionreport": {"name": "Condition Report", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A report on the condition"}, "completedcomments": {"name": "Completed Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "completedComments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "curatorapprovaldate": {"name": "Approval Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "curatorApprovalDate"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "examdate": {"name": "Exam Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date the object was examined"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "completeddate": {"name": "Completed Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "completedDate"}, "treatmentreport": {"name": "Treatment Report", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A description of the treatment that is needed."}, "treatedbyagent": {"name": "Treated By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treatedByAgent"}, "advtestingexam": {"name": "Advanced Testing Exam", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The advanced testing that was used to examine the object"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "conserveventattachments": {"name": "Conserv Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservEventAttachments"}, "examinedbyagent": {"name": "Examined By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "examinedByAgent"}, "conservdescription": {"name": "Conserv Description", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "conservDescription"}, "curator": {"name": "Curator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "curator"}, "photodocs": {"name": "Photo Documentation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Any documentation on the photos that were taken"}, "advtestingexamresults": {"name": "Advanced Testing Exam Results", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The results of the advanced testing"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "An action that takes place as part of a Conservation Description. Over a period of time there may be multiple incidents that require a Conservator to take action."}, "recordset": {"name": "Record Set", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "group": {"name": "Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "group"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "recordsetitems": {"name": "Record Set Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordSetItems"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "inforequest": {"name": "Info Request", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "infoRequest"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dbtableid": {"name": "Database Table Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "dbTableId"}, "allpermissionlevel": {"name": "All Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "allPermissionLevel"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "type"}, "grouppermissionlevel": {"name": "Group Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "groupPermissionLevel"}, "ownerpermissionlevel": {"name": "Owner Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ownerPermissionLevel"}}, "type": null, "picklistname": null, "desc": "Describes a set of records of any type that can be acted upon within the applicaiton."}, "borrowattachment": {"name": "Borrow Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrow"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "borrowattachment"}, "collectingeventattribute": {"name": "Collecting Event Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "collectingevents": {"name": "Collecting Events", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectingEvents"}, "text5": {"name": "Clarity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "text14": {"name": "Text14", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text14"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo4"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "text15": {"name": "Text15", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text15"}, "text16": {"name": "Text16", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text16"}, "text17": {"name": "Text17", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text17"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text11": {"name": "Text11", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text11"}, "text12": {"name": "Turbidity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text12"}, "text13": {"name": "Text13", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text13"}, "text10": {"name": "Text10", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text10"}, "yesno5": {"name": "Yes No5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo5"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "number10": {"name": "Number10", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number10"}, "number11": {"name": "Number11", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number11"}, "number12": {"name": "Number12", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number12"}, "number13": {"name": "Number13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number13"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "number6": {"name": "Number6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number6"}, "number7": {"name": "Number7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number7"}, "number4": {"name": "Number4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number4"}, "text1": {"name": "Min Depth", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text6": {"name": "Salinity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text7": {"name": "Turbidity", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text4": {"name": "Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "text8": {"name": "Vegetation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text9": {"name": "Habitat Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "HabitatType", "desc": null}, "number8": {"name": "Number8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number8"}, "number9": {"name": "Number9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number9"}, "text2": {"name": "Max Depth", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text3": {"name": "Temp", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number5": {"name": "Number5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number5"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "hosttaxon": {"name": "Host Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hostTaxon"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}}, "type": null, "picklistname": null, "desc": "Collecting Event Attributes that were also available in Specify 5."}, "accession": {"name": "Accession", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"accessionnumber": {"name": "Acc #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Usually an integer or alphanumeric value that is assigned to material when it enters the collection. The format of accession numbers varies among collections, but all refer to the acquisition of specimens, observations, or other collection objects."}, "accessionauthorizations": {"name": "Accession Authorizations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessionAuthorizations"}, "dateaccessioned": {"name": "Accessioned", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of Accession."}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The date and time the record was created."}, "accessioncondition": {"name": "Accession Condition", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Physical description of the condition of the accession."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "dateacknowledged": {"name": "Date Acknowledged", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateAcknowledged"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "type": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionType", "desc": "Source of Accession, e.g. `Collecting`, `Gift`, `Bequest` ..."}, "deaccessions": {"name": "Deaccessions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "deaccessions"}, "status": {"name": "Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionStatus", "desc": "Status of Accession, e.g. `In process`, `Complete` ..."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Division", "desc": "division"}, "accessionattachments": {"name": "Accession Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": ""}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text3": {"name": "Text3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number of Specimens\\nin Accession", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "verbatimdate": {"name": "Verbatim Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Accommodates historical accessions."}, "number1": {"name": "Number of lots\\nin Accession", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "A user-visible identifier of the Accession. Typically an integer, but may include alphanumeric characters as prefix, suffix, and separators."}, "remarks": {"name": "Description\\nof Material", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "totalvalue": {"name": "Total Value", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The total monetary value of the accession."}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "appraisals": {"name": "Appraisals", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appraisals"}, "treatmentevents": {"name": "Treatment Events", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "treatmentEvents"}, "datereceived": {"name": "Received", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date material was received."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "accessionagents": {"name": "Accession Agents", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": ""}}, "type": null, "picklistname": null, "desc": "Also called an acquisition. A consignment of specimens acquired either by field collecting of staff members, gifts, purchases, or exchange with another institution. "}, "workbenchrowexportedrelationship": {"name": "Workbench Row Exported Relationship", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"sequence": {"name": "Sequence", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequence"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableName"}, "relationshipname": {"name": "Relationship Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "relationshipName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "workbenchrow": {"name": "Workbench Row", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "workbenchRow"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "workbenchrowexportedrelationship"}, "collectingtrip": {"name": "Collecting Trip", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectingevents": {"name": "Collecting Event", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEvents"}, "enddateverbatim": {"name": "Haul", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "endDateVerbatim"}, "startdateprecision": {"name": "Start Date Precision", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDatePrecision"}, "sponsor": {"name": "Sponsor", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of sponsor of collecting trip."}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The start date of the collecting trip."}, "startdateverbatim": {"name": "Cruise", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "startDateVerbatim"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "enddateprecision": {"name": "End Date Precision", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDatePrecision"}, "collectingtripname": {"name": "Vessel", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of the collecting trip."}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "text4": {"name": "Text4", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text4"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "endtime": {"name": "End Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The ending time of the collecting trip."}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The ending date of the collecting trip."}, "fundingagents": {"name": "Funding Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fundingAgents"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "starttime": {"name": "Start Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The start time of the collecting trip."}}, "type": null, "picklistname": null, "desc": "Used to group Collecting Events together."}, "geography": {"name": "Geography", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"centroidlat": {"name": "Centroid Latitude", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "centroidLat"}, "centroidlon": {"name": "Centroid Longitude", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "centroidLon"}, "acceptedgeography": {"name": "Preferred Geo", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedGeography"}, "guid": {"name": "GUID", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "guid"}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Geographic Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "gml": {"name": "GML", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "gml"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "abbrev": {"name": "Abbreviation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "abbrev"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "localities": {"name": "Localities", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localities"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "commonname": {"name": "Common Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "commonName"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "The preferred name of a synonym."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "timestampversion": {"name": "Timestamp Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Date", "picklistname": null, "desc": "timestampVersion"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "geographycode": {"name": "Geography Code", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "geographyCode"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "iscurrent": {"name": "Is Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "`Yes` if the Name and/or Geographic/Political entity is currently valid."}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "Represents a politcal boundary (Country, State, County, Township, etc.)."}, "discipline": {"name": "Discipline", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"taxontreedef": {"name": "Taxon Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "taxonTreeDef"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "splocalecontainers": {"name": "Sp Locale Containers", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spLocaleContainers"}, "datatype": {"name": "Data Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dataType"}, "geologictimeperiodtreedef": {"name": "Chronostratigraphy Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geologicTimePeriodTreeDef"}, "lithostrattreedef": {"name": "Litho Strat Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lithoStratTreeDef"}, "geographytreedef": {"name": "Geography Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geographyTreeDef"}, "collections": {"name": "Collections", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collections"}, "spexportschemas": {"name": "Sp Export Schemas", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemas"}, "numberingschemes": {"name": "Numbering Schemes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "numberingSchemes"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attributedefs": {"name": "Attribute Defs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attributeDefs"}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "type"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "May include one or more collections that share the Taxon, Geography, LithoStratigraphy, and Chronostratigraphy Trees, Localities, Agents and Determination Status."}, "exchangeout": {"name": "Exchange Out", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"agentcatalogedby": {"name": "Cataloged By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Agent ID of person who recorded the exchange."}, "exchangeoutpreps": {"name": "Exchange Out Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOutPreps"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "exchangedate": {"name": "Exchange Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date exchange was sent."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "shipments"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "quantityexchanged": {"name": "Quantity Exchanged", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of items sent."}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "agentsentto": {"name": "Sent To", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agentSentTo"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "descriptionOfMaterial"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes an outgoing Exchanged Specimen to a different institution."}, "lithostrattreedefitem": {"name": "Lithostratigraphy Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "treedef": {"name": "Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "institution": {"name": "Institution", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"issecurityon": {"name": "Is Security On", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSecurityOn"}, "code": {"name": "Code", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "code"}, "technicalcontacts": {"name": "Technical Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "technicalContacts"}, "minimumpwdlength": {"name": "Minimum Pwd Length", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "minimumPwdLength"}, "issharinglocalities": {"name": "Is Sharing Localities", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSharingLocalities"}, "storagetreedef": {"name": "Storage Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "storageTreeDef"}, "contentcontacts": {"name": "Content Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "contentContacts"}, "ipr": {"name": "IPR", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A sequence of statements related to Intellectual Property Rights, credit and acknowledgement."}, "currentmanagedschemaversion": {"name": "Current Managed Schema Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "currentManagedSchemaVersion"}, "isserverbased": {"name": "Is Server Based", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isServerBased"}, "isanonymous": {"name": "Is Anonymous", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isAnonymous"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "copyright": {"name": "Copyright", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "copyright"}, "isaccessionsglobal": {"name": "Are Accessions Global", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isAccessionsGlobal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "iconuri": {"name": "Icon URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "iconURI"}, "isreleasemanagedglobally": {"name": "Is Release Managed Globally", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isReleaseManagedGlobally"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "lsidauthority": {"name": "LSID Authority", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lsidAuthority"}, "hasbeenasked": {"name": "Has Been Asked", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hasBeenAsked"}, "issinglegeographytree": {"name": "Is Single Geography Tree", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSingleGeographyTree"}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "address": {"name": "Address", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "divisions": {"name": "Divisions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "divisions"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "license": {"name": "License", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "license"}, "uri": {"name": "URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "uri"}, "termsofuse": {"name": "Terms Of Use", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Defines conditions under which the data may be analyzed, distributed or changed. "Terms of use" includes concepts like "Usage conditions" and "Specific Restrictions"."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "currentmanagedrelversion": {"name": "Current Managed Rel Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "currentManagedRelVersion"}, "altname": {"name": "Alt Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "altName"}, "disclaimer": {"name": "Disclaimer", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Disclaimer statement, e.g. concerning responsibility for data quality or legal implications."}}, "type": null, "picklistname": null, "desc": "The parent institution. An institution is made up of one or more divisions."}, "conservdescriptionattachment": {"name": "Conservator Description Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order or position"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "conservdescription": {"name": "Conserv Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "conservDescription"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "institutionnetwork": {"name": "Institution Network", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "code": {"name": "Code", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "license": {"name": "License", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "contacts": {"name": "Contacts", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "altname": {"name": "Alt Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "uri": {"name": "Uri", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "ipr": {"name": "Ipr", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "termsofuse": {"name": "Terms Of Use", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "iconuri": {"name": "Icon U R I", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "copyright": {"name": "Copyright", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "address": {"name": "Address", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "collections": {"name": "Collections", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "disclaimer": {"name": "Disclaimer", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}}, "type": null, "picklistname": null, "desc": null}, "loanpreparation": {"name": "Loan Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "quantityresolved": {"name": "Quantity Resolved", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Number of specimens returned, deaccessioned or otherwise accounted for. (necessary for Lots)."}, "outcomments": {"name": "Out Comments", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Comments on item when loaned."}, "loan": {"name": "Loan", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Loan containing the Preparation."}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "incomments": {"name": "In Comments", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Comments on item when returned."}, "isresolved": {"name": "Is Resolved", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isResolved"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "loanreturnpreparations": {"name": "Loan Return Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanReturnPreparations"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "quantityreturned": {"name": "Quantity Returned", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Number of specimens returned. (necessary for Lots)"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of loaned material (intended to be used for non-cataloged items, i.e. when PreparationID is null)"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The total number of specimens loaned (necessary for lots)."}}, "type": null, "picklistname": null, "desc": "A join table between the Loan and the Preparation. It contains comments and quantity fields."}, "attachment": {"name": "Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repositoryagreementattachments": {"name": "Repository Agreement Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAttachments"}, "copyrightdate": {"name": "Copyright Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Date of copyright of attachment."}, "origfilename": {"name": "Original Filename", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Original name of file."}, "preparationattachments": {"name": "Preparation Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttachments"}, "attachmentimageattribute": {"name": "Attachment Image Attribute", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachmentImageAttribute"}, "title": {"name": "Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Title of attachment."}, "conservdescriptionattachments": {"name": "Conserv Description Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservDescriptionAttachments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "loanattachments": {"name": "Loan Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanAttachments"}, "collectionobjectattachments": {"name": "Collection Object Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttachments"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "fieldnotebookpageattachments": {"name": "Field Notebook Page Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPageAttachments"}, "fieldnotebookattachments": {"name": "Field Notebook Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookAttachments"}, "giftattachments": {"name": "Gift Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftAttachments"}, "localityattachments": {"name": "Locality Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityAttachments"}, "taxonattachments": {"name": "Taxon Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonAttachments"}, "tags": {"name": "Tags", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User defined key words for attachments."}, "filecreateddate": {"name": "File Created Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "fileCreatedDate"}, "accessionattachments": {"name": "Accession Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessionAttachments"}, "fieldnotebookpagesetattachments": {"name": "Field Notebook Page Set Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPageSetAttachments"}, "dnasequenceattachments": {"name": "Dna Sequence Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequenceAttachments"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "borrowattachments": {"name": "Borrow Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrowAttachments"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "dnasequencingrunattachments": {"name": "Dna Sequencing Run Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequencingRunAttachments"}, "permitattachments": {"name": "Permit Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "permitAttachments"}, "mimetype": {"name": "Mime Type", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Describes the attachment file type."}, "conserveventattachments": {"name": "Conserv Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservEventAttachments"}, "license": {"name": "License", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Attachment license information."}, "metadata": {"name": "Metadata", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "metadata"}, "credit": {"name": "Credit", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Attachment credit."}, "copyrightholder": {"name": "Copyright Holder", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "copyrightHolder"}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referenceworkattachments": {"name": "Reference Work Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWorkAttachments"}, "agentattachments": {"name": "Agent Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "agentAttachments"}, "attachmentlocation": {"name": "Attachment Location", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Location of attachment repository."}, "dateimaged": {"name": "Date Imaged", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateImaged"}, "collectingeventattachments": {"name": "Collecting Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttachments"}}, "type": null, "picklistname": null, "desc": "The information in this record identifies everything the application will need to load and display the attachment. The attachment location is an absolute path to the file. The file itself is not stored in the database."}, "division": {"name": "Division", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The discipline of the division"}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The list of Disciplines that belong to this Division"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "address": {"name": "Address", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address"}, "uri": {"name": "URI", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A URI (web site) address for the department"}, "numberingschemes": {"name": "Numbering Schemes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "numberingSchemes"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "abbrev": {"name": "Abbreviation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The abbreviation for the division."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "members": {"name": "Members", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "members"}, "altname": {"name": "Alt Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "altName"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "iconuri": {"name": "Icon URI", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The URL to their icon"}, "institution": {"name": "Institution", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The institution the division belongs to."}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the division"}}, "type": null, "picklistname": null, "desc": "The division (or department) containing agents. "}, "taxon": {"name": "Taxon", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"groupnumber": {"name": "Group Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Taxonomic group number"}, "usfwscode": {"name": "USFWS Code", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "usfwsCode"}, "acceptedtaxon": {"name": "Preferred Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedTaxon"}, "cultivarname": {"name": "Cultivar Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "cultivarName"}, "citesstatus": {"name": "CITES Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "citesStatus"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "children": {"name": "Child Taxa", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Taxonomic Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "unitname4": {"name": "Unit Name4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName4"}, "determinations": {"name": "Determinations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "determinations"}, "labelformat": {"name": "Label Format", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "TaxonLabelFormatter", "desc": "labelFormat"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "author": {"name": "Author", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "author"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "hybridparent1": {"name": "Hybrid Parent1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridParent1"}, "environmentalprotectionstatus": {"name": "Protected Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "environmentalProtectionStatus"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "If the record has been imported then this field holds information about the authority file it was obtained from, else it is user-editable."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "unitname1": {"name": "Unit Name1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName1"}, "unitname2": {"name": "Unit Name2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName2"}, "unitname3": {"name": "Unit Name3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitName3"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "esastatus": {"name": "ESA Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "esaStatus"}, "taxoncitations": {"name": "Taxon Citations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonCitations"}, "taxonomicserialnumber": {"name": "Taxonomic Serial Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "If the record has been imported from an Authority File then this field stores a unique ID assigned by the provider, else it is null"}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "taxonattachments": {"name": "Taxon Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonAttachments"}, "rankid": {"name": "Rank ID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "ncbitaxonnumber": {"name": "NCBI Taxon Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ncbiTaxonNumber"}, "hybridchildren1": {"name": "Hybrid Children1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridChildren1"}, "commonname": {"name": "Common Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "commonName"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "text2": {"name": "Text 2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text 1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number 2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "colstatus": {"name": "Col Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "colStatus"}, "number1": {"name": "Number 1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "collectingeventattributes": {"name": "Collecting Event Attributes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectingEventAttributes"}, "unitind2": {"name": "Unit Ind2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd2"}, "isisnumber": {"name": "ISIS Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isisNumber"}, "unitind4": {"name": "Unit Ind4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd4"}, "unitind3": {"name": "Unit Ind3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd3"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "unitind1": {"name": "Unit Ind1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "unitInd1"}, "hybridchildren2": {"name": "Hybrid Children2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridChildren2"}, "ishybrid": {"name": "Is Hybrid", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isHybrid"}, "hybridparent2": {"name": "Hybrid Parent2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hybridParent2"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "commonnames": {"name": "Common Names", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "commonNames"}}, "type": null, "picklistname": null, "desc": "Describes the taxonomy of a Determination."}, "recordsetitem": {"name": "Record Set Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"recordset": {"name": "Record Set", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordSet"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}}, "type": null, "picklistname": null, "desc": "recordsetitem"}, "referencework": {"name": "Reference Work", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"isbn": {"name": "ISBN", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isbn"}, "authors": {"name": "Authors", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "authors"}, "ispublished": {"name": "Is Published", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isPublished"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "librarynumber": {"name": "Library Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "libraryNumber"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Title of reference"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "determinationcitations": {"name": "Determination Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "determinationCitations"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "taxoncitations": {"name": "Taxon Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "taxonCitations"}, "workdate": {"name": "Work Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "workDate"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "journal": {"name": "Journal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "journal"}, "localitycitations": {"name": "Locality Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityCitations"}, "volume": {"name": "Volume", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Volume/Issue for Journal articles"}, "text1": {"name": "PDF of Citation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "containedreferenceworks": {"name": "Contained Reference Works", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containedReferenceWorks"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "pages": {"name": "Pages", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Number of pages or Page range for Journal articles"}, "exsiccatae": {"name": "Exsiccatae", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exsiccatae"}, "publisher": {"name": "Publisher", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "publisher"}, "collectionobjectcitations": {"name": "Collection Object Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectCitations"}, "url": {"name": "Url", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "url"}, "placeofpublication": {"name": "Place Of Publication", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "placeOfPublication"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "referenceworktype": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Byte", "picklistname": "ReferenceWorkType", "desc": "Type of Reference (Book(0), Electronic Media(1), Paper(2), Technical Report(3), Thesis(4), Section in book(5))"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "containedrfparent": {"name": "Contained R F Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containedRFParent"}, "referenceworkattachments": {"name": "Reference Work Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWorkAttachments"}}, "type": null, "picklistname": null, "desc": "A literary reference work."}, "paleocontext": {"name": "Paleo Context", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "direction": {"name": "Direction", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The direction of the measurement of the distance: up or down."}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "positionstate": {"name": "Position State", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "How it was found: float or in-situ"}, "lithostrat": {"name": "Litho Strat", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "lithoStrat"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "chronosstratend": {"name": "Chronos Strat End", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "chronosStratEnd"}, "distanceunits": {"name": "Distance Units", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The units for the distances, feet or meters"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "chronosstrat": {"name": "Chrono Strat", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "chronosStrat"}, "text1": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "biostrat": {"name": "Bio Strat", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "bioStrat"}, "topdistance": {"name": "Top Distance", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The distance to the top of the position."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "bottomdistance": {"name": "Bottom Distance", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The distance to the bottom of the position."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the paleontologic information for a Collection Object. This also references Chronostratigraphy and Bio Stratigray."}, "spexportschemamapping": {"name": "Sp Export Schema Mapping", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "mappings": {"name": "Mappings", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mappings"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampexported": {"name": "Timestamp Exported", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampExported"}, "spexportschemas": {"name": "Sp Export Schemas", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemas"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "mappingname": {"name": "Mapping Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mappingName"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}}, "type": null, "picklistname": null, "desc": "spexportschemamapping"}, "agentgeography": {"name": "Agent Geography", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"modifiedbyagent": {"name": "Modified by Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Role of the agent as \"author\" or \"collector\" within the geography."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "geography": {"name": "Geography", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The geographical region of specialization"}}, "type": null, "picklistname": null, "desc": "The geographical region that a particular collector was known for collecting in."}, "commonnametxcitation": {"name": "Common Name Tx Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "commonnametx": {"name": "Common Name Tx", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "commonNameTx"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWork"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "commonnametxcitation"}, "spappresource": {"name": "App Resource", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"mimetype": {"name": "Mime Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "mimeType"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "group": {"name": "Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "group"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "description"}, "level": {"name": "Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "level"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "allpermissionlevel": {"name": "All Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "allPermissionLevel"}, "metadata": {"name": "Metadata", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "metaData"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "spappresourcedatas": {"name": "App Resource Datas", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "spAppResourceDatas"}, "spappresourcedir": {"name": "Sp App Resource Dir", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAppResourceDir"}, "grouppermissionlevel": {"name": "Group Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "groupPermissionLevel"}, "ownerpermissionlevel": {"name": "Owner Permission Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ownerPermissionLevel"}, "spreports": {"name": "Sp Reports", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spReports"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a resource, typically XML, that the application uses during run time."}, "fieldnotebookpageattachment": {"name": "Field Notebook Page Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "fieldnotebookpage": {"name": "Field Notebook Page", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPage"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "repositoryagreement": {"name": "Repository Agreement", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"status": {"name": "Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionStatus", "desc": "status"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "startDate"}, "repositoryagreementnumber": {"name": "RA Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repositoryAgreementNumber"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "repositoryagreementauthorizations": {"name": "Repository Agreement Authorizations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAuthorizations"}, "repositoryagreementattachments": {"name": "Repository Agreement Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAttachments"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "originator": {"name": "Originator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "originator"}, "repositoryagreementagents": {"name": "Repository Agreement Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "repositoryAgreementAgents"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "endDate"}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "dateReceived"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "accessions": {"name": "Accessions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessions"}}, "type": null, "picklistname": null, "desc": "An agreement for allowing an Accession to occur, but does not include ownership."}, "otheridentifier": {"name": "Other Identifier", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "identifier": {"name": "Identifier", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "identifier"}, "institution": {"name": "Institution", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "institution"}}, "type": null, "picklistname": null, "desc": "Describes an identifier (Catalog Number) of a Collection Object from a different Institution."}, "gift": {"name": "Gift", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"giftagents": {"name": "Gift Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftAgents"}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "giftnumber": {"name": "Gift Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "giftNumber"}, "giftpreparations": {"name": "Gift Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftPreparations"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "giftattachments": {"name": "Gift Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftAttachments"}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "shipments"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "purposeofgift": {"name": "Purpose Of Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "purposeOfGift"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "se"}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User defined."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "specialconditions": {"name": "Special Conditions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specialConditions"}, "giftdate": {"name": "Gift Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftDate"}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateReceived"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isfinancialresponsibility": {"name": "Is Financial Responsibility", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFinancialResponsibility"}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}}, "type": null, "picklistname": null, "desc": "Describes a Gift."}, "geographytreedef": {"name": "Geography Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "disciplines"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the Geography tree."}, "geologictimeperiodtreedef": {"name": "Geological Time Period Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "disciplines"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the GTP tree."}, "storagetreedefitem": {"name": "Storage Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "treedef": {"name": "Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "borrow": {"name": "Borrow", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"currentduedate": {"name": "Current Due Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date loan is currently due. (Same as Original Due Date unless loan period has been extended)"}, "borrowagents": {"name": "Borrow Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "borrowAgents"}, "dateclosed": {"name": "Date Closed", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date loan was closed."}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno1": {"name": "Extension Granted", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "invoicenumber": {"name": "Invoice Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Lender`s loan number."}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "shipments"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "borrowattachments": {"name": "Borrow Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrowAttachments"}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "borrowmaterials": {"name": "Borrow Materials", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "borrowMaterials"}, "receiveddate": {"name": "Received Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date material was received."}, "isclosed": {"name": "Is Closed", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "Indicates whether the borrow was closed (returned)."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isfinancialresponsibility": {"name": "Is Financial Responsibility", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFinancialResponsibility"}, "originalduedate": {"name": "Original Due Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Original due date for loan."}}, "type": null, "picklistname": null, "desc": "Contains information about loans from another institution. When one institution borrows a group of objects from another institution, all objects in the borrowed group share a common set of attributes that are defined for the loan. "}, "determinationcitation": {"name": "Determination Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of the publication citing the determination."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "determination": {"name": "Determination", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Determination being cited."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to a citation for the determination."}, "exsiccata": {"name": "Exsiccata", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"exsiccataitems": {"name": "Exsiccata Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exsiccataItems"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The title of the exsiccata"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The monograph or journal in which the exsiccata is listed"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "exsiccata"}, "collectingeventattr": {"name": "Collecting Event Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectingevent": {"name": "Collecting Event", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dblvalue": {"name": "Double Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "dblValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "strvalue": {"name": "String Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "strValue"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Extensible attributes introduced for Specify 6."}, "workbench": {"name": "WorkBench", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbenchrows": {"name": "Workbench Rows", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchRows"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "group": {"name": "Group", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "group"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "exportinstitutionname": {"name": "Export Institution Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "exportInstitutionName"}, "workbenchtemplate": {"name": "Workbench Template", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchTemplate"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "allpermissionlevel": {"name": "All Permission Level", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "allPermissionLevel"}, "lockedbyusername": {"name": "Locked By User Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lockedByUserName"}, "formid": {"name": "Form Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "formId"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dbtableid": {"name": "Database Table Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "dbTableId"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "srcfilepath": {"name": "Source File Path", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "srcFilePath"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "grouppermissionlevel": {"name": "Group Permission Level", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "groupPermissionLevel"}, "ownerpermissionlevel": {"name": "Owner Permission Level", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ownerPermissionLevel"}, "exportedfromtablename": {"name": "Exported From Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exportedFromTableName"}}, "type": null, "picklistname": null, "desc": "A WorkBench DataSet."}, "collectingeventattachment": {"name": "Collecting Event Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order or position of the attachment."}, "collectingevent": {"name": "Collecting Event", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additonal comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides an order."}, "morphbankview": {"name": "Morph Bank View", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"imagingtechnique": {"name": "Imaging Technique", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "imagingTechnique"}, "attachmentimageattributes": {"name": "Attachment Image Attributes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachmentImageAttributes"}, "viewname": {"name": "View Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "viewName"}, "form": {"name": "Form", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "form"}, "specimenpart": {"name": "Specimen Part", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specimenPart"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "morphbankexternalviewid": {"name": "Morph Bank External View Id", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "morphBankExternalViewId"}, "sex": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sex"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "imagingpreparationtechnique": {"name": "Imaging Preparation Technique", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "imagingPreparationTechnique"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "developmentstate": {"name": "Development State", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "developmentState"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "viewangle": {"name": "View Angle", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "viewAngle"}}, "type": null, "picklistname": null, "desc": "morphbankview"}, "lithostrattreedef": {"name": "Lithostratigraphy Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "disciplines"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the tree."}, "storagetreedef": {"name": "Storage Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "institutions": {"name": "Institutions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "institutions"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the tree."}, "picklist": {"name": "Pick List", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"filtervalue": {"name": "Filter Value", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "filterValue"}, "formatter": {"name": "Formatter", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "formatter"}, "sorttype": {"name": "Sort Type", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sortType"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "filterfieldname": {"name": "Filter Field Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "filterFieldName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "tableName"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "readonly": {"name": "Read Only", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "readOnly"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "sizelimit": {"name": "Size Limit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "sizeLimit"}, "picklistitems": {"name": "Pick List Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The items in the picklist."}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fieldName"}, "issystem": {"name": "Is System", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Where system form rely on this picklist, not user defined"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: A list of items that can be choosen to produce a controlled vocabulary."}, "geologictimeperiodtreedefitem": {"name": "Geological Time Period Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "treedef": {"name": "Tree Definition", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "accessionagent": {"name": "Accession Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "accession"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AccessionRole", "desc": "Role the agent played in the accession process."}}, "type": null, "picklistname": null, "desc": "The person(s) requesting the Accession. This references an Agent."}, "collector": {"name": "Collector", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "collectingevent": {"name": "Collecting Event", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The position in the list of collectors."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "isprimary": {"name": "Is Primary", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPrimary"}}, "type": null, "picklistname": null, "desc": "In Specify, the person or persons who collected a specimen. Collector records are stored in the Agent table. \n"}, "spfieldvaluedefault": {"name": "Sp Field Value Default", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "idvalue": {"name": "Id Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "idValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}, "strvalue": {"name": "Str Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "strValue"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a default field value for a form."}, "groupperson": {"name": "Group Person", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "group": {"name": "Group", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Agent ID of group."}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Members position in group; i.e. 1st, 2nd, 3rd."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "member": {"name": "Member", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Agent ID of member (member must be of type Person)."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}}, "type": null, "picklistname": null, "desc": "This is a join table for Agents that are Institutions and Organizations that contain other Agents. It also provides order."}, "attachmentimageattribute": {"name": "Attachment Image Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "morphbankview": {"name": "Morph Bank View", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "morphBankView"}, "height": {"name": "Height", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "height"}, "imagetype": {"name": "Image Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "imageType"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "width": {"name": "Width", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "width"}, "magnification": {"name": "Magnification", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "magnification"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "creativecommons": {"name": "Creative Commons", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "creativeCommons"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestamplastupdatecheck": {"name": "Timestamp Last Update Check", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampLastUpdateCheck"}, "timestamplastsend": {"name": "Timestamp Last Send", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampLastSend"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "viewdescription": {"name": "View Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "viewDescription"}, "mbimageid": {"name": "Mb Image Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mbImageId"}, "resolution": {"name": "Resolution", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "resolution"}}, "type": null, "picklistname": null, "desc": "attachmentimageattribute"}, "attributedef": {"name": "Attribute Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "collectionobjectattrs": {"name": "Collection Object Attrs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttrs"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "datatype": {"name": "Data Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The data type of the attribute."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "preparationattrs": {"name": "Preparation Attrs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttrs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The field name of the attribute."}, "preptype": {"name": "Prep Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "prepType"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "tabletype": {"name": "Table Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The type of table it is attached to, this is internal to Specify."}, "collectingeventattrs": {"name": "Collecting Event Attrs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttrs"}}, "type": null, "picklistname": null, "desc": "The definition of an attribute."}, "container": {"name": "Container", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the container"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "storage": {"name": "Storage", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "storage"}, "number": {"name": "Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "collectionobjectkids": {"name": "Collection Object Kids", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjectKids"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The type of container"}, "children": {"name": "Children", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A description of the container"}}, "type": null, "picklistname": null, "desc": "A container can optionally be cataloged as a collection object and it contains other collection objects. Describes a logical or physical container."}, "dnasequencerunattachment": {"name": "D N A Sequencing Run Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "dnasequencingrun": {"name": "Dna Sequencing Run", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequencingRun"}}, "type": null, "picklistname": null, "desc": "dnasequencerunattachment"}, "latlonpolygonpnt": {"name": "Lat Lon Polygon Pnt", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "latitude": {"name": "Latitude", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "latitude"}, "elevation": {"name": "Elevation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "elevation"}, "longitude": {"name": "Longitude", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "longitude"}, "latlonpolygon": {"name": "Lat Lon Polygon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "latLonPolygon"}}, "type": null, "picklistname": null, "desc": "latlonpolygonpnt"}, "spversion": {"name": "Sp Version", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"isdbclosed": {"name": "Is D B Closed", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isDBClosed"}, "appname": {"name": "App Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "appversion": {"name": "App Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appVersion"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "schemaversion": {"name": "Schema Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemaVersion"}, "dbclosedby": {"name": "Db Closed By", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dbClosedBy"}}, "type": null, "picklistname": null, "desc": "spversion"}, "collectionreltype": {"name": "Collection Relationship Type", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"rightsidecollection": {"name": "Right Side Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rightSideCollection"}, "name": {"name": "Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the Collection Relationship."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "leftsidecollection": {"name": "Left Side Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "leftSideCollection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the type of relationship between two collection objects."}, "dnasequenceattachment": {"name": "DNA Sequence Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "dnasequence": {"name": "Dna Sequence", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequence"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "shipment": {"name": "Shipment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"weight": {"name": "Weight", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The weight of the shipment"}, "loan": {"name": "Loan", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loan"}, "numberofpackages": {"name": "# Of Packages", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of packages shipped"}, "shipmentmethod": {"name": "Method", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "ShipmentMethod", "desc": "Description of shipment. E.g. `Hand-carried`, `Overnight`, `Air`, `Land`, `Sea`, ..."}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "exchangeout": {"name": "Exchange Out", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOut"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "shippedby": {"name": "Packaged By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "shippedBy"}, "insuredforamount": {"name": "Insured For Amount", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "insuredForAmount"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "shipper": {"name": "Shipper", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "shipper"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "shipmentdate": {"name": "Shipment Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of shipment"}, "shippedto": {"name": "Shipped To", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "shippedTo"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "borrow"}, "shipmentnumber": {"name": "Shipment Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Shipper`s tracking number"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the shipment of a Loan or Exchange."}, "borrowmaterial": {"name": "Borrow Material", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"materialnumber": {"name": "Material Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "e.g. `FMNH 223456`"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "description": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of the material. `e.g. Bufo bufo skull`."}, "quantityresolved": {"name": "Quantity Resolved", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Quantity resolved (Returned, Accessioned, Lost, Discarded, Destroyed ...)."}, "outcomments": {"name": "Out Comments", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Notes concerning the return of the material."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of the borrow containing the prep."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "incomments": {"name": "In Comments", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Notes concerning the receipt of the material."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "borrowreturnmaterials": {"name": "Borrow Return Materials", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "borrowReturnMaterials"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "quantityreturned": {"name": "Quantity Returned", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Quantity returned."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of specimens (for lots)."}}, "type": null, "picklistname": null, "desc": "Describes the material being borrowed."}, "addressofrecord": {"name": "Address Of Record", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"city": {"name": "City", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "City of record."}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Country of record."}, "address2": {"name": "Address2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Secondary address of record."}, "address": {"name": "Address", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Primary address of record."}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "postalcode": {"name": "Postal Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Postal code of record (zip code)."}, "exchangeouts": {"name": "Exchange Outs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOuts"}, "state": {"name": "State", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "State of record."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "accessions": {"name": "Accessions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accessions"}, "repositoryagreements": {"name": "Repository Agreements", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repositoryAgreements"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "loans": {"name": "Loans", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loans"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "exchangeins": {"name": "Exchange Ins", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeIns"}}, "type": null, "picklistname": null, "desc": "This is the address when the legal action took place."}, "spexportschemaitemmapping": {"name": "Sp Export Schema Item Mapping", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"queryfield": {"name": "Query Field", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "queryField"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "exportschemamapping": {"name": "Export Schema Mapping", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exportSchemaMapping"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "exportschemaitem": {"name": "Export Schema Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exportSchemaItem"}}, "type": null, "picklistname": null, "desc": "spexportschemaitemmapping"}, "giftpreparation": {"name": "Gift Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "outcomments": {"name": "Out Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "outComments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparation"}, "incomments": {"name": "In Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "inComments"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "descriptionOfMaterial"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Number of preparations included in the gift."}}, "type": null, "picklistname": null, "desc": "Points a gift to a preparation."}, "splocalecontaineritem": {"name": "Locale Container Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spexportschemaitems": {"name": "Sp Export Schema Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemaItems"}, "container": {"name": "Container", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "container"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "format": {"name": "Format", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "format"}, "isuiformatter": {"name": "Is U I Formatter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isUIFormatter"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "descs": {"name": "Descs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "descs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "isrequired": {"name": "Is Required", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isRequired"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "names": {"name": "Names", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "names"}, "weblinkname": {"name": "Web Link Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "webLinkName"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "issystem": {"name": "Is System", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSystem"}, "ishidden": {"name": "Is Hidden", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isHidden"}, "picklistname": {"name": "Pick List Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickListName"}}, "type": null, "picklistname": null, "desc": "System Table: This is used for localizing the database schema it has a localized name and description."}, "collectingevent": {"name": "Collecting Event", "format": "CollectingEvent", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectors": {"name": "Collectors", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectors"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjects"}, "collectingeventattribute": {"name": "Collecting Event Attribute", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEventAttribute"}, "startdateprecision": {"name": "Start Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "startDatePrecision"}, "collectingtrip": {"name": "Collecting Trip", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingTrip"}, "verbatimlocality": {"name": "Verbatim Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Original statement (literal quotation) of the location of the Collecting Event as given by the Collector."}, "collectingeventattrs": {"name": "Collecting Event Attrs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttrs"}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date collecting event began."}, "startdateverbatim": {"name": "Start Date Verbatim", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "startDateVerbatim"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "stationfieldnumber": {"name": "Field Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Station number or field number of the site where collecting event took place, A number or code recorded in field notes and/or written on field tags that identifies ALL material collected in a Collecting Event."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "enddateverbatim": {"name": "End Date Verbatim", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "endDateVerbatim"}, "enddateprecision": {"name": "End Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "endDatePrecision"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "locality": {"name": "Locality", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Locality where collection took place."}, "verbatimdate": {"name": "Verbatim Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Date which collector recorded in field book, exactly as reported by the collector. Should indicate whether reported as range, season, month, etc."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Free text to record information that does not conform to structured fields, or to explain data recorded in those fields, particularly problematic interpretations of data given by collector(s)."}, "endtime": {"name": "End Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "End time in military format."}, "enddate": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date collecting event ended."}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "method": {"name": "Gear", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "Gear2", "desc": "A method, such as net or trap, which is used to obtain the specimen."}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "starttime": {"name": "Start Time", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Start time in military format."}, "collectingeventattachments": {"name": "Collecting Event Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectingEventAttachments"}}, "type": null, "picklistname": null, "desc": "A collecting event is the place and time that a collection is made. In some disciplines a field number is used as the primary designation for place and time information, while in others, locality name and date are used to link specimens."}, "collectionobjectcitation": {"name": "Collection Object Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "isfigured": {"name": "Is Figured", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFigured"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "Refers to a citation for a Collection Object."}, "geocoorddetail": {"name": "Geo Coord Detail", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"protocol": {"name": "Protocol", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "protocol"}, "uncertaintypolygon": {"name": "Uncertainty Polygon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "uncertaintyPolygon"}, "georefaccuracyunits": {"name": "Geo Ref Accuracy Units", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefAccuracyUnits"}, "namedplaceextent": {"name": "Named Place Extent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "namedPlaceExtent"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "locality"}, "georefdetdate": {"name": "Geo Ref Det Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefDetDate"}, "georefremarks": {"name": "Geo Ref Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefRemarks"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "source"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "georefdetby": {"name": "Geo Ref Det By", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefDetBy"}, "georefverificationstatus": {"name": "Geo Ref Verification Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefVerificationStatus"}, "maxuncertaintyestunit": {"name": "Max Uncertainty Est Unit", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "maxUncertaintyEstUnit"}, "errorpolygon": {"name": "Error Polygon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "errorPolygon"}, "maxuncertaintyest": {"name": "Max Uncertainty Est", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "maxUncertaintyEst"}, "georefdetref": {"name": "Geo Ref Det Ref", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoRefDetRef"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "nogeorefbecause": {"name": "No Geo Ref Because", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "noGeoRefBecause"}, "validation": {"name": "Validation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "validation"}, "originalcoordsystem": {"name": "Original Coord System", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "originalCoordSystem"}}, "type": null, "picklistname": null, "desc": "Describes extra detail for a Locality for Manis data."}, "borrowagent": {"name": "Borrow Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "borrow": {"name": "Borrow", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of borrow in which Agent played role."}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "BorrowRole", "desc": "Role played by agent in the borrow."}}, "type": null, "picklistname": null, "desc": "Refers to an Agent and describes their role in the borrowing process."}, "geographytreedefitem": {"name": "Geography Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "treedef": {"name": "Tree Definition", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "journal": {"name": "Journal", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "journalname": {"name": "Journal Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Full name of hte journal."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "issn": {"name": "ISSN", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "issn"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referenceworks": {"name": "Reference Works", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "referenceWorks"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "journalabbreviation": {"name": "Journal Abbreviation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "journalAbbreviation"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "guid"}}, "type": null, "picklistname": null, "desc": "Refers to a published journal."}, "referenceworkattachment": {"name": "Reference Work Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}}, "type": null, "picklistname": null, "desc": "referenceworkattachment"}, "collectionobjectattribute": {"name": "Collection Object Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"number21": {"name": "Number21", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number21"}, "number20": {"name": "Number20", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number20"}, "number37": {"name": "Number37", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number37"}, "number22": {"name": "Number22", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number22"}, "number25": {"name": "Number25", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number25"}, "number24": {"name": "Number24", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number24"}, "number41": {"name": "Number41", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number41"}, "number40": {"name": "Number40", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number40"}, "number29": {"name": "Number29", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number29"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "number23": {"name": "Number23", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number23"}, "number28": {"name": "Number28", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number28"}, "number30": {"name": "Number30", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number30"}, "number13": {"name": "Number13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number13"}, "number5": {"name": "Number5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number5"}, "number42": {"name": "Number42", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number42"}, "yesno6": {"name": "Yes No6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo6"}, "text9": {"name": "Text9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text9"}, "text4": {"name": "Stage", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "BiologicalStage", "desc": null}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno7": {"name": "Yes No7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo7"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number26": {"name": "Number26", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number26"}, "text1": {"name": "Other ID #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "number10": {"name": "Number10", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number10"}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo4"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "text12": {"name": "Tissue Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Tissue type", "desc": "text12"}, "text13": {"name": "Text13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text13"}, "text10": {"name": "Preservation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Preservation", "desc": "text10"}, "number27": {"name": "Number27", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number27"}, "yesno5": {"name": "Yes No5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo5"}, "number12": {"name": "Number12", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number12"}, "text11": {"name": "Size", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text11"}, "number18": {"name": "Number18", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number18"}, "number19": {"name": "Number19", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number19"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "number38": {"name": "Number38", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number38"}, "number39": {"name": "Number39", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number39"}, "number36": {"name": "Number36", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number36"}, "number11": {"name": "Number11", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number11"}, "number34": {"name": "Number34", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number34"}, "number35": {"name": "Number35", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number35"}, "number14": {"name": "Number14", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number14"}, "number33": {"name": "Number33", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number33"}, "number16": {"name": "Number16", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number16"}, "number31": {"name": "Number31", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number31"}, "number6": {"name": "Number6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number6"}, "text3": {"name": "ReproCondition", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number4": {"name": "Number4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number4"}, "text14": {"name": "Text14", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text6": {"name": "SL", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "text7": {"name": "Total Length", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number15": {"name": "Number15", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number15"}, "text5": {"name": "TL", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "remarks": {"name": "Restriction/\\nPermission\\n/Notification", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "text8": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Sex", "desc": null}, "number17": {"name": "Number17", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number17"}, "number32": {"name": "Number32", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number32"}, "number8": {"name": "Number8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number8"}, "number9": {"name": "Number9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number9"}, "text2": {"name": "Weight", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "number7": {"name": "Number7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number7"}, "text15": {"name": "Text15", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text15"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}}, "type": null, "picklistname": null, "desc": "Collection Object attributes that were also available in Specify 5."}, "collection": {"name": "Collection", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"code": {"name": "Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Unique code for collection."}, "technicalcontacts": {"name": "Technical Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "technicalContacts"}, "institutiontype": {"name": "Institution Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "isembeddedcollectingevent": {"name": "Is Embedded Collecting Event", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Yes if collecting event is one-to-one relationship."}, "catalognumformatname": {"name": "Catalog Num Format Name", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of catalog number format the collection uses. "}, "websiteuri": {"name": "Web Site URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "webSiteURI"}, "isanumber": {"name": "ISA Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ISA number."}, "leftsidereltypes": {"name": "Left Side Rel Types", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": null}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "estimatedsize": {"name": "Estimated Size", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "rightsidereltypes": {"name": "Right Side Rel Types", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rightSideRelTypes"}, "usergroups": {"name": "User Groups", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "userGroups"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "picklists": {"name": "Pick Lists", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickLists"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "institutionnetwork": {"name": "Institution Network", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "institutionNetwork"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "kingdomcoverage": {"name": "Kingdom Coverage", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "scope": {"name": "Scope", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "primaryfocus": {"name": "Primary Focus", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "developmentstatus": {"name": "Development Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "collectionname": {"name": "Collection Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the collection."}, "description": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Textual description of collection."}, "dbcontentversion": {"name": "Db Content Version", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "regnumber": {"name": "Reg Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "regNumber"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "contentcontacts": {"name": "Content Contacts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contentContacts"}, "collectiontype": {"name": "Collection Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Textual description of collection. ABCD schema field."}, "webportaluri": {"name": "Web Portal URI", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "webPortalURI"}, "preptypes": {"name": "Prep Types", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "prepTypes"}, "numberingschemes": {"name": "Numbering Schemes", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "numberingSchemes"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "preservationmethodtype": {"name": "Preservation Method Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}, "primarypurpose": {"name": "Primary Purpose", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ABCD schema field."}}, "type": null, "picklistname": null, "desc": "A collection holds Collection Objects that are of the same discipline type."}, "address": {"name": "Address", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "positionheld": {"name": "Position Held", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The position held by the agent while at this address."}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The first date the the agent was at this address."}, "isshipping": {"name": "Is Shipping", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Indicates if this is the shipping address."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "state": {"name": "State", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The state within the country."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "typeofaddr": {"name": "Type Of Addr", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "TypeOfAddr", "desc": "typeOfAddr"}, "isprimary": {"name": "Is Primary", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "Indicates whether this is the primary address."}, "roomorbuilding": {"name": "Room/Building", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The room or building of the agent."}, "ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Allows multiple addresses to be ordered."}, "fax": {"name": "Fax", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The fax number."}, "phone1": {"name": "Phone1", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The primary phone number."}, "city": {"name": "City", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The city."}, "phone2": {"name": "Phone2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The secondary phone number."}, "address2": {"name": "Address2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Second line of address (optional)."}, "address3": {"name": "Address3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address3"}, "address4": {"name": "Address4", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address4"}, "address5": {"name": "Address5", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "address5"}, "postalcode": {"name": "Postal Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Postal code (Zip Code)."}, "address": {"name": "Address", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Address as it should appear on mailing labels."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "divisions": {"name": "Divisions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "divisions"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The last date the agent was at the address."}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The country."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "iscurrent": {"name": "Is Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Indicates if this is the current address."}, "insitutions": {"name": "Insitutions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "insitutions"}}, "type": null, "picklistname": null, "desc": "The address of an Agent. This also captures a start and end date for the address and the position held while at the address."}, "collectionobjectattachment": {"name": "Collection Object Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order in the attachment list."}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "An attachment for a collection object and provides order."}, "spexportschemaitem": {"name": "Sp Export Schema Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"splocalecontaineritem": {"name": "Sp Locale Container Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spLocaleContainerItem"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "spexportschema": {"name": "Sp Export Schema", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchema"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "datatype": {"name": "Data Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dataType"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "formatter": {"name": "Formatter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "formatter"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "spauditlogfield": {"name": "Sp Audit Log Field", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spauditlog": {"name": "Sp Audit Log", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAuditLog"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "oldvalue": {"name": "Old Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "oldValue"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}, "newvalue": {"name": "New Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "newValue"}}, "type": null, "picklistname": null, "desc": "spauditlogfield"}, "loanreturnpreparation": {"name": "Loan Return Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "quantityresolved": {"name": "Quantity Resolved", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Number of specimens returned, deaccessioned or otherwise accounted for. (necessary for Lots)."}, "loanpreparation": {"name": "Loan Preparation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Preparation being loaned."}, "deaccessionpreparation": {"name": "Deaccession Preparation", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "ID of associated (if present) Deaccession Physical Object record."}, "returneddate": {"name": "Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of return."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "receivedby": {"name": "Received By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Person processing the loan return."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "quantityreturned": {"name": "Quantity Returned", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Number of specimens returned. (necessary for Lots)."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "This is used for tracking a returned Preparation for a loan."}, "conservdescription": {"name": "Conservator Description", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"height": {"name": "Height", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The height of the object."}, "objlength": {"name": "Object Length", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The length of the object."}, "backgroundinfo": {"name": "Background Info", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Any background information on the object."}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "source"}, "conservdescriptionattachments": {"name": "Conserv Description Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservDescriptionAttachments"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "width": {"name": "Width", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "The width of the object."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "displayrecommendations": {"name": "Display Recommendations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "displayRecommendations"}, "units": {"name": "Units", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The units for the measurements (`feet` or `meters`)."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "composition": {"name": "Composition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "composition"}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "division"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "description"}, "lightrecommendations": {"name": "Light Recommendations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lightRecommendations"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "otherrecommendations": {"name": "Other Recommendations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "otherRecommendations"}, "events": {"name": "Events", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "events"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The Collection Object that the description describes."}, "shortdesc": {"name": "Short Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A short description of the object."}}, "type": null, "picklistname": null, "desc": "Describes an object that has participated in a Conservator action. There is only one of these for each Collection Object."}, "spqueryfield": {"name": "Sp Query Field", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"contexttableident": {"name": "Context Table Ident", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contextTableIdent"}, "isnot": {"name": "Is Not", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isNot"}, "query": {"name": "Query", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "query"}, "operend": {"name": "Oper End", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "operEnd"}, "startvalue": {"name": "Start Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startValue"}, "isprompt": {"name": "Is Prompt", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPrompt"}, "mappings": {"name": "Mappings", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mappings"}, "operstart": {"name": "Oper Start", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "operStart"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "isdisplay": {"name": "Is Display", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isDisplay"}, "tablelist": {"name": "Table List", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableList"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "formatname": {"name": "Format Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "formatName"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "endvalue": {"name": "End Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endValue"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "alwaysfilter": {"name": "Always Filter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "alwaysFilter"}, "stringid": {"name": "String Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "stringId"}, "allownulls": {"name": "Allow Nulls", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "allowNulls"}, "columnalias": {"name": "Column Alias", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "columnAlias"}, "sorttype": {"name": "Sort Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sortType"}, "isrelfld": {"name": "Is Rel Fld", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isRelFld"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldName"}, "position": {"name": "Position", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "position"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a single field in a saved Query."}, "collectionrelationship": {"name": "Collection Relationship", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "rightside": {"name": "Right Side", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "rightSide"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "collectionreltype": {"name": "Collection Rel Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionRelType"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "leftside": {"name": "Left Side", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "leftSide"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Enables two collection objects to refer to each other, for example, voucher and tissue."}, "splocalecontainer": {"name": "Locale Container", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "issystem": {"name": "Is System", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isSystem"}, "aggregator": {"name": "Aggregator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "aggregator"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "descs": {"name": "Descs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "descs"}, "defaultui": {"name": "Default U I", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "defaultUI"}, "items": {"name": "Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "items"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "format": {"name": "Format", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "format"}, "picklistname": {"name": "Pick List Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickListName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "names": {"name": "Names", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "names"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "type"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "schematype": {"name": "Schema Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The type of schema it belongs to: the core schema or the workbench schema"}, "ishidden": {"name": "Is Hidden", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isHidden"}, "isuiformatter": {"name": "Is U I Formatter", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isUIFormatter"}}, "type": null, "picklistname": null, "desc": "System Table: This is used for localizing the database schema it has a localized name and description but can also contain localizable items."}, "agentattachment": {"name": "Agent Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "This allows the attachments to be ordered."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "This table can be used for a picture of the agent or anything else used to further describe the agent."}, "permit": {"name": "Permit", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"accessionauthorizations": {"name": "Accession Authorizations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "accessionAuthorizations"}, "permitnumber": {"name": "Permit Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Identifier for the permit"}, "issuedby": {"name": "Issued By", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "issuedBy"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date permit becomes effective"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "type": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "PermitType", "desc": "Permit category - `CITES`, `Migratory Bird Treaty Act`, ..."}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "permitattachments": {"name": "Permit Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "permitAttachments"}, "issueddate": {"name": "Issued Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date permit was issued"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date permit expires"}, "issuedto": {"name": "Issued To", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "issuedTo"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "renewaldate": {"name": "Renewal Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date of renewal"}}, "type": null, "picklistname": null, "desc": "The permit transaction window is designed to hold information linked to legal paperwork \nfor permission from a government agency to collect a specimen or specimens. \nPreparation: A subdivision of a collection object that refers to the preparation method."}, "preptype": {"name": "Preparation Type", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "attributedefs": {"name": "Attribute Defs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "attributeDefs"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isloanable": {"name": "Is Loanable", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isLoanable"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "Describe a Preparation Type. For example, Cleared and Stained, Mounted, etc."}, "loan": {"name": "Loan", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"loanagents": {"name": "Loan Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanAgents"}, "overduenotisentdate": {"name": "Overdue Noti Sent Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "overdueNotiSentDate"}, "receivedcomments": {"name": "Received Comments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "receivedComments"}, "loandate": {"name": "Loan Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the Loan was created."}, "dateclosed": {"name": "Date Closed", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date loan was closed."}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "purposeofloan": {"name": "Purpose Of Loan", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "purposeOfLoan"}, "loannumber": {"name": "Loan Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A field that contains a record of the loan number and which is automatically incremented when a loan is made. "}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "loanattachments": {"name": "Loan Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanAttachments"}, "loanpreparations": {"name": "Loan Preparations", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "Preparations included in the loan."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno1": {"name": "Extension Granted", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "shipments": {"name": "Shipments", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToMany", "picklistname": null, "desc": "Link to Shipments table."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "currentduedate": {"name": "Due Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the loan is due for return (Same as original Due date unless loan period has been extended)."}, "text2": {"name": "Institution", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Student", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Gen Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "specialconditions": {"name": "Special Conditions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specialConditions"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "isclosed": {"name": "Is Closed", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "'No' until all preparations in the loan have been returned/resolved."}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateReceived"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "isfinancialresponsibility": {"name": "Is Financial Responsibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFinancialResponsibility"}, "originalduedate": {"name": "Orig Due Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the loan was originally due."}}, "type": null, "picklistname": null, "desc": "A group of specimens that another institution borrows from your collection. Specify lets you manage all aspects of loans electronically, so that you always have an up-to-date record of which specimen have been loaned and which have been returned."}, "deaccessionpreparation": {"name": "Deaccession Preparation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"deaccession": {"name": "Deaccession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "deaccession"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "loanreturnpreparations": {"name": "Loan Return Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanReturnPreparations"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The number of items deaccessioned"}}, "type": null, "picklistname": null, "desc": "The preparation that was deaccessioned."}, "giftattachment": {"name": "Gift Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "giftattachment"}, "fieldnotebook": {"name": "Field Notebook", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDate"}, "pagesets": {"name": "Page Sets", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pageSets"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDate"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "owneragent": {"name": "Owner", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ownerAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "location": {"name": "Location", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "location"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}}, "type": null, "picklistname": null, "desc": "Describes a physical Field NoteBook."}, "exsiccataitem": {"name": "Exsiccata Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number": {"name": "Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The list number of the collection object within the exsiccata"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "exsiccata": {"name": "Exsiccata", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The exsiccata to which the collection object belongs"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fascicle": {"name": "Fascicle", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The fascicle number"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "exsiccataitem"}, "fieldnotebookpageset": {"name": "Field Notebook Page Set", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDate"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDate"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "orderNumber"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "method": {"name": "Method", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "method"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "fieldnotebook": {"name": "Field Notebook", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebook"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "sourceagent": {"name": "Source Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sourceAgent"}, "pages": {"name": "Pages", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pages"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}}, "type": null, "picklistname": null, "desc": "Describes a set of Field Note Book pages. This can be used to group pages together that were scanned in together."}, "workbenchtemplatemappingitem": {"name": "WorkBench Template Mapping Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"isincludedintitle": {"name": "Is Included In Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isIncludedInTitle"}, "ycoord": {"name": "Y Coordinate", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "yCoord"}, "caption": {"name": "Caption", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "caption"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "srctableid": {"name": "Source Table Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "srcTableId"}, "tablename": {"name": "Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "tableName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "importedcolname": {"name": "Imported Column Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "importedColName"}, "fieldname": {"name": "Field Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fieldName"}, "metadata": {"name": "Metadata", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "metaData"}, "isexportabletocontent": {"name": "Is Exportable To Content", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isExportableToContent"}, "datafieldlength": {"name": "Data Field Length", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "dataFieldLength"}, "xcoord": {"name": "X Coordinate", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "xCoord"}, "workbenchdataitems": {"name": "Workbench Data Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchDataItems"}, "carryforward": {"name": "Carry Forward", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "carryForward"}, "iseditable": {"name": "Is Editable", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isEditable"}, "origimportcolumnindex": {"name": "Original Import Column Index", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "origImportColumnIndex"}, "vieworder": {"name": "View Order", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "viewOrder"}, "workbenchtemplate": {"name": "Workbench Template", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchTemplate"}, "isrequired": {"name": "Is Required", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isRequired"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fieldtype": {"name": "Field Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "fieldType"}}, "type": null, "picklistname": null, "desc": "One column of the mapped description."}, "accessionauthorization": {"name": "Accession Authorization", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "accession"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "permit": {"name": "Permit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "permit"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "This represents the person authorizing the Accession. It references an existing Agent."}, "localitydetail": {"name": "Locality Detail", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"sectionpart": {"name": "Section Part", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sectionPart"}, "enddepth": {"name": "End Depth", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDepth"}, "utmoriglongitude": {"name": "UTM Orig Longitude", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmOrigLongitude"}, "mgrszone": {"name": "Mgrs Zone", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "mgrsZone"}, "utmfalsenorthing": {"name": "UTM False Northing", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmFalseNorthing"}, "rangedirection": {"name": "Range Direction", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rangeDirection"}, "waterbody": {"name": "Water Body", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "waterBody"}, "startdepthunit": {"name": "Start Depth Unit", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDepthUnit"}, "startdepthverbatim": {"name": "Start Depth Verbatim", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDepthVerbatim"}, "enddepthverbatim": {"name": "End Depth Verbatim", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDepthVerbatim"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "locality"}, "section": {"name": "Sec", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "section"}, "utmeasting": {"name": "UTM Easting", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmEasting"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "utmfalseeasting": {"name": "UTM False Easting", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmFalseEasting"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "utmnorthing": {"name": "UTM Northing", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmNorthing"}, "islandgroup": {"name": "Island Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "islandGroup"}, "townshipdirection": {"name": "Township Direction", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "townshipDirection"}, "drainage": {"name": "Drainage", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "drainage"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "utmzone": {"name": "UTM Zone", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmZone"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "utmdatum": {"name": "UTM Datum", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmDatum"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "township": {"name": "twn", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "township"}, "basemeridian": {"name": "Base Meridian", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "baseMeridian"}, "huccode": {"name": "HUC Code", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "hucCode"}, "enddepthunit": {"name": "End Depth Unit", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "endDepthUnit"}, "island": {"name": "Island", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "island"}, "gml": {"name": "Gml", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gml"}, "startdepth": {"name": "Start Depth", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "startDepth"}, "utmscale": {"name": "UTM Scale", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmScale"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "rangedesc": {"name": "Rng", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "rangeDesc"}, "utmoriglatitude": {"name": "UTM Orig Latitude", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "utmOrigLatitude"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "nationalparkname": {"name": "National Park Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "nationalParkName"}}, "type": null, "picklistname": null, "desc": "Describes additional Locality detail. For example, water body and island information. Includes UTM fields."}, "taxontreedef": {"name": "Taxon Tree Definition", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "fullnamedirection": {"name": "Full Name Direction", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "fullNameDirection"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "treedefitems": {"name": "Tree Def Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeDefItems"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Defines the levels of the tree."}, "inforequest": {"name": "Information Request", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "requestdate": {"name": "Request Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "requestDate"}, "firstname": {"name": "First Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "firstName"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "lastname": {"name": "Last Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "lastName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "email": {"name": "Email", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Email of agent requesting the information."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "recordsets": {"name": "Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordSets"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "replydate": {"name": "Reply Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "replyDate"}, "inforeqnumber": {"name": "Info Req Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Number of Information Request."}, "institution": {"name": "Institution", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "institution"}}, "type": null, "picklistname": null, "desc": "Describes a request for information of a collection and refers to a Bundle of Collection Objects."}, "borrowreturnmaterial": {"name": "Borrow Return Material", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "returneddate": {"name": "Returned Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date the material was returned."}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "borrowmaterial": {"name": "Borrow Material", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Borrowed preparation returned."}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Quantity of preparations returned."}}, "type": null, "picklistname": null, "desc": "Describes the material that was returned."}, "workbenchdataitem": {"name": "WorkBench Data Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbenchtemplatemappingitem": {"name": "Workbench Template Mapping Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchTemplateMappingItem"}, "workbenchrow": {"name": "Workbench Row", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "workbenchRow"}, "celldata": {"name": "Cell Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "cellData"}, "rownumber": {"name": "Row Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "rowNumber"}, "validationstatus": {"name": "Validation Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "validationStatus"}}, "type": null, "picklistname": null, "desc": "A cell of data."}, "spvisualquery": {"name": "Sp Visual Query", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "polygons": {"name": "Polygons", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "polygons"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}}, "type": null, "picklistname": null, "desc": "spvisualquery"}, "dnasequence": {"name": "DNA Sequence", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "boldtranslationmatrix": {"name": "Bold Translation Matrix", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldTranslationMatrix"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "targetmarker": {"name": "Target Marker", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "targetMarker"}, "sequencer": {"name": "Sequencer", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequencer"}, "genbankaccessionnumber": {"name": "Genbank Accession Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "genbankAccessionNumber"}, "dnasequencingruns": {"name": "Dna Sequencing Runs", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequencingRuns"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "genesequence": {"name": "Gene Sequence", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": "Genbank", "type": null, "picklistname": null, "desc": "The actual sequence"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "boldsampleid": {"name": "BOLD Sample Id", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldSampleId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "compc": {"name": "Comp C", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compC"}, "compa": {"name": "Comp A", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compA"}, "compg": {"name": "Comp G", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compG"}, "boldlastupdatedate": {"name": "BOLD Last Update", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldLastUpdateDate"}, "ambiguousresidues": {"name": "Ambiguous", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ambiguousResidues"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}, "compt": {"name": "Comp T", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "compT"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "boldbarcodeid": {"name": "BOLD Barcode Id", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "boldBarcodeId"}, "moleculetype": {"name": "Molecule Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "Molecule Type", "desc": "moleculeType"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "totalresidues": {"name": "Total Residues", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "totalResidues"}}, "type": null, "picklistname": null, "desc": "Tracks DNA Sequencing information for a Collection Object."}, "collectionobjectattr": {"name": "Collection Object Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dblvalue": {"name": "Double Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "dblValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "strvalue": {"name": "String Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "strValue"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Extensible attributes introduced for Specify 6."}, "workbenchrow": {"name": "Workbench Row", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbench": {"name": "Workbench", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The workbench this row is associated with"}, "cardimagedata": {"name": "Card Image Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "A single image attached to the row"}, "cardimagefullpath": {"name": "Card Image Full Path", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The full path of the image"}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "biogeomancerresults": {"name": "Bio Geomancer Results", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The XML returned from Bio Geomancer"}, "long1text": {"name": "Long1 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "long1Text"}, "long2text": {"name": "Long2 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "long2Text"}, "rownumber": {"name": "Row Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "The row number"}, "lat1text": {"name": "Lat1 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lat1Text"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}, "lat2text": {"name": "Lat2 Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lat2Text"}, "workbenchrowexportedrelationships": {"name": "Workbench Row Exported Relationships", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "workbenchRowExportedRelationships"}, "workbenchdataitems": {"name": "Workbench Data Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "The data items associated wirth this row"}, "uploadstatus": {"name": "Upload Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "uploadStatus"}, "workbenchrowimages": {"name": "Workbench Row Images", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "The list of images associated with this row."}}, "type": null, "picklistname": null, "desc": "A row of data."}, "attachmentmetadata": {"name": "Attachment Metadata", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The name of the metadata field."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "value": {"name": "Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The value of the metadata field."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "This holds metadata about the attachment. It is a set of named value pairs."}, "spreport": {"name": "Sp Report", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"repeatfield": {"name": "Repeat Field", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repeatField"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "appresource": {"name": "App Resource", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appResource"}, "repeatcount": {"name": "Repeat Count", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "repeatCount"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "workbenchtemplate": {"name": "Workbench Template", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "workbenchTemplate"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "query": {"name": "Query", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "query"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a saved Report."}, "treatmentevent": {"name": "Treatment Event", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "datecompleted": {"name": "Date Completed", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateCompleted"}, "datetreatmentstarted": {"name": "Start Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateTreatmentStarted"}, "dateboxed": {"name": "Date Boxed", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateBoxed"}, "datecleaned": {"name": "Date Cleaned", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateCleaned"}, "treatmentnumber": {"name": "Treat Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "treatmentNumber"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accession"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "datereceived": {"name": "Date Received", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateReceived"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "location": {"name": "Location", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "location"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "fieldnumber": {"name": "Field Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNumber"}, "datetoisolation": {"name": "Date To Isolation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateToIsolation"}, "type": {"name": "Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "TreatmentType", "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "datetreatmentended": {"name": "End Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateTreatmentEnded"}}, "type": null, "picklistname": null, "desc": "An action that occurrs to a Conservation Description."}, "spappresourcedir": {"name": "App Resource Default", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "discipline"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "disciplinetype": {"name": "Discipline Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "disciplineType"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "sppersistedappresources": {"name": "Sp Persisted App Resources", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spPersistedAppResources"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "usertype": {"name": "User Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "userType"}, "ispersonal": {"name": "Is Personal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPersonal"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "sppersistedviewsets": {"name": "Sp Persisted View Sets", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spPersistedViewSets"}}, "type": null, "picklistname": null, "desc": "System Table: the default for application resources."}, "project": {"name": "Project", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"projectdescription": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of project"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "grantagency": {"name": "Grant Agency", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "grantAgency"}, "startdate": {"name": "Start Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date project began"}, "projectname": {"name": "Project Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Name of the project"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "projectnumber": {"name": "Project Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "projectNumber"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "enddate": {"name": "End Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date project ended"}, "url": {"name": "URL", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "URL for project"}, "grantnumber": {"name": "Grant Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "grantNumber"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes a grouping of Collection Objects."}, "exchangeinprep": {"name": "Exchange In Prep", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "exchangein": {"name": "Exchange In", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeIn"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "comments": {"name": "Comments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "comments"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparation"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "descriptionofmaterial": {"name": "Description Of Material", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "descriptionOfMaterial"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "quantity"}}, "type": null, "picklistname": null, "desc": "exchangeinprep"}, "fieldnotebookpage": {"name": "Field Notebook Page", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "pagenumber": {"name": "Page Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pageNumber"}, "pageset": {"name": "Page Set", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pageSet"}, "scandate": {"name": "Scan Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scanDate"}}, "type": null, "picklistname": null, "desc": "Describes a page from a Field Note Book."}, "determination": {"name": "Determination", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"typestatusname": {"name": "Type Status", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "TypeStatus", "desc": "A pick list of all available type designations; Holotype, Paratype, Neotype. Specify ships with predetermined values which are editable for users."}, "determinationcitations": {"name": "Determination Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "determinationCitations"}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The determined name of the specimen."}, "subspqualifier": {"name": "Sub Sp Qualifier", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "subSpQualifier"}, "preferredtaxon": {"name": "Preferred Taxon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preferredTaxon"}, "confidence": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "DeterminationConfidence", "desc": "Confidence of determination."}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Link to lookup table for Method."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno1": {"name": "In Question", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "alternatename": {"name": "Alternate Name", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "A free text field for insertion of a name (scientific or common) not recognized in the taxon tree authority. This field operates as an ?either/or? condition with Preferred Taxon; both cannot be entered in a single Determination."}, "method": {"name": "Method", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Taxonomic tools and information on which a determination is based. These include professional expertise, published taxonomic keys, molecular DNA, or comparisons with previously cataloged specimens."}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "qualifier": {"name": "Qualifier", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "A term to qualify the identification of the taxon name when doubts have arisen as to its identity or as a comparison to a given name (e.g. \"cf.\" or \"aff.\")."}, "text2": {"name": "Sex", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Size", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "determineddate": {"name": "Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "The date it was determined."}, "featureorbasis": {"name": "Feature Or Basis", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Body part, or characteristic used as the basis of a determination."}, "determiner": {"name": "Determiner", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Individual who assigned or made the decision regarding the taxonomic name of specimen. In some instances, determiner may be an organization or institute. In Specify, determiner information is stored in the Agent table."}, "varqualifier": {"name": "Var Qualifier", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "varQualifier"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "iscurrent": {"name": "Current", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Yes if the determination is considered the 'best' (maybe even one of the better)."}, "addendum": {"name": "Addendum", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "A Pick List suffix element added to the taxon name to indicate a concept or citation for that name. For example; sensu lato."}, "determineddateprecision": {"name": "Determined Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "determinedDatePrecision"}, "nameusage": {"name": "Name Usage", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "NameUsages", "desc": "User customizable pick list used to describe the context of the name entered into the taxon or Alternate name fields. "}}, "type": null, "picklistname": null, "desc": "The determination of the collection object."}, "deaccession": {"name": "Deaccession", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "deaccessionnumber": {"name": "Deaccession Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Name institution assigns to the deaccession"}, "deaccessiondate": {"name": "Deaccession Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "deaccessionDate"}, "deaccessionagents": {"name": "Deaccession Agents", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "deaccessionAgents"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accession"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of the Type of deaccession; i.e. Gift, disposal, lost"}, "deaccessionpreparations": {"name": "Deaccession Preparations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "deaccessionPreparations"}}, "type": null, "picklistname": null, "desc": "Removal of a biological object (specimen, observation, or preparation type) from the collection. Deaccessions may include loans to other collections that are subsequently given to the borrower, lost specimens, and specimens that are destroyed."}, "spquery": {"name": "Sp Query", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "countonly": {"name": "Count Only", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "countOnly"}, "contextname": {"name": "Context Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contextName"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "isfavorite": {"name": "Is Favorite", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isFavorite"}, "fields": {"name": "Fields", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fields"}, "searchsynonymy": {"name": "Search Synonymy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "searchSynonymy"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "reports": {"name": "Reports", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "reports"}, "selectdistinct": {"name": "Select Distinct", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "selectDistinct"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "contexttableid": {"name": "Context Table Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "contextTableId"}, "sqlstr": {"name": "Sql Str", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sqlStr"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a saved Query."}, "preparationattribute": {"name": "Preparation Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"text21": {"name": "Text21", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text21"}, "text20": {"name": "Text20", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text20"}, "text23": {"name": "Text23", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text23"}, "text22": {"name": "Text22", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text22"}, "text25": {"name": "Text25", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text25"}, "text24": {"name": "Text24", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text24"}, "text26": {"name": "Text26", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text26"}, "text14": {"name": "Text14", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text14"}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo4"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "text17": {"name": "Text17", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text17"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "text15": {"name": "Text15", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text15"}, "text16": {"name": "Text16", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text16"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "attrdate": {"name": "Attr Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attrDate"}, "text13": {"name": "Text13", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text13"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text18": {"name": "Text18", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text18"}, "text19": {"name": "Text19", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text19"}, "text11": {"name": "Text11", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text11"}, "text5": {"name": "Text5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text5"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "text12": {"name": "Text12", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text12"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "text10": {"name": "Text10", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text10"}, "preparations": {"name": "Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparations"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text3": {"name": "Text3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "number4": {"name": "Number4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number4"}, "number5": {"name": "Number5", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number5"}, "text6": {"name": "Text6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text6"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}, "text4": {"name": "Text4", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text4"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "text8": {"name": "Text8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text8"}, "text9": {"name": "Text9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text9"}, "number8": {"name": "Number8", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number8"}, "number9": {"name": "Number9", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number9"}, "number6": {"name": "Number6", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number6"}, "number7": {"name": "Number7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number7"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "text7": {"name": "Text7", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text7"}}, "type": null, "picklistname": null, "desc": "Preparation attributes that were also available in Specify 5."}, "taxontreedefitem": {"name": "Taxon Tree Definition Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"treeentries": {"name": "Tree Entries", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "treeEntries"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "formattoken": {"name": "Format Token", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "formatToken"}, "textafter": {"name": "Text After", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "treedef": {"name": "Tree Def", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "treeDef"}, "isinfullname": {"name": "Is In Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isInFullName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "isenforced": {"name": "Is Enforced", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isEnforced"}, "fullnameseparator": {"name": "Full Name Separator", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullNameSeparator"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "textbefore": {"name": "Text Before", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}}, "type": null, "picklistname": null, "desc": "Describes a level in the definition of the tree."}, "fieldnotebookattachment": {"name": "Field Notebook Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "fieldnotebook": {"name": "Field Notebook", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebook"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "sppermission": {"name": "Sp Permission", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"permissionclass": {"name": "Permission Class", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "permissionClass"}, "principals": {"name": "Principals", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "principals"}, "targetid": {"name": "Target Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "targetId"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "actions": {"name": "Actions", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "actions"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "agentvariant": {"name": "Agent Variant", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "THe full name used as a variant or vernacular name."}, "language": {"name": "Language", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "International character code for language as it pertains to the agent variant."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Country of variant or vernacular name."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "variant": {"name": "Variant", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "variant"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "vartype": {"name": "Var Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Byte", "picklistname": "AgentVariant", "desc": "Indicates whether the record is a variant (0) or a vernacular name (1)."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "This is primarily used by Botanists for capturing Variant and Vernacular names. This table is searchable but does not have any specific business rules associated with it."}, "workbenchtemplate": {"name": "WorkBench Template", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"workbenchtemplatemappingitems": {"name": "Workbench Template Mapping Items", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchTemplateMappingItems"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "specifyUser"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "workbenches": {"name": "Workbenches", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenches"}, "srcfilepath": {"name": "Source File Path", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "srcFilePath"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "The mapping description of the WorkBench."}, "spprincipal": {"name": "Sp Principal", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"grouptype": {"name": "Group Type", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "groupType"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}, "specifyusers": {"name": "Specify Users", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUsers"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "groupsubclass": {"name": "Group Sub Class", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "groupSubClass"}, "priority": {"name": "Priority", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "priority"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "scope": {"name": "Scope", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scope"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "permissions": {"name": "Permissions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "permissions"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "workbenchrowimage": {"name": "Workbench Row Image", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"attachtotablename": {"name": "Attach To Table Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachToTableName"}, "workbenchrow": {"name": "Workbench Row", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "The row the image is attached to"}, "cardimagedata": {"name": "Card Image Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "The thumbnail data"}, "cardimagefullpath": {"name": "Card Image Full Path", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The full path to the image"}, "imageorder": {"name": "Image Order", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The position in the list of images"}}, "type": null, "picklistname": null, "desc": "An image associated with a row."}, "preparation": {"name": "Preparation", "format": "Preparation", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": "Preparation", "items": {"storagelocation": {"name": "Storage Location", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "storageLocation"}, "storage": {"name": "Storage", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "storage"}, "prepareddate": {"name": "Prepared Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "preparedDate"}, "exchangeoutpreps": {"name": "Exchange Out Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOutPreps"}, "preparedbyagent": {"name": "Prepared By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparedByAgent"}, "giftpreparations": {"name": "Gift Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "giftPreparations"}, "collectionobject": {"name": "Collection Object", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObject"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "loanpreparations": {"name": "Loan Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "loanPreparations"}, "preparationattrs": {"name": "Preparation Attrs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttrs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "yesno1": {"name": "Used Up?", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "samplenumber": {"name": "Sample Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sampleNumber"}, "status": {"name": "Status", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "status"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "description": {"name": "Inventory", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "preparationattachments": {"name": "Preparation Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparationAttachments"}, "text2": {"name": "File or URL link", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Storage", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number of Tubes", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "preparationattribute": {"name": "Preparation Attribute", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparationAttribute"}, "countamt": {"name": "Count", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Number of items"}, "prepareddateprecision": {"name": "Prepared Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparedDatePrecision"}, "exchangeinpreps": {"name": "Exchange In Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeInPreps"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "preptype": {"name": "Object Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": "PrepType", "desc": "prepType"}, "deaccessionpreparations": {"name": "Deaccession Preparations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "deaccessionPreparations"}}, "type": null, "picklistname": null, "desc": "Preparation information describes the physical status of a specimen and its storage media. \nSpecify provides an extensive array of utilities for curatorial management of specimen preparations.\n"}, "taxonattachment": {"name": "Taxon Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "taxon"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "permitattachment": {"name": "Permit Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "permit": {"name": "Permit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "permit"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "localitynamealias": {"name": "Locality Name Alias", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The alias for the locality name."}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "source": {"name": "Source", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The source of the alias."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes additional names for a given Locaity."}, "appraisal": {"name": "Appraisal", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"appraisaldate": {"name": "Appraisal Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Date of the appraisal."}, "monetaryunittype": {"name": "Monetary Unit Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Type of monetary unit."}, "collectionobjects": {"name": "Collection Objects", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionObjects"}, "notes": {"name": "Notes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Additional comments."}, "accession": {"name": "Accession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accession"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "appraisalvalue": {"name": "Appraisal Value", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Monetary value of the appraisal."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "appraisalnumber": {"name": "Appraisal Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Unique number for the appraisal."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "The monetary appraisal of an Acession or Collection Object"}, "conserveventattachment": {"name": "Conservator Event Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The order or position"}, "conservevent": {"name": "Conserv Event", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "conservEvent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "specifyuser": {"name": "Specify User", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spappresources": {"name": "App Resources", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "spAppResources"}, "isloggedinreport": {"name": "Is Logged In Report", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isLoggedInReport"}, "loginouttime": {"name": "Login Out Time", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loginOutTime"}, "spprincipals": {"name": "Sp Principals", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spPrincipals"}, "spquerys": {"name": "Sp Querys", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spQuerys"}, "agents": {"name": "Agents", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agents"}, "logincollectionname": {"name": "Login Collection Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loginCollectionName"}, "accumminloggedin": {"name": "Accumulated Minutes Logged In", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "accumMinLoggedIn"}, "isloggedin": {"name": "Is Logged In", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isLoggedIn"}, "tasksemaphores": {"name": "Task Semaphores", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "taskSemaphores"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "spappresourcedirs": {"name": "Sp App Resource Dirs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAppResourceDirs"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "workbenches": {"name": "Workbenches", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenches"}, "email": {"name": "Email", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "email"}, "workbenchtemplates": {"name": "Workbench Templates", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "workbenchTemplates"}, "password": {"name": "Password", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "password"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "logindisciplinename": {"name": "Login Discipline Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "loginDisciplineName"}, "usertype": {"name": "User Group", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "userType"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "System Table: This represents Specify User within the application."}, "commonnametx": {"name": "Common Name", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "language": {"name": "Language", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The language code."}, "author": {"name": "Author", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "author"}, "country": {"name": "Country", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The country code."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "variant": {"name": "Variant", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The variant code of the language."}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "taxon"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "citations": {"name": "Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "citations"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes a common name and the localization of the name. This table is used to describe additional Common Names in other languages."}, "fundingagent": {"name": "Funding Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "orderNumber"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "collectingtrip": {"name": "Collecting Trip", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectingTrip"}, "isprimary": {"name": "Is Primary", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPrimary"}, "type": {"name": "Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "type"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "fundingagent"}, "dnasequencingruncitation": {"name": "D N A Sequencing Run Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "sequencingrun": {"name": "Sequencing Run", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequencingRun"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "referenceWork"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "dnasequencingruncitation"}, "agent": {"name": "Agent", "format": "Agent", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"dateofbirthprecision": {"name": "Date Of Birth Precision", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateOfBirthPrecision"}, "specifyuser": {"name": "Specify User", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "specifyUser"}, "addresses": {"name": "Addresses", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "addresses"}, "collectors": {"name": "Collectors", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectors"}, "middleinitial": {"name": "Middle Initial", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Middle initial of Person."}, "orgmembers": {"name": "Org Members", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "orgMembers"}, "abbreviation": {"name": "Abbreviation", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Abbreviation of organization."}, "guid": {"name": "GUID", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Global Unique Identifier."}, "datetype": {"name": "Date Type", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateType"}, "insttechcontact": {"name": "Inst Tech Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "instTechContact"}, "dateofdeath": {"name": "Date Of Death", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateOfDeath"}, "title": {"name": "Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "AgentTitles", "desc": "Title of Person."}, "jobtitle": {"name": "Job Title", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Agent`s (person) job title at specified address and organization."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dateofbirth": {"name": "Date Of Birth", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Date agent was born."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "email": {"name": "Email", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Email address for agent."}, "interests": {"name": "Org Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Interests of Person or Organization."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The division the agent belongs to (optional)."}, "firstname": {"name": "First Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "First name of agent."}, "lastname": {"name": "Last Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Last name of Person."}, "agenttype": {"name": "Agent Type", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Byte", "picklistname": null, "desc": "Discriminator between Organization(0), Person(1), Other(2), and Group(3)."}, "dateofdeathprecision": {"name": "Date Of Death Precision", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dateOfDeathPrecision"}, "colltechcontact": {"name": "Coll Tech Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collTechContact"}, "members": {"name": "Members", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "members"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "agentspecialties": {"name": "Agent Specialties", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agentSpecialties"}, "variants": {"name": "Variants", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "variants"}, "agentgeographies": {"name": "Agent Geographies", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agentGeographies"}, "collcontentcontact": {"name": "Coll Content Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collContentContact"}, "groups": {"name": "Groups", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "groups"}, "url": {"name": "Url", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "An URL for the web site of a Person or Group."}, "instcontentcontact": {"name": "Inst Content Contact", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "instContentContact"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "agentattachments": {"name": "Agent Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "agentAttachments"}, "organization": {"name": "Organization", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "organization"}, "initials": {"name": "Initials", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Initials of agent."}}, "type": null, "picklistname": null, "desc": "Contains information about people, groups, and organizations. Some roles for an agent include collector, determiner, preparer, cataloger, donor, issuer of permits, and so forth. "}, "spviewsetobj": {"name": "View Set Object", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"spappresourcedir": {"name": "Sp App Resource Dir", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spAppResourceDir"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "description"}, "level": {"name": "Level", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "level"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "filename": {"name": "File Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fileName"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "spappresourcedatas": {"name": "App Resource Datas", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "spAppResourceDatas"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "metadata": {"name": "Metadata", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "metaData"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}}, "type": null, "picklistname": null, "desc": "System Table: This represents a View Set used in the form system."}, "preparationattr": {"name": "Preparation Attribute", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "dblvalue": {"name": "Double Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "dblValue"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "strvalue": {"name": "String Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "strValue"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Extensible attributes introduced for Specify 6."}, "agentspecialty": {"name": "Agent Specialty", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"specialtyname": {"name": "Specialty Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The name of the field of specialization."}, "ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "The priority of specialization, for agents with primary and secondary areas of specialization."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "The Taxonomic specialty that a particular agent was known for."}, "giftagent": {"name": "Gift Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "gift": {"name": "Gift", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "gift"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": "LoanAgentRole", "desc": "role"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes the role the Agent played in the giving of a Gift."}, "loanagent": {"name": "Loan Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "loan": {"name": "Loan", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": ""}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "role": {"name": "Role", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "LoanAgentRole", "desc": "Role the agent played in the loan."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "An agent associated with a loan. Each agent includes the role played in the loan process."}, "spappresourcedata": {"name": "App Resource Data", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "spviewsetobj": {"name": "View Set Obj", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "spViewSetObj"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "data": {"name": "Data", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "data"}, "spappresource": {"name": "App Resource", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "spAppResource"}}, "type": null, "picklistname": null, "desc": "System Table: The data associated with an application resource."}, "taxoncitation": {"name": "Taxon Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "taxon": {"name": "Taxon", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "taxon"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Linkage from the Taxonomic record to a published document."}, "author": {"name": "Author", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordernumber": {"name": "Order Number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "the order of AgentID relative to other authors of reference."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "An Author is a reference to an Agent and provides the order for a list of authors of a Reference Work."}, "exchangein": {"name": "Exchange In", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"agentcatalogedby": {"name": "Cataloged By", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agentCatalogedBy"}, "agentreceivedfrom": {"name": "Received From", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agentReceivedFrom"}, "addressofrecord": {"name": "Address Of Record", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "addressOfRecord"}, "srcgeography": {"name": "Source Geography", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcGeography"}, "exchangedate": {"name": "Exchange Date", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date exchange was received."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "division": {"name": "Division", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "division"}, "quantityexchanged": {"name": "Quantity Exchanged", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Short", "picklistname": null, "desc": "Number of items received."}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "srctaxonomy": {"name": "Source Taxonomy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcTaxonomy"}, "exchangeinpreps": {"name": "Exchange In Preps", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeInPreps"}, "descriptionofmaterial": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Description of material."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Describes an incoming Exchanged Specimen from a different institution."}, "geologictimeperiod": {"name": "Chronostratigraphy", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"startperiod": {"name": "Start Period", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "startPeriod"}, "biostratspaleocontext": {"name": "Bio Strats Paleo Context", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "bioStratsPaleoContext"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "startuncertainty": {"name": "Start Uncertainty", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "startUncertainty"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "acceptedgeologictimeperiod": {"name": "Preferred Chronostratigraphy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedGeologicTimePeriod"}, "chronosstratspaleocontext": {"name": "Chronos Strats Paleo Context", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "chronosStratsPaleoContext"}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Numeric representation of Items rank in stratigraphic hierarchy."}, "standard": {"name": "Standard", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The system of Stratigraphy the record is included in."}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "enduncertainty": {"name": "End Uncertainty", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "endUncertainty"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "isbiostrat": {"name": "Is Biostratigraphy", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isBioStrat"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "endperiod": {"name": "End Period", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "endPeriod"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "Describes Chronostratigraphy."}, "storage": {"name": "Storage", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"children": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Definition Item", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "acceptedstorage": {"name": "Preferred Storage", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedStorage"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "abbrev": {"name": "Abbreviation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "abbrev"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "containers": {"name": "Containers", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "containers"}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "preparations": {"name": "Preparations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparations"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "User definable"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "timestampversion": {"name": "Timestamp Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Date", "picklistname": null, "desc": "timestampVersion"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "acceptedchildren": {"name": "Children", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "A tree data structure for describing where Collection Objects are physically stored."}, "accessionattachment": {"name": "Accession Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "Provides a sequencial order for the attachments."}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "accession": {"name": "Accession", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Miscellaneous files can be attached."}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "An attachment for the Accession. This may be one or more PDF files of paperwork or a photo of the Accession."}, "sptasksemaphore": {"name": "Sp Task Semaphore", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "usagecount": {"name": "Usage Count", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "usageCount"}, "machinename": {"name": "Machine Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "machineName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collection"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "islocked": {"name": "Is Locked", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isLocked"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "context": {"name": "Context", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "context"}, "scope": {"name": "Scope", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scope"}, "owner": {"name": "Owner", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "owner"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "taskname": {"name": "Task Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "taskName"}, "lockedtime": {"name": "Locked Time", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "lockedTime"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "deaccessionagent": {"name": "Deaccession Agent", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"deaccession": {"name": "Deaccession", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "deaccession"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "agent": {"name": "Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "agent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "role": {"name": "Role", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Role agent played in deaccession"}}, "type": null, "picklistname": null, "desc": "Refers to an agent and contains their role in the deaccession."}, "fieldnotebookpagesetattachment": {"name": "Field Notebook Page Set Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "fieldnotebookpageset": {"name": "Field Notebook Page Set", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPageSet"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "attachmenttag": {"name": "Attachment Tag", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "tag": {"name": "Tag", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of tag."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachment"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "An attribute tag of an attachment. This consists of a single text field for storing a tag. In later versions users will be allowed to search attachments by their tag. "}, "latlonpolygon": {"name": "Lat Lon Polygon", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"visualquery": {"name": "Visual Query", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "visualQuery"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "points": {"name": "Points", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "points"}, "ispolyline": {"name": "Is Polyline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "isPolyline"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "name"}}, "type": null, "picklistname": null, "desc": "latlonpolygon"}, "lithostrat": {"name": "Lithostratigraphy", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": true, "aggregator": null, "items": {"paleocontexts": {"name": "Paleo Contexts", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "paleoContexts"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "guid"}, "children": {"name": "Child Nodes", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "children"}, "highestchildnodenumber": {"name": "Highest Child Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "highestChildNodeNumber"}, "definitionitem": {"name": "Rank", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definitionItem"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "acceptedlithostrat": {"name": "Preferred Litho Strat", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedLithoStrat"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "nodenumber": {"name": "Node Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "nodeNumber"}, "parent": {"name": "Parent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parent"}, "rankid": {"name": "Rank Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "rankId"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "isaccepted": {"name": "Is Preferred", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "isAccepted"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "definition": {"name": "Definition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "definition"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "acceptedchildren": {"name": "Synonyms", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "acceptedChildren"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "fullname": {"name": "Full Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "fullName"}}, "type": null, "picklistname": null, "desc": "The Litho stratigraphy tree."}, "spauditlog": {"name": "Sp Audit Log", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"recordversion": {"name": "Record Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordVersion"}, "tablenum": {"name": "Table Num", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableNum"}, "recordid": {"name": "Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "recordId"}, "fields": {"name": "Fields", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fields"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "parentrecordid": {"name": "Parent Record Id", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parentRecordId"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "parenttablenum": {"name": "Parent Table Num", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "parentTableNum"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "action": {"name": "Action", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "action"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "spauditlog"}, "picklistitem": {"name": "Pick List Item", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "title": {"name": "Title", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "title"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "value": {"name": "Value", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "value"}, "picklist": {"name": "Pick List", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pickList"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "picklistitem"}, "repositoryagreementattachment": {"name": "Repository Agreement Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "repositoryagreement": {"name": "Repository Agreement", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "repositoryAgreement"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "loanattachment": {"name": "Loan Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "loan": {"name": "Loan", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "loan"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional comments."}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "preparationattachment": {"name": "Preparation Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "preparation"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "exchangeoutprep": {"name": "Exchange Out Prep", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "text2": {"name": "Text2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "exchangeout": {"name": "Exchange Out", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exchangeOut"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "comments": {"name": "Comments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "comments"}, "text1": {"name": "Text1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "preparation": {"name": "Preparation", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparation"}, "descriptionofmaterial": {"name": "Description Of Material", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "descriptionOfMaterial"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "quantity": {"name": "Quantity", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "quantity"}}, "type": null, "picklistname": null, "desc": "exchangeoutprep"}, "splocaleitemstr": {"name": "Locale Item String", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"containername": {"name": "Container Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containerName"}, "language": {"name": "Language", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "language"}, "itemdesc": {"name": "Item Desc", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "itemDesc"}, "country": {"name": "Country", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "country"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "containerdesc": {"name": "Container Desc", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "containerDesc"}, "variant": {"name": "Variant", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "variant"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}, "text": {"name": "Text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "text"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "itemname": {"name": "Item Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "itemName"}}, "type": null, "picklistname": null, "desc": "System Table: This is used for localizing the database schema it represents a string and also a Language, Country and Variant for that string."}, "datatype": {"name": "Data Type", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "A data type represents a core type of collection data."}, "locality": {"name": "Locality", "format": "Locality", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"localityattachments": {"name": "Locality Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityAttachments"}, "verbatimelevation": {"name": "Verbatim Elevation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The verbatim elevation including units as given in the field notes"}, "elevationaccuracy": {"name": "Elevation Accuracy", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "Plus or minus -- in meters."}, "datum": {"name": "Datum", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "GPS Datum."}, "guid": {"name": "GUID", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "guid"}, "geography": {"name": "Geography", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "Link to Country, State, County, WaterBody, Island, IslandGroup ... info."}, "discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "gml": {"name": "GML", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "gml"}, "latitude1": {"name": "Latitude1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Latitude of first point"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "latitude2": {"name": "Latitude2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Latitude of second point"}, "latlongmethod": {"name": "Lat/Long Method", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "LatLonMethod", "desc": "the method used to determine the Latitude, Longitude"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "localityname": {"name": "Locality Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The full name of the locality."}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "shortname": {"name": "Short Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "shortName"}, "minelevation": {"name": "Min Elevation", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "The minimum elevation in Meters"}, "namedplace": {"name": "Named Place", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The named place the locality is closest to"}, "originallatlongunit": {"name": "Original Latitude Longitude Unit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "i.e. Decimal, Deg/Min/Sec, ..."}, "localitydetails": {"name": "Locality Details", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "localityDetails"}, "maxelevation": {"name": "Max Elevation", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "The maximum elevation in Meters"}, "latlongtype": {"name": "Latitude/Longitude Type", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The type of area described by the Latitude Longitude data (Point, Line, Rectangle)"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "longitude2": {"name": "Longitude2", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Longitude of second point"}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "text2": {"name": "Field Notes LInk", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text1": {"name": "Locality Map Link", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "longitude1": {"name": "Longitude1", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.math.BigDecimal", "picklistname": null, "desc": "Longitude of first point"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "geocoorddetails": {"name": "Geo Coord Details", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geoCoordDetails"}, "long1text": {"name": "Long1text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Longitude1"}, "relationtonamedplace": {"name": "Relation To Named Place", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Relation of the locality to the named place"}, "localitycitations": {"name": "Locality Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityCitations"}, "srclatlongunit": {"name": "Src Lat Long Unit", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "srcLatLongUnit"}, "lat1text": {"name": "Lat1text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Latitude1"}, "long2text": {"name": "Long2text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Longitude2"}, "localitynamealiass": {"name": "Locality Name Alias", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "localityNameAliass"}, "originalelevationunit": {"name": "Original Elevation Unit", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "i.e. Meters, Feet, ..."}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "elevationmethod": {"name": "Water Type", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": "Water Type", "desc": "The method used to determine the elevation."}, "lat2text": {"name": "Lat2text", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User entry for Latitude2"}, "latlonpolygons": {"name": "Lat Lonpolygons", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "latLonpolygons"}, "latlongaccuracy": {"name": "Latitude/Longitude Accuracy", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Double", "picklistname": null, "desc": "radius -- in decimal degrees"}}, "type": null, "picklistname": null, "desc": "The name of the location where a specimen was collected or observed. Some taxonomic disciplines or collectors may use a locality name instead of a field number to associate a collecting event with a specimen. "}, "autonumberingscheme": {"name": "Auto Numbering Scheme", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"divisions": {"name": "Divisions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "divisions"}, "disciplines": {"name": "Disciplines", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "disciplines"}, "schemeclassname": {"name": "Scheme Class Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemeClassName"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "tablenumber": {"name": "Table Number", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "tableNumber"}, "formatname": {"name": "Format Name", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": ""}, "collections": {"name": "Collections", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collections"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "isnumericonly": {"name": "Is Numeric Only", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Yes if number scheme is only numeric."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "schemename": {"name": "Scheme Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Name of the scheme (sequence)."}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "This is an internal table used to group together parts of a collection with the same numbering scheme."}, "spexportschema": {"name": "Sp Export Schema", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "spexportschemamappings": {"name": "Sp Export Schema Mappings", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemaMappings"}, "description": {"name": "Description", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "description"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "spexportschemaitems": {"name": "Sp Export Schema Items", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "spExportSchemaItems"}, "schemaversion": {"name": "Schema Version", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemaVersion"}, "schemaname": {"name": "Schema Name", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "schemaName"}}, "type": null, "picklistname": null, "desc": "System Table: "}, "localityattachment": {"name": "Locality Attachment", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "ordinal"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampCreated"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "attachment": {"name": "Attachment", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "attachment"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "remarks"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "timestampModified"}}, "type": null, "picklistname": null, "desc": "Refers to an attachment and provides order."}, "localitycitation": {"name": "Locality Citation", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"discipline": {"name": "Discipline", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "discipline"}, "locality": {"name": "Locality", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "locality"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}, "referencework": {"name": "Reference Work", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "referenceWork"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}}, "type": null, "picklistname": null, "desc": "A join table to link a Locality to a Citation."}, "collectionobject": {"name": "Collection Object", "format": "CollectionObject", "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": "CollectionObject", "items": {"deaccessioned": {"name": "Deaccessioned", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "True if the object has been deaccessioned."}, "number1": {"name": "Number1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "accession": {"name": "Accession #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "accession"}, "leftsiderels": {"name": "Left Side Rels", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "leftSideRels"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "text", "picklistname": null, "desc": "Additional Comments."}, "catalogeddate": {"name": "Cat Date", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.util.Calendar", "picklistname": null, "desc": "Date the object was cataloged."}, "catalognumber": {"name": "Cat #", "format": "CatalogNumberNumeric", "isuiformatter": true, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The number that identifies an individual specimen, a lot of specimens, or an observation as a part of a museum collection. "}, "appraisal": {"name": "Appraisal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "appraisal"}, "conservdescriptions": {"name": "Conserv Descriptions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "conservDescriptions"}, "guid": {"name": "GUID", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Global Unique Identifier"}, "availability": {"name": "Availability", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "availability"}, "altcatalognumber": {"name": "Prev/Exch #", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Alternate Catalog Number."}, "determinations": {"name": "Determinations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": true, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "determinations"}, "preparations": {"name": "Preparations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": true, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "preparations"}, "sgrstatus": {"name": "Sgr Status", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sgrStatus"}, "modifiedbyagent": {"name": "Edited by", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "collectionobjectattachments": {"name": "Collection Object Attachments", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttachments"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was created."}, "yesno4": {"name": "Yes No4", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "yesno5": {"name": "Yes No5", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Boolean", "picklistname": null, "desc": "User definable."}, "fieldnumber": {"name": "Voucher Number", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "A unique number a collector assigns to each specimen at the time of collection. For example, botanists often keep a running count of the individual specimens they have collected (LKK1023, LKK1024, etc.). "}, "ocr": {"name": "Ocr", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ocr"}, "inventorydate": {"name": "Inventory Date", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "inventoryDate"}, "collectingevent": {"name": "Field No:Locality", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectingEvent"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "description": {"name": "Description", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "Image, Sound, Preparation, Container(Container Label?)."}, "timestampmodified": {"name": "Date Edited", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.sql.Timestamp", "picklistname": null, "desc": "The timestamp the record was last modified."}, "fieldnotebookpage": {"name": "Field Notebook Page", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "fieldNotebookPage"}, "collectionobjectattrs": {"name": "Collection Object Attrs", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectAttrs"}, "collection": {"name": "Collection", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collection"}, "text2": {"name": "Inventory", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "notifications": {"name": "Notifications", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "notifications"}, "collectionobjectattribute": {"name": "Col Obj Attribute", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": true, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "collectionObjectAttribute"}, "text1": {"name": "Other number", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "User definable."}, "number2": {"name": "Number2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Float", "picklistname": null, "desc": "User definable."}, "visibility": {"name": "Visibility", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "visibility"}, "rightsiderels": {"name": "Right Side Rels", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "rightSideRels"}, "dnasequences": {"name": "DNA Sequences", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequences"}, "paleocontext": {"name": "Paleo Context", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "paleoContext"}, "container": {"name": "Container", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "container"}, "totalvalue": {"name": "Total Value", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "totalValue"}, "projects": {"name": "Projects", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "projects"}, "name": {"name": "Name", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "name"}, "restrictions": {"name": "Restrictions", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "restrictions"}, "otheridentifiers": {"name": "Other Identifiers", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "otherIdentifiers"}, "collectionobjectcitations": {"name": "Collection Object Citations", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "OneToMany", "picklistname": null, "desc": "collectionObjectCitations"}, "catalogeddateverbatim": {"name": "Cataloged Date Verbatim", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "The verbatim date the specimen was collected."}, "countamt": {"name": "Count Amount", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.Integer", "picklistname": null, "desc": "The number of objects (specimens, slides, pieces) prepared."}, "exsiccataitems": {"name": "Exsiccata Items", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "exsiccataItems"}, "objectcondition": {"name": "Object Condition", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "objectCondition"}, "treatmentevents": {"name": "Treatment Events", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "treatmentEvents"}, "visibilitysetby": {"name": "Visibility Set By", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "visibilitySetBy"}, "cataloger": {"name": "Cataloger", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "In Specify, the person who recorded the specimen data in the catalog. Cataloger records are stored in the Agent table. "}, "containerowner": {"name": "Container Owner", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "ManyToOne", "picklistname": null, "desc": "containerOwner"}, "projectnumber": {"name": "Project Number", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "projectNumber"}, "yesno6": {"name": "Yes No6", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "User definable."}, "modifier": {"name": "Modifier", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": "java.lang.String", "picklistname": null, "desc": "modifier"}, "catalogeddateprecision": {"name": "Cataloged Date Precision", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "catalogedDatePrecision"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "A general term for anything that can be a part of your collection: a specimen, a specimen lot, a sound recording, a slide, a tissue, an extract, or a spectrogram. "}, "dnasequencingrun": {"name": "D N A Sequencing Run", "format": null, "defaultui": null, "isuiformatter": null, "ishidden": false, "aggregator": null, "items": {"sequenceprimercode": {"name": "Seq Primer Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Sequence Primer Code"}, "rundate": {"name": "Run Date", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "runDate"}, "attachments": {"name": "Attachments", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "attachments"}, "sequenceprimersequence5_3": {"name": "Seq Primer Seq5_3", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Sequence Primer Sequence5_3"}, "pcrprimername": {"name": "Pcr Primer Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrPrimerName"}, "preparedbyagent": {"name": "Prepared By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "preparedByAgent"}, "runbyagent": {"name": "Run By Agent", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "runByAgent"}, "citations": {"name": "Citations", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "citations"}, "modifiedbyagent": {"name": "Modified By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "modifiedByAgent"}, "genesequence": {"name": "Gene Sequence", "format": null, "isuiformatter": null, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "geneSequence"}, "timestampcreated": {"name": "Timestamp Created", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampCreated"}, "dnasequence": {"name": "Dna Sequence", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "dnaSequence"}, "yesno2": {"name": "Yes No2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo2"}, "yesno3": {"name": "Yes No3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo3"}, "version": {"name": "Version", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "version"}, "yesno1": {"name": "Yes No1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "yesNo1"}, "scorefilename": {"name": "Score File Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "scoreFileName"}, "pcrcocktailprimer": {"name": "Pcr Cocktail Primer", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrCocktailPrimer"}, "ordinal": {"name": "Ordinal", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "ordinal"}, "collectionmemberid": {"name": "Collection Member Id", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": true, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "collectionMemberId"}, "timestampmodified": {"name": "Timestamp Modified", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "timestampModified"}, "pcrprimersequence5_3": {"name": "Pcr Primer Seq5_3", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Pcr Primer Sequence5_3"}, "tracefilename": {"name": "Trace File Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "traceFileName"}, "text2": {"name": "Text2", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text2"}, "text3": {"name": "Text3", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text3"}, "sequencecocktailprimer": {"name": "Seq Cocktail Primer", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "sequenceCocktailPrimer"}, "text1": {"name": "Text1", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "text1"}, "number2": {"name": "Number2", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number2"}, "number3": {"name": "Number3", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number3"}, "number1": {"name": "Number1", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "number1"}, "remarks": {"name": "Remarks", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "remarks"}, "readdirection": {"name": "Read Direction", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "readDirection"}, "sequenceprimername": {"name": "Seq Primer Name", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "Sequence Primer Name"}, "pcrreverseprimercode": {"name": "Pcr Reverse Primer Code", "format": null, "isuiformatter": false, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrReversePrimerCode"}, "pcrforwardprimercode": {"name": "Pcr Forward Primer Code", "format": null, "isuiformatter": false, "ishidden": false, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "pcrForwardPrimerCode"}, "createdbyagent": {"name": "Created By Agent", "format": null, "isuiformatter": null, "ishidden": true, "isrequired": false, "isdependent": false, "weblinkname": null, "type": null, "picklistname": null, "desc": "createdByAgent"}}, "type": null, "picklistname": null, "desc": "dnasequencingrun"}} \ No newline at end of file diff --git a/specifyweb/backend/context/views.py b/specifyweb/backend/context/views.py index 797d61c85b2..57d176ea3b9 100644 --- a/specifyweb/backend/context/views.py +++ b/specifyweb/backend/context/views.py @@ -331,7 +331,13 @@ def user(request): obj_to_data(c) for c in available_collections ] - data['agent'] = obj_to_data(request.specify_user_agent) if request.specify_user_agent != None else None + current_agent = ( + obj_to_data(request.specify_user_agent) + if request.specify_user_agent is not None + else None + ) + data['agent'] = current_agent + data['current_agent'] = current_agent if settings.RO_MODE or not request.user.is_authenticated: data['usertype'] = "readonly" diff --git a/specifyweb/backend/delete_blockers/filter.py b/specifyweb/backend/delete_blockers/filter.py new file mode 100644 index 00000000000..01567e61c22 --- /dev/null +++ b/specifyweb/backend/delete_blockers/filter.py @@ -0,0 +1,179 @@ +from typing import TypedDict +from functools import reduce + +from django.db.models import Model + +from specifyweb.specify.api.crud import get_model +from specifyweb.specify.models_utils.load_datamodel import TableDoesNotExistError + +from specifyweb.backend.delete_blockers.validators import DELETE_BLOCKER_LIMIT, CleanedDeleteBlockerFilter, CleanedDeleteBlockerRequestForm +from specifyweb.backend.delete_blockers.utils import field_is_remote, relationship_blocks_deletion, relationship_cascades_delete, blocker_relationships_for_obj +from specifyweb.backend.delete_blockers.paginate import resolve_reference_paginator, ReferencePaginator + +class DeleteBlocker(TypedDict): + table: str + field: str + ids: list[int] + limit: int + complete: bool + +class DeleteBlockerCount(TypedDict): + table: str + field: str + count: int + +class DeleteBlockerCounts(TypedDict): + results: list[DeleteBlockerCount] + total_count: int + +class DeleteBlockerFilter: + def __init__(self, paginator: ReferencePaginator) -> None: + self.paginator = paginator + + @property + def obj(self): + return self.paginator.obj + + @property + def relationship(self): + return self.paginator.relationship + + @property + def table_name(self): + table_name = self.relationship.related_model._meta.model_name + if table_name is None: + raise ValueError(f"Unable to get related table name for {self.relationship}") + return table_name + + def cascades(self): + return relationship_cascades_delete(self.relationship) + + @classmethod + def from_json(cls, obj: Model, json: CleanedDeleteBlockerFilter): + table_name = json["table"] + model = get_model(table_name) + if model is None: + raise TableDoesNotExistError(f"Unable to find {table_name}") + field_name = json["field"] + field = model._meta.get_field(field_name) + if (not field_is_remote(field) + or not (relationship_blocks_deletion(field) or relationship_cascades_delete(field))): + raise ValueError(f"Can not use field {table_name}.{field_name} for delete blockers") + Paginator = resolve_reference_paginator(obj) + return cls( + paginator=Paginator( + obj=obj, + relationship=field, + limit=json["limit"], + anchor_id=json["anchor"], + backwards=json["backwards"] + ) + ) + + def count(self) -> None | DeleteBlockerCount: + # We're only collecting counts for direct blockers + if not relationship_blocks_deletion(self.relationship): + return None + + record_count = self.paginator.count() + return { + "table": self.table_name, + "field": self.relationship.field.name, + "count": record_count + } + + def fetch_page(self) -> tuple[bool, DeleteBlocker]: + fetched_ids = self.paginator.fetch_page() + complete = len(fetched_ids) < self.paginator.limit + cascades = self.cascades() + return cascades, { + "table": self.table_name, + "field": self.relationship.field.name, + "ids": fetched_ids, + "limit": self.paginator.limit, + "complete": complete + } + +def default_filters(obj: Model, limit=DELETE_BLOCKER_LIMIT, count_only=False) -> list[DeleteBlockerFilter]: + filters = [] + protect_rels, cascade_rels = blocker_relationships_for_obj(obj) + Paginator = resolve_reference_paginator(obj) + for rel in protect_rels: + filters.append( + DeleteBlockerFilter( + Paginator( + obj, + relationship=rel, + limit=limit + ) + ) + ) + # REFACTOR: clean this up a little + if not count_only: + for rel in cascade_rels: + filters.append( + DeleteBlockerFilter( + Paginator( + obj, + relationship=rel, + limit=limit + ) + ) + ) + return filters + +def merge_delete_blocker_counts(aggregated: DeleteBlockerCounts, current_count: DeleteBlockerCount | None) -> DeleteBlockerCounts: + if current_count is None or current_count["count"] == 0: + return aggregated + new_results = [*aggregated["results"], current_count] + new_count = aggregated["total_count"] + current_count["count"] + return { + "results": new_results, + "total_count": new_count + } + + +class DeleteBlockerFilters: + def __init__(self, + obj: Model, + limit=DELETE_BLOCKER_LIMIT, + filters: list[DeleteBlockerFilter] | None = None, + count_only = False + ) -> None: + self.obj = obj + if filters is None: + self.filters = default_filters(obj, limit, count_only) + else: + self.filters = filters + + @classmethod + def from_json(cls, obj: Model, json: CleanedDeleteBlockerRequestForm, count_only=False): + if json["filters"] is None: + filters = None + else: + filters = [DeleteBlockerFilter.from_json(obj=obj, json=blocker_filter) for blocker_filter in json["filters"]] + limit = json["limit"] + return cls(obj=obj, limit=limit, filters=filters, count_only=count_only) + + def count(self) -> DeleteBlockerCounts: + starting_value: DeleteBlockerCounts = { + "results": [], + "total_count": 0 + } + return reduce( + merge_delete_blocker_counts, + (blocker.count() for blocker in self.filters), + starting_value + ) + + def fetch(self) -> tuple[list[DeleteBlocker], list[DeleteBlocker]]: + blocked, deferred = [], [] + for blocker_filter in self.filters: + blocker_deferred, page = blocker_filter.fetch_page() + if len(page["ids"]) == 0: + continue + if blocker_deferred: + deferred.append(page) + else: + blocked.append(page) + return blocked, deferred diff --git a/specifyweb/backend/delete_blockers/paginate.py b/specifyweb/backend/delete_blockers/paginate.py new file mode 100644 index 00000000000..0f3db57b689 --- /dev/null +++ b/specifyweb/backend/delete_blockers/paginate.py @@ -0,0 +1,120 @@ +from django.db.models import Model, ForeignObjectRel, ForeignKey + +from specifyweb.backend.trees.extras import Tree +from specifyweb.backend.stored_queries.utils import log_sqlalchemy_query +from specifyweb.backend.delete_blockers.validators import DELETE_BLOCKER_LIMIT +from specifyweb.backend.delete_blockers.utils import relationship_cascades_delete, node_numbers_valid_for_tree + +class ReferencePaginator: + def __init__(self, + obj: Model, + relationship: ForeignObjectRel, + limit: int = DELETE_BLOCKER_LIMIT, + anchor_id: int | None = None, + backwards: bool = False): + self.obj = obj + self.relationship = relationship + self.limit = limit + self.anchor_id = anchor_id + self.backwards = backwards + + def count(self) -> int: + queryset = self._get_base_queryset() + return queryset.count() + + def fetch_page(self) -> list[int]: + queryset = self._get_page_queryset() + return list(queryset) + + def _get_page_queryset(self): + queryset = self._get_base_queryset() + + if self.anchor_id is not None: + direction = "lt" if self.backwards else "gt" + queryset = queryset.filter(**{f"pk__{direction}": self.anchor_id}) + + if self.backwards: + queryset = queryset.order_by("-pk") + else: + queryset = queryset.order_by("pk") + + queryset = queryset.values_list("pk", flat=True) + + if self.limit != 0: + queryset = queryset[:self.limit] + return queryset + + def _get_base_queryset(self): + other_side_model = self.relationship.related_model + return other_side_model.objects.filter( + **{self.relationship.field.name: self.obj.pk} + ) + +class TreeTableReferencePaginator(ReferencePaginator): + """ + This paginator should be used for objects that are Tree Tables + (Taxon, Geography, Storage, Lithostrat, etc.). + WARNING: This strictly assumes: + + 1. All NodeNumbers for the tree are valid and up-to-date + 2. The ON_DELETE behavior for the 'parent' FK is set to CASCADE + 3. The NodeNumber column on the tree is indexed + + Use the base ReferencePaginator if you can not guarantee all of the above + properties. + """ + def _get_base_queryset(self): + node_number = self.obj.nodenumber + highest_node_number = self.obj.highestchildnodenumber + other_side_model = self.relationship.related_model + # With the assumption that nodenumbers are up-to-date and correctly + # formed for the tree, we can use their properties to optimize fetching + # references. + # Particularly, we know the node and all of its descendants lie within + # the range >= NodeNumber and <= HighestChildNodeNumber. + # Essentially node numbers can "flatten" any subtree within the + # tree so we don't have to worry about expensive or complicated + # Parent self-joins to traverse the subtree structure + node_number_filters = { + f"{self.relationship.field.name}__nodenumber__range": (node_number, highest_node_number) + # We shouldn't need a filter on definition, as NodeNumbers should + # be unique even across trees of the same type + # TEST: Make sure we have tests for the above assumption in case + # the behavior is ever changed + } + return other_side_model.objects.filter(**node_number_filters) + + def fetch_page(self) -> list[int]: + # With the above node number optimization, we should be able to exclude + # pages for the parent relationship for delete blockers + # REFACTOR: This might not be the best place this for this. + # Consider moving this to DeleteBlockerFilter + if self.relationship.field is self.obj._meta.get_field("parent"): + return [] + return super().fetch_page() + +def resolve_reference_paginator(obj: Model) -> type[ReferencePaginator]: + if isinstance(obj, Tree): + return _resolve_tree_paginator(obj) + return ReferencePaginator + +def _resolve_tree_paginator(obj: Tree) -> type[ReferencePaginator]: + # This is first because it is far cheaper than checking for NodeNumber validity + if not _tree_cascades_delete(obj.__class__): + return ReferencePaginator + definition_id = obj.definition_id + node_numbers_valid = node_numbers_valid_for_tree(obj._meta.db_table, definition_id) + if node_numbers_valid: + return TreeTableReferencePaginator + return ReferencePaginator + +def _tree_cascades_delete(obj: type[Tree]): + parent_field = obj._meta.get_field("parent") + if not isinstance(parent_field, ForeignKey): + return False + # The ON_DELETE behavior is on the other side of the FK + other_side = parent_field.remote_field + if not isinstance(other_side, ForeignObjectRel): + return False + + return relationship_cascades_delete(other_side) diff --git a/specifyweb/backend/delete_blockers/urls.py b/specifyweb/backend/delete_blockers/urls.py index 9945728ca5d..da4d564d2ef 100644 --- a/specifyweb/backend/delete_blockers/urls.py +++ b/specifyweb/backend/delete_blockers/urls.py @@ -3,5 +3,7 @@ from . import views urlpatterns = [ re_path(r'^delete_blockers/(?P\w+)/(?P\d+)/$', views.delete_blockers), + re_path(r'^count/(?P\w+)/(?P\d+)/$', views.count_blockers), + re_path(r'^old_delete_blockers/(?P\w+)/(?P\d+)/$', views.old_delete_blockers), ] diff --git a/specifyweb/backend/delete_blockers/utils.py b/specifyweb/backend/delete_blockers/utils.py new file mode 100644 index 00000000000..d81f2874cf2 --- /dev/null +++ b/specifyweb/backend/delete_blockers/utils.py @@ -0,0 +1,165 @@ +from typing_extensions import TypeIs + +from django.db.models import Field, ForeignObjectRel +from django.db.models.deletion import PROTECT, CASCADE +from sqlalchemy import select, and_, or_, not_, union_all +from sqlalchemy.orm import aliased + +from specifyweb.specify.models_utils.model_extras import ModelWithTable +from specifyweb.specify.models import protect_with_blockers +from specifyweb.specify.api.crud import strict_get_model +from specifyweb.backend.stored_queries import models as sqlmodels +from specifyweb.backend.cache.redis.connect import RedisConnection, RedisString + + +def field_is_remote(field: Field | ForeignObjectRel) -> TypeIs[ForeignObjectRel]: + # TODO: Check whether there are any concrete fields that SHOULD be + # included here, like some ToOne fields that acts as blockers + return field.is_relation and not getattr(field, "concrete", True) + + +def relationship_blocks_deletion(relationship: ForeignObjectRel): + return relationship.on_delete is protect_with_blockers or relationship.on_delete is PROTECT + + +def relationship_cascades_delete(relationship: ForeignObjectRel): + return relationship.on_delete is CASCADE + + +def blocker_relationships_for_obj(obj: ModelWithTable) -> tuple[list[ForeignObjectRel], list[ForeignObjectRel]]: + protect, cascade = [], [] + all_fields = obj._meta.get_fields(include_hidden=True) + remote_relationships = filter( + field_is_remote, + all_fields + ) + for relationship in remote_relationships: + if relationship_blocks_deletion(relationship): + protect.append(relationship) + elif relationship_cascades_delete(relationship): + cascade.append(relationship) + + return protect, cascade + +# REFACTOR: If we need to speed this up even more, consider using the DB cursor +# directly and skip SQLAlchemy constructs (like validate_tree_numbering) +# REFACTOR: Maybe we can try to renumber the tree before this check. +# That might need to be cached as well to prevent renumbering the tree for +# every request +def node_numbers_valid_for_tree(tree_name: str, definition_id: int) -> bool: + cached_value = _cached_node_numbers_valid(tree_name, definition_id) + if cached_value is not None: + return cached_value + + tree_model = strict_get_model(tree_name) + tree_table = tree_model.specify_model + canonical_tree_name = tree_table.name + tree_node = sqlmodels.models_by_tableid[tree_table.tableId] + with sqlmodels.session_context() as session: + invalid_nodes_exist = _individual_nodes_invalid( + tree_node, canonical_tree_name, definition_id + ) + nodes_in_acceptable_ranges = _node_numbers_within_parent_ranges( + tree_node, canonical_tree_name, definition_id + ) + final_query = ( + union_all(invalid_nodes_exist, nodes_in_acceptable_ranges) + .limit(1) + ) + result = session.execute(final_query).scalar_one_or_none() + tree_is_valid = result is None + _set_cached_node_numbers_valid(tree_name, definition_id, tree_is_valid) + return tree_is_valid + + +def _node_number_cache_key(tree_name: str, definition_id: int) -> str: + return f"{tree_name}:{definition_id}:nodenumbers:valid" + + +# The node number validation queries can push a lot of pages into the InnoDB +# Buffer Pool, potentially evicting other hot entries which would need to be +# read from disk. +# This cache helps alleviate the problem by caching the result of the node +# number validation queries to give the buffer pool some breathing room between +# validations +def _cached_node_numbers_valid(tree_name: str, definition_id: int) -> bool | None: + redis_string = RedisString(RedisConnection()) + key = _node_number_cache_key(tree_name, definition_id) + cached_value = redis_string.get(key) + if cached_value is None: + return None + return cached_value == "1" + + +# REFACTOR: We can be smarter here and update the cache when the tree is +# renumbered. This would let us set a much longer TTL. +def _set_cached_node_numbers_valid(tree_name: str, definition_id: int, is_valid: bool, time_to_live: int | None = None): + redis_string = RedisString(RedisConnection()) + key = _node_number_cache_key(tree_name, definition_id) + cache_value = "1" if is_valid else "0" + if time_to_live is None: + # If the node numbers are already valid, it's very unlikely for them to + # become invalid. + # If the node numbers are invalid, then they won't become valid until + # the tree is renumbered (through a tree operation in Specify). + # However, running the validation queries on an invalid tree can be far + # more performant than on a valid tree. + ttl = 900 if is_valid else 600 + else: + ttl = time_to_live + redis_string.set(key, cache_value, time_to_live=ttl) + + +# REFACTOR: It might be better here to validate that all NodeNumbers and +# HighestChildNodeNumbers are distinct here instead. +# e.g., COUNT(*) == COUNT(DISTINCT NodeNumber) == COUNT(DISTINCT HighestChildNodeNumber) +def _individual_nodes_invalid(tree_model, tree_name: str, definition_id: int): + tree_def = getattr(tree_model, tree_name + "TreeDefID") + invalid_nodes_exist_query = ( + select(1) + .select_from(tree_model) + .where( + and_( + tree_def == definition_id, + or_( + tree_model.nodeNumber.is_(None), + tree_model.highestChildNodeNumber.is_(None), + tree_model.highestChildNodeNumber < tree_model.nodeNumber + ) + ) + ) + .limit(1) + ) + return invalid_nodes_exist_query + + +def _node_numbers_within_parent_ranges(tree_model, tree_name: str, definition_id: int): + # This is one of two generally efficient ways i've found to validate nodes + # are within their correct ranges. + # The other method is to build a derived table that groups tree nodes by + # parent and gets the MIN and MAX of all of the children's NodeNumbers. + # Then the tree table is joined on the derived table by ParentID and + # validates the MIN and MAX nodenumber across all children lie within the + # parent's expected range. + # That method uses significantly less page accesses (~10x on some DBs) than + # this direct Parent JOIN, but these accesses are usually not for distinct + # pages, so not a big deal as long as they're in the buffer pool. + # The other method does use some space in the buffer pool for filesort + # operations, so keeping with this approach for now. + tree_def = getattr(tree_model, tree_name + "TreeDefID") + parent = aliased(tree_model) + children_within_node_ranges = ( + select(1) + .select_from(tree_model) + .join(parent, tree_model.ParentID == parent._id) + .where( + tree_def == definition_id, + not_(tree_model.nodeNumber.between( + parent.nodeNumber, + parent.highestChildNodeNumber + ) + ) + ) + .limit(1) + ) + return children_within_node_ranges diff --git a/specifyweb/backend/delete_blockers/validators.py b/specifyweb/backend/delete_blockers/validators.py new file mode 100644 index 00000000000..ee7605d58f4 --- /dev/null +++ b/specifyweb/backend/delete_blockers/validators.py @@ -0,0 +1,116 @@ +from typing import cast, TypedDict, NotRequired, Unpack + +from django import forms +from django.core.exceptions import ValidationError + +DELETE_BLOCKER_LIMIT = 40 + +class DeleteBlockerFilterJSON(TypedDict): + table: str + field: str + # The direction of the fetch. If true then results will be returned in + # descending order starting at the anchor + backwards: NotRequired[bool] + # The ID that will be used to anchor and base the results from to achieve + # keysey/cursor pagination. + # The anchor is exclusive and will not be included in the results + # If the anchor is not provided, the default value is based on the + # direction of the request. If fetching records forwards, the anchor will be + # 0 + # If fetching records backwards, the anchor will be the last record + anchor: NotRequired[int | None] + limit: NotRequired[int] + +class CleanedDeleteBlockerFilter(TypedDict): + table: str + field: str + backwards: bool + anchor: int | None + limit: int + +class CleanedDeleteBlockerRequestForm(TypedDict): + limit: int + filters: None | list[CleanedDeleteBlockerFilter] + +class DeleteBlockerRequestForm(forms.Form): + limit = forms.IntegerField(required=False) + + # Whether the format the results based on the default table formatter for + # the resulting table + # format = forms.BooleanField(required=False) + + filters = forms.JSONField(required=False) + + def clean(self): + super().clean() + if self.cleaned_data.get('limit') is None: + self.cleaned_data["limit"] = DELETE_BLOCKER_LIMIT + + return self.cleaned_data + + # BUG: Currently a table + field can be defined more than once within the + # list of filters. The backend will run each filter independently. + # Might be desirable to error or arbitarily choose the last defined filter. + # I guess the current behavior could be considered a feature if you wanted + # to use different anchors, directions, limits, etc. at the same time? + def clean_filters(self): + cleaned_filters = self.cleaned_data.get('filters') + if cleaned_filters is None: + return cleaned_filters + if not isinstance(cleaned_filters, list): + raise ValidationError("filters must be a list") + new_filters: list[CleanedDeleteBlockerFilter] = [] + for filter_idx, filter in enumerate(cleaned_filters): + if not isinstance(filter, dict): + raise ValidationError( + "Filter at index '%(filter_idx)d' is not a dict", + params={"filter_idx":filter_idx} + ) + required_keys = {'table', 'field'} + if not required_keys.issubset(filter.keys()): + missing_keys = list(required_keys - filter.keys()) + raise ValidationError( + "Filter at index '%(filter_idx)d' missing required keys '%(missing_keys)s'", + params={"filter_idx": filter_idx, + "missing_keys": str(missing_keys)} + ) + if not all(isinstance(key, str) for key in required_keys): + formatted_keys = " or ".join(required_keys) + raise ValidationError( + "Filter at index '%(filter_idx)d' did not get str for '%(required_keys)s'", + params={ + "filter_idx": filter_idx, + "required_keys": formatted_keys, + } + ) + new_filter: CleanedDeleteBlockerFilter = { + "table": filter['table'], + "field": filter['field'], + "anchor": filter.get('anchor'), + "limit": filter.get('limit', DELETE_BLOCKER_LIMIT), + "backwards": filter.get('backwards', False) + } + expected_types = { + "table": str, + "field": str, + "backwards": bool, + "anchor": (int, None), + "limit": int + } + for key, types in expected_types.items(): + if not isinstance(new_filter[key], types): + formatted_types = ( + " or ".join(map(lambda cls: cls.__name__, types)) + if isinstance(types, tuple) + else str(types) + ) + raise ValidationError( + "Filter at index '%(filter_idx)d' did not get %(types)s for '%(key)s'", + params={ + "filter_idx": filter_idx, + "types": formatted_types, + "key": key + } + ) + new_filters.append(new_filter) + return new_filters diff --git a/specifyweb/backend/delete_blockers/views.py b/specifyweb/backend/delete_blockers/views.py index e562390aa76..961e255d158 100644 --- a/specifyweb/backend/delete_blockers/views.py +++ b/specifyweb/backend/delete_blockers/views.py @@ -1,3 +1,5 @@ +import json + from django import http from django.db import router, transaction from django.db.models.deletion import Collector @@ -12,17 +14,24 @@ from specifyweb.specify.api.serializers import toJson from specifyweb.specify.views import login_maybe_required +from specifyweb.backend.delete_blockers.validators import DeleteBlockerRequestForm +from specifyweb.backend.delete_blockers.filter import DeleteBlockerFilters + + @login_maybe_required @require_http_methods(['GET', 'HEAD']) -def delete_blockers(request, model, id): +def old_delete_blockers(request, model, id): """Returns a JSON list of fields on that point to related resources which prevent the resource of that model from being deleted. """ + # limit = request.GET["limit"] + # depth_limit = request.GET["depthLimit"] + obj = get_object_or_404(model, id=int(id)) using = router.db_for_write(obj.__class__, instance=obj) - if obj._meta.model_name == 'discipline': # Special case for discipline + if obj._meta.model_name == 'discipline': # Special case for discipline guard_blockers = get_discipline_delete_guard_blockers(obj) if guard_blockers: result = guard_blockers @@ -38,6 +47,41 @@ def delete_blockers(request, model, id): return http.HttpResponse(toJson(result), content_type='application/json') + +@login_maybe_required +@require_http_methods(['GET', 'POST']) +def delete_blockers(request: http.HttpRequest, model: str, id: int): + obj = get_object_or_404(model, id=int(id)) + + if request.method == "POST": + request_data = json.loads(request.body) + else: + request_data = request.GET + + + request_filters = DeleteBlockerRequestForm(request_data) + if not request_filters.is_valid(): + return http.HttpResponseBadRequest( + toJson(request_filters.errors), content_type='application/json' + ) + + blocker_fetcher = DeleteBlockerFilters.from_json(obj, json=request_filters.cleaned_data) + blocked, deferred = blocker_fetcher.fetch() + result = { + "results": blocked, + "next": deferred + } + return http.JsonResponse(result) + +@login_maybe_required +@require_http_methods(['GET', 'POST']) +def count_blockers(request: http.HttpRequest, model: str, id: int): + obj = get_object_or_404(model, id=int(id)) + + delete_block_fetcher = DeleteBlockerFilters(obj, count_only=True) + result = delete_block_fetcher.count() + return http.JsonResponse(result) + def _collect_delete_blockers(obj, using) -> list[dict]: collector = Collector(using=using) collector.delete_blockers = [] @@ -48,6 +92,7 @@ def _collect_delete_blockers(obj, using) -> list[dict]: ] for field, sub_objs in collector.delete_blockers ]) + def _serialize_delete_blocker(field, sub_objs) -> dict: normalized = _normalize_many_to_many_blocker(field, sub_objs) if normalized is not None: @@ -59,6 +104,7 @@ def _serialize_delete_blocker(field, sub_objs) -> dict: 'ids': [sub_obj.id for sub_obj in sub_objs] } + def _normalize_many_to_many_blocker(field, sub_objs) -> dict | None: through_model = sub_objs[0].__class__ if hasattr(through_model, 'specify_model'): @@ -105,5 +151,6 @@ def _normalize_many_to_many_blocker(field, sub_objs) -> dict | None: 'ids': [getattr(sub_obj, other_field.attname) for sub_obj in sub_objs], } + def flatten(l): return [item for sublist in l for item in sublist] diff --git a/specifyweb/backend/express_search/config_views.py b/specifyweb/backend/express_search/config_views.py new file mode 100644 index 00000000000..e4e46e375eb --- /dev/null +++ b/specifyweb/backend/express_search/config_views.py @@ -0,0 +1,340 @@ +import json +import logging +import xml.etree.ElementTree as ET + +from django.http import HttpResponse, HttpResponseBadRequest +from django.utils.decorators import method_decorator + +from specifyweb.middleware.general import require_http_methods +from specifyweb.specify.views import login_maybe_required +from specifyweb.specify.models import datamodel, Spappresourcedata, Spappresourcedir, Spappresource +from specifyweb.backend.context.app_resource import ( + get_app_resource, + get_app_resource_dirs_for_level, + get_usertype, + load_resource_at_level, +) +from specifyweb.backend.permissions.permissions import has_table_permission +from specifyweb.specify.api.serializers import toJson + +logger = logging.getLogger(__name__) + +EMPTY_EXPRESS_SEARCH_CONFIG = ( + '' + '' +) + +def parse_config_xml(xml_element): + """Convert ExpressSearchConfig ElementTree to dict""" + if xml_element is None: + return {"tables": [], "relatedQueries": []} + + tables = [] + for st in xml_element.findall('tables/searchtable'): + search_fields = [] + for sf in st.findall('searchFields/searchfield'): + # Handle both sortDirection (SP7) and isSortable/isAscending (SP6/Desktop) + sort_dir = "None" + if sf.find('sortDirection') is not None: + sort_dir = sf.find('sortDirection').text + else: + is_sortable = (sf.findtext('isSortable') or 'false').lower() == 'true' + if is_sortable: + is_asc = (sf.findtext('isAscending') or 'true').lower() == 'true' + sort_dir = "Ascending" if is_asc else "Descending" + + search_fields.append({ + "fieldName": sf.findtext('fieldName'), + "order": int(sf.findtext('order') or 0), + "sortDirection": sort_dir + }) + display_fields = [] + for df in st.findall('displayFields/displayfield'): + display_fields.append({ + "fieldName": df.findtext('fieldName') + }) + + tables.append({ + "tableName": st.findtext('tableName'), + "displayOrder": int(st.findtext('displayOrder') or 0), + "searchFields": sorted(search_fields, key=lambda x: x["order"]), + "displayFields": sorted(display_fields, key=lambda x: x["fieldName"] or "") + }) + + related_queries = [] + for rq in xml_element.findall('relatedQueries/relatedquery'): + related_queries.append({ + "id": rq.findtext('id'), + "displayOrder": int(rq.findtext('displayOrder') or 0), + "isActive": (rq.findtext('isActive') or rq.attrib.get('isactive') or 'false').lower() == 'true', + "isSystem": (rq.findtext('isSystem') or rq.attrib.get('issystem') or 'false').lower() == 'true' + }) + + return { + "tables": sorted(tables, key=lambda x: x["displayOrder"]), + "relatedQueries": sorted(related_queries, key=lambda x: x["displayOrder"]) + } + +def get_express_search_config_str(collection, user): + res = get_app_resource(collection, user, 'ExpressSearchConfig') + if res: + logger.info(f"Loaded ExpressSearchConfig from {res[2] if res[2] else 'Filesystem'}") + resource = res[0] + if isinstance(resource, bytes): + return resource.decode('utf-8', errors='replace') + return resource + + logger.warning("No ExpressSearchConfig found, returning empty shell") + return EMPTY_EXPRESS_SEARCH_CONFIG + +def get_default_express_search_config_str(collection, user): + # Recovery path for malformed personal resources. Bypass DB precedence and + # use the filesystem defaults that the normal app resource hierarchy would + # eventually fall back to. + for level in ('UserType', 'Discipline', 'Common', 'Backstop'): + res = load_resource_at_level(collection, user, level, 'ExpressSearchConfig') + if res: + logger.info("Recovered ExpressSearchConfig from %s filesystem level", level) + resource = res[0] + if isinstance(resource, bytes): + return resource.decode('utf-8', errors='replace') + return resource + + logger.warning("No fallback ExpressSearchConfig found, returning empty shell") + return EMPTY_EXPRESS_SEARCH_CONFIG + +@require_http_methods(['GET', 'PUT']) +@login_maybe_required +def config_api(request): + collection = request.specify_collection + user = request.specify_user + + if request.method == 'GET': + xml_str = get_express_search_config_str(collection, user) + try: + # Normalise to str and strip any BOM that may have been written by + # an earlier bug (encoding='utf-8' produced a BOM-prefixed bytes value). + if isinstance(xml_str, bytes): + xml_str = xml_str.decode('utf-8', errors='replace') + xml_str_clean = xml_str.lstrip('\ufeff').strip() + xml_element = ET.fromstring(xml_str_clean) + except ET.ParseError as e: + logger.error(f"Error parsing ExpressSearchConfig XML: {e}") + # Instead of deleting, we fall back to the filesystem default in-memory + # for this request, but leave the DB record intact. + xml_str = get_default_express_search_config_str(collection, user) + try: + xml_element = ET.fromstring(xml_str.lstrip('\ufeff').strip()) + except ET.ParseError: + xml_element = ET.fromstring(EMPTY_EXPRESS_SEARCH_CONFIG) + config = parse_config_xml(xml_element) + + # Reconciliation + from specifyweb.backend.express_search import related_searches + + reconciled_tables = [] + for tbl in config.get("tables", []): + table_name = tbl.get("tableName") + if not table_name: continue + try: + table_def = datamodel.get_table(table_name) + # Check permissions (exclude if no read access) + if collection and user: + if not has_table_permission(collection.id, user.id, table_name, "read"): + logger.debug(f"User {user.name} lacks read permission for {table_name}") + continue + if getattr(table_def, 'isHidden', False): + continue + except Exception: + # Table not in datamodel or other error, ignore + continue + + # Prune hidden or non-existent fields + valid_search = [] + for sf in tbl.get("searchFields", []): + try: + fdef = table_def.get_field(sf["fieldName"]) + if not getattr(fdef, 'isHidden', False): + valid_search.append(sf) + except Exception: + pass + + valid_disp = [] + for df in tbl.get("displayFields", []): + try: + fdef = table_def.get_field(df["fieldName"]) + if not getattr(fdef, 'isHidden', False): + valid_disp.append(df) + except Exception: + pass + + if valid_search: + tbl["searchFields"] = valid_search + tbl["displayFields"] = valid_disp + reconciled_tables.append(tbl) + + config["tables"] = reconciled_tables + + # Build derived related queries options + all_related = [] + in_use_table_ids = set() + for tbl in config["tables"]: + try: + tdef = datamodel.get_table(tbl["tableName"]) + in_use_table_ids.add(tdef.tableId) + except KeyError: + pass + + # Derive queries based on these base table IDs + for name in related_searches.__all__: + rdef = getattr(related_searches, name) + if hasattr(rdef, 'root') and getattr(rdef, 'root').tableId in in_use_table_ids: + # Keep it in options + pass + if hasattr(rdef, 'id'): + all_related.append({ + "id": str(rdef.id), + "name": name, + "description": getattr(rdef, 'description', getattr(rdef, 'title', name)), + "baseTableId": getattr(rdef, 'root').tableId if hasattr(rdef, 'root') else None + }) + + payload = { + "config": config, + "related_queries_definitions": all_related, + "schema_metadata": _get_schema_metadata(collection, user) + } + + return HttpResponse(toJson(payload), content_type='application/json') + + elif request.method == 'PUT': + if not request.body: + return HttpResponse(json.dumps({"success": False, "error": "Empty body"}), status=400, content_type='application/json') + + try: + data = json.loads(request.body) + except json.JSONDecodeError: + return HttpResponse(json.dumps({"success": False, "error": "Invalid JSON"}), status=400, content_type='application/json') + + tables = data.get("tables", []) + related_queries = data.get("relatedQueries", []) + + # PRUNE AND RESORT + pruned_tables = [] + for tbl in tables: + search_fields = [sf for sf in tbl.get("searchFields", []) if sf.get("inUse")] + if not search_fields: + continue + + display_fields = [df for df in tbl.get("displayFields", []) if df.get("inUse")] + + # Resort fields + for i, sf in enumerate(sorted(search_fields, key=lambda x: x.get("order", 0))): + sf["order"] = i + + pruned_tables.append({ + "tableName": tbl.get("tableName"), + "displayOrder": tbl.get("displayOrder", 0), + "searchFields": search_fields, + "displayFields": display_fields + }) + + # Serialize to XML + root = ET.Element('search') + tables_elem = ET.SubElement(root, 'tables') + for tbl in pruned_tables: + if not tbl.get("tableName"): continue + st = ET.SubElement(tables_elem, 'searchtable') + ET.SubElement(st, 'tableName').text = tbl["tableName"] + ET.SubElement(st, 'displayOrder').text = str(tbl["displayOrder"]) + + sfs_elem = ET.SubElement(st, 'searchFields') + for sf in tbl["searchFields"]: + f_elem = ET.SubElement(sfs_elem, 'searchfield') + ET.SubElement(f_elem, 'fieldName').text = sf["fieldName"] + ET.SubElement(f_elem, 'order').text = str(sf["order"]) + ET.SubElement(f_elem, 'sortDirection').text = sf.get("sortDirection", "None") + + dfs_elem = ET.SubElement(st, 'displayFields') + for df in tbl["displayFields"]: + f_elem = ET.SubElement(dfs_elem, 'displayfield') + ET.SubElement(f_elem, 'fieldName').text = df["fieldName"] + + rqs_elem = ET.SubElement(root, 'relatedQueries') + for rq in related_queries: + if not rq.get("id"): continue + elem = ET.SubElement(rqs_elem, 'relatedquery', isactive=str(rq.get("isActive", False)).lower(), issystem="true") + ET.SubElement(elem, 'id').text = str(rq["id"]) + ET.SubElement(elem, 'displayOrder').text = str(rq.get("displayOrder", 0)) + + xml_str = ET.tostring(root, encoding='unicode') + _save_express_search_config(collection, user, xml_str) + + return HttpResponse(json.dumps({"success": True}), content_type='application/json') + +def _save_express_search_config(collection, user, xml_str): + # Find existing user-level resource or create one + dirs = get_app_resource_dirs_for_level(collection, user, 'Personal') + target_dir = dirs.first() if dirs.exists() else None + + if target_dir is None: + target_dir = Spappresourcedir.objects.create( + ispersonal=True, + collection=collection, + discipline=collection.discipline if collection else None, + usertype=get_usertype(user), + specifyuser=user + ) + + try: + app_res_data = Spappresourcedata.objects.get( + spappresource__name='ExpressSearchConfig', + spappresource__spappresourcedir=target_dir + ) + app_res_data.data = xml_str + app_res_data.save() + except Spappresourcedata.DoesNotExist: + app_res = Spappresource.objects.create( + name='ExpressSearchConfig', + mimetype='text/xml', + description='Express Search Config', + spappresourcedir=target_dir, + level=0, + specifyuser=user, + ) + Spappresourcedata.objects.create( + spappresource=app_res, + data=xml_str + ) + +def _get_schema_metadata(collection, user): + tables = [] + for t in datamodel.tables: + classname = t.classname + try: + if getattr(t, 'isHidden', False): continue + if getattr(t, 'system', False): continue + if not has_table_permission(collection.id, user.id, t.name, "read"): continue + + # check if it has indexed fields + indexed_fields = [f.name for f in getattr(t, 'all_fields', []) if getattr(f, 'indexed', False) and not getattr(f, 'isHidden', False)] + if not indexed_fields: continue + + fields = [] + for f in getattr(t, 'all_fields', []): + if getattr(f, 'isHidden', False): continue + fields.append({ + "name": f.name, + "title": getattr(f, 'title', f.name.capitalize()), + "isIndexed": getattr(f, 'indexed', False) + }) + + tables.append({ + "name": t.name, + "title": getattr(t, 'title', t.name.capitalize()), + "fields": fields + }) + except Exception as e: + logger.warning(f"Error reading schema metadata for {classname}: {e}") + + return tables diff --git a/specifyweb/backend/express_search/related.py b/specifyweb/backend/express_search/related.py index 45d914fe20e..8719dca6ab5 100644 --- a/specifyweb/backend/express_search/related.py +++ b/specifyweb/backend/express_search/related.py @@ -181,7 +181,7 @@ def build_related_query(self, session, config, terms, collection, user): user, self.root.tableId, queryfields, - props=BuildQueryProps(implicit_or=True), + props=BuildQueryProps(implicit_or=False), ) if self.distinct: diff --git a/specifyweb/backend/express_search/tests.py b/specifyweb/backend/express_search/tests.py index 501deb776c1..7a573b4be92 100644 --- a/specifyweb/backend/express_search/tests.py +++ b/specifyweb/backend/express_search/tests.py @@ -1,16 +1,178 @@ """ -This file demonstrates writing tests using the unittest module. These will pass -when you run "manage.py test". +Tests for express search, focusing on synonymy-related searches. -Replace this with more appropriate tests for your application. +These tests verify the fix for issue #6783: Simple Search Returns All +Synonymized Taxon Records. + +Root cause: When a related search (e.g., SynonymCollObjs) has an exclude +filter whose QueryFieldSpec matches the primary field's QueryFieldSpec, +using implicit_or=True in build_query causes those predicates to be OR'd +instead of AND'd. This means the WHERE clause becomes: + + WHERE (taxon.id IN (matching_ids) OR NOT (taxon.id = preferred.id)) + +instead of the correct: + + WHERE taxon.id IN (matching_ids) AND NOT (taxon.id = preferred.id) + +The OR version returns ALL synonymized records regardless of the search +term, because NOT (taxon.id = preferred.id) is true for every synonymized +record. + +Fix: Use implicit_or=False in build_related_query so all predicates are +AND'd together. """ -from django.test import TestCase +import json +from unittest.mock import MagicMock, patch +from django.test import TestCase, RequestFactory +from specifyweb.backend.express_search.config_views import config_api +from specifyweb.backend.express_search.related import RelatedSearch +from specifyweb.backend.stored_queries.queryfieldspec import QueryFieldSpec -class SimpleTest(TestCase): - def test_basic_addition(self): - """ - Tests that 1 + 1 always equals 2. +class ExpressSearchConfigTests(TestCase): + def setUp(self): + self.factory = RequestFactory() + self.user = MagicMock() + self.user.id = 1 + self.user.name = "testuser" + self.user.usertype = "manager" + self.user.is_authenticated = True + + self.collection = MagicMock() + self.collection.id = 1 + self.collection.discipline = MagicMock() + + @patch('specifyweb.backend.express_search.config_views.has_table_permission', return_value=True) + @patch('specifyweb.backend.express_search.config_views.get_express_search_config_str') + @patch('specifyweb.backend.express_search.config_views._get_schema_metadata') + def test_get_config(self, mock_schema, mock_get_xml, mock_has_table_permission): + # Mocking the XML response + mock_get_xml.return_value = 'CollectionObject0catalogNumber0' + mock_schema.return_value = [] + + request = self.factory.get('/express_search/config/') + request.specify_collection = self.collection + request.specify_user = self.user + request.user = self.user + + response = config_api(request) + self.assertEqual(response.status_code, 200) + + data = json.loads(response.content) + self.assertIn('config', data) + self.assertEqual(data['config']['tables'][0]['tableName'], 'CollectionObject') + + @patch('specifyweb.backend.express_search.config_views._save_express_search_config') + def test_put_config(self, mock_save): + config_data = { + "tables": [ + { + "tableName": "CollectionObject", + "displayOrder": 0, + "searchFields": [ + {"fieldName": "catalogNumber", "order": 0, "inUse": True} + ], + "displayFields": [ + {"fieldName": "catalogNumber", "inUse": True} + ] + } + ], + "relatedQueries": [] + } + + request = self.factory.put( + '/express_search/config/', + data=json.dumps(config_data), + content_type='application/json' + ) + request.specify_collection = self.collection + request.specify_user = self.user + request.user = self.user + + response = config_api(request) + self.assertEqual(response.status_code, 200) + + # Verify that _save_express_search_config was called with XML + args, _ = mock_save.call_args + xml_str = args[2] + self.assertIn('CollectionObject', xml_str) + self.assertIn('catalogNumber', xml_str) + + def test_put_invalid_json(self): + request = self.factory.put( + '/express_search/config/', + data="not json", + content_type='application/json' + ) + request.specify_collection = self.collection + request.specify_user = self.user + request.user = self.user + + response = config_api(request) + self.assertEqual(response.status_code, 400) + data = json.loads(response.content) + self.assertEqual(data.get('error'), 'Invalid JSON') + + +class TestSynonymyPredicateGrouping(TestCase): + """Regression test for issue #6783.""" + + def test_synonym_collobj_fieldspec_collision(self): + """SynonymCollObjs' exclude filter and primary field share the same + fieldspec for the 'Collectionobject.determinations.taxon' definition. + + This collision causes predicates to be OR'd under implicit_or=True, + which is the root cause of returning all synonymized records. """ - self.assertEqual(1 + 1, 2) + from specifyweb.backend.express_search.related_searches import SynonymCollObjs + + # The exclude filter's fieldspec: determinations.taxon.taxonid + exclude_field = SynonymCollObjs.filter_fields[0] + exclude_fs = exclude_field.fieldspec + + # The primary field for definition 'Collectionobject.determinations.taxon' + # produces fieldspec: Collectionobject.determinations.taxon + add_id (taxonid) + primary_fs = QueryFieldSpec.from_path( + 'Collectionobject.determinations.taxon'.split('.'), add_id=True + ) + + # These fieldspecs are equal, which means their predicates would + # be grouped together under implicit_or=True + self.assertEqual( + primary_fs, exclude_fs, + "The primary field and exclude filter share the same " + "QueryFieldSpec. With implicit_or=True, their predicates " + "would be incorrectly OR'd instead of AND'd." + ) + + def test_other_syns_collobj_fieldspec_collision(self): + """OtherSynsCollObjs has the same fieldspec collision.""" + from specifyweb.backend.express_search.related_searches import OtherSynsCollObjs + + exclude_field = OtherSynsCollObjs.filter_fields[0] + exclude_fs = exclude_field.fieldspec + + primary_fs = QueryFieldSpec.from_path( + 'Collectionobject.determinations.preferredtaxon.acceptedchildren'.split('.'), + add_id=True + ) + + self.assertEqual( + primary_fs, exclude_fs, + "OtherSynsCollObjs has the same fieldspec collision." + ) + + def test_build_related_query_uses_implicit_or_false(self): + """Verify that build_related_query passes implicit_or=False to + build_query, preventing predicate OR-grouping.""" + import inspect + source = inspect.getsource(RelatedSearch.build_related_query) + self.assertIn( + 'implicit_or=False', + source, + "build_related_query must use implicit_or=False to prevent " + "OR-grouping of primary field with exclude filter predicates" + ) + diff --git a/specifyweb/backend/express_search/urls.py b/specifyweb/backend/express_search/urls.py index e3f628c0379..91ca45d3507 100644 --- a/specifyweb/backend/express_search/urls.py +++ b/specifyweb/backend/express_search/urls.py @@ -1,8 +1,9 @@ from django.urls import path, re_path -from . import views +from . import views, config_views urlpatterns = [ path('', views.search), + path('config/', config_views.config_api), path('related/', views.related_search), re_path(r'^querycbx/(?P\w*)/$', views.querycbx_search), ] diff --git a/specifyweb/backend/express_search/views.py b/specifyweb/backend/express_search/views.py index 07eb08ff781..633763e8dd0 100644 --- a/specifyweb/backend/express_search/views.py +++ b/specifyweb/backend/express_search/views.py @@ -18,7 +18,10 @@ from specifyweb.specify.models import datamodel, Collection from specifyweb.specify.views import login_maybe_required from specifyweb.backend.stored_queries import models -from specifyweb.backend.stored_queries.execution import filter_by_collection +from specifyweb.backend.stored_queries.execution import DefaultQueryFormatterProps, filter_by_collection +from specifyweb.backend.stored_queries.format import ObjectFormatter +from specifyweb.backend.stored_queries.queryfield import QueryField +from specifyweb.backend.stored_queries.query_construct import QueryConstruct from specifyweb.backend.stored_queries.queryfieldspec import QueryFieldSpec logger = logging.getLogger(__name__) @@ -38,11 +41,28 @@ def build_primary_query(session, searchtable, terms, collection, user, as_scalar fields = [table.get_field(fn.text) for fn in searchtable.findall('.//searchfield/fieldName')] - q_fields = [id_field] + query = QueryConstruct( + collection=collection, + objectformatter=ObjectFormatter(collection, user, False, props=DefaultQueryFormatterProps()), + query=session.query(id_field), + ) + if not as_scalar: - q_fields.extend([ - getattr(model, table.get_field(fn.text).name) - for fn in searchtable.findall('.//displayfield/fieldName')]) + for fn in searchtable.findall('.//displayfield/fieldName'): + fieldspec = QueryFieldSpec.from_path((table.name, fn.text)) + query, orm_field, _ = fieldspec.add_to_query(query, formatter=None, op_num=None, negate=False) + if orm_field is not None: + display_field = QueryField( + fieldspec=fieldspec, + op_num=0, + value=None, + negate=False, + display=True, + format_name=None, + sort_type=0, + strict=False, + ) + query = query.add_columns(query.objectformatter.fieldformat(display_field, orm_field)) filters = [fltr for fltr in [ t.create_filter(table, f) for f in fields for t in terms] @@ -50,9 +70,9 @@ def build_primary_query(session, searchtable, terms, collection, user, as_scalar if len(filters) > 0: reduced = reduce(or_, filters) - query = session.query(*q_fields).filter(reduced) + query = query.filter(reduced) query = filter_by_collection(model, query, collection) - return query.as_scalar() if as_scalar else query.order_by(id_field) + return query.query.as_scalar() if as_scalar else query.query.order_by(id_field) logger.info("no filters for query. model: %s fields: %s terms: %s", table, fields, terms) return None @@ -78,8 +98,13 @@ def run_primary_search(session, searchtable, terms, collection, user, limit, off 'totalCount': total_count, 'results': results, 'displayOrder': int( searchtable.find('displayOrder').text ), - 'fieldSpecs': [{'stringId': f.to_stringid(), 'isRelationship': False} - for f in make_fieldspecs(searchtable)] + 'fieldSpecs': [ + { + 'stringId': f.to_stringid(), + 'isRelationship': f.is_relationship(), + } + for f in make_fieldspecs(searchtable) + ] }} class SearchForm(forms.Form): diff --git a/specifyweb/backend/inheritance/api.py b/specifyweb/backend/inheritance/api.py index 6e622d94a9e..72f1e80b5db 100644 --- a/specifyweb/backend/inheritance/api.py +++ b/specifyweb/backend/inheritance/api.py @@ -1,63 +1,100 @@ +from typing import Callable, Iterable + from specifyweb.backend.inheritance.utils import get_cat_num_inheritance_setting, get_parent_cat_num_inheritance_setting -from specifyweb.specify.models import Collectionobject, Collectionobjectgroupjoin, Component - -def parent_inheritance_post_query_processing(query, tableid, field_specs, collection, user): - if tableid == 1029 and 'catalogNumber' in [fs.fieldspec.join_path[0].name for fs in field_specs if fs.fieldspec.join_path]: - if not get_parent_cat_num_inheritance_setting(collection, user): - return list(query) - - # Get the catalogNumber field index - catalog_number_field_index = [fs.fieldspec.join_path[0].name for fs in field_specs if fs.fieldspec.join_path].index('catalogNumber') + 1 - - # op_num 1 is refering to the filter equal, the inheritance will only work if we have cat num equal, other operators will not function - if field_specs[catalog_number_field_index - 1].op_num != 1: - return list(query) - - results = list(query) - updated_results = [] - - # Map results, replacing null catalog numbers with the parent catalog number - for result in results: - result = list(result) - if result[catalog_number_field_index] is None or result[catalog_number_field_index] == '': - component_id = result[0] # Assuming the first column is the child's ID - component_obj = Component.objects.filter(id=component_id).first() - if component_obj and component_obj.collectionobject: - result[catalog_number_field_index] = component_obj.collectionobject.catalognumber - updated_results.append(tuple(result)) - - return updated_results - - return query - -def cog_inheritance_post_query_processing(query, tableid, field_specs, collection, user): - if tableid == 1 and 'catalogNumber' in [fs.fieldspec.join_path[0].name for fs in field_specs if fs.fieldspec.join_path]: - if not get_cat_num_inheritance_setting(collection, user): - # query = query.filter(collectionobjectgroupjoin_1.isprimary == 1) - return list(query) - - # Get the catalogNumber field index - catalog_number_field_index = [fs.fieldspec.join_path[0].name for fs in field_specs if fs.fieldspec.join_path].index('catalogNumber') + 1 - - # op_num 1 is refering to the filter equal, the inheritance will only work if we have cat num equal, other operators will not function - if field_specs[catalog_number_field_index - 1].op_num != 1: - return list(query) - - results = list(query) - updated_results = [] - - # Map results, replacing null catalog numbers with the collection object group primary collection catalog number - for result in results: - result = list(result) - if result[catalog_number_field_index] is None or result[catalog_number_field_index] == '': - cojo = Collectionobjectgroupjoin.objects.filter(childco_id=result[0]).first() - if cojo: - primary_cojo = Collectionobjectgroupjoin.objects.filter( - parentcog=cojo.parentcog, isprimary=True).first() - if primary_cojo: - result[catalog_number_field_index] = primary_cojo.childco.catalognumber - updated_results.append(tuple(result)) - - return updated_results - - return query \ No newline at end of file +from specifyweb.specify.models import Collectionobjectgroupjoin, Component +from specifyweb.backend.stored_queries.queryfield import QueryField + + +def do_nothing[T](items: T) -> T: + return items + + +def parent_inheritance_query_processor(tableid: int, query_fields: list[QueryField], collection, user) -> Callable[[list], list]: + first_field_names = [qf.fieldspec.join_path[0].name for qf in query_fields if qf.fieldspec.join_path] + if tableid != 1029 or 'catalogNumber' not in first_field_names: + return do_nothing + + if not get_parent_cat_num_inheritance_setting(collection, user): + return do_nothing + + # Get the catalogNumber field index + catalog_number_field_index = first_field_names.index('catalogNumber') + 1 + + # op_num 1 is refering to the filter equal, the inheritance will only work if we have cat num equal, other operators will not function + if query_fields[catalog_number_field_index - 1].op_num != 1: + return do_nothing + + def _processor(row: list): + modified_row = list(row) + if modified_row[catalog_number_field_index] is None or modified_row[catalog_number_field_index] == '': + component_id = row[0] + # REFACTOR:(perf) This is relatively pretty slow, we make a + # database query for every item in the iterable we're processing + component_obj = Component.objects.filter( + id=component_id).select_related("collectionobject").first() + if component_obj and component_obj.collectionobject: + modified_row[catalog_number_field_index] = component_obj.collectionobject.catalognumber + + return modified_row + + return _processor + + +def cog_inheritance_query_processor(tableid: int, query_fields: list[QueryField], collection, user) -> Callable[[list], list]: + first_field_names = [ + qf.fieldspec.join_path[0].name.lower() + for qf in query_fields + if qf.fieldspec.join_path + ] + if tableid != 1 or 'catalognumber' not in first_field_names: + return do_nothing + + if not get_cat_num_inheritance_setting(collection, user): + return do_nothing + + # Get the catalogNumber field index + catalog_number_field_index = first_field_names.index('catalognumber') + 1 + + # op_num 1 is refering to the filter equal, the inheritance will only work if we have cat num equal, other operators will not function + if query_fields[catalog_number_field_index - 1].op_num != 1: + return do_nothing + + # For a given result, replace null catalog numbers with the collection + # object group primary collection catalog number + def _processor(row: list): + modified_row = list(row) + if modified_row[catalog_number_field_index] is None or modified_row[catalog_number_field_index] == '': + child_co_id = modified_row[0] + # REFACTOR:(perf) We should be able to combine the queries for cojo + # and primary cojo to make one explict database query rather than + # two. + # Like parent_inheritance_query_processor, this is slow and + # makes multiple queries for each item that needs processed + cojo = Collectionobjectgroupjoin.objects.filter( + childco_id=child_co_id).select_related("parentcog").first() + if cojo: + primary_cojo = Collectionobjectgroupjoin.objects.filter( + parentcog=cojo.parentcog, isprimary=True).select_related("childco").first() + if primary_cojo: + modified_row[catalog_number_field_index] = primary_cojo.childco.catalognumber + return modified_row + + return _processor + + +def DefaultQueryProcessors(tableid: int, query_fields: Iterable[QueryField], collection, user) -> list[Callable[[list], list]]: + visible_query_fields = list(filter(lambda qfield: qfield.display, query_fields)) + return [ + parent_inheritance_query_processor( + tableid=tableid, + query_fields=visible_query_fields, + collection=collection, + user=user + ), + cog_inheritance_query_processor( + tableid=tableid, + query_fields=visible_query_fields, + collection=collection, + user=user + ) + ] diff --git a/specifyweb/backend/permissions/initialize.py b/specifyweb/backend/permissions/initialize.py index f2ab54ac44b..ef0746da69c 100644 --- a/specifyweb/backend/permissions/initialize.py +++ b/specifyweb/backend/permissions/initialize.py @@ -2,8 +2,10 @@ import logging from collections import defaultdict +from typing import TypedDict from django.db import transaction, connection +from django.db.models.functions import Lower from django.apps import apps from specifyweb.specify.datamodel import datamodel @@ -79,6 +81,13 @@ def create_admins(apps=apps) -> None: action="%", ) +_USERTYPES_TO_ROLE_NAMES = { + "Manager": "Collection Admin", + "FullAccess": "Full Access - Legacy", + "LimitedAccess": "Read Only - Legacy", + "Guest": "Read Only - Legacy", +} + def assign_users_to_roles(apps=apps) -> None: Role = apps.get_model('permissions', 'Role') UserPolicy = apps.get_model('permissions', 'UserPolicy') @@ -93,13 +102,6 @@ def assign_users_to_roles(apps=apps) -> None: "Guest": "This is a legacy role that provides read only access and is assigned to user in the Limited Access and Guest groups from Specify 6. This is to maintain consistency with the permissions granted these users in previous versions of Specify 7.", } - ROLE_NAMES = { - "Manager": "Collection Admin", - "FullAccess": "Full Access - Legacy", - "LimitedAccess": "Read Only - Legacy", - "Guest": "Read Only - Legacy", - } - results = [] with connection.cursor() as cursor: @@ -129,20 +131,33 @@ def assign_users_to_roles(apps=apps) -> None: for user_id, user_name, user_type, collection_id, collection_name in results: # REFACTOR: If we want to exlcude all other roles, why don't we write # the exlcusion in the query rather than evaluate in Python? - if user_type not in ROLE_NAMES.keys(): + if user_type not in _USERTYPES_TO_ROLE_NAMES.keys(): continue - role_name = ROLE_NAMES.get(user_type, f"{user_type} - {collection_name}") + role_name = _USERTYPES_TO_ROLE_NAMES.get(user_type, f"{user_type} - {collection_name}") role_description = ROLE_DESCRIPTIONS.get(user_type, "No description available.") - logger.info(f"Assigned user {user_name} to role {role_name} for collection {collection_name}.") - role, _ = Role.objects.get_or_create( + # BUG: Starting in v7.11.2 (e876cbe), duplicate roles could be created + # when calling run_key_migration_functions if the description for a + # default role had changed + # Once run_key_migration_functions was moved to container startup in + # v7.12.0 (8646b82), this had an even greater impact. + # This means after that if a user had modified the description of any + # default Role, there will already be a duplicate in their database... + role = Role.objects.filter( collection_id=collection_id, - name=role_name, - defaults={ - "description": role_description - } - ) + name=role_name + ).order_by("pk").first() + + if role is None: + role = Role.objects.create( + collection_id=collection_id, + name=role_name, + description=role_description + ) + + # BUG: What if the user was intentionally removed from this role? + # This would incorrectly re-add them :( UserRole.objects.get_or_create( specifyuser_id=user_id, role=role @@ -155,6 +170,7 @@ def assign_users_to_roles(apps=apps) -> None: resource=CollectionAccessPT.access.resource(), action=CollectionAccessPT.access.action() ) + logger.info(f"Assigned user {user_name} to role {role_name} for collection {collection_name}.") def assign_users_to_roles_during_testing(apps=apps) -> None: from specifyweb.backend.context.views import users_collections_for_sp6 @@ -207,366 +223,271 @@ def assign_users_to_roles_during_testing(apps=apps) -> None: action=CollectionAccessPT.access.action(), ) -def create_roles(apps = apps) -> None: - LibraryRole = apps.get_model('permissions', 'LibraryRole') - Role = apps.get_model('permissions', 'Role') - Collection = apps.get_model('specify', 'Collection') - Specifyuser = apps.get_model('specify', 'Specifyuser') - - role, is_new = LibraryRole.objects.get_or_create(name="Assign Roles", description="Gives ability to assign existing roles to existing users.") - if is_new: - role.policies.get_or_create(resource="/permissions/user/roles", action="read") - role.policies.get_or_create(resource="/permissions/user/roles", action="update") - role.policies.get_or_create(resource="/permissions/roles", action="read") - - role, is_new = LibraryRole.objects.get_or_create(name="Create Data Sets", description="Allows creating new Data Sets in the WorkBench, without ability to upload them.\n\nSuch user would create a Data Sets, map the columns, fix validation issues, and then transfer the Data Set to another user for review and upload.") - if is_new: - role.policies.get_or_create(resource="/workbench/dataset", action="create") - role.policies.get_or_create(resource="/workbench/dataset", action="update") - role.policies.get_or_create(resource="/workbench/dataset", action="delete") - role.policies.get_or_create(resource="/workbench/dataset", action="validate") - role.policies.get_or_create(resource="/workbench/dataset", action="transfer") - - role, is_new = LibraryRole.objects.get_or_create(name="Edit Forms and Global Preferences", description="Grants full access to resource editor. This allows editing form definitions and global Specify preferences.") - if is_new: - role.policies.get_or_create(resource="/table/spappresource", action="read") - role.policies.get_or_create(resource="/table/spappresource", action="create") - role.policies.get_or_create(resource="/table/spappresource", action="update") - role.policies.get_or_create(resource="/table/spappresource", action="delete") - role.policies.get_or_create(resource="/table/spappresourcedata", action="read") - role.policies.get_or_create(resource="/table/spappresourcedata", action="create") - role.policies.get_or_create(resource="/table/spappresourcedata", action="update") - role.policies.get_or_create(resource="/table/spappresourcedata", action="delete") - role.policies.get_or_create(resource="/table/spappresourcedir", action="read") - role.policies.get_or_create(resource="/table/spappresourcedir", action="create") - role.policies.get_or_create(resource="/table/spappresourcedir", action="update") - role.policies.get_or_create(resource="/table/spappresourcedir", action="delete") - role.policies.get_or_create(resource="/table/spviewsetobj", action="read") - role.policies.get_or_create(resource="/table/spviewsetobj", action="create") - role.policies.get_or_create(resource="/table/spviewsetobj", action="update") - role.policies.get_or_create(resource="/table/spviewsetobj", action="delete") - - role, is_new = LibraryRole.objects.get_or_create(name="Edit Pick lists", description="Gives full access to modifying pick lists.") - if is_new: - role.policies.get_or_create(resource="/table/picklist", action="read") - role.policies.get_or_create(resource="/table/picklist", action="create") - role.policies.get_or_create(resource="/table/picklist", action="update") - role.policies.get_or_create(resource="/table/picklist", action="delete") - role.policies.get_or_create(resource="/table/picklistitem", action="read") - role.policies.get_or_create(resource="/table/picklistitem", action="create") - role.policies.get_or_create(resource="/table/picklistitem", action="update") - role.policies.get_or_create(resource="/table/picklistitem", action="delete") - - role, is_new = LibraryRole.objects.get_or_create(name="Edit Taxon Tree", description="Gives full access to the Taxon Tree.\n\nWarning: Taxon Tree may be shared between collections. Edits in one collection may affect another.") - if is_new: - role.policies.get_or_create(resource="/tree/edit/taxon", action="merge") - role.policies.get_or_create(resource="/tree/edit/taxon", action="move") - role.policies.get_or_create(resource="/tree/edit/taxon", action="synonymize") - role.policies.get_or_create(resource="/tree/edit/taxon", action="desynonymize") - role.policies.get_or_create(resource="/tree/edit/taxon", action="repair") - role.policies.get_or_create(resource="/table/taxon", action="read") - role.policies.get_or_create(resource="/table/taxon", action="update") - role.policies.get_or_create(resource="/table/taxon", action="delete") - role.policies.get_or_create(resource="/table/taxon", action="create") - role.policies.get_or_create(resource="/table/taxonattribute", action="read") - role.policies.get_or_create(resource="/table/taxonattribute", action="delete") - role.policies.get_or_create(resource="/table/taxonattribute", action="update") - role.policies.get_or_create(resource="/table/taxonattribute", action="create") - role.policies.get_or_create(resource="/table/taxoncitation", action="read") - role.policies.get_or_create(resource="/table/taxoncitation", action="create") - role.policies.get_or_create(resource="/table/taxoncitation", action="update") - role.policies.get_or_create(resource="/table/taxoncitation", action="delete") - role.policies.get_or_create(resource="/table/taxontreedef", action="read") - role.policies.get_or_create(resource="/table/taxontreedef", action="update") - role.policies.get_or_create(resource="/table/taxontreedefitem", action="read") - role.policies.get_or_create(resource="/table/taxontreedefitem", action="update") - role.policies.get_or_create(resource="/table/taxonattachment", action="read") - role.policies.get_or_create(resource="/table/taxonattachment", action="create") - role.policies.get_or_create(resource="/table/taxonattachment", action="update") - role.policies.get_or_create(resource="/table/taxonattachment", action="delete") - - role, is_new = LibraryRole.objects.get_or_create(name="Export Data", description="Gives ability to export DwC Archive from any table.") - if is_new: - role.policies.get_or_create(resource="/export/dwca", action="execute") - role.policies.get_or_create(resource="/table/%", action="read") - - role, is_new = LibraryRole.objects.get_or_create(name="Full Data Access", description="Grants read and edit access to all tables") - if is_new: - role.policies.get_or_create(resource="/table/%", action="read") - role.policies.get_or_create(resource="/table/%", action="create") - role.policies.get_or_create(resource="/table/%", action="update") - role.policies.get_or_create(resource="/table/%", action="delete") - - role, is_new = LibraryRole.objects.get_or_create(name="Full WorkBench access", description="Gives full access to the WorkBench. Allows creating new records in any table.") - if is_new: - role.policies.get_or_create(resource="/workbench/dataset", action="create") - role.policies.get_or_create(resource="/workbench/dataset", action="update") - role.policies.get_or_create(resource="/workbench/dataset", action="delete") - role.policies.get_or_create(resource="/workbench/dataset", action="validate") - role.policies.get_or_create(resource="/workbench/dataset", action="upload") - role.policies.get_or_create(resource="/workbench/dataset", action="unupload") - role.policies.get_or_create(resource="/workbench/dataset", action="transfer") - role.policies.get_or_create(resource="/table/%", action="read") - role.policies.get_or_create(resource="/table/%", action="create") - - role, is_new = LibraryRole.objects.get_or_create(name="Inspect Audit Log", description="Allows to run a query builder query on the Audit Log table.") - if is_new: - role.policies.get_or_create(resource="/table/spauditlog", action="read") - role.policies.get_or_create(resource="/table/spauditlogfield", action="read") - role.policies.get_or_create(resource="/querybuilder/query", action="execute") - - role, is_new = LibraryRole.objects.get_or_create(name="Manage Interactions", description="Grants full access to interactions tables.") - if is_new: - role.policies.get_or_create(resource="/table/appraisal", action="read") - role.policies.get_or_create(resource="/table/appraisal", action="create") - role.policies.get_or_create(resource="/table/appraisal", action="update") - role.policies.get_or_create(resource="/table/appraisal", action="delete") - role.policies.get_or_create(resource="/table/borrow", action="read") - role.policies.get_or_create(resource="/table/borrow", action="create") - role.policies.get_or_create(resource="/table/borrow", action="delete") - role.policies.get_or_create(resource="/table/borrow", action="update") - role.policies.get_or_create(resource="/table/borrowagent", action="read") - role.policies.get_or_create(resource="/table/borrowagent", action="create") - role.policies.get_or_create(resource="/table/borrowagent", action="update") - role.policies.get_or_create(resource="/table/borrowagent", action="delete") - role.policies.get_or_create(resource="/table/borrowmaterial", action="read") - role.policies.get_or_create(resource="/table/borrowmaterial", action="create") - role.policies.get_or_create(resource="/table/borrowmaterial", action="update") - role.policies.get_or_create(resource="/table/borrowmaterial", action="delete") - role.policies.get_or_create(resource="/table/borrowreturnmaterial", action="read") - role.policies.get_or_create(resource="/table/borrowreturnmaterial", action="create") - role.policies.get_or_create(resource="/table/borrowreturnmaterial", action="update") - role.policies.get_or_create(resource="/table/borrowreturnmaterial", action="delete") - role.policies.get_or_create(resource="/table/deaccession", action="read") - role.policies.get_or_create(resource="/table/deaccession", action="create") - role.policies.get_or_create(resource="/table/deaccession", action="update") - role.policies.get_or_create(resource="/table/deaccession", action="delete") - role.policies.get_or_create(resource="/table/deaccessionagent", action="read") - role.policies.get_or_create(resource="/table/deaccessionagent", action="create") - role.policies.get_or_create(resource="/table/deaccessionagent", action="update") - role.policies.get_or_create(resource="/table/deaccessionagent", action="delete") - role.policies.get_or_create(resource="/table/disposal", action="read") - role.policies.get_or_create(resource="/table/disposal", action="create") - role.policies.get_or_create(resource="/table/disposal", action="update") - role.policies.get_or_create(resource="/table/disposal", action="delete") - role.policies.get_or_create(resource="/table/disposalagent", action="read") - role.policies.get_or_create(resource="/table/disposalagent", action="create") - role.policies.get_or_create(resource="/table/disposalagent", action="update") - role.policies.get_or_create(resource="/table/disposalagent", action="delete") - role.policies.get_or_create(resource="/table/disposalpreparation", action="read") - role.policies.get_or_create(resource="/table/disposalpreparation", action="create") - role.policies.get_or_create(resource="/table/disposalpreparation", action="update") - role.policies.get_or_create(resource="/table/disposalpreparation", action="delete") - role.policies.get_or_create(resource="/table/exchangein", action="read") - role.policies.get_or_create(resource="/table/exchangein", action="create") - role.policies.get_or_create(resource="/table/exchangein", action="update") - role.policies.get_or_create(resource="/table/exchangein", action="delete") - role.policies.get_or_create(resource="/table/exchangeinprep", action="read") - role.policies.get_or_create(resource="/table/exchangeinprep", action="create") - role.policies.get_or_create(resource="/table/exchangeinprep", action="delete") - role.policies.get_or_create(resource="/table/exchangeinprep", action="update") - role.policies.get_or_create(resource="/table/exchangeout", action="read") - role.policies.get_or_create(resource="/table/exchangeout", action="update") - role.policies.get_or_create(resource="/table/exchangeout", action="delete") - role.policies.get_or_create(resource="/table/exchangeout", action="create") - role.policies.get_or_create(resource="/table/exchangeoutprep", action="read") - role.policies.get_or_create(resource="/table/exchangeoutprep", action="create") - role.policies.get_or_create(resource="/table/exchangeoutprep", action="update") - role.policies.get_or_create(resource="/table/exchangeoutprep", action="delete") - role.policies.get_or_create(resource="/table/gift", action="read") - role.policies.get_or_create(resource="/table/gift", action="create") - role.policies.get_or_create(resource="/table/gift", action="update") - role.policies.get_or_create(resource="/table/gift", action="delete") - role.policies.get_or_create(resource="/table/giftagent", action="read") - role.policies.get_or_create(resource="/table/giftagent", action="create") - role.policies.get_or_create(resource="/table/giftagent", action="update") - role.policies.get_or_create(resource="/table/giftagent", action="delete") - role.policies.get_or_create(resource="/table/giftpreparation", action="read") - role.policies.get_or_create(resource="/table/giftpreparation", action="update") - role.policies.get_or_create(resource="/table/giftpreparation", action="delete") - role.policies.get_or_create(resource="/table/giftpreparation", action="create") - role.policies.get_or_create(resource="/table/inforequest", action="read") - role.policies.get_or_create(resource="/table/inforequest", action="create") - role.policies.get_or_create(resource="/table/inforequest", action="update") - role.policies.get_or_create(resource="/table/inforequest", action="delete") - role.policies.get_or_create(resource="/table/loan", action="read") - role.policies.get_or_create(resource="/table/loan", action="create") - role.policies.get_or_create(resource="/table/loan", action="update") - role.policies.get_or_create(resource="/table/loan", action="delete") - role.policies.get_or_create(resource="/table/loanagent", action="read") - role.policies.get_or_create(resource="/table/loanagent", action="create") - role.policies.get_or_create(resource="/table/loanagent", action="update") - role.policies.get_or_create(resource="/table/loanagent", action="delete") - role.policies.get_or_create(resource="/table/loanpreparation", action="read") - role.policies.get_or_create(resource="/table/loanpreparation", action="create") - role.policies.get_or_create(resource="/table/loanpreparation", action="update") - role.policies.get_or_create(resource="/table/loanpreparation", action="delete") - role.policies.get_or_create(resource="/table/loanreturnpreparation", action="read") - role.policies.get_or_create(resource="/table/loanreturnpreparation", action="create") - role.policies.get_or_create(resource="/table/loanreturnpreparation", action="update") - role.policies.get_or_create(resource="/table/loanreturnpreparation", action="delete") - role.policies.get_or_create(resource="/table/permit", action="read") - role.policies.get_or_create(resource="/table/permit", action="create") - role.policies.get_or_create(resource="/table/permit", action="update") - role.policies.get_or_create(resource="/table/permit", action="delete") - role.policies.get_or_create(resource="/table/shipment", action="read") - role.policies.get_or_create(resource="/table/shipment", action="create") - role.policies.get_or_create(resource="/table/shipment", action="update") - role.policies.get_or_create(resource="/table/shipment", action="delete") - role.policies.get_or_create(resource="/table/borrowattachment", action="read") - role.policies.get_or_create(resource="/table/borrowattachment", action="create") - role.policies.get_or_create(resource="/table/borrowattachment", action="update") - role.policies.get_or_create(resource="/table/borrowattachment", action="delete") - role.policies.get_or_create(resource="/table/deaccessionattachment", action="read") - role.policies.get_or_create(resource="/table/deaccessionattachment", action="create") - role.policies.get_or_create(resource="/table/deaccessionattachment", action="update") - role.policies.get_or_create(resource="/table/deaccessionattachment", action="delete") - role.policies.get_or_create(resource="/table/disposalattachment", action="read") - role.policies.get_or_create(resource="/table/disposalattachment", action="create") - role.policies.get_or_create(resource="/table/disposalattachment", action="update") - role.policies.get_or_create(resource="/table/disposalattachment", action="delete") - role.policies.get_or_create(resource="/table/giftattachment", action="read") - role.policies.get_or_create(resource="/table/giftattachment", action="create") - role.policies.get_or_create(resource="/table/giftattachment", action="update") - role.policies.get_or_create(resource="/table/giftattachment", action="delete") - role.policies.get_or_create(resource="/table/loanattachment", action="create") - role.policies.get_or_create(resource="/table/loanattachment", action="update") - role.policies.get_or_create(resource="/table/loanattachment", action="delete") - role.policies.get_or_create(resource="/table/loanattachment", action="read") - role.policies.get_or_create(resource="/table/permitattachment", action="read") - role.policies.get_or_create(resource="/table/permitattachment", action="create") - role.policies.get_or_create(resource="/table/permitattachment", action="update") - role.policies.get_or_create(resource="/table/permitattachment", action="delete") - - role, is_new = LibraryRole.objects.get_or_create(name="Print Reports", description="Gives ability to execute reports from any table.") - if is_new: - role.policies.get_or_create(resource="/report", action="execute") - role.policies.get_or_create(resource="/table/%", action="read") - - role, is_new = LibraryRole.objects.get_or_create(name="Read-Only Access", description="Grants read access to all tables") - if is_new: - role.policies.get_or_create(resource="/table/%", action="read") - - role, is_new = LibraryRole.objects.get_or_create(name="Run Queries", description="Gives access to execute queries on any table, export query results and create record sets.") - if is_new: - role.policies.get_or_create(resource="/querybuilder/query", action="execute") - role.policies.get_or_create(resource="/querybuilder/query", action="export_csv") - role.policies.get_or_create(resource="/querybuilder/query", action="export_kml") - role.policies.get_or_create(resource="/querybuilder/query", action="create_recordset") - role.policies.get_or_create(resource="/table/spquery", action="read") - role.policies.get_or_create(resource="/table/spquery", action="create") - role.policies.get_or_create(resource="/table/spquery", action="update") - role.policies.get_or_create(resource="/table/spquery", action="delete") - role.policies.get_or_create(resource="/table/spqueryfield", action="read") - role.policies.get_or_create(resource="/table/spqueryfield", action="create") - role.policies.get_or_create(resource="/table/spqueryfield", action="update") - role.policies.get_or_create(resource="/table/spqueryfield", action="delete") - role.policies.get_or_create(resource="/table/recordset", action="read") - role.policies.get_or_create(resource="/table/recordset", action="create") - role.policies.get_or_create(resource="/table/recordset", action="update") - role.policies.get_or_create(resource="/table/recordset", action="delete") - role.policies.get_or_create(resource="/table/recordsetitem", action="read") - role.policies.get_or_create(resource="/table/recordsetitem", action="create") - role.policies.get_or_create(resource="/table/recordsetitem", action="update") - role.policies.get_or_create(resource="/table/recordsetitem", action="delete") - role.policies.get_or_create(resource="/table/%", action="read") - - role, is_new = LibraryRole.objects.get_or_create(name="Security Admin", description="Grants full access to security settings within a collection.") - if is_new: - role.policies.get_or_create(resource="/permissions/%", action="read") - role.policies.get_or_create(resource="/permissions/%", action="update") - role.policies.get_or_create(resource="/permissions/%", action="create") - role.policies.get_or_create(resource="/permissions/%", action="delete") - role.policies.get_or_create(resource="/permissions/%", action="copy_from_library") - role.policies.get_or_create(resource="/table/specifyuser", action="read") - role.policies.get_or_create(resource="/table/specifyuser", action="create") - role.policies.get_or_create(resource="/table/specifyuser", action="update") - role.policies.get_or_create(resource="/table/specifyuser", action="delete") - - - collection_admin, is_new = LibraryRole.objects.get_or_create( - name="Collection Admin", - description="Grants full access to all abilities within a collection.") - if is_new: - collection_admin.policies.get_or_create(resource="%", action="%") - - read_only, is_new = LibraryRole.objects.get_or_create( - name="Read Only - Legacy", - description="This is a legacy role that provides " +_INTERACTION_TABLES = ( + "appraisal", "inforequest", "permit", "shipment", + "borrow", "borrowagent", "borrowmaterial", "borrowreturnmaterial", + "deaccession", "deaccessionagent", + "disposal", "disposalagent", "disposalpreparation", + "exchangein", "exchangeinprep", + "exchangeout", "exchangeoutprep", + "gift", "giftagent", "giftpreparation", + "loan", "loanagent", "loanpreparation", "loanreturnpreparation", + "borrowattachment", "deaccessionattachment", "disposalattachment", + "giftattachment", "loanattachment", "permitattachment" +) + +class DefaultRole(TypedDict): + description: str + policies: dict[str, tuple[str, ...]] + +LIBRARY_ROLES: dict[str, DefaultRole] = { + "Assign Roles": { + "description": "Gives ability to assign existing roles to existing users.", + "policies": { + "/permissions/user/roles": ("read", "update"), + "/permissions/roles": ("read",) + } + }, + "Create Data Sets": { + "description": "Allows creating new Data Sets in the WorkBench, without ability to upload them.\n\nSuch user would create a Data Sets, map the columns, fix validation issues, and then transfer the Data Set to another user for review and upload.", + "policies": { + "/workbench/dataset": ("create", "update", "delete", "validate", "transfer") + } + }, + "Edit Forms and Global Preferences": { + "description": "Grants full access to resource editor. This allows editing form definitions and global Specify preferences.", + "policies": { + "/table/spappresource": ("read", "create", "update", "delete"), + "/table/spappresourcedata": ("read", "create", "update", "delete"), + "/table/spappresourcedir": ("read", "create", "update", "delete"), + "/table/spviewsetobj": ("read", "create", "update", "delete") + } + }, + "Edit Pick lists": { + "description": "Gives full access to modifying pick lists.", + "policies": { + "/table/picklist": ("read", "create", "update", "delete"), + "/table/picklistitem": ("read", "create", "update", "delete") + } + }, + "Edit Taxon Tree": { + "description": "Gives full access to the Taxon Tree.\n\nWarning: Taxon Tree may be shared between collections. Edits in one collection may affect another.", + "policies": { + "/tree/edit/taxon": ("merge", "move", "synonymize", "desynonymize", "repair"), + "/table/taxon": ("read", "create", "update", "delete"), + "/table/taxonattribute": ("read", "create", "update", "delete"), + "/table/taxoncitation": ("read", "create", "update", "delete"), + "/table/taxontreedef": ("read", "update"), + "/table/taxontreedefitem": ("read", "update"), + "/table/taxonattachment": ("read", "create", "update", "delete") + } + }, + "Export Data": { + "description": "Gives ability to export DwC Archive from any table.", + "policies": { + "/export/dwca": ("execute",), + "/table/%": ("read",) + } + }, + "Full Data Access": { + "description": "Grants read and edit access to all tables", + "policies": { + "/table/%": ("read", "create", "update", "delete") + } + }, + "Full WorkBench access": { + "description": "Gives full access to the WorkBench. Allows creating new records in any table.", + "policies": { + "/workbench/dataset": ("create", "update", "delete", "validate", "upload", "unupload", "transfer"), + "/table/%": ("read", "create") + } + }, + "Inspect Audit Log": { + "description": "Allows to run a query builder query on the Audit Log table.", + "policies": { + "/table/spauditlog": ("read",), + "/table/spauditlogfield": ("read",), + "/querybuilder/query": ("execute",) + } + }, + "Manage Interactions": { + "description": "Grants full access to interactions tables.", + "policies": { + f"/table/{interaction_table}": ("read", "create", "update", "delete") + for interaction_table in _INTERACTION_TABLES + } + }, + "Print Reports": { + "description": "Gives ability to execute reports from any table.", + "policies": { + "/report": ("execute",), + "/table/%": ("read",) + } + }, + "Read-Only Access": { + "description": "Grants read access to all tables", + "policies": { + "/table/%": ("read",) + } + }, + "Run Queries": { + "description": "Gives access to execute queries on any table, export query results and create record sets.", + "policies": { + "/querybuilder/query": ("execute", "export_csv", "export_kml", "create_recordset"), + "/table/spquery": ("read", "create", "update", "delete"), + "/table/spqueryfield": ("read", "create", "update", "delete"), + "/table/recordset": ("read", "create", "update", "delete"), + "/table/recordsetitem": ("read", "create", "update", "delete"), + "/table/%": ("read", ) + } + }, + "Security Admin": { + "description": "Grants full access to security settings within a collection.", + "policies": { + "/permissions/%": ("read", "create", "update", "delete", "copy_from_library"), + "/table/specifyuser": ("read", "create", "update", "delete") + } + }, + "Collection Admin": { + "description": "Grants full access to all abilities within a collection.", + "policies": { + "%": ("%",) + } + }, + "Read Only - Legacy": { + "description": "This is a legacy role that provides " "read only access and is assigned to user in the " "Limited Access and Guest groups from Specify 6. " "This is to maintain consistency with the permissions " - "granted these users in previous versions of Specify 7." - ) - if is_new: - read_only.policies.get_or_create(resource="/field/%", action="%") - read_only.policies.get_or_create(resource="/table/%", action="read") - - read_only.policies.get_or_create(resource="/querybuilder/%", action="%") - - full_access, is_new = LibraryRole.objects.get_or_create( - name='Full Access - Legacy', - description="This is a legacy role that provides " + "granted these users in previous versions of Specify 7.", + "policies": { + "/field/%": ("%",), + "/table/%": ("read",), + "/querybuilder/%": ("%",) + } + }, + "Full Access - Legacy": { + "description": "This is a legacy role that provides " "read write access to most Specify resources and " "is assigned to users in the Full Access group from Specify 6. " "This is to maintain consistency with the permissions " - "granted these users in previous versions of Specify 7." + "granted these users in previous versions of Specify 7.", + "policies": { + "/field/%": ("%",), + "/table/%": ("read",), + **{ + f"/table/{table.name.lower()}": ("%",) + for table in datamodel.tables + if not table.system or table.name.endswith("Attachment") + }, + "/table/picklist": ("%",), + "/table/picklistitem": ("%",), + "/table/recordset": ("%",), + "/table/recordsetitem": ("%",), + "/table/spquery": ("%",), + "/table/spqueryfield": ("%",), + "/tree/%": ("%",), + "/report": ("%",), + "/querybuilder/%": ("%",) + } + } +} + +class DefaultRole(TypedDict): + description: str + policies: dict[str, tuple[str, ...]] + +def _create_role_and_policies(role_model, role_policy_model, role_name: str, role_filters: dict = dict()): + resolved_role: DefaultRole = LIBRARY_ROLES[role_name] + role = role_model.objects.filter( + name=role_name, + **role_filters + ).order_by('pk').first() + if role is not None: + return role + + role = role_model.objects.create( + name=role_name, + description=resolved_role["description"], + **role_filters ) - if is_new: - full_access.policies.get_or_create(resource="/field/%", action="%") - full_access.policies.get_or_create(resource="/table/%", action="read") - for table in datamodel.tables: - if not table.system or table.name.endswith('Attachment'): - full_access.policies.get_or_create(resource=f"/table/{table.name.lower()}", action="%") + role_policy_model.objects.bulk_create( + [ + role_policy_model( + role=role, + resource=resource, + action=action + ) + for resource, actions in resolved_role["policies"].items() + for action in actions + ] + ) + return role - full_access.policies.get_or_create(resource="/table/picklist", action="%") - full_access.policies.get_or_create(resource="/table/picklistitem", action="%") +def create_missing_library_roles(apps = apps): + LibraryRole = apps.get_model('permissions', 'LibraryRole') + LibraryRolePolicy = apps.get_model('permissions', 'LibraryRolePolicy') + all_roles = set(LIBRARY_ROLES.keys()) + + existing_role_names = set( + LibraryRole.objects.annotate( + name_lower=Lower("name") + ).filter( + name_lower__in=(role.lower() for role in all_roles) + ).values_list("name_lower", flat=True) + ) - full_access.policies.get_or_create(resource="/table/recordset", action="%") - full_access.policies.get_or_create(resource="/table/recordsetitem", action="%") + missing_roles = { + role for role in all_roles + if role.lower() not in existing_role_names + } + for missing_role in missing_roles: + _create_role_and_policies( + LibraryRole, + LibraryRolePolicy, + missing_role + ) - full_access.policies.get_or_create(resource="/table/spquery", action="%") - full_access.policies.get_or_create(resource="/table/spqueryfield", action="%") - full_access.policies.get_or_create(resource="/tree/%", action="%") - full_access.policies.get_or_create(resource="/report", action="%") - full_access.policies.get_or_create(resource="/querybuilder/%", action="%") +def create_roles(apps = apps) -> None: + Role = apps.get_model('permissions', 'Role') + RolePolicy = apps.get_model('permissions', 'RolePolicy') + Collection = apps.get_model('specify', 'Collection') + Specifyuser = apps.get_model('specify', 'Specifyuser') + + create_missing_library_roles(apps) # copy the appropriate roles into the individual collections. - users = Specifyuser.objects.all() - user_types = {user.usertype for user in users} - - if 'Guest' in user_types or 'LimitedAccess' in user_types: - for collection in Collection.objects.all(): - r, is_new = Role.objects.get_or_create( - collection_id=collection.id, - name=read_only.name, - description=read_only.description, + user_types = Specifyuser.objects.all().values_list("usertype", flat=True).distinct() + + has_guest = 'Guest' in user_types or 'LimitedAccess' in user_types + has_full_access = 'FullAccess' in user_types + + for collection_id in Collection.objects.all().values_list("pk", flat=True): + if has_guest: + _create_role_and_policies( + Role, + RolePolicy, + _USERTYPES_TO_ROLE_NAMES.get('Guest', 'Read Only - Legacy'), + { + "collection_id": collection_id + } ) - if is_new: - for lp in read_only.policies.all(): - r.policies.get_or_create(resource=lp.resource, action=lp.action) - - if 'FullAccess' in user_types: - for collection in Collection.objects.all(): - r, is_new = Role.objects.get_or_create( - collection_id=collection.id, - name=full_access.name, - description=full_access.description, + if has_full_access: + _create_role_and_policies( + Role, + RolePolicy, + _USERTYPES_TO_ROLE_NAMES.get('FullAccess', 'Full Access - Legacy'), + { + "collection_id": collection_id + } ) - if is_new: - for lp in full_access.policies.all(): - r.policies.get_or_create(resource=lp.resource, action=lp.action) - - - for collection_id in Collection.objects.values_list('id', flat=True): - # Copy the collection admin role into the collection roles. - ca, is_new = Role.objects.get_or_create( - collection_id=collection_id, - name=collection_admin.name, - description=collection_admin.description, + _create_role_and_policies( + Role, + RolePolicy, + _USERTYPES_TO_ROLE_NAMES.get('Manager', 'Collection Admin'), + { + "collection_id": collection_id + } ) - if is_new: - for lp in collection_admin.policies.all(): - ca.policies.get_or_create(resource=lp.resource, action=lp.action) \ No newline at end of file diff --git a/specifyweb/backend/report_runner/tests.py b/specifyweb/backend/report_runner/tests.py index 501deb776c1..60fcd8a1f22 100644 --- a/specifyweb/backend/report_runner/tests.py +++ b/specifyweb/backend/report_runner/tests.py @@ -1,16 +1,180 @@ -""" -This file demonstrates writing tests using the unittest module. These will pass -when you run "manage.py test". +import json +from unittest.mock import Mock, patch -Replace this with more appropriate tests for your application. -""" +from django.test import Client, override_settings -from django.test import TestCase +from specifyweb.backend.stored_queries.tests.test_views.raw_query import ( + get_simple_query, +) +from specifyweb.backend.stored_queries.tests.tests import SQLAlchemySetup +from specifyweb.specify.api.crud import post_resource +from specifyweb.specify.models import Spreport +from specifyweb.specify.tests.test_api import ApiTests -class SimpleTest(TestCase): - def test_basic_addition(self): - """ - Tests that 1 + 1 always equals 2. - """ - self.assertEqual(1 + 1, 2) +class TestRunReport(ApiTests): + + @override_settings( + REPORT_RUNNER_HOST='report-runner', + REPORT_RUNNER_PORT='8080', + ) + @patch('specifyweb.backend.report_runner.views.requests.post') + @patch('specifyweb.backend.report_runner.views.run_query') + def test_run_returns_pdf( + self, + run_query: Mock, + requests_post: Mock, + ): + query_json = json.dumps({'name': 'New Query'}) + parameters_json = json.dumps( + {'title': 'Collection Object Report'} + ) + report_jrxml = '' + pdf_content = b'%PDF-1.4 test report' + + report_data = { + 'fields': [ + 'id', + '1.collectionobject.catalogNumber', + ], + 'rows': [ + [ + self.collectionobjects[0].id, + 'num-0', + ], + ], + } + + run_query.return_value = report_data + requests_post.return_value.status_code = 200 + requests_post.return_value.content = pdf_content + + client = Client() + client.force_login(self.specifyuser) + + response = client.post( # calls the real specify endpoint + '/report_runner/run/', + { + 'query': query_json, + 'parameters': parameters_json, + 'report': report_jrxml, + }, + ) + + self._assertStatusCodeEqual(response, 200) + self.assertEqual(response['Content-Type'], 'application/pdf') ## it checks if user receives the pdf + self.assertEqual(response.content, pdf_content) + + run_query.assert_called_once_with( + self.collection, + self.specifyuser, + query_json, + ) + + requests_post.assert_called_once() + request_url = requests_post.call_args.args[0] + request_data = requests_post.call_args.kwargs['data'] + + self.assertEqual( + request_url, + 'http://report-runner:8080/report', + ) + self.assertEqual(request_data['report'], report_jrxml) + self.assertEqual( + request_data['parameters'], + parameters_json, + ) + self.assertEqual( + json.loads(request_data['data']), + report_data, + ) + + +class TestCreateReport(SQLAlchemySetup): + + @patch( + 'specifyweb.backend.report_runner.views.models.session_context' + ) + def test_create_report_from_existing_query(self, context: Mock): + context.return_value = TestCreateReport.test_session_context() + + query = post_resource( + self.collection, + self.agent, + 'spquery', + get_simple_query(self.specifyuser), + ) + + client = Client() + client.force_login(self.specifyuser) + + response = client.post( + '/report_runner/create/', + { + 'queryid': query.id, + 'mimetype': 'jrxml/report', + 'name': 'Collection Object Report', + }, + ) + + self._assertStatusCodeEqual(response, 201) + + report = Spreport.objects.get(name='Collection Object Report') + + self.assertEqual(report.query_id, query.id) + self.assertEqual(report.specifyuser_id, self.specifyuser.id) + self.assertEqual(report.appresource.mimetype, 'jrxml/report') + + report_data = report.appresource.spappresourcedatas.get() + + self.assertIn( + '1.collectionobject.catalogNumber', + report_data.get_decoded_data(), + ) + + +class TestCreateLabel(SQLAlchemySetup): + + @patch( + 'specifyweb.backend.report_runner.views.models.session_context' + ) + def test_create_label_from_new_query(self, context: Mock): + context.return_value = TestCreateLabel.test_session_context() + + query_data = get_simple_query(self.specifyuser) + query_data['name'] = 'New Label Query' + + query = post_resource( + self.collection, + self.agent, + 'spquery', + query_data, + ) + + client = Client() + client.force_login(self.specifyuser) + + response = client.post( + '/report_runner/create/', + { + 'queryid': query.id, + 'mimetype': 'jrxml/label', + 'name': 'Collection Object Label', + }, + ) + + self._assertStatusCodeEqual(response, 201) + + label = Spreport.objects.get(name='Collection Object Label') + + self.assertEqual(label.query_id, query.id) + self.assertEqual(label.query.name, 'New Label Query') + self.assertEqual(label.specifyuser_id, self.specifyuser.id) + self.assertEqual(label.appresource.mimetype, 'jrxml/label') + + label_data = label.appresource.spappresourcedatas.get() + + self.assertIn( + '1.collectionobject.catalogNumber', + label_data.get_decoded_data(), + ) \ No newline at end of file diff --git a/specifyweb/backend/series/views.py b/specifyweb/backend/series/views.py index 19df5049812..7195b57c4e3 100644 --- a/specifyweb/backend/series/views.py +++ b/specifyweb/backend/series/views.py @@ -9,8 +9,49 @@ from specifyweb.specify.api.crud import get_model from specifyweb.specify.utils.uiformatters import get_uiformatter_by_name -from specifyweb.specify.views import login_maybe_required +from specifyweb.specify.views import login_maybe_required, openapi +@openapi(schema={ + "post": { + "requestBody": { + "required": True, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rangestart": {"type": "string", "description": "Start value of the range"}, + "rangeend": {"type": "string", "description": "End value of the range"}, + "tablename": {"type": "string", "description": "Table being used (E.g. CollectionObject)"}, + "fieldname": {"type": "string", "description": "Field name being numbered"}, + "formattername": {"type": "string", "description": "UIFormatter name for field"}, + "skipstartnumber": {"type": "boolean", "description": "If true, omit the start value from returned list"} + }, + "required": ["rangestart", "rangeend", "tablename", "fieldname", "formattername"] + } + } + } + }, + "responses": { + "200": { + "description": "List of generated values, along with information about existing numbers and an error message, if any.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "values": {"type": "array", "items": {"type": "string"}}, + "existing": {"type": "array", "items": {"type": "string"}}, + "error": {"type": "string"} + }, + "required": ["values"] + } + } + } + }, + } + } +}) @login_maybe_required @require_POST def series_autonumber_range(request: http.HttpRequest): diff --git a/specifyweb/backend/setup_tool/api.py b/specifyweb/backend/setup_tool/api.py index ba81b18629c..906bfc4b8ff 100644 --- a/specifyweb/backend/setup_tool/api.py +++ b/specifyweb/backend/setup_tool/api.py @@ -311,7 +311,8 @@ def create_discipline(data, run_apply_schema_defaults_async: bool = True): apply_default_uniqueness_rules(new_discipline) # Update tree scoping - update_tree_scoping(geologictimeperiodtreedef, new_discipline.id) + if geologictimeperiodtreedef_url or geologictimeperiodtreedef_id: + update_tree_scoping(geologictimeperiodtreedef, new_discipline.id) return {"discipline_id": new_discipline.id} diff --git a/specifyweb/backend/setup_tool/app_resource_defaults.py b/specifyweb/backend/setup_tool/app_resource_defaults.py index 8a613d6b105..dcdd96e00cf 100644 --- a/specifyweb/backend/setup_tool/app_resource_defaults.py +++ b/specifyweb/backend/setup_tool/app_resource_defaults.py @@ -142,8 +142,8 @@ def _update_discipline_dirs_to_correct_type(): def _create_missing_discipline_dirs(): created = 0 - disciplines_missing_resourcedirs = Discipline.objects.filter( - ~Exists( + disciplines_missing_resourcedirs = Discipline.objects.annotate( + has_discipline_dir=Exists( Spappresourcedir.objects.filter( collection__isnull=True, usertype__isnull=True, @@ -151,6 +151,8 @@ def _create_missing_discipline_dirs(): discipline_id=OuterRef("pk") ) ) + ).filter( + has_discipline_dir=False ).values_list("pk", "name") # will be tuple[tuple[int, str]...] diff --git a/specifyweb/backend/setup_tool/apps.py b/specifyweb/backend/setup_tool/apps.py index 728cb672e71..b8cad285d20 100644 --- a/specifyweb/backend/setup_tool/apps.py +++ b/specifyweb/backend/setup_tool/apps.py @@ -1,5 +1,5 @@ from django.apps import AppConfig -from specifyweb.backend.cache.redis import get_string +from specifyweb.backend.cache.redis.connect import RedisConnection, RedisString import logging logger = logging.getLogger(__name__) @@ -10,8 +10,9 @@ class SetupToolConfig(AppConfig): def ready(self): from specifyweb.backend.setup_tool.redis import ACTIVE_TASK_REDIS_KEY try: + redis_string = RedisString(RedisConnection()) # Clear potential setup task id leftover from a crash - task_id = get_string(ACTIVE_TASK_REDIS_KEY, delete_key=True) + task_id = redis_string.get(ACTIVE_TASK_REDIS_KEY, delete_key=True) if task_id is not None: logger.debug(f'Clearing last active setup task: {task_id}') except Exception: diff --git a/specifyweb/backend/setup_tool/redis.py b/specifyweb/backend/setup_tool/redis.py index df96acab946..52b177b17c8 100644 --- a/specifyweb/backend/setup_tool/redis.py +++ b/specifyweb/backend/setup_tool/redis.py @@ -1,10 +1,10 @@ # Keep track of the currently running setup task. There should only ever be one. # Also defined separately in setup_tool/apps.py -ACTIVE_TASK_REDIS_KEY = "specify:{database}:setup:active_task_id" +ACTIVE_TASK_REDIS_KEY = "setup:active_task_id" ACTIVE_TASK_TTL = 60*60*2 # setup should be less than 2 hours # Keep track of last error. -LAST_ERROR_REDIS_KEY = "specify:{database}:setup:last_error" +LAST_ERROR_REDIS_KEY = "setup:last_error" # Track async setup/config tasks by resource scope. -DISCIPLINE_TASKS_REDIS_KEY = "specify:{database}:setup:discipline:{discipline_id}:tasks" +DISCIPLINE_TASKS_REDIS_KEY = "setup:discipline:{discipline_id}:tasks" diff --git a/specifyweb/backend/setup_tool/setup_tasks.py b/specifyweb/backend/setup_tool/setup_tasks.py index 3215926ace9..db243492162 100644 --- a/specifyweb/backend/setup_tool/setup_tasks.py +++ b/specifyweb/backend/setup_tool/setup_tasks.py @@ -11,7 +11,7 @@ from specifyweb.backend.setup_tool.tree_defaults import start_preload_default_tree from specifyweb.specify.models_utils.model_extras import PALEO_DISCIPLINES, GEOLOGY_DISCIPLINES from specifyweb.celery_tasks import is_worker_alive, MissingWorkerError -from specifyweb.backend.cache.redis import set_string, get_string +from specifyweb.backend.cache.redis.connect import RedisString, RedisConnection from specifyweb.backend.setup_tool.redis import ACTIVE_TASK_REDIS_KEY, ACTIVE_TASK_TTL, LAST_ERROR_REDIS_KEY from uuid import uuid4 @@ -33,13 +33,15 @@ def setup_database_background(data: dict) -> str: task = setup_database_task.apply_async(args, task_id=task_id) - set_string(ACTIVE_TASK_REDIS_KEY, task.id, time_to_live=ACTIVE_TASK_TTL) + redis_string = RedisString(RedisConnection()) + redis_string.set(ACTIVE_TASK_REDIS_KEY, task.id, time_to_live=ACTIVE_TASK_TTL) return task.id def get_active_setup_task() -> Tuple[Optional[AsyncResult], bool]: """Return the current setup task if it is active, and also if it is busy.""" - task_id = get_string(ACTIVE_TASK_REDIS_KEY) + redis_string = RedisString(RedisConnection()) + task_id = redis_string.get(ACTIVE_TASK_REDIS_KEY) if not task_id: return None, False @@ -183,13 +185,15 @@ def update_progress(): raise def get_last_setup_error() -> Optional[str]: - err = get_string(LAST_ERROR_REDIS_KEY) + redis_string = RedisString(RedisConnection()) + err = redis_string.get(LAST_ERROR_REDIS_KEY) if err == '': return None return err def set_last_setup_error(error_text: Optional[str]): - set_string(LAST_ERROR_REDIS_KEY, error_text or '', time_to_live=60*60*24) + redis_string = RedisString(RedisConnection()) + redis_string.set(LAST_ERROR_REDIS_KEY, error_text or '', time_to_live=60*60*24) def create_discipline_and_trees_task(data: dict): from specifyweb.specify.models import Discipline @@ -203,13 +207,7 @@ def create_discipline_and_trees_task(data: dict): is_paleo_geo = discipline_type in PALEO_DISCIPLINES or discipline_type in GEOLOGY_DISCIPLINES default_tree = DEFAULT_TREE.copy() - logger.info('Creating Chronostratigraphy tree') - default_chronostrat_tree = default_tree.copy() - default_chronostrat_tree['fullnamedirection'] = -1 - chronostrat_result = api.create_geologictimeperiod_tree(default_chronostrat_tree) - chronostrat_treedef_id = _required_treedef_id(chronostrat_result, 'Geologictimeperiod') - data['discipline']['geologictimeperiodtreedef_id'] = chronostrat_treedef_id - + # The discipline will temporarily use the last created trees, the new trees are attached at the end. logger.info('Creating discipline') discipline_result = api.create_discipline(data['discipline']) discipline_id = discipline_result.get('discipline_id') @@ -217,11 +215,20 @@ def create_discipline_and_trees_task(data: dict): logger.debug(discipline_id) # Ensure discipline id is set for tree creation + if isinstance(data.get('geologictimeperiodtreedef'), dict): + data['geologictimeperiodtreedef']['discipline_id'] = data['geologictimeperiodtreedef'].get('discipline_id') or discipline_id if isinstance(data.get('geographytreedef'), dict): data['geographytreedef']['discipline_id'] = data['geographytreedef'].get('discipline_id') or discipline_id if isinstance(data.get('taxontreedef'), dict): data['taxontreedef']['discipline_id'] = data['taxontreedef'].get('discipline_id') or discipline_id + logger.info('Creating Chronostratigraphy tree') + default_chronostrat_tree = default_tree.copy() + default_chronostrat_tree['fullnamedirection'] = -1 + logger.info(default_chronostrat_tree) + chronostrat_result = api.create_geologictimeperiod_tree(default_chronostrat_tree) + chronostrat_treedef_id = _required_treedef_id(chronostrat_result, 'Geologictimeperiod') + logger.info('Creating geography tree') geography_result = api.create_geography_tree(data['geographytreedef'].copy(), global_tree=False) geography_treedef_id = _required_treedef_id(geography_result, 'Geography') diff --git a/specifyweb/backend/setup_tool/task_tracking.py b/specifyweb/backend/setup_tool/task_tracking.py index 31a174622fb..ae18ba94354 100644 --- a/specifyweb/backend/setup_tool/task_tracking.py +++ b/specifyweb/backend/setup_tool/task_tracking.py @@ -1,7 +1,7 @@ from typing import Optional import logging -from specifyweb.backend.cache.redis import add_to_set, delete_key, remove_from_set, set_members +from specifyweb.backend.cache.redis.connect import RedisConnection, RedisSet from specifyweb.celery_tasks import CELERY_TASK_STATE, app from specifyweb.backend.setup_tool.redis import ( DISCIPLINE_TASKS_REDIS_KEY, @@ -32,13 +32,16 @@ def _discipline_tasks_key(discipline_id: int) -> str: return DISCIPLINE_TASKS_REDIS_KEY.replace("{discipline_id}", str(discipline_id)) def _remove_task_ids_and_delete_empty_key(key: str, *task_ids: str) -> None: - remove_from_set(key, *task_ids) - if len(set_members(key)) == 0: - delete_key(key) + redis_set = RedisSet(RedisConnection()) + redis_set.remove(key, *task_ids) + if redis_set.size(key) == 0: + redis_set.delete(key) def queue_discipline_background_task(discipline_id: int, task_id: str) -> None: try: - add_to_set(_discipline_tasks_key(discipline_id), task_id) + redis_set = RedisSet(RedisConnection()) + key = _discipline_tasks_key(discipline_id) + redis_set.add(key, task_id) except Exception: logger.warning( "Failed to track discipline task %s for discipline %s.", @@ -58,7 +61,8 @@ def finish_discipline_background_task(discipline_id: int, task_id: str) -> None: def _active_task_ids_from_redis_key(key: str) -> set[str]: try: - task_ids = set_members(key) + redis_set = RedisSet(RedisConnection()) + task_ids = redis_set.members(key) if not task_ids: return set() diff --git a/specifyweb/backend/stored_queries/batch_edit.py b/specifyweb/backend/stored_queries/batch_edit.py index 8048f0bb9cf..9f6a2906dca 100644 --- a/specifyweb/backend/stored_queries/batch_edit.py +++ b/specifyweb/backend/stored_queries/batch_edit.py @@ -922,7 +922,7 @@ def rewrite_coordinate_fields(row, _mapped_rows: dict[tuple[tuple[str, ...], ... field_replacement_map = { 'latitude1': 'lat1text', 'longitude1': 'long1text', - 'latiude2': 'lat2text', + 'latitude2': 'lat2text', 'longitude2': 'long2text' } @@ -1015,8 +1015,9 @@ def run_batch_edit_query(props: BatchEditProps): tableid=tableid, distinct=True, series=False, + search_synonymy=False, count_only=False, - field_specs=query_with_hidden, + query_fields=query_with_hidden, limit=limit, offset=offset, recordsetid=recordsetid, @@ -1091,11 +1092,9 @@ def _get_orig_column(string_id: str): omit_relationships, ) - headers_enumerated = enumerate(key_and_headers) - # We would have arbitarily sorted the columns, so our columns will not be correct. # Rather than sifting the data, we just add a default visual order. - visual_order = Func.first(headers_enumerated) + visual_order = reorder_batch_edit_columns(key_and_headers, visible_fields) headers = Func.second(key_and_headers) @@ -1110,6 +1109,80 @@ def _get_orig_column(string_id: str): visual_order, ) +def reorder_batch_edit_columns(key_and_headers: list[tuple[tuple[int, int], str]], visible_fields: list[int]) -> list[int]: + """ + Columns are usually not naturally in query-order. This function provides an order that matches the query-order as closely as possible. + Column keys: (original_position, duplicate_index) + To achieve query-order, these assumptions are made: + 1. Duplicate columns are grouped by record: (0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2), (2, 0) + - If duplicate_index goes back to 0 when looking at the columns in sequence, thats a sign you're on a different record. + 2. New columns will have an original_position greater than the query's number of fields. + """ + headers_enumerated = enumerate(key_and_headers) + + # Multiple (duplicate) columns can exist in the same position. Group them, the final order will be determined later. + visual_order_groups: list[list[int]] = [[] for _ in visible_fields] + # Keep track of the record id of each group of columns in visual_order_groups + group_record_ids: list[int] = [[] for _ in visible_fields] + record_id = 0 + prev_duplicate_index: int | None = None + for index, (key, _header) in headers_enumerated: + # Find the column's original position if it existed in the origin query + original_position = key[0] + duplicate_index = key[1] + if duplicate_index != prev_duplicate_index: + # (Assumption #1) Since duplicate_index has gone down, assume we are on a different record's fields. + record_id = record_id + 1 + + if original_position < len(visible_fields): # Assumption #2 + # Field existed in original query, place it in its original position. + visual_order_groups[original_position].append(index) + group_record_ids[original_position] = record_id + else: + # New field/column. Add it to the end of the dataset. + visual_order_groups.append([index]) + group_record_ids.append(record_id) + + prev_duplicate_index = duplicate_index + + # Determine final visual order. Flatten visual_order_groups into a single list. + # Visit duplicate columns within a record group in order. So (0, 0), (1, 0), (0, 1), (1, 1) + visual_order: list[int] = [] + current_dup_index = 0 # Which duplicate index is currently being visited + record_start_index: int | None = None # The first group belonging to the current record + index = 0 + while index < len(visual_order_groups): + group = visual_order_groups[index] + record_id = group_record_ids[index] + + # Add this column to visual order + if current_dup_index < len(group): + visual_order.append(group[current_dup_index]) + else: + logger.warning("Query field is missing a Batch Edit column. Falling back to default column order.") + break + + # Check if we're on a different record, or at the end + next_group: int | None = None + next_record_id: int | None = None + if index+1 < len(visual_order_groups): + next_group = visual_order_groups[index+1] + next_record_id = group_record_ids[index+1] + if next_group is None or len(next_group) != len(group) or next_record_id != record_id: + if record_start_index is not None and record_start_index < len(visual_order_groups) and current_dup_index+1 < len(visual_order_groups[record_start_index]): + # Backtrack to group all fields belonging to the record with this duplicate_index together. + index = record_start_index + current_dup_index = current_dup_index + 1 + continue + else: + # All duplicates have been visited. Continue and mark the start of this record. + record_start_index = index+1 + current_dup_index = 0 + + index += 1 + + return visual_order + def make_dataset( user, diff --git a/specifyweb/backend/stored_queries/build_models.py b/specifyweb/backend/stored_queries/build_models.py index 698282fd3a6..5d1d0df4258 100644 --- a/specifyweb/backend/stored_queries/build_models.py +++ b/specifyweb/backend/stored_queries/build_models.py @@ -1,9 +1,39 @@ -from typing import Optional -from specifyweb.specify.models_utils.load_datamodel import Datamodel, Table, Field, Relationship +from typing import NamedTuple, Optional +from specifyweb.specify.models_utils.load_datamodel import ( + Datamodel, + Field, + ManyToMany, + Relationship, + Table, +) from sqlalchemy import Table as Table_Sqlalchemy, Column, ForeignKey, types, orm, MetaData from sqlalchemy.dialects.mysql import BIT as mysql_bit_type metadata = MetaData() + +MANY_TO_MANY_TABLES = { + "Project_colobj": { + "table": "project_colobj", + "id_column": "ProjectColObjID", + "through_fields": { + "collectionobject": { + "model": "CollectionObject", + "column": "CollectionObjectID", + }, + "project": { + "model": "Project", + "column": "ProjectID", + }, + }, + }, +} + + +class ManyToManyJoinInfo(NamedTuple): + table: str + local_column: str + remote_column: str + class BaseIdAlias: id_attr_name: Optional[str] = None @@ -65,6 +95,69 @@ def make_column(flddef: Field): nullable = not flddef.required) +def make_many_to_many_table(datamodel: Datamodel, table_info): + columns = [Column(table_info["id_column"], types.Integer, primary_key=True)] + + for through_field in table_info["through_fields"].values(): + remote_tabledef = datamodel.get_table(through_field["model"]) + if remote_tabledef is None: + return + + fk_target = ".".join((remote_tabledef.table, remote_tabledef.idColumn)) + columns.append( + Column( + through_field["column"], + types.Integer, + ForeignKey(fk_target), + nullable=False, + ) + ) + + return Table_Sqlalchemy(table_info["table"], metadata, *columns) + + +def get_many_to_many_join_info( + datamodel: Datamodel, reldef: Relationship +) -> ManyToManyJoinInfo | None: + if not isinstance(reldef, ManyToMany): + return None + + table_info = MANY_TO_MANY_TABLES.get(reldef.through_model) + if table_info is None: + return None + + local_field = table_info["through_fields"].get(reldef.through_field) + if local_field is None: + return None + + remote_field = None + related_table = datamodel.get_table(reldef.relatedModelName) + related_relationship = ( + related_table.get_field(reldef.otherSideName, strict=False) + if related_table is not None and reldef.otherSideName + else None + ) + remote_through_field = getattr(related_relationship, "through_field", None) + if remote_through_field is not None: + remote_field = table_info["through_fields"].get(remote_through_field) + + if remote_field is None: + remote_fields = [ + field + for through_field, field in table_info["through_fields"].items() + if through_field != reldef.through_field + ] + if len(remote_fields) != 1: + return None + remote_field = remote_fields[0] + + return ManyToManyJoinInfo( + table=table_info["table"], + local_column=local_field["column"], + remote_column=remote_field["column"], + ) + + field_type_map = { 'text' : types.Text, 'json' : types.JSON, @@ -84,7 +177,15 @@ def make_column(flddef: Field): } def make_tables(datamodel: Datamodel): - return {td.table: make_table(datamodel, td) for td in datamodel.tables} + tables = {td.table: make_table(datamodel, td) for td in datamodel.tables} + + for table_info in MANY_TO_MANY_TABLES.values(): + if table_info["table"] not in tables: + table = make_many_to_many_table(datamodel, table_info) + if table is not None: + tables[table_info["table"]] = table + + return tables def make_classes(datamodel: Datamodel): def make_class(tabledef): @@ -106,6 +207,35 @@ def map_class(tabledef): table = tables[ tabledef.table ] def make_relationship(reldef): + if isinstance(reldef, ManyToMany): + join_info = get_many_to_many_join_info(datamodel, reldef) + remote_tabledef = datamodel.get_table(reldef.relatedModelName) + if ( + join_info is None + or remote_tabledef is None + or reldef.relatedModelName not in classes + or join_info.table not in tables + ): + return + + remote_class = classes[reldef.relatedModelName] + remote_table = tables[remote_tabledef.table] + secondary_table = tables[join_info.table] + + return reldef.name, orm.relationship( + remote_class, + secondary=secondary_table, + primaryjoin=( + table.c[tabledef.idColumn] + == secondary_table.c[join_info.local_column] + ), + secondaryjoin=( + remote_table.c[remote_tabledef.idColumn] + == secondary_table.c[join_info.remote_column] + ), + viewonly=True, + ) + if not hasattr(reldef, 'column') or not reldef.column or reldef.relatedModelName not in classes: return @@ -141,4 +271,3 @@ def make_relationship(reldef): for tabledef in datamodel.tables: map_class(tabledef) - diff --git a/specifyweb/backend/stored_queries/execution.py b/specifyweb/backend/stored_queries/execution.py index 0aa0c33ea18..71a399fbab7 100644 --- a/specifyweb/backend/stored_queries/execution.py +++ b/specifyweb/backend/stored_queries/execution.py @@ -3,8 +3,9 @@ import logging import os import re +import traceback -from typing import Literal, NamedTuple +from typing import Callable, Literal, NamedTuple, Iterable import xml.dom.minidom from collections import namedtuple, defaultdict from functools import reduce @@ -12,8 +13,7 @@ from django.conf import settings from django.db import transaction from django.utils import timezone -from specifyweb.backend.inheritance.api import cog_inheritance_post_query_processing, parent_inheritance_post_query_processing -from specifyweb.backend.inheritance.utils import get_cat_num_inheritance_setting, get_parent_cat_num_inheritance_setting +from specifyweb.backend.inheritance.api import DefaultQueryProcessors from specifyweb.backend.stored_queries.utils import log_sqlalchemy_query from specifyweb.specify.utils.field_change_info import FieldChangeInfo from sqlalchemy import sql, orm, func, text @@ -26,14 +26,19 @@ from . import models from .format import ObjectFormatter, ObjectFormatterProps from .query_construct import QueryConstruct -from .relative_date_utils import apply_absolute_date -from .field_spec_maps import apply_specify_user_name +from .field_spec_maps import transform_field_specs +from .web_portal_export import query_to_web_portal_zip as _query_to_web_portal_zip, WebportalQueryResultProcessors +from specifyweb.backend.stored_queries.queryfield import QueryField from specifyweb.backend.notifications.models import Message from specifyweb.backend.permissions.permissions import check_table_permissions from specifyweb.specify.models import Loan, Loanpreparation, Loanreturnpreparation, Taxontreedef from specifyweb.backend.workbench.upload.auditlog import auditlog from specifyweb.backend.stored_queries.group_concat import group_by_displayed_fields from specifyweb.backend.stored_queries.queryfield import fields_from_json, QUREYFIELD_SORT_T +from specifyweb.backend.stored_queries.synonomy import synonymize_tree_query + +from specifyweb.specify.datamodel import datamodel, is_tree_table +from specifyweb.specify.models_utils.load_datamodel import Table logger = logging.getLogger(__name__) @@ -66,6 +71,7 @@ class BuildQueryProps(NamedTuple): formatauditobjs: bool = False distinct: bool = False series: bool = False + search_synonymy: bool = False implicit_or: bool = True formatter_props: ObjectFormatterProps = DefaultQueryFormatterProps() @@ -77,6 +83,19 @@ def set_group_concat_max_len(connection): """ connection.execute("SET group_concat_max_len = 1024 * 1024 * 1024") +def _pick_synonymy_table(query_fields: list[QueryField], base_table): + if base_table is not None and is_tree_table(base_table): + return base_table + + for query_field in query_fields: + if query_field.fieldspec.contains_tree_rank(): + return query_field.fieldspec.table + + for query_field in query_fields: + if is_tree_table(query_field.fieldspec.table): + return query_field.fieldspec.table + + return None def filter_by_collection(model, query, collection): """Add predicates to the given query to filter result to items scoped @@ -242,22 +261,99 @@ def do_export(spquery, collection, user, filename, exporttype, host): message_type = "query-export-to-csv-complete" with models.session_context() as session: - field_specs = fields_from_json(spquery['fields']) - if exporttype == 'csv': - query_to_csv(session, collection, user, tableid, field_specs, path, - recordsetid=recordsetid, - captions=spquery['captions'], strip_id=True, - distinct=spquery['selectdistinct'], delimiter=spquery['delimiter'], bom=spquery['bom']) - elif exporttype == 'kml': - query_to_kml(session, collection, user, tableid, field_specs, path, spquery['captions'], host, - recordsetid=recordsetid, strip_id=False, selected_rows=spquery.get('selectedrows', None)) - message_type = 'query-export-to-kml-complete' + try: + field_specs = fields_from_json(spquery['fields']) + if exporttype == 'csv': + query_to_csv(session, collection, user, tableid, field_specs, path, + recordsetid=recordsetid, + captions=spquery['captions'], strip_id=True, + distinct=spquery['selectdistinct'], delimiter=spquery['delimiter'], bom=spquery['bom']) + message_type = 'query-export-to-csv-complete' + elif exporttype == 'kml': + query_to_kml(session, collection, user, tableid, field_specs, path, spquery['captions'], host, + recordsetid=recordsetid, strip_id=False, selected_rows=spquery.get('selectedrows', None)) + message_type = 'query-export-to-kml-complete' + elif exporttype == 'webportal': + query_to_web_portal_zip( + session, + collection, + user, + tableid, + field_specs, + path, + spquery['captions'], + recordsetid=recordsetid, + distinct=spquery['selectdistinct'], + ) + message_type = 'query-export-to-webportal-complete' + else: + # This should never happen because the export type is controlled by the backend, but just in case. + raise ValueError(f"Unsupported export type: {exporttype}") + except Exception as e: + logger.exception( + "Export failed for %s: collection %s, file %s, type %s", + user, collection, filename, exporttype, + ) + tb = traceback.format_exc() + error_details = {'error': str(e)} + if tb: + error_details['traceback'] = tb + message_type = f'query-export-to-{exporttype}-failed' + Message.objects.create(user=user, content=json.dumps({ + 'type': message_type, + 'file': filename, + 'error': error_details, + })) + raise Message.objects.create(user=user, content=json.dumps({ 'type': message_type, 'file': filename, })) + +def query_to_web_portal_zip( + session, + collection, + user, + tableid, + field_specs, + path, + captions, + recordsetid=None, + distinct=False, +): + query, _ = build_query( + session=session, + collection=collection, + user=user, + tableid=tableid, + query_fields=field_specs, + props=BuildQueryProps(recordsetid=recordsetid, replace_nulls=True, distinct=distinct), + ) + + processors = [ + *DefaultQueryProcessors( + tableid=tableid, + query_fields=field_specs, + collection=collection, + user=user + ), + *WebportalQueryResultProcessors(query_fields=field_specs) + ] + logger.warning(processors) + return _query_to_web_portal_zip( + session=session, + collection=collection, + user=user, + tableid=tableid, + field_specs=field_specs, + path=path, + captions=captions, + query_rows=apply_special_post_query_processing(query=query, processors=processors), + set_group_concat_max_len_fn=set_group_concat_max_len + ) + # def stored_query_to_csv(query_id, collection, user, path): # """Executes a query from the Spquery table with the given id and send # the results to a CSV file at path. @@ -306,7 +402,7 @@ def query_to_csv( See build_query for details of the other accepted arguments. """ set_group_concat_max_len(session.connection()) - query, __ = build_query( + query, order_by_exprs = build_query( session, collection, user, @@ -314,7 +410,16 @@ def query_to_csv( field_specs, BuildQueryProps(recordsetid=recordsetid, replace_nulls=True, distinct=distinct), ) - query = apply_special_post_query_processing(query, tableid, field_specs, collection, user, should_list_query=False) + query = query.order_by(*order_by_exprs) + query_rows = apply_special_post_query_processing( + query=query, + processors=DefaultQueryProcessors( + tableid=tableid, + query_fields=field_specs, + collection=collection, + user=user + ) + ) logger.debug("query_to_csv starting") @@ -330,24 +435,14 @@ def query_to_csv( header = ["id"] + header csv_writer.writerow(header) - if isinstance(query, list): - for row in query: - if row_filter is not None and not row_filter(row): + for row in query_rows: + if row_filter is not None and not row_filter(row): continue - encoded = [ - re.sub("\r|\n", " ", str(f)) - for f in (row[1:] if strip_id or distinct else row) - ] - csv_writer.writerow(encoded) - else: - for row in query.yield_per(1): - if row_filter is not None and not row_filter(row): - continue - encoded = [ - re.sub("\r|\n", " ", str(f)) - for f in (row[1:] if strip_id or distinct else row) - ] - csv_writer.writerow(encoded) + encoded = [ + re.sub("\r|\n", " ", str(f)) + for f in (row[1:] if strip_id or distinct else row) + ] + csv_writer.writerow(encoded) logger.debug("query_to_csv finished") @@ -394,7 +489,15 @@ def query_to_kml( model = models.models_by_tableid[tableid] query = query.filter(model._id.in_(selected_rows)) - query = apply_special_post_query_processing(query, tableid, field_specs, collection, user, should_list_query=False) + query_rows = apply_special_post_query_processing( + query=query, + processors=DefaultQueryProcessors( + tableid=tableid, + query_fields=field_specs, + collection=collection, + user=user + ) + ) logger.debug("query_to_kml starting") @@ -414,20 +517,12 @@ def query_to_kml( coord_cols = getCoordinateColumns(field_specs, table != None) - if isinstance(query, list): - for row in query: - if row_has_geocoords(coord_cols, row): - placemarkElement = createPlacemark( - kmlDoc, row, coord_cols, table, captions, host - ) - documentElement.appendChild(placemarkElement) - else: - for row in query.yield_per(1): - if row_has_geocoords(coord_cols, row): - placemarkElement = createPlacemark( - kmlDoc, row, coord_cols, table, captions, host - ) - documentElement.appendChild(placemarkElement) + for row in query_rows: + if row_has_geocoords(coord_cols, row): + placemarkElement = createPlacemark( + kmlDoc, row, coord_cols, table, captions, host + ) + documentElement.appendChild(placemarkElement) with open(path, "wb") as kmlFile: # This should be controlled by a preference or argument, because it makes adding @@ -585,12 +680,13 @@ def run_ephemeral_query(collection, user, spquery): recordsetid = spquery.get("recordsetid", None) distinct = spquery["selectdistinct"] series = spquery.get('smushed', None) + search_synonymy = bool(spquery.get("searchsynonymy", False)) tableid = spquery["contexttableid"] count_only = spquery["countonly"] format_audits = spquery.get("formatauditrecids", False) with models.session_context() as session: - field_specs = fields_from_json(spquery["fields"]) + query_fields = fields_from_json(spquery["fields"]) return execute( session=session, collection=collection, @@ -598,8 +694,9 @@ def run_ephemeral_query(collection, user, spquery): tableid=tableid, distinct=distinct, series=series, + search_synonymy=search_synonymy, count_only=count_only, - field_specs=field_specs, + query_fields=query_fields, limit=limit, offset=offset, recordsetid=recordsetid, @@ -607,39 +704,6 @@ def run_ephemeral_query(collection, user, spquery): ) -# def augment_field_specs(field_specs: list[QueryField], formatauditobjs=False): -# print("augment_field_specs ######################################") -# new_field_specs = [] -# for fs in field_specs: -# print(fs) -# print(fs.fieldspec.table.tableId) -# field = fs.fieldspec.join_path[-1] -# model = models.models_by_tableid[fs.fieldspec.table.tableId] -# if field.type == "java.util.Calendar": -# precision_field = field.name + "Precision" -# has_precision = hasattr(model, precision_field) -# if has_precision: -# new_field_specs.append( -# make_augmented_field_spec(fs, model, precision_field) -# ) -# elif formatauditobjs and model.name.lower().startswith("spauditlog"): -# if field.name.lower() in "newvalue, oldvalue": -# log_model = models.models_by_tableid[530] -# new_field_specs.append( -# make_augmented_field_spec(fs, log_model, "TableNum") -# ) -# new_field_specs.append( -# make_augmented_field_spec(fs, model, "FieldName") -# ) -# elif field.name.lower() == "recordid": -# new_field_specs.append(make_augmented_field_spec(fs, model, "TableNum")) -# print("################################ sceps_dleif_tnemgua") - - -# def make_augmented_field_spec(field_spec, model, field_name): -# print("make_augmented_field_spec ######################################") - - def recordset(collection, user, user_agent, recordset_info): # pragma: no cover "Create a record set from the records matched by a query." spquery = recordset_info["fromquery"] @@ -665,7 +729,14 @@ def recordset(collection, user, user_agent, recordset_info): # pragma: no cover field_specs = fields_from_json(spquery["fields"]) - query, __ = build_query(session, collection, user, tableid, field_specs) + query, __ = build_query( + session, + collection, + user, + tableid, + field_specs, + BuildQueryProps(recordsetid=spquery.get("recordsetid", None)), + ) query = query.with_entities(model._id, literal(new_rs_id)).distinct() RSI = models.RecordSetItem ins = insert(RSI).from_select((RSI.recordId, RSI.RecordSetID), query) @@ -783,11 +854,12 @@ def execute( session, collection, user, - tableid, - distinct, - series, - count_only, - field_specs, + tableid: int, + distinct: bool, + series: bool, + search_synonymy: bool, + count_only: bool, + query_fields: list[QueryField], limit, offset, recordsetid=None, @@ -805,22 +877,25 @@ def execute( collection, user, tableid, - field_specs, + query_fields, BuildQueryProps( recordsetid=recordsetid, formatauditobjs=formatauditobjs, distinct=distinct, series=series, + search_synonymy=search_synonymy, formatter_props=formatter_props, ), ) + log_sqlalchemy_query(query) + if count_only: if series: cat_num_sort_type = 0 - for field_spec in field_specs: - if field_spec.fieldspec.get_field() and field_spec.fieldspec.get_field().name.lower() == 'catalognumber': - cat_num_sort_type = field_spec.sort_type + for query_field in query_fields: + if query_field.fieldspec.get_field() and query_field.fieldspec.get_field().name.lower() == 'catalognumber': + cat_num_sort_type = query_field.sort_type break return {'count': len(series_post_query(query, limit=SERIES_MAX_ROWS, offset=0, sort_type=cat_num_sort_type, is_count=True))} else: @@ -829,10 +904,10 @@ def execute( cat_num_col_id = None cat_num_sort_type = None idx = 0 - for field_spec in field_specs: - if field_spec.fieldspec.get_field() and field_spec.fieldspec.get_field().name.lower() == 'catalognumber': + for query_field in query_fields: + if query_field.fieldspec.get_field() and query_field.fieldspec.get_field().name.lower() == 'catalognumber': cat_num_col_id = idx - cat_num_sort_type = field_spec.sort_type + cat_num_sort_type = query_field.sort_type break idx += 1 is_valid_series_query = series and \ @@ -856,16 +931,197 @@ def execute( if limit: query = query.limit(limit) - log_sqlalchemy_query(query) + results = list( + apply_special_post_query_processing( + query=query, + processors=DefaultQueryProcessors( + tableid=tableid, + query_fields=query_fields, + collection=collection, + user=user + ) + ) + ) + return {"results": results} + + +# REFACTOR: Clean up this and the other QueryConstruct functions +# Make it easier to use for external callers (e.g., tests) and make sure it's +# pure +# Maybe add or merge these to QueryConstruct? +def build_query_construct_base( + session, + collection, + user, + model, + props: BuildQueryProps, +): + id_field = model._id + catalognumber_field = model.catalogNumber if hasattr(model, 'catalogNumber') else None + query_construct_query = session.query(id_field) + if props.series and catalognumber_field: + query_construct_query = session.query( + func.group_concat( + func.concat( + id_field, + ':', + catalognumber_field + ), + separator='|' + ).label('co_id_catnum_paired_values') + ) + elif props.distinct: + query_construct_query = session.query( + func.group_concat(id_field.distinct(), separator=',')) + else: + query_construct_query = session.query(id_field) + + query = QueryConstruct( + collection=collection, + objectformatter=ObjectFormatter( + collection, + user, + props.replace_nulls, + props=props.formatter_props, + ), + query=query_construct_query + ) + return query + +# REFACTOR: Clean up this and the other QueryConstruct functions +# Make it easier to use for external callers (e.g., tests) and make sure it's +# pure +# Maybe add or merge these to QueryConstruct? +def filter_query_by_recordset( + session, + collection, + query: QueryConstruct, + id_field: int, + tableid: int, + recordsetid: int +): + recordset = session.query(models.RecordSet).get(recordsetid) + if recordset is None: + raise AssertionError( + f"Unexpected recordset id '{recordsetid}' in request. Recordset not found.", + { + "recordsetId": recordsetid, + "localizationKey": "unexpectedRecordsetId", + }, + ) + if recordset.collectionMemberId != collection.id: + raise AssertionError( + f"Unexpected recordset id '{recordsetid}' in request. Recordset is not in collection '{collection.id}'.", + { + "recordsetId": recordsetid, + "collectionId": collection.id, + "expectedCollectionId": recordset.collectionMemberId, + "localizationKey": "unexpectedRecordsetCollection", + }, + ) + if recordset.dbTableId != tableid: + raise AssertionError( + f"Unexpected tableId '{tableid}' in request. Expected '{recordset.dbTableId}'", + { + "tableId": tableid, + "expectedTableId": recordset.dbTableId, + "localizationKey": "unexpectedTableId", + }, + ) + return query.join( + models.RecordSetItem, models.RecordSetItem.recordId == id_field + ).filter(models.RecordSetItem.recordSet == recordset) + +# REFACTOR: Clean up this and the other QueryConstruct functions +# This could probably be folded into add_fields_to_query? +# Though if possible/feasible, we can keep this separate to make testing easier +def apply_where_condition_to_query( + query: QueryConstruct, + predicates_by_fieldspec, + use_implicit_ors: bool = True +): + if use_implicit_ors: + implicit_ors = [ + reduce(sql.or_, ps) for ps in predicates_by_fieldspec.values() if ps + ] + + if implicit_ors: + where = reduce(sql.and_, implicit_ors) + query = query.filter(where) + else: + where = reduce(sql.and_, (p for ps in predicates_by_fieldspec.values() for p in ps)) + query = query.filter(where) + return query + +# REFACTOR: Clean up this and the other QueryConstruct functions +# Make it easier to use for external callers (e.g., tests) and make sure it's +# pure +# Maybe add or merge these to QueryConstruct? +def add_fields_to_query( + collection, + user, + query: QueryConstruct, + query_fields: list[QueryField], + series: bool = False, + formatauditobjs: bool = False, + use_implicit_ors: bool = True +): + order_by_exprs = [] + selected_fields = [] + predicates_by_fieldspec = defaultdict(list) + for query_field in query_fields: + sort_type = QuerySort.by_id(query_field.sort_type) + + if series and query_field.fieldspec.get_field() and query_field.fieldspec.get_field().name.lower() == 'catalognumber': + _, _, predicate = query_field.add_to_query(query, formatauditobjs=formatauditobjs) + predicates_by_fieldspec[query_field.fieldspec].append(predicate) if predicate is not None else None + continue + + query, field, predicate = query_field.add_to_query( + query, formatauditobjs=formatauditobjs, collection=collection, user=user + ) + + if field is None: + continue + + formatted_field = None + if query_field.display: + formatted_field = query.objectformatter.fieldformat(query_field, field) + query = query.add_columns(formatted_field) + selected_fields.append(formatted_field) + - return {"results": apply_special_post_query_processing(query, tableid, field_specs, collection, user)} + if sort_type is not None: + order_by_exprs.append(sort_type(field)) + + if predicate is not None: + predicates_by_fieldspec[query_field.fieldspec].append(predicate) + query = apply_where_condition_to_query(query, predicates_by_fieldspec, use_implicit_ors) + return query, selected_fields, order_by_exprs + +# REFACTOR: Clean up this and the other QueryConstruct functions +# Make it easier to use for external callers (e.g., tests) and make sure it's +# pure +# Maybe add or merge these to QueryConstruct? +def search_on_synonyms( + query: QueryConstruct, + query_fields: list[QueryField], + base_table: Table, +): + synonymy_table = _pick_synonymy_table(query_fields, base_table) + if synonymy_table is None: + logger.info("search_synonymy requested but no tree table found... skipping") + else: + synonymized_query = synonymize_tree_query(query.query, synonymy_table) + query = query._replace(query=synonymized_query) + return query def build_query( session, collection, user, - tableid, - field_specs, + tableid: int, + query_fields: Iterable[QueryField], props: BuildQueryProps = BuildQueryProps(), ): """Build a sqlalchemy query using the QueryField objects given by @@ -896,176 +1152,74 @@ def build_query( series = (only for CO) if True, group by all display fields. Group catalog numbers that fall within the same range together. Return all record IDs associated with a row. + + search_synonymy = if True, search synonym nodes as well, and return all record IDs associated with parent node """ model = models.models_by_tableid[tableid] id_field = model._id - catalog_number_field = model.catalogNumber if hasattr(model, 'catalogNumber') else None - - field_specs = [apply_absolute_date(field_spec) for field_spec in field_specs] - field_specs = [apply_specify_user_name(field_spec, user) for field_spec in field_specs] - - query_construct_query = session.query(id_field) - if props.series and catalog_number_field: - query_construct_query = session.query( - func.group_concat( - func.concat( - id_field, - ':', - catalog_number_field - ), - separator='|' - ).label('co_id_catnum_paired_values') - ) - elif props.distinct: - query_construct_query = session.query(func.group_concat(id_field.distinct(), separator=',')) - else: - query_construct_query = session.query(id_field) - - query = QueryConstruct( + query = build_query_construct_base( + session=session, collection=collection, - objectformatter=ObjectFormatter( - collection, - user, - props.replace_nulls, - props=props.formatter_props, - ), - query=query_construct_query + user=user, + model=model, + props=props, ) + query_fields = list(transform_field_specs(query_fields, user)) + tables_to_read = { table - for fs in field_specs + for field in query_fields for table in query.tables_in_path( - fs.fieldspec.root_table, fs.fieldspec.join_path + field.fieldspec.root_table, field.fieldspec.join_path ) } - for table in tables_to_read: - check_table_permissions(collection, user, table, "read") + for table_to_read in tables_to_read: + check_table_permissions(collection, user, table_to_read, "read") query = filter_by_collection(model, query, collection) if props.recordsetid is not None: logger.debug("joining query to recordset: %s", props.recordsetid) - recordset = session.query(models.RecordSet).get(props.recordsetid) - if not (recordset.dbTableId == tableid): - raise AssertionError( - f"Unexpected tableId '{tableid}' in request. Expected '{recordset.dbTableId}'", - { - "tableId": tableid, - "expectedTableId": recordset.dbTableId, - "localizationKey": "unexpectedTableId", - }, - ) - query = query.join( - models.RecordSetItem, models.RecordSetItem.recordId == id_field - ).filter(models.RecordSetItem.recordSet == recordset) - - order_by_exprs = [] - selected_fields = [] - predicates_by_field = defaultdict(list) - # augment_field_specs(field_specs, formatauditobjs) - for fs in field_specs: - # sort_type = SORT_TYPES[fs.sort_type] - sort_type = QuerySort.by_id(fs.sort_type) - - if props.series and fs.fieldspec.get_field() and fs.fieldspec.get_field().name.lower() == 'catalognumber': - _, _, predicate = fs.add_to_query(query, formatauditobjs=props.formatauditobjs) - predicates_by_field[fs.fieldspec].append(predicate) if predicate is not None else None - continue - - query, field, predicate = fs.add_to_query( - query, formatauditobjs=props.formatauditobjs, collection=collection, user=user + query = filter_query_by_recordset( + session=session, + collection=collection, + query=query, + id_field=id_field, + tableid=tableid, + recordsetid=props.recordsetid ) - if field is None: - continue - - formatted_field = None - if fs.display: - formatted_field = query.objectformatter.fieldformat(fs, field) - query = query.add_columns(formatted_field) - selected_fields.append(formatted_field) - - if hasattr(field, 'key') and field.key and field.key.lower() == 'catalognumber': - catalog_number_field = formatted_field - - - if sort_type is not None: - order_by_exprs.append(sort_type(field)) - - if predicate is not None: - predicates_by_field[fs.fieldspec].append(predicate) - - if props.implicit_or: - implicit_ors = [ - reduce(sql.or_, ps) for ps in predicates_by_field.values() if ps - ] - - if implicit_ors: - where = reduce(sql.and_, implicit_ors) - query = query.filter(where) - else: - where = reduce(sql.and_, (p for ps in predicates_by_field.values() for p in ps)) - query = query.filter(where) + query, selected_fields, order_by_exprs = add_fields_to_query( + collection=collection, + user=user, + query=query, + query_fields=query_fields, + series=props.series, + formatauditobjs=props.formatauditobjs, + use_implicit_ors=props.implicit_or + ) if props.series: query = group_by_displayed_fields(query, selected_fields, ignore_cat_num=True) elif props.distinct: query = group_by_displayed_fields(query, selected_fields) + if props.search_synonymy: + base_table = datamodel.get_table_by_id_strict(tableid) + query = search_on_synonyms(query, query_fields, base_table) + internal_predicate = query.get_internal_filters() query = query.filter(internal_predicate) - logger.debug("query: %s", query.query) return query.query, order_by_exprs -# def series_post_query_for_int_cat_nums(query, co_id_cat_num_pair_col_index=0): -# """Transform the query results by removing the co_id:catnum pair column -# and adding a co_id colum and formatted catnum range column. -# Sort the results by the first catnum in the range.""" -# log_sqlalchemy_query(query) # Debugging - -# def group_consecutive_ranges(lst): -# def group_consecutives(acc, x): -# if not acc or int(acc[-1][-1][1]) + 1 != int(x[1]): -# acc.append([x]) -# else: -# acc[-1].append(x) -# return acc - -# grouped = reduce(group_consecutives, lst, []) -# return [ -# (','.join([x[0] for x in group]), f"{group[0][1]} - {group[-1][1]}" if len(group) > 1 else f"{group[0][1]}") -# for group in grouped -# ] - -# def process_row(row): -# co_id_cat_num_consecutive_pairs = group_consecutive_ranges( -# sorted( -# (pair.split(':') for pair in row[co_id_cat_num_pair_col_index].split(',')), -# key=lambda x: int(x[1]) -# ) -# ) - -# return [ -# [co_id, cat_num_series] + list( -# list(row[1:]) if co_id_cat_num_pair_col_index == 0 -# else list(row[:co_id_cat_num_pair_col_index]) + list(row[co_id_cat_num_pair_col_index + 1:]) -# ) -# for co_id, cat_num_series in co_id_cat_num_consecutive_pairs -# ] - -# MAX_ROWS = 500 -# return [item for sublist in map(process_row, list(query)) for item in sublist][:MAX_ROWS] - def series_post_query(query, limit=40, offset=0, sort_type=0, co_id_cat_num_pair_col_index=0, is_count=False): """Transform the query results by removing the co_id:catnum pair column and adding a co_id colum and formatted catnum range column. Sort the results by the first catnum in the range.""" - log_sqlalchemy_query(query) - def parse_catalog_for_comparing(s): def check_for_decimal(s): decimal_match = re.search(r'\d+\.\d+', s) @@ -1110,6 +1264,7 @@ def check_for_decimal(s): return (None, s, '') + # REFACTOR: Remove this if it really is and should be unused def parse_catalog_for_sorting(catalog): # pragma: no cover m = re.match(r'^([A-Za-z]*)(\d+)$', catalog) if m: @@ -1179,17 +1334,11 @@ def process_row(row): offset = offset if offset else 0 return results[offset:offset + series_limit] -def apply_special_post_query_processing(query, tableid, field_specs, collection, user, should_list_query=True): - parent_inheritance_pref = get_parent_cat_num_inheritance_setting(collection, user) - cog_inheritance_pref = get_cat_num_inheritance_setting(collection, user) - - if parent_inheritance_pref: - query = parent_inheritance_post_query_processing(query, tableid, field_specs, collection, user) - - if cog_inheritance_pref: - query = cog_inheritance_post_query_processing(query, tableid, field_specs, collection, user) - - if should_list_query: - return list(query) - - return query \ No newline at end of file +def apply_special_post_query_processing(query, + processors: list[Callable[[list], list]], + batch_size=7000): + for raw_row in query.yield_per(batch_size): + row = list(raw_row) + for processor in processors: + row = processor(row) + yield tuple(row) diff --git a/specifyweb/backend/stored_queries/field_spec_maps.py b/specifyweb/backend/stored_queries/field_spec_maps.py index d02a2b7b6eb..9e2b706cb6e 100644 --- a/specifyweb/backend/stored_queries/field_spec_maps.py +++ b/specifyweb/backend/stored_queries/field_spec_maps.py @@ -1,5 +1,24 @@ +from typing import Callable, Iterable + from specifyweb.backend.stored_queries.queryfield import QueryField +from specifyweb.backend.stored_queries.relative_date_utils import relative_to_absolute_date + +def transform_field_specs(query_fields: Iterable[QueryField], user): + transform = query_field_transformer(user) + for query_field in query_fields: + yield transform(query_field) +def query_field_transformer(user) -> Callable[[QueryField], QueryField]: + transforms = [ + apply_absolute_date, + lambda qf: apply_specify_user_name(qf, user) + ] + def transform_query_field(query_field): + qf = query_field + for transform in transforms: + qf = transform(qf) + return qf + return transform_query_field def apply_specify_user_name(query_field: QueryField, user): if query_field.fieldspec.is_specify_username_end(): @@ -7,3 +26,11 @@ def apply_specify_user_name(query_field: QueryField, user): return query_field._replace(value=user.name) return query_field + +def apply_absolute_date(query_field: QueryField): + if query_field.fieldspec.date_part is None or query_field.fieldspec.date_part != 'Full Date': + return query_field + + field_value = query_field.value + new_field_value = ','.join([relative_to_absolute_date(value_split) for value_split in field_value.split(',')]) + return query_field._replace(value=new_field_value) diff --git a/specifyweb/backend/stored_queries/format.py b/specifyweb/backend/stored_queries/format.py index a47a3096cd2..1a8970b6238 100644 --- a/specifyweb/backend/stored_queries/format.py +++ b/specifyweb/backend/stored_queries/format.py @@ -27,6 +27,7 @@ from specifyweb.backend.stored_queries.queryfield import QueryField from . import models +from .build_models import get_many_to_many_join_info from .group_concat import group_concat from .blank_nulls import blank_nulls from .query_construct import QueryConstruct @@ -88,16 +89,29 @@ def lookup_name(name: str) -> Element | None: return None def getFormatterFromSchema() -> Element: - - try: - formatter_name = Splocalecontainer.objects.get( - name=specify_model.name.lower(), - schematype=0, - discipline=self.collection.discipline - ).format - except Splocalecontainer.DoesNotExist: + containers = Splocalecontainer.objects.filter( + name=specify_model.name.lower(), + schematype=0, + discipline=self.collection.discipline, + ).order_by('-timestampmodified', '-id') + container_count = containers.count() + if container_count == 0: return None + formatter_name = ( + containers.exclude(format__isnull=True) + .exclude(format='') + .values_list('format', flat=True) + .first() + ) + if container_count > 1: + logger.warning( + "Multiple Splocalecontainer rows found for %s in discipline %s using formatter %r", + specify_model.name.lower(), + self.collection.discipline_id, + formatter_name, + ) + if formatter_name: return lookup_name(formatter_name) else: @@ -217,18 +231,30 @@ def make_expr(self, # Helper function to apply only string-ish transforms with no numeric casts def apply_stringish(expr): e = expr + if fieldNodeAttrib.get('trimzeros') == 'true': - numeric_str = cast(cast(e, types.Numeric(65)), types.String()) - e = case( - (e.op('REGEXP')(r'^-?[0-9]+(\.[0-9]+)?$'), numeric_str), - else_=cast(e, types.String()), - ) + e = cast(e, types.String()) + trimmed = e + + # remove leading zeros + trimmed = func.regexp_replace(trimmed, r'^(-?)0+([0-9])', r'\1\2') + + # remove trailing zeros after decimal + trimmed = func.regexp_replace(trimmed, r'(\.[0-9]*?)0+$', r'\1') + + # remove trailing decimal point + trimmed = func.regexp_replace(trimmed, r'\.$', '') + + e = case((e.op('REGEXP')(r'^-?[0-9]+(\.[0-9]+)?$'), trimmed), else_=e) + fmt = fieldNodeAttrib.get('format') if fmt is not None: e = self.pseudo_sprintf(fmt, e) + sep = fieldNodeAttrib.get('sep') if sep is not None: e = concat(sep, e) + return e stringish_expr = apply_stringish(raw_expr) @@ -329,12 +355,24 @@ def aggregate(self, query: QueryConstruct, limit = None if limit == '' or int(limit) == 0 else limit orm_table = getattr(models, field.relatedModelName) - join_column = list(inspect( - getattr(orm_table, field.otherSideName)).property.local_columns)[0] - subquery_query = Query([]) \ - .select_from(orm_table) \ - .filter(join_column == rel_table._id) \ - .correlate(rel_table) + join_info = get_many_to_many_join_info(datamodel, field) + if join_info is not None: + secondary_table = models.tables[join_info.table] + subquery_query = Query([]) \ + .select_from(orm_table) \ + .join( + secondary_table, + secondary_table.c[join_info.remote_column] == orm_table._id, + ) \ + .filter(secondary_table.c[join_info.local_column] == rel_table._id) \ + .correlate(rel_table) + else: + join_column = list(inspect( + getattr(orm_table, field.otherSideName)).property.local_columns)[0] + subquery_query = Query([]) \ + .select_from(orm_table) \ + .filter(join_column == rel_table._id) \ + .correlate(rel_table) try: from_table_name = query.query.selectable.froms[0].name.lower() diff --git a/specifyweb/backend/stored_queries/geology_time.py b/specifyweb/backend/stored_queries/geology_time.py index 0a1a4ffe9d8..0a0ae4d79ab 100644 --- a/specifyweb/backend/stored_queries/geology_time.py +++ b/specifyweb/backend/stored_queries/geology_time.py @@ -2,7 +2,6 @@ import os from django.db.models import Case, FloatField, F, Q, Value, When from django.db.models.functions import Coalesce, Greatest, Least, Cast -from specifyweb.backend.stored_queries.utils import log_sqlalchemy_query from sqlalchemy import select, union_all, func, cast, DECIMAL, case, or_, and_, String, join from sqlalchemy.orm import aliased @@ -976,6 +975,5 @@ def modify_query_add_meta_age_range(query, start_time, end_time, require_full_ov ) ).label("age") new_query = new_query.add_columns(age_expr) - - log_sqlalchemy_query(new_query) + return new_query diff --git a/specifyweb/backend/stored_queries/query_construct.py b/specifyweb/backend/stored_queries/query_construct.py index 56e042fc6e0..212a6788c3c 100644 --- a/specifyweb/backend/stored_queries/query_construct.py +++ b/specifyweb/backend/stored_queries/query_construct.py @@ -29,36 +29,36 @@ def __new__(cls, *args, **kwargs): def handle_tree_field(self, node, table, tree_rank: TreeRankQuery, next_join_path, current_field_spec: QueryFieldSpec): query = self - if query.collection is None: raise AssertionError( # Not sure it makes sense to query across collections - f"No Collection found in Query for {table}", - {"table" : table, - "localizationKey" : "noCollectionInQuery"}) + if query.collection is None: # Not sure it makes sense to query across collections + raise AssertionError( + f"No Collection found in Query for {table}", + {"table": table, "localizationKey": "noCollectionInQuery"}, + ) logger.info('handling treefield %s rank: %s field: %s', table, tree_rank.name, next_join_path) treedefitem_column = table.name + 'TreeDefItemID' treedef_column = table.name + 'TreeDefID' - if (table, 'TreeRanks') in query.join_cache: - logger.debug("using join cache for %r tree ranks.", table) - ancestors, treedefs = query.join_cache[(table, 'TreeRanks')] + cache_key = (table, 'TreeRanks') + if cache_key in query.join_cache: + logger.debug("using join cache for %r tree ranks.", node) + ancestors, treedefs = query.join_cache[cache_key] else: - treedefs = get_treedefs(query.collection, table.name) # We need to take the max here. Otherwise, it is possible that the same rank # name may not occur at the same level across tree defs. max_depth = max(depth for _, depth in treedefs) - + ancestors = [node] - for _ in range(max_depth-1): + for _ in range(max_depth - 1): ancestor = orm.aliased(node) query = query.outerjoin(ancestor, ancestors[-1].ParentID == ancestor._id) ancestors.append(ancestor) - - logger.debug("adding to join cache for %r tree ranks.", table) + logger.debug("adding to join cache for %r tree ranks.", node) query = query._replace(join_cache=query.join_cache.copy()) - query.join_cache[(table, 'TreeRanks')] = (ancestors, treedefs) + query.join_cache[cache_key] = (ancestors, treedefs) item_model = getattr(spmodels, table.django_name + "treedefitem") @@ -96,7 +96,11 @@ def make_tree_field_spec(tree_node): # We don't want to include treedef if the rank is not present. new_filters = [ *query.internal_filters, - or_(getattr(node, treedef_column).in_(defs_to_filter_on), getattr(node, treedef_column) == None)] + or_( + getattr(node, treedef_column).in_(defs_to_filter_on), + getattr(node, treedef_column).is_(None), + ), + ] query = query._replace(internal_filters=new_filters) return query, column, field, table @@ -146,6 +150,12 @@ def build_join(self, table, model, join_path): # To make things "simpler", it doesn't apply any filters, but returns a single predicate # @model is an input parameter, because cannot guess if it is aliased or not (callers are supposed to know that) def get_internal_filters(self): + # If nothing to filter on, return TRUE so .where(...) can run safely + if not self.internal_filters: + return sql.true() + # Avoid OR on a single element + if len(self.internal_filters) == 1: + return self.internal_filters[0] return sql.or_(*self.internal_filters) def add_proxy_method(name): diff --git a/specifyweb/backend/stored_queries/query_ops.py b/specifyweb/backend/stored_queries/query_ops.py index f60e2d23de8..de77d29d9ab 100644 --- a/specifyweb/backend/stored_queries/query_ops.py +++ b/specifyweb/backend/stored_queries/query_ops.py @@ -1,11 +1,21 @@ import re +from datetime import date import sqlalchemy from sqlalchemy.orm.query import Query from collections import namedtuple from typing import Literal from specifyweb.backend.stored_queries.geology_time import geo_time_query, geo_time_period_query -from specifyweb.specify.utils.uiformatters import CNNField, FormatMismatch, UIFormatter +from specifyweb.specify.utils.uiformatters import ( + CNNField, + FormatMismatch, + NumericField, + SeparatorField, + UIFormatter, + YearField, +) + +CATALOG_NUMBER_RANGE_RE = re.compile(r"^\s*([0-9]+)\s*-\s*([0-9]+)\s*$") QUERYFIELD_OPERATION_NUMBER = Literal[ 0, # Like @@ -112,9 +122,188 @@ def op_between(self, field, value): values = [self.format(v.strip()) for v in value.split(",")[:2]] return field.between(*values) + def _is_single_cnn_formatter(self): + return ( + self.uiformatter is not None + and len(self.uiformatter.fields) == 1 + # Catalog Number Numeric formatted field. + and isinstance(self.uiformatter.fields[0], CNNField) + ) + + def _is_year_numeric_catalog_number_formatter(self): + return ( + self.uiformatter is not None + and len(self.uiformatter.fields) == 3 + and isinstance(self.uiformatter.fields[0], YearField) + and isinstance(self.uiformatter.fields[1], SeparatorField) + and isinstance(self.uiformatter.fields[2], NumericField) + ) + + def _supports_catalog_number_ranges(self): + return ( + self._is_single_cnn_formatter() + or self._is_year_numeric_catalog_number_formatter() + ) + + def _parse_numeric_catalog_number_range(self, value: str): + """Parse a numeric catalog number range for the IN operator.""" + if self.uiformatter is None: + return None + match = CATALOG_NUMBER_RANGE_RE.match(value) + if match is None: + return None + start_raw, end_raw = match.groups() + + try: + start = self.uiformatter.canonicalize(self.uiformatter.parse(start_raw)) + except FormatMismatch: + return None + + if len(end_raw) < len(start_raw): + end = self._resolve_shortened_numeric_end( + start, + end_raw, + self.uiformatter.canonicalize(self.uiformatter.parse(end_raw)), + ) + else: + try: + end = self.uiformatter.canonicalize(self.uiformatter.parse(end_raw)) + except FormatMismatch: + return None + + return tuple(sorted((start, end))) + + def _resolve_shortened_numeric_end( + self, start_numeric: str, end_raw: str, literal_end_numeric: str + ) -> str: + borrowed_end_numeric = f"{start_numeric[:-len(end_raw)]}{end_raw}" + literal_span = abs(int(start_numeric) - int(literal_end_numeric)) + borrowed_span = abs(int(start_numeric) - int(borrowed_end_numeric)) + + return ( + literal_end_numeric + if literal_span <= borrowed_span + else borrowed_end_numeric + ) + + def _parse_year_numeric_catalog_number_range(self, value: str): + """Parse a year-based catalog number range. ex. 2025-000001-10""" + if self.uiformatter is None: + return None + + year_field = self.uiformatter.fields[0] + separator_field = self.uiformatter.fields[1] + numeric_field = self.uiformatter.fields[2] + separator = separator_field.value + numeric_only_match = CATALOG_NUMBER_RANGE_RE.match(value) + if numeric_only_match is not None: + start_raw, end_raw = numeric_only_match.groups() + if ( + len(start_raw) > numeric_field.size + or len(end_raw) > numeric_field.size + ): + return None + + current_year = f"{date.today().year:0{year_field.size}d}" + start_numeric = start_raw.zfill(numeric_field.size) + start = self.uiformatter.canonicalize( + (current_year, separator_field.value, start_numeric) + ) + literal_end_numeric = end_raw.zfill(numeric_field.size) + end_numeric = self._resolve_shortened_numeric_end( + start_numeric, + end_raw, + literal_end_numeric, + ) + end = self.uiformatter.canonicalize( + (current_year, separator_field.value, end_numeric) + ) + return tuple(sorted((start, end))) + + range_pattern = ( + rf"^\s*(?P{self.uiformatter.parse_regexp()[1:-1]})" + rf"\s*{re.escape(separator)}\s*(?P.+?)\s*$" + ) + match = re.match( + range_pattern, + value, + ) + if match is None: + return None + + start_raw = match.group("start") + end_raw = match.group("end").strip() + try: + start_parts = self.uiformatter.parse(start_raw) + except FormatMismatch: + return None + + start = self.uiformatter.canonicalize(start_parts) + start_prefix_parts = start_parts[:-1] + start_numeric = start_parts[-1] + start_prefix = "".join( + formatter_field.canonicalize(part) + for formatter_field, part in zip( + self.uiformatter.fields[:-1], start_prefix_parts + ) + ) + + if end_raw.isdigit() and 0 < len(end_raw) <= numeric_field.size: + end_numeric = self._resolve_shortened_numeric_end( + start_numeric, + end_raw, + end_raw.zfill(numeric_field.size), + ) + end = f"{start_prefix}{end_numeric}" + else: + try: + end_parts = self.uiformatter.parse(end_raw) + except FormatMismatch: + return None + + if end_parts[:-1] != start_prefix_parts: + return None + + end = self.uiformatter.canonicalize(end_parts) + + return tuple(sorted((start, end))) + + def _parse_catalog_number_range(self, value: str): + if self._is_single_cnn_formatter(): + return self._parse_numeric_catalog_number_range(value) + if self._is_year_numeric_catalog_number_formatter(): + return self._parse_year_numeric_catalog_number_range(value) + return None + def op_in(self, field, values): if hasattr(values, "split"): - values = [self.format(v.strip()) for v in values.split(",")] + split_values = [v.strip() for v in values.split(",")] + if ( + self._supports_catalog_number_ranges() + and isinstance(field.type, sqlalchemy.types.String) + ): + exact_values = [] + ranges = [] + for value in split_values: + parsed = self._parse_catalog_number_range(value) + if parsed is None: + exact_values.append(self.format(value)) + else: + start, end = parsed + if start == end: + exact_values.append(start) + else: + ranges.append((start, end)) + + predicates = [field.in_(exact_values)] if len(exact_values) > 0 else [] + predicates.extend(field.between(start, end) for (start, end) in ranges) + if len(predicates) == 0: + return field.in_([]) + if len(predicates) == 1: + return predicates[0] + return sqlalchemy.or_(*predicates) + + values = [self.format(v) for v in split_values] return field.in_(values) def op_contains(self, field, value): @@ -133,11 +322,7 @@ def op_falseornull(self, field, value): return (field == False) | (field == None) def op_startswith(self, field, value): - if ( - self.uiformatter is not None - and isinstance(self.uiformatter.fields[0], CNNField) - and len(self.uiformatter.fields) == 1 - ): + if self._is_single_cnn_formatter(): value = value.lstrip("0") return field.op("REGEXP")("^0*" + value) else: diff --git a/specifyweb/backend/stored_queries/queryfieldspec.py b/specifyweb/backend/stored_queries/queryfieldspec.py index e9c4f2867f6..3ce298fdf38 100644 --- a/specifyweb/backend/stored_queries/queryfieldspec.py +++ b/specifyweb/backend/stored_queries/queryfieldspec.py @@ -10,14 +10,14 @@ from sqlalchemy import sql, Table as SQLTable from sqlalchemy.orm.query import Query -from specifyweb.specify.models_utils.load_datamodel import Field, Table -from specifyweb.specify.models import Collectionobject, Collectionobjectgroupjoin, Component, datamodel +from specifyweb.specify.datamodel import datamodel, is_tree_table +from specifyweb.specify.models_utils.load_datamodel import Field, Relationship, Table +from specifyweb.specify.models import Collectionobject, Collectionobjectgroupjoin, Component from specifyweb.backend.stored_queries.models import CollectionObject as sq_CollectionObject from specifyweb.backend.stored_queries.models import Component as sq_Component from . import models from .query_ops import QueryOps -from specifyweb.specify.models_utils.load_datamodel import Table, Field, Relationship logger = logging.getLogger(__name__) @@ -45,6 +45,10 @@ "CollectionObject": "age", } +TREE_TABLE_NAMES = { + table.name.lower() for table in datamodel.tables if is_tree_table(table) +} + class SpQueryAttrs(TypedDict): tablelist: str stringid: str @@ -235,12 +239,11 @@ def from_stringid(cls, stringid: str, is_relation: bool): path = deque(path_str.split(",")) root_table = datamodel.get_table_by_id(int(path.popleft())) - if is_relation: - path.pop() - join_path = [] node = root_table - for elem in path: + extracted_fieldname, date_part = extract_date_part(field_name) + path_elems = list(path) + for idx, elem in enumerate(path_elems): try: tableid, fieldname = elem.split("-") except ValueError: @@ -249,10 +252,61 @@ def from_stringid(cls, stringid: str, is_relation: bool): field = ( node.get_field(fieldname) if fieldname else node.get_field(table.name) ) + if ( + is_relation + and idx == len(path_elems) - 1 + and (fieldname is not None or table.name.lower() in TREE_TABLE_NAMES) + and isinstance(field, Relationship) + and field.name.lower() == extracted_fieldname.lower() + ): + break join_path.append(field) node = table extracted_fieldname, date_part = extract_date_part(field_name) + + if is_relation: + relation = None + if join_path and isinstance(join_path[-1], Relationship): + last_relation = join_path[-1] + related_table = datamodel.get_table( + last_relation.relatedModelName, strict=True + ) + if related_table.name.lower() == table_name.lower(): + relation = last_relation + + if relation is None: + relation = node.get_field(extracted_fieldname, strict=False) + if isinstance(relation, Relationship): + join_path.append(relation) + node = datamodel.get_table(relation.relatedModelName, strict=True) + else: + relation = None + + if relation is not None: + # When extracted_fieldname matches the table name but no + # actual field exists on the target table (e.g. + # "locality.locality"), this is a legacy sentinel indicating a + # formatted tree rank, not a normal relation. Fall through so + # the tree_rank logic below can handle it. + result = cls( + root_table=root_table, + root_sql_table=getattr(models, root_table.name), + join_path=tuple(join_path), + table=node, + date_part=None, + tree_rank=None, + tree_field=relation, + ) + logger.debug( + "parsed %s (is_relation %s) to %s. extracted_fieldname = %s", + stringid, + is_relation, + result, + extracted_fieldname, + ) + return result + relation_already_in_path = ( is_relation and len(join_path) > 0 @@ -267,7 +321,23 @@ def from_stringid(cls, stringid: str, is_relation: bool): ) tree_rank_name = None - if field is None and not relation_already_in_path: # try finding tree + if ( + field is None + and is_relation + and not is_tree_table(node) + and extracted_fieldname.lower() == table_name.lower() == node.name.lower() + ): + # Legacy relation stringids like "locality.locality" serialize the current related table as a formatted + # step, not as an actual field on that table. + # Preserve that sentinel so nested formatted relations keep the same row plan shape, without treating + # arbitrary unknown fields on non-tree tables as tree ranks. + tree_rank_name = extracted_fieldname + join_path.append(TreeRankQuery.create(tree_rank_name, node.name)) + elif ( + field is None + and is_tree_table(node) + and not relation_already_in_path + ): # try finding tree only on tree tables tree_rank_name, field = find_tree_and_field(node, extracted_fieldname) if tree_rank_name: tree_rank = TreeRankQuery.create( @@ -392,6 +462,7 @@ def apply_filter( op_num=None, negate=False, strict=False, + formatter=None, collection=None, user=None ): @@ -405,7 +476,7 @@ def apply_filter( value = other_field else: uiformatter = field and get_uiformatter( - query.collection, table.name, field.name + query.collection, table.name, field.name, formatter, user ) value = value @@ -464,7 +535,17 @@ def add_to_query( # print "############################################################################" query, orm_field, field, table = self.add_spec_to_query(query, formatter) return self.apply_filter( - query, orm_field, field, table, value, op_num, negate, strict=strict, collection=collection, user=user + query, + orm_field, + field, + table, + value, + op_num, + negate, + strict=strict, + formatter=formatter, + collection=collection, + user=user, ) def add_spec_to_query( diff --git a/specifyweb/backend/stored_queries/relative_date_utils.py b/specifyweb/backend/stored_queries/relative_date_utils.py index ab284564c8e..526a459236c 100644 --- a/specifyweb/backend/stored_queries/relative_date_utils.py +++ b/specifyweb/backend/stored_queries/relative_date_utils.py @@ -3,13 +3,6 @@ relative_date_re = r"today\s*([+-])\s*(\d+)\s*(second|minute|hour|day|week|month|year)" -def apply_absolute_date(query_field): - if query_field.fieldspec.date_part is None or query_field.fieldspec.date_part != 'Full Date': - return query_field - - field_value = query_field.value - new_field_value = ','.join([relative_to_absolute_date(value_split) for value_split in field_value.split(',')]) - return query_field._replace(value=new_field_value) def relative_to_absolute_date(raw_date_value): date_parse = re.findall(relative_date_re, raw_date_value) diff --git a/specifyweb/backend/stored_queries/synonomy.py b/specifyweb/backend/stored_queries/synonomy.py new file mode 100644 index 00000000000..7beca08854d --- /dev/null +++ b/specifyweb/backend/stored_queries/synonomy.py @@ -0,0 +1,236 @@ +from typing import Optional, Tuple, List +from sqlalchemy import select, union, func +from sqlalchemy.sql import Select +from sqlalchemy.orm import Query +from sqlalchemy.sql.selectable import FromClause, Alias, Join +from sqlalchemy.sql.schema import Table +from specifyweb.specify.models_utils.load_datamodel import Table as SpecifyTable + +def synonymize_tree_query( + query: Query, + table: "SpecifyTable", + expand_from_accepted: bool = True, +) -> Query: + """ + Expand a tree query (Taxon, Storage, Geography, TectonicUnit, Chronostratigraphy, + Lithostratigraphy) to include synonymy-related records. + + expand_from_accepted = True (default) + - Start from the records that match the original predicate. + - Resolve each match to its accepted root via COALESCE(AcceptedID, id_col). + - Then include all synonyms whose AcceptedID points to those accepted roots. + + Query Building Strategy: + target_taxon := (original FROM+JOINS + WHERE) projected as (id_col, AcceptedID) + accepted_roots := SELECT COALESCE(AcceptedID, id_col) FROM target_taxon + syn_ids := SELECT id_col FROM tree WHERE AcceptedID IN (accepted_roots) + ids := accepted_roots UNION syn_ids + + expand_from_accepted = False + - Include records whose synonymized children match the original predicate. + + Query Building Strategy: + target_taxon := (original FROM+JOINS + WHERE) projected as (id_col, AcceptedID) + ids := SELECT id_col UNION SELECT AcceptedID + FROM target_taxon (AcceptedID NOT NULL) + + In both cases: + final := (original SELECT list) + (original FROM/JOINS but no WHERE) + + WHERE tree.id_col IN (ids) + """ + base_sel: Select = query.statement if isinstance(query, Query) else query + + tree_table_name = table.table + id_col_name = table.idColumn + + # Find the tree base table and the specific FROM/alias used in the original query + taxon_table, taxon_from = _find_tree_table_and_from(base_sel, tree_table_name) + if taxon_table is None or taxon_from is None: + raise ValueError( + f"synonymize_tree_query: couldn't locate '{tree_table_name}' in the query FROMs." + ) + + # Build `target_taxon` CTE based on the given query + target_taxon_cte = _build_target_tree_cte( + base_sel, + taxon_from, + id_col_name=id_col_name, + cte_name="target_taxon", + ) + + if expand_from_accepted: + # Resolve each matched row to its accepted root so both directions work + accepted_roots = select( + func.coalesce( + target_taxon_cte.c.AcceptedID, + target_taxon_cte.c.TaxonID, + ).label("id") + ).subquery("accepted_roots") + + # Any row whose AcceptedID points at one of those accepted roots + # Use the base tree table, not the query alias, so we don't carry original WHERE + syn_ids = select(taxon_table.c[id_col_name].label("id")).where( + taxon_table.c.AcceptedID.in_(select(accepted_roots.c.id)) + ) + + ids = union(select(accepted_roots.c.id), syn_ids).subquery("ids") + + else: + # Subquery to get the relevant ids for synonymy: id_col and AcceptedID + ids = union( + select(target_taxon_cte.c.TaxonID.label("id")), + select(target_taxon_cte.c.AcceptedID.label("id")).where( + target_taxon_cte.c.AcceptedID.isnot(None) + ), + ).subquery("ids") + + # Rebuild a fresh chainable ORM Query using these ids + return _rebuild_query_with_ids( + query=query, + base_sel=base_sel, + taxon_from=taxon_from, + ids_subquery=ids, + id_col_name=id_col_name, + ) + +def _build_target_tree_cte( + base_sel: Select, + taxon_from: FromClause, + id_col_name: str, + cte_name: str = "target_taxon", +): + """ + Given the original Select and the tree FromClause/alias used in it, + build a CTE that projects (id_col, AcceptedID) with all original + FROM / WHERE / GROUP BY / HAVING preserved. + + The ID column is always labeled as "TaxonID" for downstream reuse, + even when the underlying table is not taxon. + """ + target_taxon = select( + taxon_from.c[id_col_name].label("TaxonID"), + taxon_from.c.AcceptedID.label("AcceptedID"), + ) + + # Re-attach the original FROM roots + for f in base_sel.get_final_froms(): + target_taxon = target_taxon.select_from(f) + + # Re-apply WHERE, GROUP BY, HAVING (but not ORDER BY) + for wc in getattr(base_sel, "_where_criteria", ()) or (): + target_taxon = target_taxon.where(wc) + for gb in getattr(base_sel, "_group_by_clauses", ()) or (): + target_taxon = target_taxon.group_by(gb) + if getattr(base_sel, "_having", None) is not None: + target_taxon = target_taxon.having(base_sel._having) + + return target_taxon.cte(cte_name) + +def _rebuild_query_with_ids( + query: Query, + base_sel: Select, + taxon_from: FromClause, + ids_subquery: FromClause, + id_col_name: str, +) -> Query: + """ + Take the original ORM Query + its underlying Select and rebuild a new, + chainable ORM Query: + - Same selected columns + - Same FROM (joins included) + - Same GROUP BY / HAVING / ORDER BY + - No original WHERE + - Adds WHERE tree.id_col_name IN (SELECT id FROM ids_subquery) + """ + sess = query.session + original_cols: List = list(base_sel.selected_columns) + + new_query = sess.query(*original_cols) + + # Attach the same FROM base tables as the original query; + # these already carry the join conditions. + for f in base_sel.get_final_froms(): + new_query = new_query.select_from(f) + + # Preserve GROUP BY / HAVING / ORDER BY from the original select, but not WHERE + for gb in getattr(base_sel, "_group_by_clauses", ()) or (): + new_query = new_query.group_by(gb) + if getattr(base_sel, "_having", None) is not None: + new_query = new_query.having(base_sel._having) + if getattr(base_sel, "_order_by_clauses", None): + new_query = new_query.order_by(*base_sel._order_by_clauses) + + # Apply the expansion condition on the appropriate ID column + new_query = new_query.filter( + taxon_from.c[id_col_name].in_(select(ids_subquery.c.id)) + ) + return new_query + +def _find_tree_table_and_from( + sel: Select, + tree_table_name: str = "taxon", +) -> Tuple[Optional[Table], Optional[FromClause]]: + """ + Find the underlying Table for the given tree table name + and the specific FromClause (table OR alias) used in `sel` for that table. + + Works with: Table, Alias(Table), Join trees, Alias(Join(...)). + """ + + target_name = tree_table_name.lower() + + def is_taxon_table(t: Table) -> bool: + # Compare case-insensitively and handle schema-qualified names if any + try: + return t.name is not None and t.name.lower() == target_name + except Exception: + return False + + def walk(fc: FromClause) -> Tuple[Optional[Table], Optional[FromClause]]: + # Plain Table + if isinstance(fc, Table) and is_taxon_table(fc): + return fc, fc + + # Alias of something + el = getattr(fc, "element", None) + if isinstance(fc, Alias) and el is not None: + # Alias(Table) + if isinstance(el, Table) and is_taxon_table(el): + return el, fc + # Alias(Join/Selectable): recurse into the element + if isinstance(el, Join): + t, frm = walk(el) + if t is not None: + return t, frm + + # Join: recurse both sides + if isinstance(fc, Join): + t, frm = walk(fc.left) + if t is not None: + return t, frm + t, frm = walk(fc.right) + if t is not None: + return t, frm + + # Unknown / composite + return None, None + + # Try walking all final FROM roots + for f in sel.get_final_froms(): + t, frm = walk(f) + if t is not None and frm is not None: + return t, frm + + # Fallback to scanning selected columns to deduce the alias + try: + for col in sel.selected_columns: + tbl = getattr(col, "table", None) + el = getattr(tbl, "element", None) + if isinstance(tbl, Table) and is_taxon_table(tbl): + return tbl, tbl + if isinstance(el, Table) and is_taxon_table(el): + return el, tbl # tbl is the alias here + except Exception: + pass + + return None, None diff --git a/specifyweb/backend/stored_queries/tests/static/simple_static_fields.py b/specifyweb/backend/stored_queries/tests/static/simple_static_fields.py index f1349c4eca8..4afbd44c120 100644 --- a/specifyweb/backend/stored_queries/tests/static/simple_static_fields.py +++ b/specifyweb/backend/stored_queries/tests/static/simple_static_fields.py @@ -170,12 +170,12 @@ def get_sql_table(name): "cataloger" ), ), - "table": datamodel.get_table_strict("CollectionObject"), + "table": datamodel.get_table_strict("Agent"), "date_part": None, "tree_rank": None, - "tree_field": datamodel.get_table_strict( - "CollectionObject" - ).get_field_strict("cataloger"), + "tree_field": datamodel.get_table_strict("CollectionObject").get_field_strict( + "cataloger" + ), } ), op_num=8, @@ -308,12 +308,12 @@ def get_sql_table(name): "determinations" ), ), - "table": datamodel.get_table_strict("CollectionObject"), + "table": datamodel.get_table_strict("Determination"), "date_part": None, "tree_rank": None, - "tree_field": datamodel.get_table_strict( - "CollectionObject" - ).get_field_strict("determinations"), + "tree_field": datamodel.get_table_strict("CollectionObject").get_field_strict( + "determinations" + ), } ), op_num=8, @@ -334,12 +334,12 @@ def get_sql_table(name): "preparations" ), ), - "table": datamodel.get_table_strict("CollectionObject"), + "table": datamodel.get_table_strict("Preparation"), "date_part": None, "tree_rank": None, - "tree_field": datamodel.get_table_strict( - "CollectionObject" - ).get_field_strict("preparations"), + "tree_field": datamodel.get_table_strict("CollectionObject").get_field_strict( + "preparations" + ), } ), op_num=8, @@ -387,12 +387,12 @@ def get_sql_table(name): "collectingEvent" ), ), - "table": datamodel.get_table_strict("CollectionObject"), + "table": datamodel.get_table_strict("CollectingEvent"), "date_part": None, "tree_rank": None, - "tree_field": datamodel.get_table_strict( - "CollectionObject" - ).get_field_strict("collectingEvent"), + "tree_field": datamodel.get_table_strict("CollectionObject").get_field_strict( + "collectingEvent" + ), } ), op_num=8, @@ -416,12 +416,12 @@ def get_sql_table(name): "locality" ), ), - "table": datamodel.get_table_strict("CollectingEvent"), + "table": datamodel.get_table_strict("Locality"), "date_part": None, "tree_rank": None, - "tree_field": datamodel.get_table_strict( - "CollectingEvent" - ).get_field_strict("locality"), + "tree_field": datamodel.get_table_strict("CollectingEvent").get_field_strict( + "locality" + ), } ), op_num=8, diff --git a/specifyweb/backend/stored_queries/tests/test_batch_edit.py b/specifyweb/backend/stored_queries/tests/test_batch_edit.py index 6372521c6f3..477af0f5970 100644 --- a/specifyweb/backend/stored_queries/tests/test_batch_edit.py +++ b/specifyweb/backend/stored_queries/tests/test_batch_edit.py @@ -155,9 +155,9 @@ def test_basic_run(self): "CollectionObject catalogNumber", "CollectionObject integer1", "Agent (formatted)", - "CollectingEvent (formatted)", "Agent firstName", "Agent lastName", + "CollectingEvent (formatted)", "Locality localityName", ], ) @@ -554,6 +554,14 @@ def test_duplicates_flattened(self): "CollectionObject catalogNumber", "CollectionObject integer1", "Agent (formatted)", + "Determination integer1", + "Determination remarks", + "Determination integer1 #2", + "Determination remarks #2", + "Determination integer1 #3", + "Determination remarks #3", + "Preparation countAmt", + "Preparation text1", "Agent firstName", "Agent lastName", "AgentSpecialty specialtyName", @@ -576,14 +584,6 @@ def test_duplicates_flattened(self): "CollectingEvent stationFieldNumber #7", "Collector remarks #8", "CollectingEvent stationFieldNumber #8", - "Determination integer1", - "Determination remarks", - "Determination integer1 #2", - "Determination remarks #2", - "Determination integer1 #3", - "Determination remarks #3", - "Preparation countAmt", - "Preparation text1" ], ) diff --git a/specifyweb/backend/stored_queries/tests/test_build_query.py b/specifyweb/backend/stored_queries/tests/test_build_query.py new file mode 100644 index 00000000000..7330b738282 --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_build_query.py @@ -0,0 +1,129 @@ +from specifyweb.specify.models import Taxontreedefitem, datamodel +from specifyweb.backend.stored_queries import models as models +from specifyweb.backend.stored_queries.queryfield import fields_from_json +from specifyweb.backend.stored_queries.execution import QuerySort, BuildQueryProps, build_query, DefaultQueryFormatterProps, build_query_construct_base, add_fields_to_query +from specifyweb.backend.stored_queries.tests.tests import SQLAlchemySetup + +class TestBuildQuery(SQLAlchemySetup): + def setUp(self): + super().setUp() + root_rank = Taxontreedefitem.objects.create( + rankid=0, + parent=None, + treedef=self.taxontreedef, + name="Root", + title="Root" + ) + kingdom_rank = Taxontreedefitem.objects.create( + rankid=10, + parent=root_rank, + treedef=self.taxontreedef, + name="Kingdom", + title="Kingdom" + ) + phylum_rank = Taxontreedefitem.objects.create( + rankid=30, + parent=kingdom_rank, + treedef=self.taxontreedef, + name="Phylum", + title="Phylum" + ) + family_rank = Taxontreedefitem.objects.create( + rankid=140, + parent=phylum_rank, + treedef=self.taxontreedef, + name="Family", + title="Family" + ) + genus_rank = Taxontreedefitem.objects.create( + rankid=180, + parent=family_rank, + treedef=self.taxontreedef, + name="Genus", + title="Genus" + ) + Taxontreedefitem.objects.create( + rankid=220, + parent=genus_rank, + treedef=self.taxontreedef, + name="Species", + title="Species" + ) + + # This test helps guard against Issues like #8529 and #3369 + def test_no_extra_tree_joins(self): + base_field_attrs = { + "formatname": None, + "isdisplay": True, + "isnot": False, + "isrelfld": False, + # operstart 8 = Don't Care / Any + # REFACTOR: Make an OpNum Enum with possible values + # There's QUERYFIELD_OPERATION_NUMBER type, but no easy-to-read + # value we can use + "operstart": 8, + "sorttype": QuerySort.NONE, + "startvalue": "", + "isstrict": False + } + base_query_fields = [ + { + **base_field_attrs, + "position": 0, + "stringid": "1,9-determinations,4.taxon.Genus", + }, + { + **base_field_attrs, + "position": 1, + "stringid": "1,9-determinations,4-preferredTaxon.taxon.Species", + } + ] + query_fields = fields_from_json(base_query_fields) + collection = self.collection + user = self.specifyuser + tableid = datamodel.get_table_strict("collectionobject").tableId + with TestBuildQuery.test_session_context() as session: + props = BuildQueryProps() + model = models.models_by_tableid[tableid] + query_base = build_query_construct_base( + session=session, + collection=collection, + user=user, + model=model, + props=props + ) + query, selected_fields, order_by_exprs = add_fields_to_query( + collection=collection, + user=user, + query=query_base, + query_fields=query_fields, + series=props.series, + formatauditobjs=props.formatauditobjs + ) + # There should be 4 objects in the join cache + # CollectionObject -> Determinations + # Determination -> taxon + # Taxon Ranks for Determination -> taxon + # Determination -> preferredTaxon + self.assertEqual( + len(query.join_cache), + 4 + ) + # BUG: This is technically undesirable, as it causes #8650 + # In the underlying query, the Preferred Taxon currently uses the + # JOIN for Determination -> taxon. Specifically, it uses the cached + # JOINs for the tree ranks. + taxon_table = datamodel.get_table_strict("taxon") + cache_key = (taxon_table, 'TreeRanks') + tree_ranks_in_cache = list(filter(lambda cache_key: 'TreeRanks' in cache_key, query.join_cache.keys())) + self.assertEqual( + tree_ranks_in_cache, + [cache_key] + ) + tree_join_information = query.join_cache[cache_key] + tree_ranks = tree_join_information[0] + + self.assertEqual( + len(tree_ranks), + len(self.taxontreedef.treedefitems.all()) + ) diff --git a/specifyweb/backend/stored_queries/tests/test_execution/test_cog_inheritance_post_query_processing.py b/specifyweb/backend/stored_queries/tests/test_execution/test_cog_inheritance_post_query_processing.py index c8aefa788d8..f5c36b022b6 100644 --- a/specifyweb/backend/stored_queries/tests/test_execution/test_cog_inheritance_post_query_processing.py +++ b/specifyweb/backend/stored_queries/tests/test_execution/test_cog_inheritance_post_query_processing.py @@ -1,4 +1,4 @@ -from specifyweb.backend.inheritance.api import cog_inheritance_post_query_processing +from specifyweb.backend.inheritance.api import cog_inheritance_query_processor from specifyweb.backend.interactions.tests.test_cog_consolidated_prep_context import ( TestCogConsolidatedPrepContext, ) @@ -27,11 +27,11 @@ def test_non_collectionobject_table(self): query_fields, ) - query = cog_inheritance_post_query_processing( - query, table.tableId, query_fields, self.collection, self.specifyuser + processor = cog_inheritance_query_processor( + table.tableId, query_fields, self.collection, self.specifyuser ) - result = list(query) + result = [tuple(processor(list(row))) for row in query] self.assertEqual(result, [(self.agent.id, "Test", 0)]) @@ -48,11 +48,11 @@ def test_collectionobject_table_simple(self): query_fields, ) - query = cog_inheritance_post_query_processing( - query, table.tableId, query_fields, self.collection, self.specifyuser + processor = cog_inheritance_query_processor( + table.tableId, query_fields, self.collection, self.specifyuser ) - result = list(query) + result = [tuple(processor(list(row))) for row in query] self.assertCountEqual( result, @@ -90,11 +90,11 @@ def test_collectionobject_table_cojo(self, func: Mock): query_fields, ) - query = cog_inheritance_post_query_processing( - query, table.tableId, query_fields, self.collection, self.specifyuser + processor = cog_inheritance_query_processor( + table.tableId, query_fields, self.collection, self.specifyuser ) - result = list(query) + result = [tuple(processor(list(row))) for row in query] self.assertCountEqual( [ diff --git a/specifyweb/backend/stored_queries/tests/test_execution/test_execute.py b/specifyweb/backend/stored_queries/tests/test_execution/test_execute.py index 59ff51e4657..7b2c8d10987 100644 --- a/specifyweb/backend/stored_queries/tests/test_execution/test_execute.py +++ b/specifyweb/backend/stored_queries/tests/test_execution/test_execute.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import date, datetime from specifyweb.specify.models import Collectionobject, Recordset, Recordsetitem from specifyweb.backend.stored_queries.execution import execute @@ -8,6 +8,36 @@ class TestExecute(SQLAlchemySetup): + def _execute_catalog_number_in_query(self, value, format_name=None): + table, query_fields = make_query_fields_test( + "Collectionobject", [["catalognumber"]] + ) + query_fields = [ + query_fields[0]._replace( + op_num=10, + value=value, + format_name=format_name, + ) + ] + + with TestExecute.test_session_context() as session: + return execute( + session, + self.collection, + self.specifyuser, + table.tableId, + search_synonymy=False, + distinct=False, + series=False, + count_only=False, + query_fields=query_fields, + limit=0, + offset=0, + ) + + def _set_catalog_numbers(self, numbers): + for co, number in zip(self.collectionobjects, numbers): + self._update(co, dict(catalognumber=number)) def _make_numeric_cos(self): Collectionobject.objects.all().delete() @@ -45,8 +75,9 @@ def test_simple_query(self): table.tableId, distinct=False, series=False, + search_synonymy=False, count_only=False, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -77,8 +108,9 @@ def test_simple_query_count(self): table.tableId, distinct=False, series=False, + search_synonymy=False, count_only=True, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -98,8 +130,9 @@ def test_simple_query_distinct(self): table.tableId, distinct=True, series=False, + search_synonymy=False, count_only=False, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -133,8 +166,9 @@ def test_simple_query_distinct_count(self): table.tableId, distinct=True, series=False, + search_synonymy=False, count_only=True, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -167,8 +201,9 @@ def test_simple_query_recordset_limit(self): self.specifyuser, table.tableId, series=False, + search_synonymy=False, count_only=False, - field_specs=query_fields, + query_fields=query_fields, limit=3, offset=0, recordsetid=test_rs.id, @@ -182,8 +217,9 @@ def test_simple_query_recordset_limit(self): table.tableId, distinct=False, series=False, + search_synonymy=False, count_only=True, - field_specs=query_fields, + query_fields=query_fields, limit=3, offset=0, recordsetid=test_rs.id, @@ -239,8 +275,9 @@ def test_related_date_part_query_fields(self): table.tableId, distinct=False, series=False, + search_synonymy=False, count_only=False, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -269,8 +306,9 @@ def test_simple_query_series(self): table.tableId, distinct=False, series=True, + search_synonymy=False, count_only=False, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -282,8 +320,9 @@ def test_simple_query_series(self): table.tableId, distinct=False, series=True, + search_synonymy=False, count_only=True, - field_specs=query_fields, + query_fields=query_fields, limit=0, offset=0, ) @@ -305,3 +344,96 @@ def test_simple_query_series(self): ) self.assertEqual(result_count_only, dict(count=2)) + + def test_in_operator_supports_catalog_number_ranges(self): + self._update(self.collection, dict(catalognumformatname="CatalogNumberNumeric")) + + numbers = ("33040", "33043", "33049", "352000", "352026") + self._set_catalog_numbers(number.zfill(9) for number in numbers) + expected_ids = [co.id for co in self.collectionobjects[: len(numbers)]] + + result = self._execute_catalog_number_in_query( + "33043-33049, 352000-26, 33040" + ) + + self.assertCountEqual([row[0] for row in result["results"]], expected_ids) + + def test_in_operator_supports_descending_numeric_shorthand_ranges(self): + self._update(self.collection, dict(catalognumformatname="CatalogNumberNumeric")) + + Collectionobject.objects.all().delete() + collectionobjects = self.make_co(10) + for number, co in enumerate(collectionobjects, start=1): + self._update(co, dict(catalognumber=str(number).zfill(9))) + + result = self._execute_catalog_number_in_query("6-1, 10-7") + + self.assertCountEqual( + [row[0] for row in result["results"]], + [co.id for co in collectionobjects], + ) + + def test_in_operator_supports_year_catalog_number_ranges(self): + self._update(self.collection, dict(catalognumformatname="CatalogNumber")) + self._set_catalog_numbers( + ( + "2025-000001", + "2025-000010", + "2025-000028", + "2025-000049", + "2024-000010", + ) + ) + + result = self._execute_catalog_number_in_query( + "2025-000001-10, 2025-000028-2025-000049" + ) + + self.assertCountEqual( + [row[0] for row in result["results"]], + [co.id for co in self.collectionobjects[:4]], + ) + + def test_in_operator_supports_year_catalog_number_descending_shorthand(self): + current_year = date.today().year + + self._update( + self.collection, dict(catalognumformatname="CatalogNumberAlphaNumByYear") + ) + Collectionobject.objects.all().delete() + collectionobjects = self.make_co(10) + for number, co in enumerate(collectionobjects, start=1): + self._update(co, dict(catalognumber=f"{current_year}-{number:06d}")) + + result = self._execute_catalog_number_in_query("6-1, 10-7") + + self.assertCountEqual( + [row[0] for row in result["results"]], + [co.id for co in collectionobjects], + ) + + def test_in_operator_uses_selected_catalog_number_formatter(self): + self._update(self.collection, dict(catalognumformatname="CatalogNumberNumeric")) + self._update( + self.collectionobjecttype, + dict(catalognumberformatname="CatalogNumberAlphaNumByYear"), + ) + self._set_catalog_numbers( + ( + "2026-000001", + "2026-000010", + "2025-000010", + "000000123", + "000000124", + ) + ) + + result = self._execute_catalog_number_in_query( + "2026-000001-10", + format_name="CatalogNumberAlphaNumByYear", + ) + + self.assertCountEqual( + [row[0] for row in result["results"]], + [self.collectionobjects[0].id, self.collectionobjects[1].id], + ) diff --git a/specifyweb/backend/stored_queries/tests/test_execution/test_field_specs_from_json.py b/specifyweb/backend/stored_queries/tests/test_execution/test_field_specs_from_json.py index c317fa53cf1..59027296753 100644 --- a/specifyweb/backend/stored_queries/tests/test_execution/test_field_specs_from_json.py +++ b/specifyweb/backend/stored_queries/tests/test_execution/test_field_specs_from_json.py @@ -1,4 +1,4 @@ -from specifyweb.specify.models_utils.load_datamodel import Field, Table +from specifyweb.specify.models_utils.load_datamodel import Field, Relationship, Table from specifyweb.specify.tests.test_api import ApiTests import json @@ -101,6 +101,20 @@ def generate_fields_test_str(query_fields, var_name): # pragma: no cover class TestFieldSpecsFromJson(ApiTests): + def assert_relation_stringid(self, stringid: str, expected_path: tuple[str, ...]): + fieldspec = QueryFieldSpec.from_stringid(stringid, True) + round_tripped = QueryFieldSpec.from_stringid(fieldspec.to_stringid(), True) + + self.assertTrue(fieldspec.is_relationship()) + self.assertEqual(fieldspec, round_tripped) + self.assertEqual( + tuple(node.name for node in fieldspec.join_path), + expected_path, + ) + self.assertFalse( + any(isinstance(node, TreeRankQuery) for node in fieldspec.join_path) + ) + def test_static_field_specs(self): # pragma: no cover query = json.load(open("specifyweb/backend/stored_queries/tests/static/co_query.json")) query_fields = fields_from_json(query["fields"]) @@ -108,3 +122,52 @@ def test_static_field_specs(self): # pragma: no cover # generate_fields_test_str(query_fields, "static_simple_field_spec") self.assertEqual(static_simple_field_spec, query_fields) + + def test_non_tree_table_does_not_parse_tree_rank(self): + table = datamodel.get_table_strict("CollectionObject") + stringid = f"{table.tableId}.collectionobject.NotARealField" + + fieldspec = QueryFieldSpec.from_stringid(stringid, False) + + self.assertFalse(fieldspec.contains_tree_rank()) + self.assertIsNone(fieldspec.tree_rank) + self.assertIsNone(fieldspec.get_field()) + + def test_nested_formatted_relation_keeps_legacy_sentinel(self): + """Formatted relations like "locality.locality" are treated as + relationships (not tree ranks) when parsed via from_stringid. + The relation is found via join_path[-1] in the is_relation block. + """ + fieldspec = QueryFieldSpec.from_stringid("1,10,2.locality.locality", True) + + self.assertTrue(fieldspec.is_relationship()) + self.assertIsNone(fieldspec.tree_rank) + self.assertEqual( + [node.name for node in fieldspec.join_path], + ["collectingEvent", "locality"], + ) + self.assertIsInstance(fieldspec.get_field(), Relationship) + + def test_nested_formatted_prep_type_stringid_stays_relationship(self): + self.assert_relation_stringid( + "1,63-preparations,65.preptype.prepType", + ("preparations", "prepType"), + ) + + def test_direct_formatted_collecting_event_stringid_stays_relationship(self): + self.assert_relation_stringid( + "1,10.collectingevent.collectingEvent", + ("collectingEvent",), + ) + + def test_nested_formatted_taxon_stringid_stays_relationship(self): + self.assert_relation_stringid( + "1,9-determinations,4.taxon.taxon", + ("determinations", "taxon"), + ) + + def test_nested_formatted_chronostrat_stringid_stays_relationship(self): + self.assert_relation_stringid( + "1,32,46-chronosStrat.geologictimeperiod.chronosStrat", + ("paleoContext", "chronosStrat"), + ) diff --git a/specifyweb/backend/stored_queries/tests/test_execution/test_query_to_csv.py b/specifyweb/backend/stored_queries/tests/test_execution/test_query_to_csv.py index 6b013abc553..6bb65763caf 100644 --- a/specifyweb/backend/stored_queries/tests/test_execution/test_query_to_csv.py +++ b/specifyweb/backend/stored_queries/tests/test_execution/test_query_to_csv.py @@ -181,8 +181,12 @@ def _filter(row): ] -def return_first(first, *args, **kwargs): - return first +def return_first(query, processors, **kwargs): + for raw_row in query.yield_per(7000): + row = list(raw_row) + for processor in processors: + row = processor(row) + yield tuple(row) def make_test(test_fn, mock_post_processing): diff --git a/specifyweb/backend/stored_queries/tests/test_execution/test_recordset.py b/specifyweb/backend/stored_queries/tests/test_execution/test_recordset.py new file mode 100644 index 00000000000..b1c49290ce0 --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_execution/test_recordset.py @@ -0,0 +1,53 @@ +from unittest import TestCase +from unittest.mock import Mock, patch + +from specifyweb.backend.stored_queries.execution import BuildQueryProps, recordset + +class TestRecordSet(TestCase): + @patch("specifyweb.backend.stored_queries.execution.insert") + @patch("specifyweb.backend.stored_queries.execution.build_query") + @patch("specifyweb.backend.stored_queries.execution.fields_from_json") + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + @patch("specifyweb.backend.stored_queries.execution.models.RecordSet") + def test_query_is_scoped_to_source_recordset( + self, + recordset_model, + session_context, + fields_from_json, + build_query, + _insert, + ): + collection = Mock(id=1) + user = Mock(id=2) + user_agent = Mock(id=3) + source_recordset_id = 4 + field_specs = [Mock()] + query = Mock() + + session = session_context.return_value.__enter__.return_value + recordset_model.return_value.recordSetId = 5 + fields_from_json.return_value = field_specs + build_query.return_value = (query, Mock()) + + recordset( + collection, + user, + user_agent, + { + "name": "Filtered Record Set", + "fromquery": { + "contexttableid": 1, + "fields": [], + "recordsetid": source_recordset_id, + }, + }, + ) + + build_query.assert_called_once_with( + session, + collection, + user, + 1, + field_specs, + BuildQueryProps(recordsetid=source_recordset_id), + ) \ No newline at end of file diff --git a/specifyweb/backend/stored_queries/tests/test_execution/test_run_ephemeral_query.py b/specifyweb/backend/stored_queries/tests/test_execution/test_run_ephemeral_query.py index 406dd4e5f1c..1a200798441 100644 --- a/specifyweb/backend/stored_queries/tests/test_execution/test_run_ephemeral_query.py +++ b/specifyweb/backend/stored_queries/tests/test_execution/test_run_ephemeral_query.py @@ -1,3 +1,6 @@ +from copy import deepcopy +from datetime import datetime + from specifyweb.backend.stored_queries.execution import run_ephemeral_query from specifyweb.backend.stored_queries.tests.test_execution.simple_query import simple_query from specifyweb.backend.stored_queries.tests.tests import SQLAlchemySetup @@ -6,17 +9,218 @@ from unittest.mock import patch, Mock +PROJECT_FORMATTERS = """ + + + + + projectName + + + + + + + +""" + + class TestRunEphemeralQuery(SQLAlchemySetup): + @staticmethod + def _make_field(position: int, string_id: str, field_name: str) -> dict: + return { + "tablelist": "1", + "stringid": string_id, + "fieldname": field_name, + "isrelfld": False, + "sorttype": 0, + "position": position, + "isdisplay": True, + "operstart": 8, + "startvalue": "", + "isnot": False, + "isstrict": False, + } + @patch("specifyweb.backend.stored_queries.execution.models.session_context") def test_query(self, context: Mock): context.return_value = TestRunEphemeralQuery.test_session_context() result = run_ephemeral_query(self.collection, self.specifyuser, simple_query) - self.assertCountEqual( + self.assertEqual( {"results": [(co.id, co.catalognumber) for co in self.collectionobjects]}, result, ) + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + def test_query_with_displayed_date_parts(self, context: Mock): + context.return_value = TestRunEphemeralQuery.test_session_context() + + self._update( + self.collectionobjects[0], + dict( + catalogeddate=datetime(2024, 5, 17), + catalogeddateprecision=1, + ), + ) + self._update( + self.collectionobjects[1], + dict( + catalogeddate=datetime(2024, 6, 1), + catalogeddateprecision=2, + ), + ) + self._update( + self.collectionobjects[2], + dict( + catalogeddate=datetime(2024, 1, 1), + catalogeddateprecision=3, + ), + ) + + query = deepcopy(simple_query) + query["fields"] = [ + self._make_field(0, "1.collectionobject.catalogNumber", "catalogNumber"), + self._make_field( + 1, + "1.collectionobject.catalogedDateNumericDay", + "catalogedDateNumericDay", + ), + self._make_field( + 2, + "1.collectionobject.catalogedDateNumericMonth", + "catalogedDateNumericMonth", + ), + self._make_field( + 3, + "1.collectionobject.catalogedDateNumericYear", + "catalogedDateNumericYear", + ), + ] + + result = run_ephemeral_query(self.collection, self.specifyuser, query) + + self.assertEqual( + { + "results": [ + (self.collectionobjects[0].id, "num-0", 17, 5, 2024), + (self.collectionobjects[1].id, "num-1", None, 6, 2024), + (self.collectionobjects[2].id, "num-2", None, None, 2024), + (self.collectionobjects[3].id, "num-3", None, None, None), + (self.collectionobjects[4].id, "num-4", None, None, None), + ] + }, + result, + ) + + @patch("specifyweb.backend.stored_queries.format.app_resource.get_app_resource") + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + def test_query_project_many_to_many_relationship( + self, context: Mock, get_app_resource: Mock + ): + context.side_effect = TestRunEphemeralQuery.test_session_context + get_app_resource.return_value = (PROJECT_FORMATTERS, None, None) + + project = models.Project.objects.create( + collectionmemberid=self.collection.id, + projectname="Test Project", + ) + models.Project_colobj.objects.create( + project=project, + collectionobject=self.collectionobjects[0], + ) + + query = deepcopy(simple_query) + query["fields"] = [ + { + "fieldname": "projectName", + "formatname": None, + "isdisplay": True, + "isnot": False, + "isrelfld": False, + "operstart": 8, + "position": 0, + "sorttype": 0, + "startvalue": "", + "stringid": "1,66-projects.project.projectName", + "isstrict": False, + }, + { + "fieldname": "projects", + "formatname": None, + "isdisplay": True, + "isnot": False, + "isrelfld": True, + "operstart": 8, + "position": 1, + "sorttype": 0, + "startvalue": "", + "stringid": "1,66-projects.project.projects", + "isstrict": False, + }, + ] + + result = run_ephemeral_query(self.collection, self.specifyuser, query) + + self.assertEqual( + { + "results": [ + (self.collectionobjects[0].id, "Test Project", "Test Project"), + (self.collectionobjects[1].id, None, ""), + (self.collectionobjects[2].id, None, ""), + (self.collectionobjects[3].id, None, ""), + (self.collectionobjects[4].id, None, ""), + ] + }, + result, + ) + + accession = models.Accession.objects.create( + accessionnumber="2026-001", + division=self.division, + ) + self._update(self.collectionobjects[0], {"accession": accession}) + + query = deepcopy(simple_query) + query["contexttableid"] = 7 + query["fields"] = [ + { + "fieldname": "projects", + "formatname": None, + "isdisplay": True, + "isnot": False, + "isrelfld": True, + "operstart": 8, + "position": 0, + "sorttype": 0, + "startvalue": "", + "stringid": "7,1-collectionObjects,66-projects.project.projects", + "isstrict": False, + }, + ] + + result = run_ephemeral_query(self.collection, self.specifyuser, query) + + self.assertEqual( + {"results": [(accession.id, "Test Project")]}, + result, + ) + class TestRunEphemeralQueryByRank(SqlTreeSetup): diff --git a/specifyweb/backend/stored_queries/tests/test_query_ops.py b/specifyweb/backend/stored_queries/tests/test_query_ops.py new file mode 100644 index 00000000000..89908deaffc --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_query_ops.py @@ -0,0 +1,77 @@ +from unittest import TestCase +from sqlalchemy import column +from specifyweb.backend.stored_queries.query_ops import QueryOps + +class TestQueryOps(TestCase): + + def setUp(self): + self.ops = QueryOps(uiformatter=None) + + def assert_op_sql(self, op_method, value, expected_sql): + result = op_method(column("catalogNumber"), value) + sql = str(result.compile(compile_kwargs={"literal_binds": True})) + self.assertEqual(sql, expected_sql) + + def test_op_like_basic(self): + self.assert_op_sql(self.ops.op_like, "%test%", '"catalogNumber" LIKE \'%test%\'') + + def test_op_like_percent_wildcard(self): + self.assert_op_sql(self.ops.op_like, "2025%", '"catalogNumber" LIKE \'2025%\'') + + def test_op_like_underscore_wildcard(self): + self.assert_op_sql(self.ops.op_like, "202_", '"catalogNumber" LIKE \'202_\'') + + def test_op_like_no_wildcard(self): + self.assert_op_sql(self.ops.op_like, "exact", '"catalogNumber" LIKE \'exact\'') + + def test_op_equals_basic(self): + self.assert_op_sql(self.ops.op_equals, "test-value", '"catalogNumber" = \'test-value\'') + + def test_op_equals_empty_string(self): + self.assert_op_sql(self.ops.op_equals, "", '"catalogNumber" = \'\'') # for empty strings + + def test_op_equals_number_string(self): + self.assert_op_sql(self.ops.op_equals, "123", '"catalogNumber" = \'123\'') # for numbers as string + + def test_op_greaterthan_basic(self): + self.assert_op_sql(self.ops.op_greaterthan, "100", '"catalogNumber" > \'100\'') + + def test_op_lessthan_basic(self): + self.assert_op_sql(self.ops.op_lessthan, "100", '"catalogNumber" < \'100\'') + + def test_op_greaterthanequals_basic(self): + self.assert_op_sql(self.ops.op_greaterthanequals, "100", '"catalogNumber" >= \'100\'') + + def test_op_lessthanequals_basic(self): + self.assert_op_sql(self.ops.op_lessthanequals, "100", '"catalogNumber" <= \'100\'') + + def test_op_between_basic(self): + self.assert_op_sql(self.ops.op_between, "10,20", '"catalogNumber" BETWEEN \'10\' AND \'20\'') + + def test_op_contains_basic(self): + self.assert_op_sql(self.ops.op_contains, "test", '"catalogNumber" LIKE \'%\' || \'test\' || \'%\'') + + def test_op_in_basic(self): + self.assert_op_sql(self.ops.op_in, "a,b", '"catalogNumber" IN (\'a\', \'b\')') + + def test_op_startswith_basic(self): + self.assert_op_sql(self.ops.op_startswith, "test", '"catalogNumber" LIKE \'test%\'') + + def test_op_endswith_basic(self): + self.assert_op_sql(self.ops.op_endswith, "test", '"catalogNumber" LIKE \'%test\'') + + def test_op_empty_basic(self): + self.assert_op_sql(self.ops.op_empty, "", '"catalogNumber" IS NULL') + + def test_op_true_basic(self): + self.assert_op_sql(self.ops.op_true, "", '"catalogNumber" = true') + + def test_op_false_basic(self): + self.assert_op_sql(self.ops.op_false, "", '"catalogNumber" = false') + + def test_op_trueornull_basic(self): + self.assert_op_sql(self.ops.op_trueornull, "", '"catalogNumber" = true OR "catalogNumber" IS NULL') + + def test_op_falseornull_basic(self): + self.assert_op_sql(self.ops.op_falseornull, "", '"catalogNumber" = false OR "catalogNumber" IS NULL') + \ No newline at end of file diff --git a/specifyweb/backend/stored_queries/tests/test_recordset.py b/specifyweb/backend/stored_queries/tests/test_recordset.py new file mode 100644 index 00000000000..b1c49290ce0 --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_recordset.py @@ -0,0 +1,53 @@ +from unittest import TestCase +from unittest.mock import Mock, patch + +from specifyweb.backend.stored_queries.execution import BuildQueryProps, recordset + +class TestRecordSet(TestCase): + @patch("specifyweb.backend.stored_queries.execution.insert") + @patch("specifyweb.backend.stored_queries.execution.build_query") + @patch("specifyweb.backend.stored_queries.execution.fields_from_json") + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + @patch("specifyweb.backend.stored_queries.execution.models.RecordSet") + def test_query_is_scoped_to_source_recordset( + self, + recordset_model, + session_context, + fields_from_json, + build_query, + _insert, + ): + collection = Mock(id=1) + user = Mock(id=2) + user_agent = Mock(id=3) + source_recordset_id = 4 + field_specs = [Mock()] + query = Mock() + + session = session_context.return_value.__enter__.return_value + recordset_model.return_value.recordSetId = 5 + fields_from_json.return_value = field_specs + build_query.return_value = (query, Mock()) + + recordset( + collection, + user, + user_agent, + { + "name": "Filtered Record Set", + "fromquery": { + "contexttableid": 1, + "fields": [], + "recordsetid": source_recordset_id, + }, + }, + ) + + build_query.assert_called_once_with( + session, + collection, + user, + 1, + field_specs, + BuildQueryProps(recordsetid=source_recordset_id), + ) \ No newline at end of file diff --git a/specifyweb/backend/stored_queries/tests/test_relative_date_utils.py b/specifyweb/backend/stored_queries/tests/test_relative_date_utils.py index 0c616752478..0dd3ea576c2 100644 --- a/specifyweb/backend/stored_queries/tests/test_relative_date_utils.py +++ b/specifyweb/backend/stored_queries/tests/test_relative_date_utils.py @@ -1,5 +1,6 @@ from specifyweb.specify.tests.test_api import ApiTests, MockDateTime -from specifyweb.backend.stored_queries.relative_date_utils import apply_absolute_date, relative_to_absolute_date +from specifyweb.backend.stored_queries.relative_date_utils import relative_to_absolute_date +from specifyweb.backend.stored_queries.field_spec_maps import apply_absolute_date from unittest.mock import patch, Mock import datetime diff --git a/specifyweb/backend/stored_queries/tests/test_views/raw_query.py b/specifyweb/backend/stored_queries/tests/test_views/raw_query.py index ac643d0554f..a92e35a0623 100644 --- a/specifyweb/backend/stored_queries/tests/test_views/raw_query.py +++ b/specifyweb/backend/stored_queries/tests/test_views/raw_query.py @@ -4,6 +4,7 @@ "contexttableid": 1, "selectdistinct": False, "smushed": False, + "searchsynonymy": False, "countonly": False, "formatauditrecids": False, "specifyuser": f"/api/specify/specifyuser/{specifyuser.id}/", diff --git a/specifyweb/backend/stored_queries/tests/test_views/test_export_web_portal.py b/specifyweb/backend/stored_queries/tests/test_views/test_export_web_portal.py new file mode 100644 index 00000000000..2a1505b7761 --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_views/test_export_web_portal.py @@ -0,0 +1,70 @@ +from unittest.mock import MagicMock, Mock, patch + +from django.test import Client + +from specifyweb.backend.stored_queries.tests.tests import SQLAlchemySetup + +from .raw_query import get_simple_query + + +class TestExportWebPortal(SQLAlchemySetup): + @patch("specifyweb.backend.stored_queries.views.Thread") + def test_export(self, thread: Mock): + c = Client() + c.force_login(self.specifyuser) + + response = c.post( + "/stored_query/exportwebportal/", + get_simple_query(self.specifyuser), + content_type="application/json", + ) + + self._assertStatusCodeEqual(response, 200) + thread.assert_called_once() + self.assertTrue(thread.return_value.daemon) + thread.return_value.start.assert_called_once() + self._assertContentEqual(response, "OK") + + def test_portal_attachment_map(self): + from specifyweb.backend.stored_queries import web_portal_export + + class FakeAttachment: + id = 5291 + attachmentlocation = "sp6896513492722436219.att.JPG" + origfilename = "29432.JPG" + title = "Figure 1" + + class FakeJoinRecord: + collectionobject_id = 123 + attachment = FakeAttachment() + + class FakeJoinQuery: + def select_related(self, *_args, **_kwargs): + return [FakeJoinRecord()] + + class FakeJoinManager: + def __init__(self): + self.filter_kwargs = None + + def filter(self, **kwargs): + self.filter_kwargs = kwargs + return FakeJoinQuery() + + fake_join_manager = FakeJoinManager() + fake_base_model = type("Collectionobject", (), {"_meta": MagicMock(app_label="specifyweb")}) + fake_table = MagicMock() + fake_table.attachments_field = MagicMock() + + with patch.object(web_portal_export.datamodel, "get_table_by_id", return_value=fake_table), patch.object( + web_portal_export, "get_model_by_table_id", return_value=fake_base_model + ), patch.object(web_portal_export.apps, "get_model", return_value=type("Collectionobjectattachment", (), {"objects": fake_join_manager})): + result = web_portal_export._portal_attachment_map(1, [123]) + + self.assertEqual( + fake_join_manager.filter_kwargs, + {"collectionobject_id__in": [123], "attachment__ispublic": True}, + ) + self.assertEqual( + result["123"], + '[{AttachmentID:5291,AttachmentLocation:"sp6896513492722436219.att.JPG",Title:"Figure 1"}]', + ) diff --git a/specifyweb/backend/stored_queries/tests/test_views/test_sorting.py b/specifyweb/backend/stored_queries/tests/test_views/test_sorting.py new file mode 100644 index 00000000000..832c03d56d6 --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_views/test_sorting.py @@ -0,0 +1,54 @@ +from specifyweb.backend.stored_queries.tests.tests import SQLAlchemySetup +from .raw_query import get_simple_query +from django.test import Client +from unittest.mock import patch, Mock +import json +import copy + +class TestSorting(SQLAlchemySetup): + + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + def test_sort_ascending(self, context: Mock): + context.return_value = TestSorting.test_session_context() + + c = Client() + c.force_login(self.specifyuser) + + query = copy.deepcopy(get_simple_query(self.specifyuser)) + query["fields"][0]["sorttype"] = 1 # 0 --> no sort, 1 --> ascending, 2 --> descending + + response = c.post('/stored_query/ephemeral/', query, content_type="application/json") + self._assertStatusCodeEqual(response, 200) + + results = json.loads(response.content.decode())["results"] + + # Should have 5 results (5 collection objects from setUp) + self.assertEqual(len(results), 5) + + for i, row in enumerate(results): + self.assertEqual(row[1], f"num-{i}") + + + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + def test_sort_descending(self, context: Mock): + context.return_value = TestSorting.test_session_context() + + c = Client() + c.force_login(self.specifyuser) + + query = copy.deepcopy(get_simple_query(self.specifyuser)) + query["fields"][0]["sorttype"] = 2 # 0 --> no sort, 1 --> ascending, 2 --> descending + + response = c.post('/stored_query/ephemeral/', query, content_type="application/json") + self._assertStatusCodeEqual(response, 200) + + results = json.loads(response.content.decode())["results"] + + # Should have 5 results (5 collection objects from setUp) + self.assertEqual(len(results), 5) + + for i, row in enumerate(results): + self.assertEqual(row[1], f"num-{4 - i}") + + + diff --git a/specifyweb/backend/stored_queries/tests/test_views/test_timestamp.py b/specifyweb/backend/stored_queries/tests/test_views/test_timestamp.py new file mode 100644 index 00000000000..cbfb3a94b2a --- /dev/null +++ b/specifyweb/backend/stored_queries/tests/test_views/test_timestamp.py @@ -0,0 +1,65 @@ +from specifyweb.backend.stored_queries.tests.tests import SQLAlchemySetup +from .raw_query import get_simple_query +from django.test import Client +from unittest.mock import patch, Mock +import json + +class TestTimestampQuery(SQLAlchemySetup): + + @patch("specifyweb.backend.stored_queries.execution.models.session_context") + def test_timestamp_created_in_results(self, context: Mock): + context.return_value = TestTimestampQuery.test_session_context() + + c = Client() + c.force_login(self.specifyuser) + + query = get_simple_query(self.specifyuser).copy() + query["fields"] = query["fields"] + [ + { + "tablelist": "1", + "stringid": "1.collectionobject.timestampCreated", + "fieldname": "timestampCreated", + "isrelfld": False, + "sorttype": 0, + "position": 1, + "isdisplay": True, + "operstart": 8, + "startvalue": "", + "isnot": False, + "isstrict": False, + "_tableName": "SpQueryField" + }, + { + "tablelist": "1", + "stringid": "1.collectionobject.timestampModified", + "fieldname": "timestampModified", + "isrelfld": False, + "sorttype": 0, + "position": 2, + "isdisplay": True, + "operstart": 8, + "startvalue": "", + "isnot": False, + "isstrict": False, + "_tableName": "SpQueryField" + } + ] + + response = c.post('/stored_query/ephemeral/', query, content_type="application/json") + self._assertStatusCodeEqual(response, 200) + + results = json.loads(response.content.decode())["results"] + + # Should have 5 results (5 collection objects from setUp) + self.assertEqual(len(results), 5) + + # Each result should be [id, catalogNumber, timestampCreated, timestampModified] + for i, row in enumerate(results): + self.assertEqual(row[0], self.collectionobjects[i].id) + self.assertEqual(row[1], f"num-{i}") + # Timestamp Created should not be None or empty + self.assertIsNotNone(row[2]) + self.assertNotEqual(row[2], "") + # Timestamp Modified should not be None or empty + self.assertIsNotNone(row[3]) + self.assertNotEqual(row[3], "") \ No newline at end of file diff --git a/specifyweb/backend/stored_queries/tests/tests.py b/specifyweb/backend/stored_queries/tests/tests.py index 3f6b71e6d74..91717b94f3c 100644 --- a/specifyweb/backend/stored_queries/tests/tests.py +++ b/specifyweb/backend/stored_queries/tests/tests.py @@ -268,7 +268,6 @@ def test_sqlalchemy_model_errors(self): "AutoNumberingScheme": {"not_found": ["collections", "disciplines", "divisions"]}, "Collection": {"not_found": ["numberingSchemes", "userGroups"]}, "CollectionObject": { - "not_found": ["projects"], "incorrect_direction": {"cojo": ["onetomany", "onetoone"]}, }, "DNASequencingRun": { @@ -286,7 +285,6 @@ def test_sqlalchemy_model_errors(self): "localityDetails": ["onetomany", "zerotoone"], } }, - "Project": {"not_found": ["collectionObjects"]}, "SpExportSchema": {"not_found": ["spExportSchemaMappings"]}, "SpExportSchemaMapping": {"not_found": ["spExportSchemas"]}, "SpPermission": {"not_found": ["principals"]}, diff --git a/specifyweb/backend/stored_queries/tests/tests_legacy.py b/specifyweb/backend/stored_queries/tests/tests_legacy.py index cb34b27ae22..20239ebc32a 100644 --- a/specifyweb/backend/stored_queries/tests/tests_legacy.py +++ b/specifyweb/backend/stored_queries/tests/tests_legacy.py @@ -1,4 +1,4 @@ -from unittest import TestCase, expectedFailure, skip +from unittest import TestCase, skip from sqlalchemy import orm, inspect import specifyweb.specify.models as spmodels @@ -11,7 +11,6 @@ def test_stringid_roundtrip_from_bug(self) -> None: fs = QueryFieldSpec.from_stringid("4.taxon.Genus", False) self.assertEqual("4.taxon.Genus", fs.to_stringid()) - @expectedFailure def test_stringid_roundtrip_en_masse(self) -> None: for (stringid, relfld) in STRINGID_LIST: fs = QueryFieldSpec.from_stringid(stringid, relfld) @@ -841,9 +840,6 @@ def test_sqlalchemy_model_errors(self): ] }, "CollectionObject": { - "not_found": [ - "projects" - ], "incorrect_direction": { "cojo": [ "onetomany", @@ -894,11 +890,6 @@ def test_sqlalchemy_model_errors(self): ] } }, - "Project": { - "not_found": [ - "collectionObjects" - ] - }, "SpExportSchema": { "not_found": [ "spExportSchemaMappings" diff --git a/specifyweb/backend/stored_queries/urls.py b/specifyweb/backend/stored_queries/urls.py index ff5b0aee3fb..38dfc774607 100644 --- a/specifyweb/backend/stored_queries/urls.py +++ b/specifyweb/backend/stored_queries/urls.py @@ -7,6 +7,7 @@ path('ephemeral/', views.ephemeral), path('exportcsv/', views.export_csv), path('exportkml/', views.export_kml), + path('exportwebportal/', views.export_to_web_portal), path('make_recordset/', views.make_recordset), path('merge_recordsets/', views.merge_recordsets), path('return_loan_preps/', views.return_loan_preps), diff --git a/specifyweb/backend/stored_queries/views.py b/specifyweb/backend/stored_queries/views.py index 8ead7e580cf..70c5240a718 100644 --- a/specifyweb/backend/stored_queries/views.py +++ b/specifyweb/backend/stored_queries/views.py @@ -34,6 +34,7 @@ class QueryBuilderPt(PermissionTarget): execute = PermissionTargetAction() export_csv = PermissionTargetAction() export_kml = PermissionTargetAction() + export_to_web_portal = PermissionTargetAction() create_recordset = PermissionTargetAction() def value_from_request(field, get): @@ -86,10 +87,11 @@ def query(request, id): sp_query = session.query(models.SpQuery).get(int(id)) distinct = sp_query.selectDistinct series = sp_query.smushed + search_synonymy = sp_query.searchSynonymy tableid = sp_query.contextTableId count_only = sp_query.countOnly - field_specs = [QueryField.from_spqueryfield(field, value_from_request(field, request.GET)) + query_fields = [QueryField.from_spqueryfield(field, value_from_request(field, request.GET)) for field in sorted(sp_query.fields, key=lambda field: field.position)] data = execute( @@ -99,8 +101,9 @@ def query(request, id): tableid=tableid, distinct=distinct, series=series, + search_synonymy=search_synonymy, count_only=count_only, - field_specs=field_specs, + query_fields=query_fields, limit=limit, offset=offset ) @@ -148,8 +151,6 @@ def batch_edit(request): @never_cache def export_csv(request): """Executes and return as CSV the results of the query provided as JSON in the POST body.""" - check_permission_targets(request.specify_collection.id, request.specify_user.id, [ - QueryBuilderPt.execute, QueryBuilderPt.export_csv]) try: spquery = json.load(request) except ValueError as e: @@ -162,6 +163,9 @@ def export_csv(request): logger.debug('forcing collection to %s', collection.collectionname) else: collection = request.specify_collection + + check_permission_targets(collection.id, request.specify_user.id, [ + QueryBuilderPt.execute, QueryBuilderPt.export_csv]) file_name = format_export_file_name(spquery, "csv") @@ -175,8 +179,6 @@ def export_csv(request): @never_cache def export_kml(request): """Executes and return as KML the results of the query provided as JSON in the POST body.""" - check_permission_targets(request.specify_collection.id, request.specify_user.id, [ - QueryBuilderPt.execute, QueryBuilderPt.export_kml]) try: spquery = json.load(request) except ValueError as e: @@ -193,6 +195,9 @@ def export_kml(request): else: collection = request.specify_collection + check_permission_targets(collection.id, request.specify_user.id, [ + QueryBuilderPt.execute, QueryBuilderPt.export_kml]) + file_name = format_export_file_name(spquery, "kml") thread = Thread(target=do_export, args=(spquery, collection, request.specify_user, file_name, 'kml', the_host)) @@ -200,6 +205,42 @@ def export_kml(request): thread.start() return HttpResponse('OK', content_type='text/plain') + +@require_POST +@login_maybe_required +@never_cache +def export_to_web_portal(request): + """Executes and returns as ZIP the web portal export package for the query provided as JSON in the POST body.""" + try: + spquery = json.load(request) + except ValueError: + return HttpResponseBadRequest('Invalid query data.') + + spquery_log_preview = str(spquery)[:200] if isinstance(spquery, dict) else spquery + spquery_log_preview = str(spquery_log_preview).replace('\r', '').replace('\n', '') + logger.info('export web portal query: %s', spquery_log_preview) + + if 'collectionid' in spquery: + collection = Collection.objects.get(pk=spquery['collectionid']) + logger.debug('forcing collection to %s', collection.collectionname) + else: + collection = request.specify_collection + + check_permission_targets(collection.id, request.specify_user.id, [ + QueryBuilderPt.execute, + QueryBuilderPt.export_to_web_portal, + ]) + + file_name = format_export_file_name(spquery, 'zip') + + thread = Thread( + target=do_export, + args=(spquery, collection, request.specify_user, file_name, 'webportal', None), + ) + thread.daemon = True + thread.start() + return HttpResponse('OK', content_type='text/plain') + @require_POST @login_maybe_required @never_cache diff --git a/specifyweb/backend/stored_queries/web_portal_export.py b/specifyweb/backend/stored_queries/web_portal_export.py new file mode 100644 index 00000000000..4180ef9f105 --- /dev/null +++ b/specifyweb/backend/stored_queries/web_portal_export.py @@ -0,0 +1,636 @@ +import csv +import json +import logging +import os +import re +import uuid +from typing import TYPE_CHECKING, Callable +from collections import defaultdict +from collections.abc import Generator +from io import StringIO +from itertools import zip_longest +from typing import Any, Callable +from urllib.parse import urlsplit, urlunsplit +from xml.sax.saxutils import escape +from zipfile import ZIP_DEFLATED, ZipFile + +from django.apps import apps +from django.conf import settings + +from specifyweb.backend.context.schema_localization import get_schema_localization +from specifyweb.specify.datamodel import datamodel +from specifyweb.specify.models_utils.models_by_table_id import get_model_by_table_id +from specifyweb.specify.utils.uiformatters import CNNField, get_catalognumber_format + +if TYPE_CHECKING: + from specifyweb.backend.stored_queries.queryfield import QueryField + +logger = logging.getLogger(__name__) +# Filename used by asset server URLs that should be stripped from portal asset paths. +_ASSET_STORE_FILENAME = 'web_asset_store.xml' + + +def _build_portal_collection_name(collection) -> str: + """Return the portal collection name override if configured. + + The export uses either the env var, settings value, or the actual + collection name. + """ + + return ( + os.getenv('WEB_ATTACHMENT_COLLECTION') + or settings.WEB_ATTACHMENT_COLLECTION + or collection.collectionname + ) + + +def _strip_asset_store_xml(url: str) -> str: + """Remove the asset store file path from attachment URLs. + + The portal export should expose a clean base asset path, not the + internal web asset store XML filename itself. + """ + if not url: + return '' + + parsed = urlsplit(url) + path = parsed.path or '' + trimmed_path = path.rstrip('/') + path_parts = trimmed_path.split('/') if trimmed_path else [] + + if not path_parts or path_parts[-1].lower() != _ASSET_STORE_FILENAME: + return url + + base_path = '/'.join(path_parts[:-1]).rstrip('/') + return urlunsplit((parsed.scheme, parsed.netloc, base_path, parsed.query, parsed.fragment)) + + +def _build_portal_image_base_url() -> str: + """Build the base URL that portal image attachments should use.""" + + raw_url = (os.getenv('ASSET_SERVER_URL') or settings.WEB_ATTACHMENT_URL or '').strip() + return _strip_asset_store_xml(raw_url) + + +def _schema_localization_or_empty(collection) -> dict[str, Any]: + try: + return get_schema_localization(collection, 0, 'en-us') + except Exception: + logger.exception('Failed loading schema localization for web portal export') + return {} + + +def _clean_cell(value: Any) -> str: + return re.sub("\r|\n", " ", str(value if value is not None else '')) + + +def _clean_portal_attachment_text(value: Any) -> str: + return re.sub(r'\r|\n|"', ' ', str(value if value is not None else '')).strip() + + +def _portal_attachment_entry(attachment) -> str: + attachment_location = _clean_portal_attachment_text(attachment.attachmentlocation) + title = _clean_portal_attachment_text( + os.path.basename( + attachment.title or attachment.origfilename or attachment.attachmentlocation or '' + ) + ) + return ( + '{' + f'AttachmentID:{attachment.id},' + f'AttachmentLocation:"{attachment_location}",' + f'Title:"{title}"' + '}' + ) + + +def _portal_attachment_map(tableid: int, record_ids: list[Any]) -> dict[Any, str]: + """Collect attachment metadata for portal rows by record id. + + The portal CSV stores image attachments as JSON strings in the "img" + column, so we prebuild mapping from record IDs to attachments. + """ + if not record_ids: + return {} + + table = datamodel.get_table_by_id(tableid, strict=True) + if table.attachments_field is None: + return {} + + base_model = get_model_by_table_id(tableid) + join_model_name = base_model.__name__ + 'attachment' + join_model = apps.get_model(base_model._meta.app_label, join_model_name) + record_id_field = f'{base_model.__name__.lower()}_id' + + join_records = join_model.objects.filter( + **{ + f'{record_id_field}__in': record_ids, + 'attachment__ispublic': True, + } + ).select_related('attachment') + attachment_entries_by_record_id: dict[str, list[str]] = defaultdict(list) + + for join_record in join_records: + attachment = join_record.attachment + if attachment.attachmentlocation is None: + continue + record_key = str(getattr(join_record, record_id_field)) + attachment_entries_by_record_id[record_key].append(_portal_attachment_entry(attachment)) + + return { + record_id: '[' + ', '.join(entries) + ']' + for record_id, entries in attachment_entries_by_record_id.items() + } + + +def _dedupe_name(name: str, used_names: set[str]) -> str: + candidate = name + suffix = 2 + while candidate in used_names: + candidate = f"{name}_{suffix}" + suffix += 1 + used_names.add(candidate) + return candidate + + +def _normalize_portal_column_name(name: Any, query_field=None) -> str: + """Normalize portal column captions for export. + + Removes names and full name field labels which are not useful + in the portal. + """ + normalized = str(name if name is not None else '').strip() + + if query_field is not None: + fieldspec = query_field.fieldspec + field = fieldspec.get_field() + if ( + fieldspec.tree_rank is not None + and field is not None + and field.name in {'name', 'fullName'} + and ' - ' in normalized + ): + return normalized.rsplit(' - ', 1)[0].rstrip() + + return normalized + + +def _portal_solr_type(query_field, collection, user) -> str: + """Map a query field to the Solr field type used in portal metadata.""" + fieldspec = query_field.fieldspec + field = fieldspec.get_field() + + # Relationship fields are always emitted as strings for portal search. + if field is None or field.is_relationship: + return 'string' + + if fieldspec.table.name == 'CollectionObject' and field.name == 'catalogNumber': + formatter = get_catalognumber_format(collection, query_field.format_name, user) + if ( + formatter is not None + and len(formatter.fields) == 1 + and isinstance(formatter.fields[0], CNNField) + ): + return 'pint' + return 'string' + + if field.type in ('java.lang.String', 'text'): + return 'string' + if field.type in ('java.util.Date', 'java.sql.Timestamp'): + return 'string' + if field.type == 'java.util.Calendar': + return 'pint' if fieldspec.date_part in {'Day', 'Month', 'Year'} else 'string' + if field.type in ('java.lang.Integer', 'java.lang.Byte', 'java.lang.Short'): + return 'pint' + if field.type == 'java.lang.Long': + return 'plong' + if field.type == 'java.lang.Float': + return 'pfloat' + if field.type in ('java.lang.Double', 'java.math.BigDecimal'): + return 'pdouble' + if field.type == 'java.lang.Boolean': + return 'string' + return 'string' + + +def _portal_field_metadata( + query_field, + caption: str, + colname: str, + index: int, + schema_localization: dict[str, Any], + collection, + user, +) -> dict[str, Any]: + """Build the metadata row for one exported portal field. + + This metadata is written to flds.json and is consumed by the portal + frontend to build field definitions, sorting, display labels, and linkification. + """ + fieldspec = query_field.fieldspec + table = fieldspec.table + field = fieldspec.get_field() + + table_key = table.name.lower() + table_localization = schema_localization.get(table_key, {}) + item_localization = ( + table_localization.get('items', {}).get(field.name.lower(), {}) + if field is not None + else {} + ) + + spfld = field.name if field is not None else table.idFieldName + if field is not None and field.is_relationship: + field_type = 'java.lang.String' + else: + field_type = field.type if field is not None else 'java.lang.String' + field_length = field.length if field is not None and field.length is not None else 255 + solr_type = _portal_solr_type(query_field, collection, user) + is_linkified = solr_type == 'string' and field_type in ('java.lang.String', 'text') + + return { + 'colname': colname, + 'solrname': spfld, + 'solrtype': solr_type, + 'title': caption, + 'type': field_type, + 'width': field_length, + 'concept': colname, + 'sptable': table_key, + 'sptabletitle': table_localization.get('name', table.name), + 'spfld': spfld, + 'spfldtitle': item_localization.get('name', spfld), + 'colidx': index, + 'linkify': is_linkified, + 'advancedsearch': True, + 'displaycolidx': index, + } + + +def _simplify_portal_field_metadata(field_meta: dict[str, Any]) -> dict[str, Any]: + """Create the metadata for portal fields.""" + simplified = { + 'colname': field_meta['colname'], + 'solrname': field_meta['solrname'], + 'solrtype': field_meta['solrtype'], + } + + for key in ( + 'title', + 'type', + 'width', + 'concept', + 'sptable', + 'sptabletitle', + 'spfld', + 'spfldtitle', + 'colidx', + 'linkify', + 'advancedsearch', + 'displaycolidx', + 'treeid', + 'treerank', + ): + if key in field_meta: + simplified[key] = field_meta[key] + + return simplified + + +def _make_solr_schema_xml(fields: list[dict[str, Any]]) -> str: + """Create a minimal Solr schema for exported portal fields. + + It defines the fields that the portal will index and search. + """ + lines = [ + '', + '', + ] + + lines.append( + '' + ) + lines.append( + '' + ) + lines.append( + '' + ) + + emitted: set[str] = {'contents', 'geoc', 'img'} + for field in fields: + name = str(field['solrname']) + if name in emitted: + continue + emitted.add(name) + + escaped_name = escape(name) + solr_type = 'string' if name == 'spid' else escape(str(field['solrtype'])) + required = 'true' if name == 'spid' else 'false' + lines.append( + f'' + ) + return "\n".join(lines) + "\n" + + +def _image_info_fields_from_column_defs( + column_defs: list[tuple[str, str, str, dict[str, Any]]], +) -> list[str]: + """Grab the best image info fields.""" + image_info_fields: list[str] = [] + target_spflds = { + 'catalognumber', + 'fieldnumber', + 'stationfieldnumber', + } + for _, solrname, _, metadata in column_defs: + if str(metadata.get('spfld', '')).lower() in target_spflds: + image_info_fields.append(solrname) + return image_info_fields + + +def _serialize_portal_data( + rows: list[list[str]], + header: list[str], +) -> str: + """Output rows to CSV. + + The web portal expects a standard CSV file with a header row followed by + one row per portal record. + """ + with StringIO() as output: + writer = csv.writer(output) + writer.writerow(header) + writer.writerows(rows) + return output.getvalue() + + +def _find_geoc_field_indexes( + column_defs: list[tuple[str, str, str, dict[str, Any]]], +) -> tuple[int | None, int | None, int | None, int | None]: + """Locate latitude/longitude columns for geocoding the portal row.""" + lat1_idx = None + lon1_idx = None + lat2_idx = None + lon2_idx = None + + for index, (_, __, ___, metadata) in enumerate(column_defs): + # Only locality fields are relevant for geocoding. + if str(metadata.get('sptable', '')).lower() != 'locality': + continue + + spfld = str(metadata.get('spfld', '')).lower() + if spfld == 'latitude1' and lat1_idx is None: + lat1_idx = index + elif spfld == 'longitude1' and lon1_idx is None: + lon1_idx = index + elif spfld == 'latitude2' and lat2_idx is None: + lat2_idx = index + elif spfld == 'longitude2' and lon2_idx is None: + lon2_idx = index + + return lat1_idx, lon1_idx, lat2_idx, lon2_idx + + +def _build_geoc_value( + cleaned_values: list[str], + lat1_idx: int | None, + lon1_idx: int | None, + lat2_idx: int | None, + lon2_idx: int | None, +) -> str: + """Build the 'geoc' column value for portal mapping. + + The portal uses the first valid latitude/longitude pair it finds. + """ + def _pair_value(lat_idx: int | None, lon_idx: int | None) -> str: + if lat_idx is None or lon_idx is None: + return '' + if lat_idx >= len(cleaned_values) or lon_idx >= len(cleaned_values): + return '' + + latitude = cleaned_values[lat_idx].strip() + longitude = cleaned_values[lon_idx].strip() + if not latitude or not longitude: + return '' + return f'{latitude} {longitude}' + + primary = _pair_value(lat1_idx, lon1_idx) + if primary: + return primary + return _pair_value(lat2_idx, lon2_idx) + +def _trim_big_decimal_fields(query_fields: "list[QueryField]") -> Callable[[list], list]: + # map BigDecimal to their location within the query results + big_decimal_idxs: list[int] = [] + + for query_field_idx, query_field in enumerate(query_fields): + field = query_field.fieldspec.get_field() + if field is None: + continue + if field.type == 'java.math.BigDecimal': + # account for the record id that will be inserted as the first item + # in results + field_idx = query_field_idx + 1 + big_decimal_idxs.append(field_idx) + + + def trim_big_decimal(row: list): + modified_row = list(row) + for field_index in big_decimal_idxs: + previous_value = str(row[field_index]) + new_value = previous_value + if "." in previous_value: + new_value = previous_value.rstrip("0") + if len(new_value) > 1 and new_value[-1] == ".": + new_value = new_value + "0" + modified_row[field_index] = new_value + return modified_row + + return trim_big_decimal + + +def WebportalQueryResultProcessors(query_fields: "list[QueryField]") -> list[Callable[[list], list]]: + visible_field_specs = list(filter(lambda qfield: qfield.display, query_fields)) + return [ + _trim_big_decimal_fields(query_fields=visible_field_specs) + ] + +def query_to_web_portal_zip( + session, + collection, + user, + tableid, + field_specs, + path, + captions, + query_rows: Generator[tuple, Any, None], + set_group_concat_max_len_fn: Callable[[Any], None], +): + """Export a stored query as a web portal ZIP package. + + This writes PortalData.csv, flds.json, PortalInstanceSetting.json, and + SolrFldSchema.xml into the destination ZIP file. + """ + set_group_concat_max_len_fn(session.connection()) + + display_fields = [field_spec for field_spec in field_specs if field_spec.display] + + # Match the exported captions to the actual displayed fields. Captions may + # be provided for all query fields, but only display fields are exported. + if captions and isinstance(captions, list): + if len(captions) == len(display_fields): + effective_captions = captions + elif len(captions) == len(field_specs): + effective_captions = [ + caption + for field_spec, caption in zip(field_specs, captions) + if field_spec.display + ] + else: + effective_captions = captions[: len(display_fields)] + else: + effective_captions = [] + + if len(effective_captions) != len(display_fields): + effective_captions = [ + ( + field_spec.fieldspec.get_field().name + if field_spec.fieldspec.get_field() is not None + else field_spec.fieldspec.table.name + ) + for field_spec in display_fields + ] + + schema_localization = _schema_localization_or_empty(collection) + + used_colnames: set[str] = {'spid'} + used_solrnames: set[str] = {'spid'} + column_defs: list[tuple[str, str, str, dict[str, Any]]] = [] + for index, (field_spec, caption) in enumerate( + zip_longest(display_fields, effective_captions, fillvalue=''), + start=0, + ): + trimmed_caption = _normalize_portal_column_name(caption, field_spec) + base_name = trimmed_caption if trimmed_caption else f'column_{index + 1}' + colname = _dedupe_name(base_name, used_colnames) + + field = field_spec.fieldspec.get_field() + if field is not None: + base_solrname = field.name + table_prefix = field_spec.fieldspec.table.name.lower() + else: + base_solrname = field_spec.fieldspec.table.idFieldName + table_prefix = field_spec.fieldspec.table.name.lower() + + if base_solrname in used_solrnames: + solrname = _dedupe_name(f'{table_prefix}_{base_solrname}', used_solrnames) + else: + solrname = _dedupe_name(base_solrname, used_solrnames) + + metadata = _portal_field_metadata( + field_spec, + trimmed_caption if trimmed_caption else colname, + colname, + index, + schema_localization, + collection, + user, + ) + metadata['solrname'] = solrname + column_defs.append((colname, solrname, metadata['title'], metadata)) + + # Build the JSON metadata rows used by the portal's field definition store. + # The fixed fields spid and img are always included, plus one row per display field. + metadata_rows: list[dict[str, Any]] = [ + { + 'colname': 'spid', + 'solrname': 'spid', + 'solrtype': 'int', + 'title': 'spid', + 'linkify': False, + 'colidx': 0, + 'displaycolidx': 0, + }, + *[ + _simplify_portal_field_metadata(column_def[3]) + for column_def in column_defs + ], + { + 'colname': 'img', + 'solrname': 'img', + 'solrtype': 'string', + 'title': 'image', + }, + ] + + output_rows: list[list[str]] = [] + geoc_lat1_idx, geoc_lon1_idx, geoc_lat2_idx, geoc_lon2_idx = _find_geoc_field_indexes(column_defs) + # REFACTOR: Bleh, exhaust all rows in the query generator here + # this is really only needed to optimize constructing the portal attachment + # map. + # We can make a single query there if we have the IDs of all of the base + # records. + # For the sake of memory, would much rather prefer to iterate through the + # generator normally, but database hits are very expensive so prioritizing + # speed. + # Can we at least do the Webportal Exportal in a separate process so memory + # can be returned to the OS? + data_rows = list(query_rows) + portal_attachments = _portal_attachment_map(tableid, [row[0] for row in data_rows]) + # The portal frontend expects each row to have the same number of values as the field metadata. + # If the query returns too few values, pad with empty strings; if it returns too many, + # truncate extras so the CSV header and row data remain aligned. + expected_values = len(column_defs) + for row in data_rows: + raw_id = row[0] if len(row) > 0 else '' + spid = str(uuid.uuid5(uuid.NAMESPACE_URL, f'{tableid}:{raw_id}')) + display_values = list(row[1:] if len(row) > 1 else []) + if len(display_values) < expected_values: + display_values.extend([''] * (expected_values - len(display_values))) + elif len(display_values) > expected_values: + display_values = display_values[:expected_values] + cleaned_values = [_clean_cell(value) for value in display_values] + contents = '\t'.join(cleaned_values) + img = portal_attachments.get(str(raw_id), '') + geoc = _build_geoc_value( + cleaned_values, + geoc_lat1_idx, + geoc_lon1_idx, + geoc_lat2_idx, + geoc_lon2_idx, + ) + output_rows.append([spid, contents, img, geoc, *cleaned_values]) + + header = ['spid', 'contents', 'img', 'geoc', *[column_def[1] for column_def in column_defs]] + # REFACTOR: PortalData can be very large. Consider using a generator to + # retreive rows and subsequently write them to the CSV. + # That way, only a single row will need to be kept in memory at a time, as + # opposed to every row + # If that is not feasible, perform this operation in a separate process so + # the memory can be reclaimed + portal_data = _serialize_portal_data(output_rows, header) + # flds.json drives the portal's field definitions and display metadata. + flds_json = json.dumps(metadata_rows, indent=2) + # SolrFldSchema.xml is a minimal schema fragment for the portal's Solr index. + solr_schema = _make_solr_schema_xml(metadata_rows) + + image_info_fields = _image_info_fields_from_column_defs(column_defs) + portal_instance_settings = json.dumps( + { + 'portalInstance': str(uuid.uuid4()), + 'collectionName': _build_portal_collection_name(collection), + 'imageBaseUrl': _build_portal_image_base_url(), + 'imageInfoFlds': ' '.join(image_info_fields), + }, + indent=2, + ) + + with ZipFile(path, 'w', compression=ZIP_DEFLATED) as archive: + archive.writestr('PortalFiles/PortalData.csv', portal_data) + archive.writestr('PortalFiles/flds.json', flds_json) + archive.writestr( + 'PortalFiles/PortalInstanceSetting.json', + portal_instance_settings, + ) + archive.writestr('PortalFiles/SolrFldSchema.xml', solr_schema) diff --git a/specifyweb/backend/table_rows/forms.py b/specifyweb/backend/table_rows/forms.py deleted file mode 100644 index 4814525940a..00000000000 --- a/specifyweb/backend/table_rows/forms.py +++ /dev/null @@ -1,16 +0,0 @@ -from django import forms - -from specifyweb.specify.api.validators import GetCollectionForm - -class RowsForm(GetCollectionForm): - fields = forms.CharField(required=True) # type: ignore - distinct = forms.CharField(required=False) - defaults = dict( - domainfilter=None, - limit=0, - offset=0, - orderby=None, - distinct=False, - fields=None, - filterchronostrat=False, - ) \ No newline at end of file diff --git a/specifyweb/backend/trees/apps.py b/specifyweb/backend/trees/apps.py index a6dd26a5f4c..43c52c7f7c8 100644 --- a/specifyweb/backend/trees/apps.py +++ b/specifyweb/backend/trees/apps.py @@ -1,5 +1,5 @@ from django.apps import AppConfig -from specifyweb.backend.cache.redis import get_string +from specifyweb.backend.cache.redis.connect import RedisConnection, RedisString import logging logger = logging.getLogger(__name__) @@ -11,8 +11,9 @@ class TreesConfig(AppConfig): def ready(self): from specifyweb.backend.trees.redis import ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY try: + redis_string = RedisString(RedisConnection()) # Clear potential leftover tree creation tracking information - data = get_string(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY, delete_key=True) + data = redis_string.get(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY, delete_key=True) if data is not None: logger.debug(f'Clearing last active default tree creation tasks: {data}') except Exception: diff --git a/specifyweb/backend/trees/defaults.py b/specifyweb/backend/trees/defaults.py index 1a137ce59d6..590fc549df2 100644 --- a/specifyweb/backend/trees/defaults.py +++ b/specifyweb/backend/trees/defaults.py @@ -9,7 +9,7 @@ from specifyweb.backend.trees.default_tree_files import stream_default_tree_csv from specifyweb.backend.trees.utils import get_models, TREE_ROOT_NODES from specifyweb.backend.trees.extras import renumber_tree, set_fullnames -from specifyweb.backend.cache.redis import add_to_set, remove_from_set, set_members +from specifyweb.backend.cache.redis.connect import RedisConnection, RedisSet from specifyweb.backend.trees.redis import ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY import logging @@ -324,8 +324,6 @@ def add_default_tree_record(context: DefaultTreeContext, row: dict, tree_cfg: Tr if v: defaults[model_field] = v - rank_title = rank_mapping.get('title', rank_name.capitalize()) - # Get the rank by the rank id, or column name as a fallback. # Skip creating on this rank if it doesn't exist if rank_mapping['rank']: @@ -393,18 +391,21 @@ def add_default_tree_record(context: DefaultTreeContext, row: dict, tree_cfg: Tr def queue_create_default_tree_task(task_id): """Store queued (and active) default tree creation tasks so they can be reliably tracked later.""" - add_to_set(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY, task_id) - logger.debug(f"Queued task {task_id}. Current tasks: {set_members(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY)}") + redis_set = RedisSet(RedisConnection()) + redis_set.add(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY, task_id) + logger.debug(f"Queued task {task_id}. Current tasks: {redis_set.members(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY)}") def get_active_create_default_tree_tasks() -> list[str]: - tasks = set_members(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY) + redis_set = RedisSet(RedisConnection()) + tasks = redis_set.members(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY) logger.debug(f"Active tree creation tasks: {tasks}") return list(tasks) def finish_create_default_tree_task(task_id): """Clear a finished tree creation task from redis cache.""" - remove_from_set(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY, task_id) - logger.debug(f"Finished task {task_id}. Current tasks: {set_members(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY)}") + redis_set = RedisSet(RedisConnection()) + redis_set.remove(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY, task_id) + logger.debug(f"Finished task {task_id}. Current tasks: {redis_set.members(ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY)}") @app.task(base=LogErrorsTask, bind=True) def create_default_tree_task(self, url: str, discipline_id: int, tree_type: str, specify_collection_id: Optional[int], diff --git a/specifyweb/backend/trees/extras.py b/specifyweb/backend/trees/extras.py index 3b1a6d29656..637cf7b11fb 100644 --- a/specifyweb/backend/trees/extras.py +++ b/specifyweb/backend/trees/extras.py @@ -12,15 +12,14 @@ from django.db import models, connection from django.db.models import F, Q, ProtectedError -from django.conf import settings from specifyweb.backend.businessrules.exceptions import TreeBusinessRuleException -import specifyweb.specify.models as spmodels +from specifyweb.specify.models_utils.model_extras import ModelWithTable from specifyweb.backend.workbench.upload.auditcodes import TREE_BULK_MOVE, TREE_MERGE, TREE_SYNONYMIZE, TREE_DESYNONYMIZE @contextmanager -def validate_node_numbers(table, revalidate_after=True): +def validate_node_numbers(table: str, revalidate_after=True): try: validate_tree_numbering(table) except AssertionError: @@ -29,8 +28,9 @@ def validate_node_numbers(table, revalidate_after=True): if revalidate_after: validate_tree_numbering(table) -class Tree(models.Model): +class Tree(ModelWithTable): _requires_collection_user = True + class Meta: abstract = True @@ -355,15 +355,18 @@ def merge(node, into, agent): "children": list(into.children.values('id', 'fullname')) }}) target_children = target.children.select_for_update() + children_to_reparent = [] for child in node.children.select_for_update(): matched = [target_child for target_child in target_children if child.name == target_child.name and child.rankid == target_child.rankid] if len(matched) > 0: merge(child, matched[0], agent) else: - child.parent = target - child.save() - + children_to_reparent.append(child) + + if children_to_reparent: + _batch_reparent_children(children_to_reparent, target, model) + for retry in range(100): try: id = node.id @@ -387,6 +390,54 @@ def merge(node, into, agent): assert False, "failed to move all referrences to merged tree node" + +def _batch_reparent_children(children, target, model): + """Batch-reparent multiple children to a new parent, avoiding O(N) + per-child overhead. + + This replaces the per-child pattern of: + child.parent = target + child.save() + which triggers moving_node() -> 5 interval UPDATEs + set_fullnames + validate + for each child individually. + + Instead, we: + 1. Update parent_id for all children in a single UPDATE + 2. Renumber the entire tree (fixes all node numbers at once) + 3. Run set_fullnames once for the entire tree + 4. Run validate_tree_numbering once + + The renumber_tree step is O(N) but runs in seconds even for large trees, + and is far faster than the O(N²) per-child approach. + """ + if not children: + logger.info('batch reparenting 0 children to %s — skipping', target) + return + logger.info('batch reparenting %d children to %s', len(children), target) + + child_ids = [child.id for child in children] + + # Batch-update parent_id for all children in a single query + model.objects.filter(id__in=child_ids).update(parent=target) + + # Renumber the entire tree to fix all node numbers at once. + # This is O(N) but runs in seconds even for large trees. + renumber_tree(model._meta.db_table) + + # Run set_fullnames once for the entire tree + definition = target.definition + set_fullnames(definition) + + # Validate tree numbering once + validate_tree_numbering(model._meta.db_table) + + # Update the in-memory nodenumber/highestchildnodenumber for each child + # so they reflect the new positions (needed for subsequent operations) + for child in children: + refreshed = model.objects.get(id=child.id) + child.nodenumber = refreshed.nodenumber + child.highestchildnodenumber = refreshed.highestchildnodenumber + def bulk_move(node, into, agent): from specifyweb.specify import models logger.info('Bulk move preparations from %s to %s', node, into) @@ -817,13 +868,15 @@ def tree_path_expr(tbl: str, d: int) -> str: # replace path_expr if ordering iss return f"CONCAT_WS(',', {parts})" # Preorder numbering using ROW_NUMBER() + # Use existing nodenumber as a secondary tie-breaker so siblings + # keep their prior interval order unless explicitly moved. sql_preorder = ( f"UPDATE {table} t\n" f"JOIN (\n" f" SELECT id, rn FROM (\n" f" SELECT\n" f" t0.{table}id AS id,\n" - f" ROW_NUMBER() OVER (ORDER BY {path_expr(table, depth)}, t0.{table}id) AS rn\n" + f" ROW_NUMBER() OVER (ORDER BY {path_expr(table, depth)}, t0.nodenumber, t0.{table}id) AS rn\n" f" FROM {table} t0\n" f"{parent_joins(table, depth)}\n" f" ) ordered\n" diff --git a/specifyweb/backend/trees/redis.py b/specifyweb/backend/trees/redis.py index 1b9b023ec0b..0caae40a8b6 100644 --- a/specifyweb/backend/trees/redis.py +++ b/specifyweb/backend/trees/redis.py @@ -1,2 +1,2 @@ # Used to track active default tree creation tasks -ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY = "specify:{database}:trees:active_tree_creation" \ No newline at end of file +ACTIVE_DEFAULT_TREE_TASK_REDIS_KEY = "trees:active_tree_creation" \ No newline at end of file diff --git a/specifyweb/backend/trees/tests/test_tree_extras/test_merge.py b/specifyweb/backend/trees/tests/test_tree_extras/test_merge.py index af66437a97e..bd5fbee75dc 100644 --- a/specifyweb/backend/trees/tests/test_tree_extras/test_merge.py +++ b/specifyweb/backend/trees/tests/test_tree_extras/test_merge.py @@ -1,7 +1,7 @@ from specifyweb.backend.businessrules.exceptions import TreeBusinessRuleException -from specifyweb.specify.models import Geography, Locality, Taxon, Taxontreedef +from specifyweb.specify.models import Geography, Locality, Taxon, Taxontreedef, Taxontreedefitem from specifyweb.backend.trees.tests.test_trees import GeographyTree -from specifyweb.backend.trees.extras import merge +from specifyweb.backend.trees.extras import merge, _batch_reparent_children, validate_tree_numbering class TestMerge(GeographyTree): @@ -47,12 +47,6 @@ def test_merge_into_synonymized(self): self.assertEqual(context.exception.args[1]['localizationKey'], "nodeOperationToSynonymizedParent") - def _make_locality(self, geo): - return Locality.objects.create( - discipline=self.discipline, - geography=geo - ) - def test_simple_merge(self): locality_1 = self._make_locality(self.springmo) @@ -156,4 +150,243 @@ def not_exists(obj): self.assertEqual(locality_gc_2.geography_id, generic_city_oh_2.id) self.assertEqual(self.sangomon.accepted_id, self.greeneoh.id) - self.assertEqual(self.ill.accepted_id, self.ohio.id) \ No newline at end of file + self.assertEqual(self.ill.accepted_id, self.ohio.id) + + +class TestBatchReparent(GeographyTree): + """Tests for the _batch_reparent_children function used during merge.""" + + def test_batch_reparent_single_child(self): + """A single county can be reparented from Missouri to Ohio.""" + # Greene County (MO) has Springfield as a city child + # Reparent Greene County from Missouri to Ohio + _batch_reparent_children([self.greene], self.ohio, Geography) + + # Verify parent changed from Missouri to Ohio + self.greene.refresh_from_db() + self.assertEqual(self.greene.parent_id, self.ohio.id) + + # Verify Springfield still exists and has correct parent + self.springmo.refresh_from_db() + self.assertEqual(self.springmo.parent_id, self.greene.id) + + # Verify tree numbering is valid + validate_tree_numbering('geography') + + def test_batch_reparent_multiple_counties(self): + """Multiple counties can be reparented from one state to another in a single batch.""" + # Create additional counties under Missouri + boone = self.make_geotree("Boone", "County", parent=self.mo) + jasper = self.make_geotree("Jasper", "County", parent=self.mo) + platte = self.make_geotree("Platte", "County", parent=self.mo) + + _batch_reparent_children([boone, jasper, platte], self.ohio, Geography) + + for county in [boone, jasper, platte]: + county.refresh_from_db() + self.assertEqual(county.parent_id, self.ohio.id) + + validate_tree_numbering('geography') + + def test_batch_reparent_county_with_cities(self): + """A county with its own cities (subtree) is correctly reparented.""" + # Greene County (MO) has Springfield as a city child + # Reparent Greene County from Missouri to Ohio + _batch_reparent_children([self.greene], self.ohio, Geography) + + self.greene.refresh_from_db() + self.assertEqual(self.greene.parent_id, self.ohio.id) + + # Verify Springfield is still a child of Greene County + self.springmo.refresh_from_db() + self.assertEqual(self.springmo.parent_id, self.greene.id) + + validate_tree_numbering('geography') + + def test_batch_reparent_updates_fullnames(self): + """Full names reflect the new parent path after batch reparenting.""" + # Create a taxonomy tree with ranks that include ancestry in fullname. + # In the real taxon tree, Genus and Species are the ranks with + # isinfullname=True, so Species includes Genus in its fullname. + root = Taxon.objects.create( + definition=self.taxontreedef, + definitionitem=self.taxon_root, + name="Life", + fullname="Life" + ) + + # Create two Kingdom-level nodes + animalia = self.make_taxontree("Animalia", "Kingdom", parent=root) + plantae = self.make_taxontree("Plantae", "Kingdom", parent=root) + + # Enable fullname ancestry for Genus and Species ranks + genus_rank = Taxontreedefitem.objects.get(name="Genus") + species_rank = Taxontreedefitem.objects.get(name="Species") + self._update(genus_rank, dict(isinfullname=True)) + self._update(species_rank, dict(isinfullname=True)) + + # Create a Genus (Canis) under Animalia with two Species + canis = self.make_taxontree("Canis", "Genus", parent=animalia) + canis_lupus = self.make_taxontree("lupus", "Species", parent=canis) + canis_latrans = self.make_taxontree("latrans", "Species", parent=canis) + + # Refresh species to get computed fullnames + canis_lupus.refresh_from_db() + canis_latrans.refresh_from_db() + + # Before reparenting, Species fullnames should include Canis + self.assertEqual("Canislupus", canis_lupus.fullname) + self.assertEqual("Canislatrans", canis_latrans.fullname) + + # Reparent the Genus Canis from Animalia to Plantae + _batch_reparent_children([canis], plantae, Taxon) + + # Refresh and check Species fullnames still include Canis + canis_lupus.refresh_from_db() + canis_latrans.refresh_from_db() + self.assertEqual("Canislupus", canis_lupus.fullname) + self.assertEqual("Canislatrans", canis_latrans.fullname) + + def test_batch_reparent_preserves_node_numbers(self): + """After batch reparenting, all node numbers are valid and unique.""" + # Create additional counties under Missouri with cities + boone = self.make_geotree("Boone", "County", parent=self.mo) + jasper = self.make_geotree("Jasper", "County", parent=self.mo) + columbia = self.make_geotree("Columbia", "City", parent=boone) + joplin = self.make_geotree("Joplin", "City", parent=jasper) + + _batch_reparent_children([boone, jasper], self.ohio, Geography) + + # Verify node numbers are valid + validate_tree_numbering('geography') + + # Verify all nodes have unique nodenumbers + nodenumbers = Geography.objects.values_list('nodenumber', flat=True) + self.assertEqual(len(nodenumbers), len(set(nodenumbers))) + + def test_batch_reparent_empty_list(self): + """Reparenting an empty list should not raise an error.""" + # This should be a no-op + _batch_reparent_children([], self.ohio, Geography) + + # Tree should still be valid + validate_tree_numbering('geography') + + def test_batch_reparent_county_and_city_together(self): + """A county and a city from different parents can be reparented together.""" + # Reparent Greene County (MO) and Sangamon County (IL) both to Ohio + _batch_reparent_children([self.greene, self.sangomon], self.ohio, Geography) + + self.greene.refresh_from_db() + self.sangomon.refresh_from_db() + + self.assertEqual(self.greene.parent_id, self.ohio.id) + self.assertEqual(self.sangomon.parent_id, self.ohio.id) + + validate_tree_numbering('geography') + + def test_batch_reparent_within_merge(self): + """A merge that triggers batch reparenting works correctly.""" + # Create additional counties under Missouri + boone = self.make_geotree("Boone", "County", parent=self.mo) + jasper = self.make_geotree("Jasper", "County", parent=self.mo) + + # Create a matching county under Ohio (same name) - this will be recursively merged + greene_oh = self.make_geotree("Greene", "County", parent=self.ohio) + + # Create localities attached to the batch-reparented counties + loc_boone = self._make_locality(boone) + loc_jasper = self._make_locality(jasper) + + # Merge Missouri into Ohio + merge(self.mo, self.ohio, self.agent) + + # Verify Missouri is gone + self.assertFalse(Geography.objects.filter(id=self.mo.id).exists()) + + # Verify Ohio still exists + self.assertTrue(Geography.objects.filter(id=self.ohio.id).exists()) + + # Verify the matching Greene County was recursively merged (MO -> OH) + self.assertFalse(Geography.objects.filter(id=self.greene.id).exists()) + greene_oh.refresh_from_db() + self.assertEqual(greene_oh.parent_id, self.ohio.id) + + # Verify non-matching counties were batch reparented + boone.refresh_from_db() + self.assertEqual(boone.parent_id, self.ohio.id) + jasper.refresh_from_db() + self.assertEqual(jasper.parent_id, self.ohio.id) + + # Verify localities for batch-reparented counties were moved + loc_boone.refresh_from_db() + self.assertEqual(loc_boone.geography_id, boone.id) + loc_jasper.refresh_from_db() + self.assertEqual(loc_jasper.geography_id, jasper.id) + + # Verify tree numbering is valid + validate_tree_numbering('geography') + + def test_batch_reparent_preserves_ordering(self): + """Children maintain their relative ordering after batch reparenting.""" + # Create a taxonomy tree. + root = Taxon.objects.create( + definition=self.taxontreedef, + definitionitem=self.taxon_root, + name="Life", + fullname="Life" + ) + + # Create two Kingdom-level nodes + animalia = self.make_taxontree("Animalia", "Kingdom", parent=root) + plantae = self.make_taxontree("Plantae", "Kingdom", parent=root) + + # Create three real-world Genus-level children under Animalia + canis = self.make_taxontree("Canis", "Genus", parent=animalia) + felis = self.make_taxontree("Felis", "Genus", parent=animalia) + ursus = self.make_taxontree("Ursus", "Genus", parent=animalia) + + # Reparent the three genera from Animalia to Plantae + _batch_reparent_children([canis, felis, ursus], plantae, Taxon) + + # Refresh all + for c in [canis, felis, ursus]: + c.refresh_from_db() + + # All should be children of Plantae + for c in [canis, felis, ursus]: + self.assertEqual(c.parent_id, plantae.id) + + # Verify node numbers are nested under Plantae + plantae.refresh_from_db() + for c in [canis, felis, ursus]: + self.assertGreaterEqual(c.nodenumber, plantae.nodenumber) + self.assertLessEqual(c.nodenumber, plantae.highestchildnodenumber) + + # Fetch Plantae's children ordered by nodenumber and verify that + # canis, felis, ursus appear in that exact relative order. + plantae_children = Taxon.objects.filter( + parent=plantae + ).order_by('nodenumber').values_list('id', flat=True) + + # Build a list of the child ids in the order they appear + child_ids = list(plantae_children) + + # Find the positions of canis, felis, ursus in the ordered list + canis_idx = child_ids.index(canis.id) + felis_idx = child_ids.index(felis.id) + ursus_idx = child_ids.index(ursus.id) + + # Assert that canis, felis, ursus appear in that exact order + self.assertLess(canis_idx, felis_idx, + "canis should appear before felis among Plantae's children") + self.assertLess(felis_idx, ursus_idx, + "felis should appear before ursus among Plantae's children") + + # Optionally assert they are contiguous (no other children interleaved) + self.assertEqual(felis_idx, canis_idx + 1, + "canis and felis should be adjacent among Plantae's children") + self.assertEqual(ursus_idx, felis_idx + 1, + "felis and ursus should be adjacent among Plantae's children") + + validate_tree_numbering('taxon') diff --git a/specifyweb/backend/trees/tests/test_trees.py b/specifyweb/backend/trees/tests/test_trees.py index a3acd477518..16c0964ed1b 100644 --- a/specifyweb/backend/trees/tests/test_trees.py +++ b/specifyweb/backend/trees/tests/test_trees.py @@ -175,7 +175,12 @@ def make_storagetree(self, name, rank_name, **extra_kwargs): class GeographyTree(TestTree, TestTreeSetup): - pass + + def _make_locality(self, geo): + return models.Locality.objects.create( + discipline=self.discipline, + geography=geo + ) class SqlTreeSetup(SQLAlchemySetup, GeographyTree): @@ -344,6 +349,8 @@ def _run_for_row(): self.earth.id, "geographyid", False, + False, + 'all', session, ) expected = [ @@ -357,8 +364,13 @@ def _run_for_row(): None, None, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", self.na.children.count(), "NA Syn 0, NA Syn 1", + "NULL", ), ( na_syn_0.id, @@ -370,8 +382,13 @@ def _run_for_row(): self.na.id, self.na.fullname, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", na_syn_0.children.count(), None, + "NULL", ), ( na_syn_1.id, @@ -383,8 +400,13 @@ def _run_for_row(): self.na.id, self.na.fullname, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", na_syn_1.children.count(), None, + "NULL", ), ] @@ -397,6 +419,8 @@ def _run_for_row(): self.na.id, "name", False, + False, + 'all', session, ) expected = [ @@ -410,8 +434,13 @@ def _run_for_row(): None, None, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", self.usa.children.count(), "USA Syn 0, USA Syn 1, USA Syn 2", + "NULL", ), ( usa_syn_0.id, @@ -423,8 +452,13 @@ def _run_for_row(): self.usa.id, self.usa.fullname, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", 0, None, + "NULL", ), ( usa_syn_1.id, @@ -436,8 +470,13 @@ def _run_for_row(): self.usa.id, self.usa.fullname, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", 0, None, + "NULL", ), ( usa_syn_2.id, @@ -449,12 +488,100 @@ def _run_for_row(): self.usa.id, self.usa.fullname, "NULL", + "NULL", + "NULL", + "NULL", + "NULL", 0, None, + "NULL", ), ] self.assertCountEqual(results, expected) + def test_taxon_rows_include_author_and_synonyms(self): + root = self.make_taxontree( + "Life", + "Taxonomy Root", + definition=self.taxontreedef, + ) + animalia = self.make_taxontree( + "Animalia", + "Kingdom", + definition=self.taxontreedef, + parent=root, + author="L.", + ) + metazoa = self.make_taxontree( + "Metazoa", + "Kingdom", + definition=self.taxontreedef, + parent=root, + acceptedtaxon=animalia, + fullname="Metazoa", + author="Haeckel", + ) + animalia.refresh_from_db() + metazoa.refresh_from_db() + + @contextmanager + def _run_for_row(): + with TreeViewsTest.test_session_context() as session: + set_group_concat_max_len(connection.cursor()) + yield session + + with _run_for_row() as session: + results = get_tree_rows( + self.taxontreedef.id, + "Taxon", + root.id, + "name", + True, + False, + 'all', + session, + ) + expected = [ + ( + animalia.id, + animalia.name, + animalia.fullname, + animalia.nodenumber, + animalia.highestchildnodenumber, + animalia.rankid, + None, + None, + animalia.author, + "NULL", + "NULL", + "NULL", + "NULL", + 0, + metazoa.fullname, + "NULL", + ), + ( + metazoa.id, + metazoa.name, + metazoa.fullname, + metazoa.nodenumber, + metazoa.highestchildnodenumber, + metazoa.rankid, + animalia.id, + animalia.fullname, + metazoa.author, + "NULL", + "NULL", + "NULL", + "NULL", + 0, + None, + "NULL", + ), + ] + + self.assertCountEqual(results, expected) + class AddDeleteRankResourcesTest(ApiTests): def test_add_ranks_without_defaults(self): diff --git a/specifyweb/backend/trees/utils.py b/specifyweb/backend/trees/utils.py index 58863726dac..a8603cc6942 100644 --- a/specifyweb/backend/trees/utils.py +++ b/specifyweb/backend/trees/utils.py @@ -38,6 +38,8 @@ def get_search_filters(collection: spmodels.Collection, tree: str): tree_name = tree.lower() + if tree_name not in SPECIFY_TREES: + raise ValueError(f"unexpected tree type: {tree}") if tree_name == 'storage': return Q(institution=collection.discipline.division.institution) discipline_query = Q(discipline=collection.discipline) @@ -53,6 +55,8 @@ def get_search_filters(collection: spmodels.Collection, tree: str): def get_treedefs(collection: spmodels.Collection, tree_name: str) -> list[tuple[int, int]]: # Get the appropriate TreeDef based on the Collection and tree_name + if tree_name.lower() not in SPECIFY_TREES: + raise ValueError(f"unexpected tree type: {tree_name}") # Mimic the old behavior of limiting the query to the first item for trees other than taxon. # Even though the queryconstruct can handle trees with multiple types. diff --git a/specifyweb/backend/trees/views.py b/specifyweb/backend/trees/views.py index 7398061e83b..4e0aaab08a7 100644 --- a/specifyweb/backend/trees/views.py +++ b/specifyweb/backend/trees/views.py @@ -165,13 +165,15 @@ def tree_view(request, treedef, tree: TREE_TABLE, parentid, sortfield): implementation/design decisions """ include_author = request.GET.get('includeauthor', False) and tree == 'taxon' + include_start_end_periods = request.GET.get('includestartendperiods', False) and tree == 'geologictimeperiod' + biostrat = request.GET.get('biostrat', 'all') with sqlmodels.session_context() as session: set_group_concat_max_len(session.connection()) - results = get_tree_rows(treedef, tree, parentid, sortfield, include_author, session) + results = get_tree_rows(treedef, tree, parentid, sortfield, include_author, include_start_end_periods, biostrat, session) return HttpResponse(toJson(results), content_type='application/json') -def get_tree_rows(treedef, tree, parentid, sortfield, include_author, session): +def get_tree_rows(treedef, tree, parentid, sortfield, include_author, include_start_end_periods, biostrat, session): tree_table = spmodels.datamodel.get_table(tree) parentid = None if parentid == 'null' else int(parentid) @@ -183,50 +185,78 @@ def get_tree_rows(treedef, tree, parentid, sortfield, include_author, session): treedef_col = getattr(node, tree_table.name + "TreeDefID") orderby = getattr(node, tree_table.get_field_strict(sortfield).name) - # We use min for grouped columns because for some reason, SQL is rejecting - # the group_by in some dbs due to "only_full_group_by". It is somehow not - # smart enough to see that there is no dependency in the columns going from - # main table to the to-manys (child, and syns). - # I want to use ANY_VALUE() but that's not supported by MySQL 5.6- and MariaDB. - # I don't want to disable "only_full_group_by" in case someone misuses it... - # applying min to fool into thinking it is aggregated. - # these values are guarenteed to be the same cols = [ node._id.label("id"), - func.min(node.name).label("name"), - func.min(node.fullName).label("full_name"), - func.min(node.nodeNumber).label("node_number"), - func.min(node.highestChildNodeNumber).label("highest_child_number"), - func.min(node.rankId).label("rank_id"), - - func.min(node.AcceptedID).label("accepted_id"), - func.min(accepted.fullName).label("accepted_fullname"), - + node.name.label("name"), + node.fullName.label("full_name"), + node.nodeNumber.label("node_number"), + node.highestChildNodeNumber.label("highest_child_number"), + node.rankId.label("rank_id"), + node.AcceptedID.label("accepted_id"), + accepted.fullName.label("accepted_fullname"), + (node.author if include_author else literal("NULL")).label("author"), ( - func.min(node.author) - if include_author - else func.min(literal("NULL")) - ).label("author"), - + node.startPeriod + if include_start_end_periods + else literal("NULL") + ).label("start_period"), + ( + node.startUncertainty + if include_start_end_periods + else literal("NULL") + ).label("start_uncertainty"), + ( + node.endPeriod + if include_start_end_periods + else literal("NULL") + ).label("end_period"), + ( + node.endUncertainty + if include_start_end_periods + else literal("NULL") + ).label("end_uncertainty"), select(func.count(child._id)) .where(child.ParentID == node._id) .correlate(node) .scalar_subquery() .label("child_count"), - select(group_concat(distinct(synonym.fullName), separator=", ")) .where(synonym.AcceptedID == node._id) .correlate(node) .scalar_subquery() .label("synonyms"), + ( + node.isBioStrat + if tree == 'geologictimeperiod' + else literal("NULL") + ).label("is_biostrat"), ] + if biostrat != 'all' and tree == 'geologictimeperiod': + # Count all matching descendants (any depth) using nested-set ranges + if biostrat == 'bio': + descendant_match = child.isBioStrat == True + else: + descendant_match = (child.isBioStrat == False) | (child.isBioStrat.is_(None)) + matching_descendant_count = ( + select(func.count(distinct(child._id))) + .where( + child.nodeNumber > node.nodeNumber, + child.nodeNumber <= node.highestChildNodeNumber, + descendant_match, + getattr(child, tree_table.name + "TreeDefID") == int(treedef), + ) + .correlate(node) + .scalar_subquery() + .label("matching_descendant_count") + ) + cols.append(matching_descendant_count) + query = ( select(*cols) .outerjoin(accepted, node.AcceptedID == accepted._id) .where(treedef_col == int(treedef)) .where(node.ParentID == parentid) - .group_by(node._id) .order_by(orderby) ) diff --git a/specifyweb/backend/workbench/tests.py b/specifyweb/backend/workbench/tests.py index 8a452c79416..63a754813c8 100644 --- a/specifyweb/backend/workbench/tests.py +++ b/specifyweb/backend/workbench/tests.py @@ -2,10 +2,13 @@ from django.test import Client -from specifyweb.specify.models import Recordset +from specifyweb.backend.notifications.models import Message +from specifyweb.backend.permissions.models import UserPolicy from specifyweb.backend.workbench.models import Spdataset +from specifyweb.specify.models import Agent, Collectionobject, Recordset, Specifyuser from specifyweb.specify.tests.test_api import ApiTests from .upload import upload as uploader +from .upload.upload_result import UploadResult class DataSetTests(ApiTests): @@ -60,6 +63,71 @@ def test_reset_uploadplan_to_null(self) -> None: dataset = Spdataset.objects.get(id=datasetid) self.assertEqual(dataset.uploadplan, None) + def test_validate_dataset_without_uploading(self) -> None: + client = Client() + client.force_login(self.specifyuser) + + response = client.post( + "/api/workbench/dataset/", + data={ + "name": "Validation-only data set", + "columns": ["Catalog Number"], + "rows": [["900000001"]], + "importedfilename": "validation.csv", + }, + content_type="application/json", + ) + self.assertEqual(response.status_code, 201) + dataset_id = json.loads(response.content)["id"] + + response = client.put( + f"/api/workbench/dataset/{dataset_id}/", + data={ + "uploadplan": { + "baseTableName": "collectionobject", + "uploadable": { + "uploadTable": { + "wbcols": { + "catalognumber": "Catalog Number", + }, + "static": {}, + "toOne": {}, + "toMany": {}, + } + }, + }, + }, + content_type="application/json", + ) + self.assertEqual(response.status_code, 204) + + response = client.post( + f"/api/workbench/validate/{dataset_id}/", + data={"background": False}, + content_type="application/json", + ) + self.assertEqual(response.status_code, 200) + self.assertIsNone(json.loads(response.content)) + + dataset = Spdataset.objects.get(id=dataset_id) + self.assertIsNone(dataset.uploaderstatus) + self.assertIsNone(dataset.uploadresult) + self.assertIsNotNone(dataset.rowresults) + + validation_results = [ + UploadResult.from_json(result) + for result in json.loads(dataset.rowresults or "[]") + ] + self.assertEqual(len(validation_results), 1) + self.assertFalse(validation_results[0].contains_failure()) + + self.assertFalse( + Collectionobject.objects.filter( + collection=self.collection, + catalognumber="900000001", + ).exists() + ) + def test_create_record_set(self) -> None: c = Client() c.force_login(self.specifyuser) @@ -118,3 +186,155 @@ def test_create_record_set(self) -> None: rs = Recordset.objects.get(id=recordset_id) self.assertEqual(rs.recordsetitems.count(), 3) + + # [WorkBench] Preserve imported data and mapping after reopening a dataset + def test_preserve_imported_data_and_mapping(self) -> None: + client = Client() + client.force_login(self.specifyuser) + + columns = ["Catalog Number", "Remarks"] + rows = [["123", "First row"], ["456", "Second row"]] + uploadplan = { + "baseTableName": "collectionobject", + "uploadable": { + "uploadTable": { + "wbcols": { + "catalognumber": "Catalog Number", + "remarks": "Remarks", + }, + "static": {}, + "toOne": {}, + "toMany": {}, + } + }, + } + + response = client.post( + "/api/workbench/dataset/", + data={ + "name": "Imported dataset", + "columns": columns, + "rows": rows, + "importedfilename": "records.csv", + }, + content_type="application/json", + ) + self.assertEqual(response.status_code, 201) + datasetid = json.loads(response.content)["id"] + + response = client.put( + f"/api/workbench/dataset/{datasetid}/", + data={"uploadplan": uploadplan}, + content_type="application/json", + ) + self.assertEqual(response.status_code, 204) + + response = client.get(f"/api/workbench/dataset/{datasetid}/") + self.assertEqual(response.status_code, 200) + dataset = json.loads(response.content) + + self.assertEqual(dataset["columns"], columns) + self.assertEqual( + dataset["rows"], + [row + [""] for row in rows], + ) + self.assertEqual(dataset["uploadplan"], uploadplan) + +class ChangeOwnershipTests(ApiTests): + def setUp(self) -> None: + super().setUp() + self.new_owner = Specifyuser.objects.create( + isloggedin=False, + isloggedinreport=False, + name="newowner", + password="unused", # noqa: S106 - non-secret test fixture + ) + Agent.objects.create( + agenttype=0, + lastname="New Owner", + division=self.division, + specifyuser=self.new_owner, + ) + self.dataset = Spdataset.objects.create( + name="Ownership transfer dataset", + importedfilename="records.csv", + columns=["Catalog Number", "Remarks"], + data=[["100", "First row"], ["200", "Second row"]], + collection=self.collection, + specifyuser=self.specifyuser, + ) + self.client = Client() + self.client.force_login(self.specifyuser) + + def test_transfer_dataset_ownership(self) -> None: + response = self.client.post( + f"/api/workbench/transfer/{self.dataset.id}/", + data={"specifyuserid": self.new_owner.id}, + ) + + self.assertEqual(response.status_code, 204) + + self.dataset.refresh_from_db() + self.assertEqual(self.dataset.specifyuser, self.new_owner) + self.assertEqual( + self.dataset.columns, + ["Catalog Number", "Remarks"], + ) + self.assertEqual( + self.dataset.data, + [["100", "First row"], ["200", "Second row"]], + ) + + message = Message.objects.get(user=self.new_owner) + self.assertEqual( + json.loads(message.content), + { + "type": "dataset-ownership-transferred", + "previous-owner-name": self.specifyuser.name, + "dataset-name": self.dataset.name, + "dataset-id": str(self.dataset.id), + }, + ) + + def test_transfer_dataset_requires_permission(self) -> None: + UserPolicy.objects.filter(specifyuser=self.specifyuser).delete() + + response = self.client.post( + f"/api/workbench/transfer/{self.dataset.id}/", + data={"specifyuserid": self.new_owner.id}, + ) + + self.assertEqual(response.status_code, 403) + self.dataset.refresh_from_db() + self.assertEqual(self.dataset.specifyuser, self.specifyuser) + self.assertFalse(Message.objects.filter(user=self.new_owner).exists()) + + def test_only_dataset_owner_can_transfer(self) -> None: + self._add_user_policy(self.new_owner) + self.client.force_login(self.new_owner) + + response = self.client.post( + f"/api/workbench/transfer/{self.dataset.id}/", + data={"specifyuserid": self.new_owner.id}, + ) + + self.assertEqual(response.status_code, 403) + self.dataset.refresh_from_db() + self.assertEqual(self.dataset.specifyuser, self.specifyuser) + self.assertFalse(Message.objects.filter(user=self.new_owner).exists()) + + def test_transfer_dataset_rejects_invalid_user(self) -> None: + invalid_user_id = ( + Specifyuser.objects.order_by("-id").values_list("id", flat=True).first() + or 0 + ) + 1 + + response = self.client.post( + f"/api/workbench/transfer/{self.dataset.id}/", + data={"specifyuserid": invalid_user_id}, + ) + + self.assertEqual(response.status_code, 400) + self.dataset.refresh_from_db() + self.assertEqual(self.dataset.specifyuser, self.specifyuser) + self.assertFalse(Message.objects.exists()) \ No newline at end of file diff --git a/specifyweb/backend/workbench/upload/clone.py b/specifyweb/backend/workbench/upload/clone.py index 3ba75db28e0..c33ecdeb5f8 100644 --- a/specifyweb/backend/workbench/upload/clone.py +++ b/specifyweb/backend/workbench/upload/clone.py @@ -11,7 +11,7 @@ from specifyweb.specify.utils.func import Func from specifyweb.specify.models_utils.load_datamodel import Table -from specifyweb.specify.models import ModelWithTable +from specifyweb.specify.models_utils.model_extras import ModelWithTable FIELDS_TO_NOT_CLONE: dict[str, list[str]] = json.load( open("specifyweb/frontend/js_src/lib/components/DataModel/uniqueFields.json") diff --git a/specifyweb/backend/workbench/upload/column_options.py b/specifyweb/backend/workbench/upload/column_options.py index 4a9bd278387..95b8f3fbb29 100644 --- a/specifyweb/backend/workbench/upload/column_options.py +++ b/specifyweb/backend/workbench/upload/column_options.py @@ -5,6 +5,7 @@ from specifyweb.specify.utils.uiformatters import ScopedFormatter MatchBehavior = Literal["ignoreWhenBlank", "ignoreAlways", "ignoreNever"] +DisambiguationBehavior = Literal["ask", "pickFirst"] # A single row in the workbench. Maps column names to values in the row Row = dict[str, str] @@ -14,9 +15,10 @@ class ColumnOptions(NamedTuple): matchBehavior: MatchBehavior nullAllowed: bool default: str | None + disambiguationBehavior: DisambiguationBehavior def to_json(self) -> dict | str: - if self.matchBehavior == "ignoreNever" and self.nullAllowed and self.default is None: + if self.matchBehavior == "ignoreNever" and self.nullAllowed and self.default is None and self.disambiguationBehavior == "ask": return self.column return dict(self._asdict()) @@ -26,6 +28,7 @@ class ExtendedColumnOptions(NamedTuple): matchBehavior: MatchBehavior nullAllowed: bool default: str | None + disambiguationBehavior: DisambiguationBehavior uiformatter: ScopedFormatter | None schemaitem: Any picklist: Any diff --git a/specifyweb/backend/workbench/upload/parsing.py b/specifyweb/backend/workbench/upload/parsing.py index b59d6601d1c..7abcad0b1e3 100644 --- a/specifyweb/backend/workbench/upload/parsing.py +++ b/specifyweb/backend/workbench/upload/parsing.py @@ -5,7 +5,7 @@ from specifyweb.specify.datamodel import datamodel from specifyweb.backend.workbench.upload.predicates import filter_match_key -from .column_options import ExtendedColumnOptions +from .column_options import DisambiguationBehavior, ExtendedColumnOptions from specifyweb.backend.workbench.upload.parse import parse_field, is_latlong, ParseSucess, ParseFailure Row = dict[str, str] @@ -38,17 +38,20 @@ class ParseResult(NamedTuple): add_to_picklist: PicklistAddition | None column: str missing_required: str | None + disambiguation_behavior: DisambiguationBehavior @classmethod - def from_parse_success(cls, ps: ParseSucess, filter_on: Filter, add_to_picklist: PicklistAddition | None, column: str, missing_required: str | None): - return cls(filter_on=filter_on, upload=ps.payload, add_to_picklist=add_to_picklist, column=column, missing_required=missing_required) + def from_parse_success(cls, ps: ParseSucess, filter_on: Filter, add_to_picklist: PicklistAddition | None, column: str, + missing_required: str | None, disambiguation_behavior: DisambiguationBehavior): + return cls(filter_on=filter_on, upload=ps.payload, add_to_picklist=add_to_picklist, column=column, + missing_required=missing_required, disambiguation_behavior=disambiguation_behavior) def match_key(self) -> str: return filter_match_key(self.filter_on) -def filter_and_upload(f: Filter, column: str) -> ParseResult: - return ParseResult(f, f, None, column, None) +def filter_and_upload(f: Filter, column: str, disambiguation_behavior: DisambiguationBehavior = 'ask') -> ParseResult: + return ParseResult(f, f, None, column, None, disambiguation_behavior) def parse_many(tablename: str, mapping: dict[str, ExtendedColumnOptions], row: Row) -> tuple[list[ParseResult], list[WorkBenchParseFailure]]: @@ -76,7 +79,7 @@ def parse_value(tablename: str, fieldname: str, value_in: str, colopts: Extended None ) result = ParseResult({fieldname: None}, {fieldname: None}, - None, colopts.column, missing_required) + None, colopts.column, missing_required, colopts.disambiguationBehavior) else: result = _parse(tablename, fieldname, colopts, colopts.default) @@ -105,7 +108,7 @@ def _parse(tablename: str, fieldname: str, colopts: ExtendedColumnOptions, value field = table.get_field_strict(fieldname) if colopts.picklist: - result = parse_with_picklist(colopts.picklist, fieldname, value, colopts.column) + result = parse_with_picklist(colopts.picklist, fieldname, value, colopts.column, colopts.disambiguationBehavior,) if result is not None: if isinstance(result, ParseResult) and hasattr(field, 'length') and field.length is not None and len(result.upload[fieldname]) > field.length: return WorkBenchParseFailure( @@ -123,19 +126,19 @@ def _parse(tablename: str, fieldname: str, colopts: ExtendedColumnOptions, value if is_latlong(table, field) and isinstance(parsed, ParseSucess): coord_text_field = field.name.replace('itude', '') + 'text' if field.name else '' filter_on = {coord_text_field: parsed.payload[coord_text_field]} - return ParseResult.from_parse_success(parsed, filter_on, None, colopts.column, None) + return ParseResult.from_parse_success(parsed, filter_on, None, colopts.column, None, colopts.disambiguationBehavior) if isinstance(parsed, ParseFailure): return WorkBenchParseFailure.from_parse_failure(parsed, colopts.column) else: - return ParseResult.from_parse_success(parsed, parsed.payload, None, colopts.column, None) + return ParseResult.from_parse_success(parsed, parsed.payload, None, colopts.column, None, colopts.disambiguationBehavior) -def parse_with_picklist(picklist, fieldname: str, value: str, column: str) -> ParseResult | WorkBenchParseFailure | None: +def parse_with_picklist(picklist, fieldname: str, value: str, column: str, disambiguation_behavior: DisambiguationBehavior) -> ParseResult | WorkBenchParseFailure | None: if picklist.type == 0: # items from picklistitems table try: item = picklist.picklistitems.get(title=value) - return filter_and_upload({fieldname: item.value}, column) + return filter_and_upload({fieldname: item.value}, column, disambiguation_behavior) except ObjectDoesNotExist: if picklist.readonly: return WorkBenchParseFailure( @@ -144,11 +147,11 @@ def parse_with_picklist(picklist, fieldname: str, value: str, column: str) -> Pa column ) else: - return filter_and_upload({fieldname: value}, column)._replace( + return filter_and_upload({fieldname: value}, column, disambiguation_behavior)._replace( add_to_picklist=PicklistAddition( picklist=picklist, column=column, value=value) ) - return filter_and_upload({fieldname: value}) + return filter_and_upload({fieldname: value}, column, disambiguation_behavior) elif picklist.type == 1: # items from rows in some table # we ignore this type of picklist because it is primarily used to choose many-to-one's on forms diff --git a/specifyweb/backend/workbench/upload/scoping.py b/specifyweb/backend/workbench/upload/scoping.py index 24b7e887b11..f2d64ba7f34 100644 --- a/specifyweb/backend/workbench/upload/scoping.py +++ b/specifyweb/backend/workbench/upload/scoping.py @@ -147,6 +147,7 @@ def extend_columnoptions( matchBehavior=colopts.matchBehavior, nullAllowed=colopts.nullAllowed, default=colopts.default, + disambiguationBehavior=colopts.disambiguationBehavior, schemaitem=schemaitem, # Formatters are "scoped" here, that is, all they need is a value coming directly from the row. uiformatter=(None if scoped_formatter is None else CustomRepr(scoped_formatter, friendly_repr)), diff --git a/specifyweb/backend/workbench/upload/tests/test_batch_edit_table.py b/specifyweb/backend/workbench/upload/tests/test_batch_edit_table.py index e9f02f0ca45..fcc920662d6 100644 --- a/specifyweb/backend/workbench/upload/tests/test_batch_edit_table.py +++ b/specifyweb/backend/workbench/upload/tests/test_batch_edit_table.py @@ -1,4 +1,5 @@ from typing import Literal +from functools import partial from specifyweb.specify.utils.func import Func from specifyweb.specify.tests.test_api import get_table from specifyweb.backend.stored_queries.batch_edit import run_batch_edit_query # type: ignore @@ -26,6 +27,7 @@ Matched, UploadResult, ) +from specifyweb.backend.workbench.upload.treerecord import RANK_KEY_DELIMITER from specifyweb.backend.workbench.upload.upload_table import UploadTable from specifyweb.backend.workbench.views import regularize_rows from ..upload_plan_schema import parse_column_options, parse_plan, schema @@ -402,6 +404,262 @@ def _make_data(): ) +class TreeUpdateTests(UploadTestsBase): + def setUp(self): + super().setUp() + self._make_taxon_records() + + + def _make_taxon_records(self): + Taxon = get_table("Taxon") + + treedef_items = self.taxontreedef.treedefitems.order_by("rankid").all() + get_rank = partial(TreeUpdateTests.get_treedefitem_at_rankid, treedef_items) + root = Taxon.objects.create( + name="Life", + fullname="Life", + parent=None, + version=1, + definition=self.taxontreedef, + definitionitem=get_rank(0) + ) + kingdom = Taxon.objects.create( + name="Animalia", + fullname="Animalia", + parent=root, + version=1, + definition=self.taxontreedef, + definitionitem=get_rank(10) + ) + phylum = Taxon.objects.create( + name="Chordata", + fullname="Chordata", + parent=kingdom, + version=1, + definition=self.taxontreedef, + definitionitem=get_rank(30) + ) + clazz = Taxon.objects.create( + name="Myxini", + fullname="Myxini", + parent=phylum, + version=1, + definition=self.taxontreedef, + definitionitem=get_rank(60) + ) + order = Taxon.objects.create( + name="Myxiniformes", + fullname="Myxiniformes", + parent=clazz, + version=1, + definition=self.taxontreedef, + definitionitem=get_rank(100) + ) + family = Taxon.objects.create( + name="Myxinidae", + fullname="Myxinidae", + parent=order, + version=1, + definition=self.taxontreedef, + definitionitem=get_rank(140) + ) + self.family_node = family + self._genus_rank = get_rank(180) + self._species_rank = get_rank(220) + + def _create_genus(self, genus_name: str): + Taxon = get_table("Taxon") + genus, created = Taxon.objects.get_or_create( + name=genus_name, + fullname=genus_name, + parent=self.family_node, + definition=self.taxontreedef, + definitionitem=self._genus_rank, + defaults={ + "version": 1 + } + ) + return genus + + def _create_genus_and_species(self, genus_name: str, species_name: str): + Taxon = get_table("Taxon") + genus = self._create_genus(genus_name) + species, created = Taxon.objects.get_or_create( + name=species_name, + fullname=f"{genus_name} {species_name}", + parent=genus, + definition=self.taxontreedef, + definitionitem=self._species_rank, + defaults={ + "version": 1 + } + ) + return genus, species + + @staticmethod + def get_treedefitem_at_rankid(treedefitems: list, rankid: int): + for treedefitem in treedefitems: + if treedefitem.rankid == rankid: + return treedefitem + + raise ValueError(f"Unable to find treedefitem with rank {rankid} in {treedefitems}") + + def _upload_collection_objects(self, datas: list[dict]): + Collectionobject = get_table("Collectionobject") + result = [] + for data in datas: + co = Collectionobject.objects.create( + catalognumber=data["catalogNumber"], + version=1, + collection=self.collection, + ) + uploaded_row = {"collectionobject": co} + determinations_and_taxa = self._upload_determinations_and_taxa(co.pk, data) + uploaded_row.update(determinations_and_taxa) + result.append(uploaded_row) + return result + + + def _upload_determinations_and_taxa(self, co_id: int, data: dict): + Determination = get_table("Determination") + + has_genus = "genus" in data + has_species = "species" in data + genus, species = None, None + + if has_genus and has_species: + genus_name, species_name = data["genus"], data["species"] + genus, species = self._create_genus_and_species(genus_name, species_name) + elif has_genus and not has_species: + genus = self._create_genus(data["genus"]) + elif not has_genus and has_species: + raise ValueError("Unssuported test case: Species applied without Genus in test data") + + resolved_node = species if species is not None else genus if genus is not None else self.family_node + + determination = Determination.objects.create( + collectionobject_id=co_id, + iscurrent=True, + version=1, + taxon=resolved_node, + preferredtaxon=resolved_node, + ) + + return {"determination": determination, "taxon": resolved_node, "genus": genus, "species": species} + + def _records_to_batchedit_pack(self, uploaded: list[dict]): + return [self._record_to_batchedit_pack(record) for record in uploaded] + + def _record_to_batchedit_pack(self, record: dict): + pack = { + "self": { + "id": record["collectionobject"].pk, + "ordernumber": None, + "version": record["collectionobject"].version + }, + "to_many": { + "determinations": [ + { + "self": { + "id": record["determination"].pk, + "ordernumber": None, + "version": record["determination"].version + }, + "to_one": { + "taxon": self._record_to_taxon_pack(record) + } + } + ] + } + } + return pack + + def _record_to_taxon_pack(self, record: dict): + actual_record = { + "self": { + "id": record["taxon"].pk, + "ordernumber": None, + "version": record["taxon"].version + } + } + if record.get("genus", None) is not None: + taxon_to_one = actual_record.setdefault("to_one", {}) + taxon_to_one[self._rank_to_formatted("Genus", include_id=True)] = { + "self": { + "id": record["genus"].pk, + "ordernumber": None, + "version": record["genus"].version + } + } + + if record.get("species", None) is not None: + taxon_to_one = actual_record.setdefault("to_one", {}) + taxon_to_one[self._rank_to_formatted("Species", include_id=True)] = { + "self": { + "id": record["species"].pk, + "ordernumber": None, + "version": record["species"].version + } + } + return actual_record + + def _rank_to_formatted(self, rank_name: str, include_id: bool = False): + tree_id = self.taxontreedef.pk + tree_name = self.taxontreedef.name + final = [tree_name, rank_name] + if include_id: + final.append(str(tree_id)) + return RANK_KEY_DELIMITER.join(final) + + def _uploaded_to_data_set(self, data_to_upload: list[dict], columns: list[str]): + data = [] + for row in data_to_upload: + final_row = {} + for col in columns: + value = row.get(col, "") + final_row[col] = value + data.append(final_row) + return data + + # See https://github.com/specify/specify7/issues/8469 + def test_batch_edit_tree_not_unlinked(self): + tree_id = self.taxontreedef.pk + upload_plan_json = {"baseTableName":"Collectionobject","uploadable":{"uploadTable":{"wbcols":{"catalognumber":"catalogNumber"},"static":{},"toOne":{},"toMany":{"determinations":[{"wbcols":{},"static":{},"toOne":{"taxon":{"treeRecord":{"ranks":{self._rank_to_formatted("Genus"):{"treeNodeCols":{"name":"genus"},"treeId":tree_id},self._rank_to_formatted("Species"):{"treeNodeCols":{"name":"species"},"treeId":tree_id},self._rank_to_formatted("Subgenus"):{"treeNodeCols":{"name":"subgenus"},"treeId":tree_id},self._rank_to_formatted("Subspecies"):{"treeNodeCols":{"name":"subspecies"},"treeId":tree_id}}}}},"toMany":{}}]}}}} + upload_plan = parse_plan(upload_plan_json) + data_to_upload = [ + {"catalogNumber": "1".zfill(9)}, + {"catalogNumber": "2".zfill(9), "genus": "Myxine"}, + {"catalogNumber": "3".zfill(9), "genus": "Myxine", "species": "capensis"}, + {"catalogNumber": "4".zfill(9), "genus": "Eptatretus", "species": "sheni"}, + ] + uploaded_data = self._upload_collection_objects(data_to_upload) + batch_edit_pack = self._records_to_batchedit_pack(uploaded_data) + + data = self._uploaded_to_data_set(data_to_upload, ["catalogNumber", "genus", "species", "subgenus", "subspecies"]) + + results = do_upload( + collection=self.collection, + rows=data, + upload_plan=upload_plan, + uploading_agent_id=self.agent.id, + batch_edit_packs=batch_edit_pack + ) + # Ensure the CollectionObject determined to Family is still determined to Family + collection_object = get_table("Collectionobject").objects.get( + catalognumber="1".zfill(9), + collection=self.collection + ) + determination = collection_object.determinations.get() + self.assertEqual(determination.taxon_id, self.family_node.pk) + self.assertEqual(determination.preferredtaxon_id, self.family_node.pk) + + for result in results: + assert isinstance(result.record_result, NoChange), "CO was changed by BatchEdit!" + det_result = result.toMany["determinations"][0] + assert isinstance(det_result.record_result, NoChange), "Determination was changed by BatchEdit" + tax_result = det_result.toOne["taxon"] + assert isinstance(tax_result.record_result, Matched), "Taxon was not matched by BatchEdit" + # I can see why this might be a bad idea, but want to playaround with making unittests completely end-to-end at least for some type # So we start from query and end with batch-edit results as the core focus of all these tests. # This also allows for more complicated tests, with less manual work + self checking. diff --git a/specifyweb/backend/workbench/upload/tests/testparsing.py b/specifyweb/backend/workbench/upload/tests/testparsing.py index 65867f44ea7..a79482906f4 100644 --- a/specifyweb/backend/workbench/upload/tests/testparsing.py +++ b/specifyweb/backend/workbench/upload/tests/testparsing.py @@ -444,7 +444,7 @@ def test_tree_cols_with_ignoreWhenBlank(self) -> None: ranks=dict( Genus=dict(name=parse_column_options('Genus')), Species=dict(name=parse_column_options('Species'), - author=ColumnOptions(column='Species Author', matchBehavior="ignoreWhenBlank", nullAllowed=True, default=None)) + author=ColumnOptions(column='Species Author', matchBehavior="ignoreWhenBlank", nullAllowed=True, default=None, disambiguationBehavior="ask")) ) ) data = [ @@ -466,7 +466,7 @@ def test_higher_tree_cols_with_ignoreWhenBlank(self) -> None: ranks=dict( Genus=dict(name=parse_column_options('Genus')), Species=dict(name=parse_column_options('Species'), - author=ColumnOptions(column='Species Author', matchBehavior="ignoreWhenBlank", nullAllowed=True, default=None)), + author=ColumnOptions(column='Species Author', matchBehavior="ignoreWhenBlank", nullAllowed=True, default=None, disambiguationBehavior="ask")), Subspecies=dict(name=parse_column_options('Subspecies')), ) ) @@ -488,7 +488,7 @@ def test_tree_cols_with_ignoreNever(self) -> None: ranks=dict( Genus=dict(name=parse_column_options('Genus')), Species=dict(name=parse_column_options('Species'), - author=ColumnOptions(column='Species Author', matchBehavior="ignoreNever", nullAllowed=True, default=None)) + author=ColumnOptions(column='Species Author', matchBehavior="ignoreNever", nullAllowed=True, default=None, disambiguationBehavior="ask")) ) ) data = [ @@ -508,7 +508,7 @@ def test_tree_cols_with_required(self) -> None: ranks=dict( Genus=dict(name=parse_column_options('Genus')), Species=dict(name=parse_column_options('Species'), - author=ColumnOptions(column='Species Author', matchBehavior="ignoreNever", nullAllowed=False, default=None)) + author=ColumnOptions(column='Species Author', matchBehavior="ignoreNever", nullAllowed=False, default=None, disambiguationBehavior="ask")) ) ) data = [ @@ -530,7 +530,7 @@ def test_tree_cols_with_ignoreAlways(self) -> None: ranks=dict( Genus=dict(name=parse_column_options('Genus')), Species=dict(name=parse_column_options('Species'), - author=ColumnOptions(column='Species Author', matchBehavior="ignoreAlways", nullAllowed=True, default=None)) + author=ColumnOptions(column='Species Author', matchBehavior="ignoreAlways", nullAllowed=True, default=None, disambiguationBehavior="ask")) ) ) data = [ @@ -551,7 +551,7 @@ def test_wbcols_with_ignoreWhenBlank(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreWhenBlank", nullAllowed=True, default=None), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreWhenBlank", nullAllowed=True, default=None, disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -577,7 +577,7 @@ def test_wbcols_with_ignoreWhenBlank_and_default(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreWhenBlank", nullAllowed=True, default="John"), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreWhenBlank", nullAllowed=True, default="John", disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -609,7 +609,7 @@ def test_wbcols_with_ignoreNever(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default=None), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default=None, disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -634,7 +634,7 @@ def test_wbcols_with_ignoreAlways(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreAlways", nullAllowed=True, default=None), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreAlways", nullAllowed=True, default=None, disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -662,7 +662,7 @@ def test_wbcols_with_default(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default="John"), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default="John", disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -690,7 +690,7 @@ def test_wbcols_with_default_matching(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default="John"), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default="John", disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -721,7 +721,7 @@ def test_wbcols_with_default_and_null_disallowed(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=False, default="John"), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=False, default="John", disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -750,7 +750,7 @@ def test_wbcols_with_default_blank(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=False, default=""), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=False, default="", disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -780,7 +780,7 @@ def test_wbcols_with_null_disallowed(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=False, default=None), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=False, default=None, disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -805,7 +805,7 @@ def test_wbcols_with_null_disallowed_and_ignoreWhenBlank(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreWhenBlank", nullAllowed=False, default=None), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreWhenBlank", nullAllowed=False, default=None, disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -834,7 +834,7 @@ def test_wbcols_with_null_disallowed_and_ignoreAlways(self) -> None: name='Agent', wbcols={ 'lastname': parse_column_options('lastname'), - 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreAlways", nullAllowed=False, default=None), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreAlways", nullAllowed=False, default=None, disambiguationBehavior="ask"), }, overrideScope=None, static={}, @@ -857,3 +857,64 @@ def test_wbcols_with_null_disallowed_and_ignoreAlways(self) -> None: self.assertIsInstance(results[2].record_result, Uploaded) self.assertIsInstance(results[3].record_result, Matched) self.assertIsInstance(results[4].record_result, Matched) + +class DisambiguationBehaviorTests(UploadTestsBase): + def test_pickFirst_disambiguation_behavior(self) -> None: + # Upload some agents first + agent_plan = UploadTable( + name='Agent', + wbcols={ + 'firstname': parse_column_options('firstname'), + 'lastname': parse_column_options('lastname'), + 'email': parse_column_options('email'), + }, + overrideScope=None, + static={}, + toOne={}, + toMany={} + ) + agent_data = [ + {'lastname': 'Doe', 'firstname': 'John', 'email': '0'}, + {'lastname': 'Doe', 'firstname': 'John', 'email': '1'}, + ] + + results = do_upload(self.collection, agent_data, agent_plan, self.agent.id) + for result in results: + validate([result.to_json()], upload_results_schema, cls=Draft7Validator) + + self.assertIsInstance(results[0].record_result, Uploaded) + self.assertIsInstance(results[1].record_result, Uploaded) + + # Try to add some Collection Objects with ambiguous catalogers + plan = UploadTable( + name='Collectionobject', + wbcols={ + 'catalognumber': parse_column_options('Cat #'), + }, + overrideScope=None, + static={}, + toOne={ + 'cataloger': UploadTable( + name='Agent', + wbcols={ + 'lastname': parse_column_options('lastname'), + 'firstname': ColumnOptions(column='firstname', matchBehavior="ignoreNever", nullAllowed=True, default=None, disambiguationBehavior="pickFirst"), + }, + overrideScope=None, + static={}, + toOne={}, + toMany={}, + ) + }, + toMany={} + ) + data = [ + {'Cat #': '124', 'lastname': 'Doe', 'firstname': 'John'}, + {'Cat #': '125', 'lastname': 'Doe', 'firstname': 'Jane'} + ] + results = do_upload(self.collection, data, plan, self.agent.id) + for result in results: + validate([result.to_json()], upload_results_schema, cls=Draft7Validator) + + self.assertIsInstance(results[0].toOne['cataloger'].record_result, Matched, "Record was not disambiguated automatically despite having disambiguationBehavior='pickFirst'.") + self.assertIsInstance(results[1].toOne['cataloger'].record_result, Uploaded) diff --git a/specifyweb/backend/workbench/upload/tests/testuploading.py b/specifyweb/backend/workbench/upload/tests/testuploading.py index 6904057e3b7..8f8f4d28eee 100644 --- a/specifyweb/backend/workbench/upload/tests/testuploading.py +++ b/specifyweb/backend/workbench/upload/tests/testuploading.py @@ -6,6 +6,9 @@ from jsonschema import validate # type: ignore +from specifyweb.backend.businessrules.rules.cogtype_rules import ( + SYSTEM_COGTYPES_PICKLIST, +) from specifyweb.backend.workbench.upload import auditcodes from specifyweb.backend.workbench.upload.auditlog import auditlog from specifyweb.backend.trees.tests.test_trees import TestTree @@ -627,9 +630,203 @@ def test_null_record_with_ambiguous_one_to_one(self) -> None: "The collection object attributes are not shared.", ) +class CogParentUploadTests(UploadTestsBase): + def setUp(self) -> None: + super().setUp() + cog_type_picklist = get_table("Picklist").objects.create( + name=SYSTEM_COGTYPES_PICKLIST, + issystem=True, + type=0, + readonly=True, + collection=self.collection, + ) + get_table("Picklistitem").objects.create( + title="Discrete", + value="Discrete", + picklist=cog_type_picklist, + ) + self.cog_type = get_table("Collectionobjectgrouptype").objects.create( + name="Test COG Type", + type="Discrete", + collection=self.collection, + ) + self.parent_cog = get_table("Collectionobjectgroup").objects.create( + name="Parent COG", + cogtype=self.cog_type, + collection=self.collection, + ) + + @staticmethod + def _parent_cog_upload_table() -> dict: + return { + "wbcols": {"name": "Parent COG"}, + "static": {}, + "toOne": {}, + "toMany": {}, + } + + def test_upload_child_cog_with_parent_cog(self) -> None: + plan_json = { + "baseTableName": "Collectionobjectgroup", + "uploadable": { + "uploadTable": { + "wbcols": {"name": "Child COG"}, + "static": {"cogtype_id": self.cog_type.id}, + "toOne": {}, + "toMany": { + "cojo": [ + { + "wbcols": {}, + "static": { + "isprimary": False, + "issubstrate": False, + "precedence": 0, + }, + "toOne": { + "parentcog": { + "mustMatchTable": self._parent_cog_upload_table() + } + }, + "toMany": {}, + } + ] + }, + } + }, + } + validate(plan_json, schema) + results = do_upload( + self.collection, + [{"Child COG": "Child COG", "Parent COG": "Parent COG"}], + parse_plan(plan_json), + self.agent.id, + ) + + self.assertEqual(len(results), 1) + self.assertFalse(results[0].contains_failure()) + + child_cog = get_table("Collectionobjectgroup").objects.get( + name="Child COG" + ) + join = get_table("Collectionobjectgroupjoin").objects.get( + childcog=child_cog + ) + self.assertEqual(join.parentcog, self.parent_cog) + + def test_upload_collection_object_with_parent_cog(self) -> None: + plan_json = { + "baseTableName": "Collectionobject", + "uploadable": { + "uploadTable": { + "wbcols": {"catalognumber": "Catalog Number"}, + "static": {}, + "toOne": {}, + "toMany": { + "cojo": [ + { + "wbcols": {}, + "static": { + "isprimary": False, + "issubstrate": False, + "precedence": 0, + }, + "toOne": { + "parentcog": { + "mustMatchTable": self._parent_cog_upload_table() + } + }, + "toMany": {}, + } + ] + }, + } + }, + } + validate(plan_json, schema) + results = do_upload( + self.collection, + [{"Catalog Number": "900000002", "Parent COG": "Parent COG"}], + parse_plan(plan_json), + self.agent.id, + ) + + self.assertEqual(len(results), 1) + self.assertFalse(results[0].contains_failure()) + collection_object = get_table("Collectionobject").objects.get( + catalognumber="900000002", + collection=self.collection, + ) + join = get_table("Collectionobjectgroupjoin").objects.get( + childco=collection_object + ) + self.assertEqual(join.parentcog, self.parent_cog) class UploadTests(UploadTestsBase): + def test_upload_taxon_to_non_default_tree(self) -> None: + taxon_model = get_table("Taxon") + taxon_tree_def_model = get_table("Taxontreedef") + non_default_tree = taxon_tree_def_model.objects.create( + name="Non-default Taxon Tree", + discipline=self.discipline, + ) + self.make_taxon_ranks(non_default_tree) + taxon_model.objects.create( + name="Non-default Root", + definition=non_default_tree, + definitionitem=non_default_tree.treedefitems.get( + name="Taxonomy Root" + ), + ) + + plan_json = { + "baseTableName": "Taxon", + "uploadable": { + "treeRecord": { + "ranks": { + "Genus": { + "treeNodeCols": {"name": "Genus"}, + "treeId": non_default_tree.id, + }, + "Species": { + "treeNodeCols": {"name": "Species"}, + "treeId": non_default_tree.id, + }, + } + } + }, + } + validate(plan_json, schema) + + results = do_upload( + self.collection, + [{"Genus": "AlternateGenus", "Species": "alternateSpecies"}], + parse_plan(plan_json), + self.agent.id, + ) + + self.assertEqual(len(results), 1) + self.assertFalse(results[0].contains_failure()) + + uploaded_species = taxon_model.objects.get( + name="alternateSpecies", + definition=non_default_tree, + ) + self.assertEqual(uploaded_species.parent.name, "AlternateGenus") + self.assertEqual(uploaded_species.parent.definition, non_default_tree) + self.assertFalse( + taxon_model.objects.filter( + name="AlternateGenus", + definition=self.taxontreedef, + ).exists() + ) + self.assertFalse( + taxon_model.objects.filter( + name="alternateSpecies", + definition=self.taxontreedef, + ).exists() + ) + def test_determination_default_iscurrent(self) -> None: plan_json = { "baseTableName": "collectionobject", diff --git a/specifyweb/backend/workbench/upload/treerecord.py b/specifyweb/backend/workbench/upload/treerecord.py index ce82b1c3644..6a8151a7f06 100644 --- a/specifyweb/backend/workbench/upload/treerecord.py +++ b/specifyweb/backend/workbench/upload/treerecord.py @@ -589,6 +589,39 @@ def match_row(self) -> UploadResult: def process_row(self) -> UploadResult: return self._handle_row(must_match=False) + # REFACTOR: better integrate this with WorkBench/BatchEdit + # This "hacky" solution was needed for a bug in BatchEdit + # See https://github.com/specify/specify7/issues/8470 + # This initial approach was taken because: + # 1. This is very isolated from other areas of BatchEdit and WorkBench + # (e.g., smaller bug surface area) + # 2. The amount of extra work for Specify and the database is relatively + # minimal and this should perform somewhat similarly to the prior + # implementation. (Assuming the field lookup for tree_node_id is cached + # for the following _field_changed call in BoundUpdateTable). + # + # This approach is not as maintainable though, as it introduces more + # complexity into BatchEdit as a hyper specific case, and there's more + # contextual overhead for this function and the caller as both have to + # agree on what tree_node_id should be. + # Ideally this should be integregated better into the native matching + # behavior for tree records. + def process_with_exising(self, tree_node_id: int | None) -> UploadResult: + processed = self.process_row() + # We first check if the row can be resolved to an existing Tree node, + # or a new Tree node should be created + # If the row can not be resolved to a Tree node because there is no + # data, then we check if the passed-in record has some value for the + # relationship. + # If the row can't be resolved but the record does have data through + # the relationship, then just indicate a match against the exisitng + # record which presumably isn't present in the BatchEdit Data Set. + if isinstance(processed.record_result, NullRecord) and tree_node_id is not None: + columns = [pr.column for prs in self.parsedFields.values() for pr in prs] + info = ReportInfo(tableName=self.name, columns=columns, treeInfo=None) + return UploadResult(Matched(id=tree_node_id, info=info), {}, {}) + return processed + def save_row(self, force=False) -> UploadResult: raise NotImplementedError() diff --git a/specifyweb/backend/workbench/upload/upload.py b/specifyweb/backend/workbench/upload/upload.py index 4e21550600e..1a37b1faed2 100644 --- a/specifyweb/backend/workbench/upload/upload.py +++ b/specifyweb/backend/workbench/upload/upload.py @@ -62,7 +62,7 @@ from .upload_attachments import ( has_attachments, - validate_attachment, + validate_attachments, add_attachments_to_plan, unlink_attachments, ) @@ -383,7 +383,7 @@ def do_upload( if has_attachments(row): # If there's an attachments column, add attachments to upload plan - attachments_valid, result = validate_attachment(row, upload_plan) # type: ignore + attachments_valid, result = validate_attachments(row, upload_plan) # type: ignore if not attachments_valid: results.append(result) # type: ignore cache = _cache diff --git a/specifyweb/backend/workbench/upload/upload_attachments.py b/specifyweb/backend/workbench/upload/upload_attachments.py index 410647cd0b0..8dfcd29941a 100644 --- a/specifyweb/backend/workbench/upload/upload_attachments.py +++ b/specifyweb/backend/workbench/upload/upload_attachments.py @@ -39,12 +39,12 @@ def has_attachments(row: Row) -> bool: return row.get(ATTACHMENTS_COLUMN) is not None and row.get(ATTACHMENTS_COLUMN) != "" # upload_plan can either be an UploadTable or an Uploadable (so it can be one of two types) -def validate_attachment( +def validate_attachments( row: Row, upload_plan: UploadTable ) -> Tuple[bool, Union[None, UploadResult]]: if has_attachments(row): data = get_attachments(row) - if data and isinstance(data, dict): + if data is not None and isinstance(data, dict): base_table = upload_plan.name for attachment in data.get("attachments", []): if attachment.get("id") and attachment.get("table"): @@ -62,8 +62,10 @@ def validate_attachment( return False, makeAttachmentResult('attachmentNotFound') if spdatasetattachment.attachment.tableid != Spdataset.specify_model.tableId: # type: ignore return False, makeAttachmentResult('attachmentAlreadyLinked') - - return True, None + else: + return False, makeAttachmentResult('attachmentNotFound') + # All attachments were valid + return True, None return False, makeAttachmentResult('attachmentNotFound') @@ -126,7 +128,8 @@ def add_attachments_to_plan( column=f"_ATTACHMENT_ORDINAL_{index}", matchBehavior="ignoreNever", nullAllowed=True, - default="0" + default="0", + disambiguationBehavior="ask" ) attackment_columns = {} for field in attachment_fields_to_copy: @@ -134,7 +137,8 @@ def add_attachments_to_plan( column=f"_ATTACHMENT_{field.upper()}_{index}", matchBehavior="ignoreNever", nullAllowed=True, - default=attachment_field_default(field) + default=attachment_field_default(field), + disambiguationBehavior="ask" ) attachment_uploadable = UploadTable( name="Attachment", diff --git a/specifyweb/backend/workbench/upload/upload_plan_schema.py b/specifyweb/backend/workbench/upload/upload_plan_schema.py index 3d35a7d0ae6..3cd7f748119 100644 --- a/specifyweb/backend/workbench/upload/upload_plan_schema.py +++ b/specifyweb/backend/workbench/upload/upload_plan_schema.py @@ -274,6 +274,12 @@ "default": None, "description": "When set use this value for any cells that are empty in this column.", }, + "disambiguationBehavior": { + "type": "string", + "enum": ["ask", "pickFirst"], + "default": "ask", + "description": "How to disambiguate when multiple records are matched.", + }, }, "required": ["column"], "additionalProperties": False, @@ -425,6 +431,7 @@ def parse_column_options(to_parse: str | dict) -> ColumnOptions: matchBehavior="ignoreNever", nullAllowed=True, default=None, + disambiguationBehavior="ask", ) else: return ColumnOptions( @@ -432,4 +439,5 @@ def parse_column_options(to_parse: str | dict) -> ColumnOptions: matchBehavior=to_parse.get("matchBehavior", "ignoreNever"), nullAllowed=to_parse.get("nullAllowed", True), default=to_parse.get("default", None), + disambiguationBehavior=to_parse.get("disambiguationBehavior", "ask") ) diff --git a/specifyweb/backend/workbench/upload/upload_result.py b/specifyweb/backend/workbench/upload/upload_result.py index ea6e13f0ea5..3a823697922 100644 --- a/specifyweb/backend/workbench/upload/upload_result.py +++ b/specifyweb/backend/workbench/upload/upload_result.py @@ -340,6 +340,8 @@ def contains_failure(self) -> bool: ) ) + # BUG:? Shouldn't NoChange also be considered a "success"? + # It's not a failure at least def contains_success( self, success=[Uploaded, Matched, MatchedAndChanged, Updated, Deleted] ) -> bool: diff --git a/specifyweb/backend/workbench/upload/upload_table.py b/specifyweb/backend/workbench/upload/upload_table.py index 782249c7505..3eec6a41130 100644 --- a/specifyweb/backend/workbench/upload/upload_table.py +++ b/specifyweb/backend/workbench/upload/upload_table.py @@ -6,6 +6,7 @@ from specifyweb.backend.businessrules.exceptions import BusinessRuleException from specifyweb.specify import models +from specifyweb.specify.models_utils.model_extras import ModelWithTable from specifyweb.specify.utils.func import Func from specifyweb.specify.utils.field_change_info import FieldChangeInfo from specifyweb.specify.utils.autonumbering import AutonumberingLockDispatcher @@ -359,7 +360,7 @@ def can_save(self) -> bool: return isinstance(self.current_id, int) @property - def django_model(self) -> models.ModelWithTable: + def django_model(self) -> ModelWithTable: return getattr(models, self.name.capitalize()) @property @@ -502,8 +503,8 @@ def save_row(self, force=False) -> UploadResult: else update_table.process_row_with_null() ) - def _get_reference(self, should_cache=True) -> models.ModelWithTable | None: - model: models.ModelWithTable = self.django_model + def _get_reference(self, should_cache=True) -> ModelWithTable | None: + model: ModelWithTable = self.django_model current_id = self.current_id if current_id is None: @@ -674,12 +675,21 @@ def _match( n_matched = len(ids) if n_matched > 1: + if self._disambiguation_pick_first(): + return Matched(id=ids[0], info=info) return MatchedMultiple(ids=ids, key=repr(cache_key), info=info) elif n_matched == 1: return Matched(id=ids[0], info=info) else: return None + def _disambiguation_pick_first(self) -> bool: + """Disambiguate by picking the first record if any field uses 'pickFirst'.""" + for p in self.parsedFields: + if p.filter_on and p.disambiguation_behavior == "pickFirst": + return True + return False + def _check_missing_required(self) -> ParseFailures | None: missing_requireds = [ # TODO: there should probably be a different structure for @@ -696,7 +706,7 @@ def _check_missing_required(self) -> ParseFailures | None: def _do_upload( self, - model: models.ModelWithTable, + model: ModelWithTable, to_one_results: dict[str, UploadResult], info: ReportInfo, ) -> UploadResult: @@ -743,6 +753,7 @@ def _do_upload( **( {"createdbyagent_id": self.uploadingAgentId} if model.specify_model.get_field("createdbyagent") + and "createdbyagent" not in to_one_ids else {} ), } @@ -769,7 +780,7 @@ def _do_upload( return UploadResult(record, to_one_results, to_many_results) def _handle_to_many( - self, update: bool, parent_id: int, model: models.ModelWithTable + self, update: bool, parent_id: int, model: ModelWithTable ): return { fieldname: _upload_to_manys( @@ -968,10 +979,25 @@ def _handle_row(self, skip_match: bool, allow_null: bool): return super()._handle_row(skip_match=True, allow_null=allow_null) def _process_to_ones(self) -> dict[str, UploadResult]: + needs_reference_record = any( + not uploadable.is_one_to_one() + and hasattr(uploadable, "process_with_exising") + for uploadable in self.toOne.values() + ) + reference_record = (self._get_reference(should_cache=False) + if needs_reference_record else None) return { field_name: ( to_one_def.save_row(force=(not self.auditor.props.allow_delete_dependents)) if to_one_def.is_one_to_one() + else + # REFACTOR: Clean this up + to_one_def.process_with_exising( + getattr(reference_record, field_name + "_id") + ) + if hasattr(to_one_def, "process_with_exising") + and reference_record + and hasattr(reference_record, field_name + "_id") else to_one_def.process_row() ) for field_name, to_one_def in Func.sort_by_key(self.toOne) diff --git a/specifyweb/backend/workbench/views.py b/specifyweb/backend/workbench/views.py index 153908b9561..5dc317c6a78 100644 --- a/specifyweb/backend/workbench/views.py +++ b/specifyweb/backend/workbench/views.py @@ -937,6 +937,35 @@ def upload_results(request, ds) -> http.HttpResponse: @openapi( schema={ + "get": { + "responses": { + "200": { + "description": "Returns users the dataset may be transferred to.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number", + "description": "User ID of the transfer recipient", + }, + "name": { + "type": "string", + "description": "User name of the transfer recipient", + }, + }, + "required": ["id", "name"], + "additionalProperties": False, + }, + } + } + }, + } + }, + }, "post": { "requestBody": { "required": True, @@ -1059,12 +1088,9 @@ def up_schema(request) -> http.HttpResponse: components=open_api_components, ) @login_maybe_required -@require_POST +@require_http_methods(["GET", "POST"]) def transfer(request, ds_id: int) -> http.HttpResponse: - """Transfer dataset's ownership to a different user.""" - if "specifyuserid" not in request.POST: - return http.HttpResponseBadRequest("missing parameter: specifyuserid") - + """List valid transfer recipients or transfer dataset ownership.""" ds = get_object_or_404(models.Spdataset, id=ds_id) check_permission_targets( request.specify_collection.id, @@ -1075,6 +1101,17 @@ def transfer(request, ds_id: int) -> http.HttpResponse: if ds.specifyuser != request.specify_user: return http.HttpResponseForbidden() + if request.method == "GET": + users = list( + Specifyuser.objects.exclude(id=request.specify_user.id) + .order_by("name", "id") + .values("id", "name")[:500] + ) + return http.JsonResponse(users, safe=False) + + if "specifyuserid" not in request.POST: + return http.HttpResponseBadRequest("missing parameter: specifyuserid") + try: ds.specifyuser = Specifyuser.objects.get(id=request.POST["specifyuserid"]) except Specifyuser.DoesNotExist: diff --git a/specifyweb/frontend/js_src/css/main.css b/specifyweb/frontend/js_src/css/main.css index 6f9b73d38a1..dfa4a1e1f05 100644 --- a/specifyweb/frontend/js_src/css/main.css +++ b/specifyweb/frontend/js_src/css/main.css @@ -274,9 +274,9 @@ --custom-select-b1: theme('colors.white'); --custom-select-b2: theme('colors.brand.100'); --custom-select-accent: theme('colors.brand.100'); - @apply dark:[--custom-select-accent:theme('colors.brand.500')] + @apply dark:[--custom-select-accent:theme('colors.brand.400')] dark:[--custom-select-b1:theme('colors.neutral.800')] - dark:[--custom-select-b2:theme('colors.brand.500')]; + dark:[--custom-select-b2:theme('colors.brand.400')]; } .custom-select-group-required-fields, diff --git a/specifyweb/frontend/js_src/css/workbench.css b/specifyweb/frontend/js_src/css/workbench.css index fc645696a2d..8b2717704a4 100644 --- a/specifyweb/frontend/js_src/css/workbench.css +++ b/specifyweb/frontend/js_src/css/workbench.css @@ -1,26 +1,76 @@ -@import url('../node_modules/handsontable/dist/handsontable.full.css'); +@import 'handsontable/styles/handsontable.css'; +@import 'handsontable/styles/ht-theme-classic.css'; + +.ht-theme-classic, +.ht-theme-classic-dark, +.ht-theme-classic-dark-auto { + --ht-font-family: var( + --form-font-family, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + sans-serif + ); + --ht-font-size: 100%; + --ht-font-size-small: 85%; + --ht-line-height: 18px; + --ht-line-height-small: 16px; + --ht-font-weight: 400; + --ht-header-font-weight: 500; + --ht-letter-spacing: normal; + --ht-read-only-color: theme('colors.gray.600'); + --ht-cell-read-only-background-color: theme('colors.gray.200'); + --ht-comments-indicator-color: theme('colors.black'); +} + +.handsontable .colHeader.columnSorting, +.handsontable .wb-header-name { + @apply leading-5; +} + +.handsontable .colHeader.columnSorting { + @apply inline-flex items-center gap-1 overflow-hidden whitespace-nowrap; + + position: relative; + min-width: 0; + flex-wrap: nowrap; + align-content: center; + justify-content: flex-start; +} -/* Show table icons in column headers */ -.htCore thead th > .relative { - @apply flex items-center justify-center; +/* Sorting direction */ +.handsontable .colHeader.columnSorting::before { + @apply !absolute !top-1/2 !bg-center flex-none; + + right: 0.375rem; + transform: translateY(-50%); + margin-inline-end: 0; } -.htCore .colHeader { - @apply !contents; +.handsontable .columnSorting.columnSorting.columnSorting.sortAction.ascending, +.handsontable .columnSorting.columnSorting.columnSorting.sortAction.descending { + /* Override handsontable's large padding when sorting direction is present */ + max-width: calc(100% + 1px) !important; } -.handsontable .columnSorting { - @apply leading-5; +.handsontable th .colHeader.columnSorting > span { + /* Disable column dragging when click on header title... */ + pointer-events: none; } -/* Sorting direction */ -.handsontable .columnSorting::before { - @apply !static order-2 !mt-1 !bg-center pr-1; +.handsontable th .columnSorting { + /* ...and enable column sorting when clicking on header title */ + pointer-events: auto; } /* Sorting priority index */ -.handsontable .columnSorting::after { - @apply !static order-2 !mt-2 -ml-2; +.handsontable .colHeader.columnSorting::after { + @apply !absolute !top-1/2 flex-none; + + right: 1.4rem; + transform: translateY(-50%); + content: none; + display: none; } /* Highlighted cells' headers */ @@ -51,8 +101,16 @@ @apply text-black dark:text-white; } +.handsontable .wb-unmapped-cell { + @apply !bg-gray-200 !text-gray-600 dark:!bg-neutral-700 dark:!text-neutral-300; +} + .handsontable .htDimmed { - @apply bg-gray-200 dark:bg-neutral-800; + @apply !bg-gray-200 !text-gray-600 dark:!bg-neutral-700 dark:!text-neutral-300; +} + +.handsontable tbody td { + white-space: nowrap; } /* Cell navigation */ @@ -114,10 +172,40 @@ */ .handsontable { @apply text-inherit; - font-family: inherit; + font-family: var(--form-font-family, inherit); font-size: inherit; } +.ht-root-wrapper { + font-family: var(--form-font-family, inherit); + font-size: inherit; +} + +.dark .ht-theme-classic { + color-scheme: dark; + --ht-border-color: theme('colors.neutral.500'); + --ht-foreground-color: theme('colors.neutral.100'); + --ht-foreground-secondary-color: theme('colors.neutral.400'); + --ht-background-color: theme('colors.neutral.800'); + --ht-background-secondary-color: theme('colors.neutral.900'); + --ht-placeholder-color: theme('colors.blue.500'); + --ht-read-only-color: theme('colors.neutral.300'); + --ht-cell-read-only-background-color: theme('colors.neutral.700'); + --ht-disabled-color: theme('colors.neutral.500'); + --ht-header-background-color: theme('colors.neutral.900'); + --ht-header-foreground-color: theme('colors.white'); + --ht-header-highlighted-background-color: theme('colors.neutral.800'); + --ht-header-row-background-color: theme('colors.neutral.900'); + --ht-header-row-highlighted-background-color: theme('colors.neutral.800'); + --ht-cell-editor-background-color: theme('colors.neutral.600'); + --ht-cell-editor-foreground-color: theme('colors.white'); + --ht-menu-border-color: theme('colors.neutral.500'); + --ht-menu-shadow-color: theme('colors.neutral.500'); + --ht-scrollbar-track-color: theme('colors.neutral.900'); + --ht-scrollbar-thumb-color: theme('colors.neutral.500'); + --ht-comments-indicator-color: theme('colors.white'); +} + /* Handsontable dark mode */ .handsontable td, .htContextMenu table tbody tr td { @@ -165,7 +253,7 @@ } .htCommentCell:after { - @apply dark:!border-t-white; + @apply !border-t-black dark:!border-t-white; } .handsontableInput { diff --git a/specifyweb/frontend/js_src/jest.config.ts b/specifyweb/frontend/js_src/jest.config.cjs similarity index 98% rename from specifyweb/frontend/js_src/jest.config.ts rename to specifyweb/frontend/js_src/jest.config.cjs index 973afa837bc..9c4ac108614 100644 --- a/specifyweb/frontend/js_src/jest.config.ts +++ b/specifyweb/frontend/js_src/jest.config.cjs @@ -13,8 +13,6 @@ * into JavaScript (without type checking). */ -import type { Config } from '@jest/types'; - /* eslint-disable multiline-comment-style */ /* eslint-disable capitalized-comments */ /* eslint-disable write-good-comments/write-good-comments */ @@ -23,7 +21,8 @@ import type { Config } from '@jest/types'; * https://jestjs.io/docs/configuration */ -const config: Config.InitialOptions = { +/** @type {import('@jest/types').Config.InitialOptions} */ +const config = { prettierPath: null, // All imported modules in your tests should be mocked automatically // automock: false, @@ -242,7 +241,7 @@ const config: Config.InitialOptions = { // watchman: true, }; -export default config; +module.exports = config; /* eslint-enable multiline-comment-style */ /* eslint-enable capitalized-comments */ /* eslint-enable write-good-comments/write-good-comments */ diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/Editor.tsx b/specifyweb/frontend/js_src/lib/components/AppResources/Editor.tsx index 41a2fcd560c..b3b48965c77 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/Editor.tsx +++ b/specifyweb/frontend/js_src/lib/components/AppResources/Editor.tsx @@ -1,5 +1,7 @@ import React from 'react'; import type { LocalizedString } from 'typesafe-i18n'; +import { useNavigate } from 'react-router-dom'; +import { commonText } from '../../localization/common'; import { useErrorContext } from '../../hooks/useErrorContext'; import { useLiveState } from '../../hooks/useLiveState'; @@ -100,6 +102,7 @@ export function AppResourceEditor({ readonly footer: JSX.Element | undefined; }) => JSX.Element; }): JSX.Element | null { + const navigate = useNavigate(); const appResource = React.useMemo( () => deserializeResource(resource as SerializedResource), [resource] @@ -237,6 +240,18 @@ export function AppResourceEditor({ const footer = ( <> + { + // handleClone is undefined when the editor is used in a dialog, so don't show the close button in that case + handleClone === undefined ? undefined : ( + + navigate('/specify/resources/', { replace: true }) + } + > + {commonText.close()} + + ) + } {formElement !== null && hasToolPermission( diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/TabDefinitions.tsx b/specifyweb/frontend/js_src/lib/components/AppResources/TabDefinitions.tsx index 8bd8aacc062..32576883d96 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/TabDefinitions.tsx +++ b/specifyweb/frontend/js_src/lib/components/AppResources/TabDefinitions.tsx @@ -21,6 +21,7 @@ import type { } from '../DataModel/types'; import { RssExportFeedEditor } from '../ExportFeed'; import { exportFeedSpec } from '../ExportFeed/spec'; +import { ExpressSearchConfigResourceEditor } from '../ExpressSearchConfig/ExpressSearchConfigEditor'; import { FieldFormattersEditor } from '../FieldFormatters/Editor'; import { fieldFormattersSpec } from '../FieldFormatters/spec'; import { DataObjectFormatter } from '../Formatters'; @@ -167,7 +168,10 @@ export const visualAppResourceEditors = f.store< visual: RssExportFeedEditor, xml: generateXmlEditor(exportFeedSpec), }, - expressSearchConfig: undefined, + expressSearchConfig: { + visual: ExpressSearchConfigResourceEditor, + xml: AppResourceTextEditor, + }, typeSearches: undefined, webLinks: { visual: WebLinkEditor, diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx index 76e1b3e8977..8a3280ee38c 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx @@ -70,18 +70,18 @@ describe('AppResourceEditButton', () => { const dialog = getByRole('dialog'); expect(dialog.innerHTML).toMatchInlineSnapshot(` -"

TestTitle

" -`); + "
" + `); expect(handleDeleted).not.toHaveBeenCalled(); }); diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourcesAside.test.tsx b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourcesAside.test.tsx index 3b0a26c561a..c4dd763a37c 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourcesAside.test.tsx +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourcesAside.test.tsx @@ -1,6 +1,7 @@ import React from 'react'; import * as Router from 'react-router-dom'; +import { hasPermission } from '../../Permissions/helpers'; import { requireContext } from '../../../tests/helpers'; import { mount } from '../../../tests/reactUtils'; import type { RA } from '../../../utils/types'; @@ -15,6 +16,8 @@ jest.mock('../../Permissions/helpers', () => ({ hasToolPermission: jest.fn(() => true), })); +const mockedHasPermission = hasPermission as jest.Mock; + describe('AppResourcesAside (simple no conformation case)', () => { test('simple no conformation case', () => { const onOpen = jest.fn(); @@ -41,18 +44,10 @@ describe('AppResourcesAside (simple no conformation case)', () => { */ describe('Missing Collection Preferences Permission', () => { beforeAll(() => { - jest.clearAllMocks(); - jest.mock('../../Permissions/helpers', () => ({ - hasPermission: jest.fn(() => false), - hasToolPermission: jest.fn(() => true), - })); + mockedHasPermission.mockReturnValue(false); }); afterAll(() => { - jest.clearAllMocks(); - jest.mock('../../Permissions/helpers', () => ({ - hasPermission: jest.fn(() => true), - hasToolPermission: jest.fn(() => true), - })); + mockedHasPermission.mockReturnValue(true); }); test('simple no conformation test', () => { const onOpen = jest.fn(); @@ -165,7 +160,10 @@ describe('AppResourcesAside (expanded case)', () => { const { asFragment: asFragmentAllExpanded, unmount: unmountExpandedll } = mount( - + { await user.click(appResourceButton); // This is a lot more cleaner than the inner HTML - expect(getByRole('dialog').textContent).toMatchInlineSnapshot(`"Select Resource TypeTypeDocumentationLabelDocumentationReportDocumentationDefault User PreferencesDocumentationLeaflet LayersDocumentationRSS Export FeedDocumentationExpress Search ConfigDocumentationType SearchesDocumentationWeb LinksDocumentationField FormattersDocumentationRecord FormattersDocumentationData Entry TablesDocumentationInteractions TablesDocumentationOther XML ResourceOther JSON ResourceOther Properties ResourceOther ResourceCancel"` - -); + expect(getByRole('dialog').textContent).toMatchInlineSnapshot( + `"Select Resource TypeTypeDocumentationLabelDocumentationReportDocumentationDefault User PreferencesDocumentationLeaflet LayersDocumentationRSS Export FeedDocumentationExpress Search ConfigDocumentationType SearchesDocumentationWeb LinksDocumentationField FormattersDocumentationRecord FormattersDocumentationData Entry TablesDocumentationInteractions TablesDocumentationOther XML ResourceOther JSON ResourceOther Properties ResourceOther ResourceCancel"` + ); }); test('simple Form type (mimetype undefined)', async () => { diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceDownload.test.tsx.snap b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceDownload.test.tsx.snap index 292c15a107e..46751898bc3 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceDownload.test.tsx.snap +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceDownload.test.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`AppResourceDownload simple render 1`] = ` diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceEditButton.test.tsx.snap b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceEditButton.test.tsx.snap index 4ca187a9c14..501bcf85b47 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceEditButton.test.tsx.snap +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceEditButton.test.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`AppResourceEditButton simple render 1`] = ` diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceLoad.test.tsx.snap b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceLoad.test.tsx.snap index 19648bbfc44..c1ef6e24b60 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceLoad.test.tsx.snap +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourceLoad.test.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`AppResourceLoad simple render 1`] = ` diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesAside.test.tsx.snap b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesAside.test.tsx.snap index 04acc08c687..37586285968 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesAside.test.tsx.snap +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesAside.test.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`AppResourcesAside (expanded case) expanded case 1`] = ` @@ -817,7 +817,7 @@ exports[`Missing Collection Preferences Permission simple no conformation test 1 - (4) + (3) diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesFilters.test.tsx.snap b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesFilters.test.tsx.snap index cb54620dd9f..c1e27f76c83 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesFilters.test.tsx.snap +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesFilters.test.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`AppResourcesFilters simple render 1`] = ` diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesTab.test.tsx.snap b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesTab.test.tsx.snap index 2b59062a1df..ec02fe71b3a 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesTab.test.tsx.snap +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/__snapshots__/AppResourcesTab.test.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`AppResourcesTab dialog render 1`] = `
@@ -20,6 +20,7 @@ exports[`Tabs first tab selected, and then second 1`] = ` dark:disabled:!bg-neutral-700 gap-2 inline-flex items-center capitalize justify-center shadow-sm aria-handled dialog-icon-info hover:brightness-90 dark:hover:brightness-140 bg-[color:var(--info-button-color)] text-white " + data-headlessui-state="selected" id="headlessui-tabs-tab-:r0:" role="tab" tabindex="0" @@ -28,6 +29,7 @@ exports[`Tabs first tab selected, and then second 1`] = ` tab1
+
`; @@ -73,32 +85,35 @@ exports[`Tabs first tab selected, and then second 2`] = ` role="tablist" >