anchor.diff:  [source:groovy]
   .Validate New Element Placement groovy
   ----
  -   protected List<String> validateNewElementPlacement(TreeVersionElement parentElement, TaxonData taxonData) {
  -
  -        TreeVersion treeVersion = parentElement.treeVersion
  -
  -        List<String> warnings = checkNameValidity(taxonData)   // test 1
  -        checkInstanceOnTree(taxonData, treeVersion)            // test 2
  -        checkNameAlreadyOnTree(taxonData, treeVersion)         // test 3
  -
  -        NameRank taxonRank = NameRank.findByName(taxonData.rank)
  -        NameRank parentRank = NameRank.findByName(parentElement.treeElement.rank)
  -
  -        //is rank below parent                                 // test 4
  -        if (!RankUtils.rankHigherThan(parentRank, taxonRank)) {
  -            throw new BadArgumentsException("Name $taxonData.simpleName of rank $taxonRank.name is not below rank $parentRank.name of $parentElement.treeElement.simpleName.")
  -        }
  -
  -        //polynomials must be placed under parent              // test 5
  -        checkPolynomialsBelowNameParent(taxonData.simpleName, taxonData.excluded, taxonRank, parentElement.namePath.split('/'))
  -        checkSynonymsOfThisTaxonNotOnTree(taxonData, treeVersion) // test 6
  -        checkForExistingSynonyms(taxonData, treeVersion, [])      // test 7
  -
  -        return warnings
  +    protected List<String> validateNewElementPlacement(TreeVersionElement parentElement, TaxonData taxonData) {
  +
  +       TreeVersion treeVersion = parentElement.treeVersion
  +
  +(1)    List<String> warnings = checkNameValidity(taxonData)
  +
  +       NameRank taxonRank = NameRank.findByName(taxonData.rank)
  +       NameRank parentRank = NameRank.findByName(parentElement.treeElement.rank)
  +
  +       //is rank below parent
  +(2)    if (!RankUtils.rankHigherThan(parentRank, taxonRank)) {
  +           throw new BadArgumentsException("Name $taxonData.simpleName of rank $taxonRank.name is not below rank $parentRank.name of $parentElement.treeElement.simpleName.")
  +       }
  +
  +       //polynomials must be placed under parent
  +(3)    checkPolynomialsBelowNameParent(taxonData.simpleName, taxonData.excluded, taxonRank, parentElement.namePath.split('/'))
  +
  +(4)    checkInstanceIsNotOnTheTree(taxonData, treeVersion)
  +(5)    checkNameIsNotOnTheTree(taxonData, treeVersion)
  +(6)    checkNameNotAnExistingSynonym(taxonData, treeVersion, [])
  +(7)    checkSynonymsOfNameNotOnTheTree(taxonData, treeVersion)
  +(8)    checkSynonymsAreNotSynonymsOnTheTree(taxonData, treeVersion, [])
  +
  +       return warnings
       }
   
   ----
  
positive.code: 
  Can't place this concept - synonym Woodwardia aspera (R.Br.) Mett. is part of accepted concept
  Doodia aspera R.Br.CHAH (2014), Australian Plant Census
  
negative.code: = Tree Placement and Editing Rules
  v1.0, March 2018
  :imagesdir: resources/images/
  :toc: left
  