from test_est_rea_parity import run def test_escalation_uses_design_denominator_and_all_price_branches(): result = run( "math", """(()=>{ const p=EstNative.empty();p.options.SourceRefresh=false; p.tables.EstMainDat=[{PkID:1,Code:'R',GN:10,GU:80},{LinkIndex:54}]; p.tables.Wonga=[{Gubun:'G',Name:'direct',BaseField:'GC'}, {Gubun:'T',Name:'total',LinkIndex:55,VSusic:'G'}]; const q=EstBusiness.baseline(EstNative.calculate(p)); Object.assign(q.tables.EstMainDat[0],{AGU:100,GU:120,EscPlanned:2,EscActual:3,EscProgress:1}); const before=JSON.stringify(q),output=EstBusiness.escalation(q); const cases=[[100,80,120],[80,100,120],[100,80,90],[100,80,60]].map(([a,c,b])=>{ const x=structuredClone(q);x.tables.EstMainDat[0].AGU=a;x.tables.EstMainDat[0].GU=b; x.baseline.tables.EstMainDat[0].GU=c;return EstBusiness.escalation(x).rows[0]; }); return {output,cases,same:before===JSON.stringify(q)}; })()""", ) assert result["same"] output = result["output"] assert output["errors"] == [] assert output["designTotal"] == 1000 assert output["contractTotal"] == 800 assert output["adjustedTotal"] == 960 assert output["excludedTotal"] == 240 assert output["applied"] == 560 assert output["rate"] == 16 assert output["adjustment"] == 89 assert [row["EGU"] for row in result["cases"]] == [16, 20, 0, 0] def test_native_contract_columns_and_manual_exclusions_and_percent_units(): result = run( "math", """(()=>{ const p=EstNative.empty();p.options.SourceRefresh=false; p.tables.EstMainDat=[{PkID:1,Code:'R',GN:50,GN_:50,Unite:'%',GU:120,GU_:80,AGU:100, EscAuto:false,EscManualQuantity:10,EscPlanned:40},{LinkIndex:54}]; return EstBusiness.escalation(p); })()""", ) assert result["errors"] == [] assert result["rows"][0]["EscExcluded"] == 10 assert result["rows"][0]["EscApplied"] == 40 assert result["rows"][0]["GC"] == 48 assert result["contractTotal"] == 40 assert result["excludedTotal"] == 8 assert result["designTotal"] == 50 def test_fixed_contract_amount_excludes_only_the_selected_quantity(): result = run( "math", """(()=>{ const p=EstNative.empty();p.options.SourceRefresh=false; p.tables.EstMainDat=[{PkID:1,Code:'R',GN:10,GC:1000,TC:1000,CalcIndex:1,EscActual:3}, {LinkIndex:54}];p.options.EscDesignTotal=1200; return EstBusiness.escalation(p); })()""", ) assert result["errors"] == [] assert result["contractTotal"] == 1000 assert result["excludedTotal"] == 300 assert result["applied"] == 700 assert result["rate"] == 0 def test_contract_and_bid_file_import_follow_native_record_order_and_preserve_working_file(): result = run( "math", """(()=>{ const p=EstNative.empty();p.id='123456789012345678901234';p.options.SourceRefresh=false; p.tables.EstMainDat=[{PkID:7,Code:'R',GN:10,GU:120},{PkID:8,LinkIndex:54}]; const incoming=structuredClone(p);incoming.name='contract'; incoming.tables.EstMainDat[0].PkID=1;incoming.tables.EstMainDat[0].GU=80; const before=JSON.stringify(p),q=EstBusiness.importContract(p,incoming); incoming.tables.EstMainDat[0].GU=100; const r=EstBusiness.importBid(q,incoming); const output=EstBusiness.escalation(r); incoming.tables.EstMainDat[0].Code='different';let rejected=false; try{EstBusiness.importContract(p,incoming);}catch{rejected=true;} return {r,output,rejected,same:before===JSON.stringify(p)}; })()""", ) assert result["same"] and result["rejected"] assert result["r"]["id"] == "123456789012345678901234" assert result["r"]["tables"]["EstMainDat"][0]["GU"] == 120 assert result["r"]["baseline"]["tables"]["EstMainDat"][0]["PkID"] == 7 assert result["output"]["contractTotal"] == 800 assert result["output"]["designTotal"] == 1000 assert result["output"]["rate"] == 16