code: public void mergeExistingAndProposed(final Collection<Item> output, final UUID targetInvoiceId) {
          build(output, targetInvoiceId, true);
      }
docs: The merge tree is initially constructed by flattening all the existing items and reversing them (CANCEL node).
  <p/>
  That means that if we were to not merge any new proposed items, we would end up with only those reversed existing
  items, and they would all end up repaired-- which is what we want.
  <p/>
  However, if there are new proposed items, then we look to see if they are children one our existing reverse items
  so that we can generate the repair pieces missing. For e.g, below is one scenario among so many:
  <p/>
  <pre>
  D1                                                  D2
  |---------------------------------------------------| (existing reversed (CANCEL) item
  D1'             D2'
  |---------------| (proposed same plan)
  </pre>
  In that case we want to generated a repair for [D1, D1') and [D2',D2)
  <p/>
  Note that this tree is never very deep, only 3 levels max, with exiting at the first level
  and proposed that are the for the exact same plan but for different dates below.
  
  @param output result list of built items