"""Original three-way field comparison; no HTTP server or general merge engine."""
def merge(base,local,current):
    result={};conflicts=[]
    assert set(base)==set(local)==set(current)
    for key in base:
        if local[key]==base[key]:result[key]=current[key]
        elif current[key]==base[key] or current[key]==local[key]:result[key]=local[key]
        else:conflicts.append(key)
    return result,conflicts

base={'amountMinor':50000,'currency':'GBP','internalNote':'review'}
current={**base,'amountMinor':60000}
local={**base,'internalNote':'finance reviewed'}
merged,conflicts=merge(base,local,current)
assert merged['amountMinor']==60000
assert merged['internalNote']=='finance reviewed'
assert conflicts==[]
changed={**base,'amountMinor':55000}
_,conflicts=merge(base,changed,current)
assert conflicts==['amountMinor']
merged,conflicts=merge(base,current,current)
assert merged==current and conflicts==[]
# Disjoint field edits can still alter coupled business meaning.
local_currency={**base,'currency':'USD'}
merged,conflicts=merge(base,local_currency,current)
assert conflicts==[] and merged['amountMinor']==60000 and merged['currency']=='USD'
print('6/6 comparison assertions passed; disjoint amount/currency changes still require domain review.')
print('Independent note merge:',merge(base,local,current))
print('Amount conflict:',merge(base,changed,current))
print('Coupled-field warning:',merge(base,local_currency,current))
