<?php
function expectReader($label,$snapshot){global $runtime;$w1=$label==='R1_WELLAND_BY_DATE';$vendor=$w1?'welland':'yunkangbao';$sessions=array_values(array_filter($snapshot['sessions'],static function($s)use($vendor){return $s['vendor']===$vendor;}));ck(count($sessions)===1,'Exactly one independent own session for frozen sample');$s=$sessions[0];$id=$s['session_id'];$raw=array_values(array_filter($snapshot['raw'],static function($r)use($id){return $r['session_id']===$id;}));$rows=array_values(array_filter($snapshot['records'],static function($r)use($id){return $r['session_id']===$id;}));ck(count($raw)===1&&count($rows)===3,'Exactly full raw/three metric rows');$payload=json_decode(file_get_contents($runtime.'/expected-literals.json'),true)[$w1?'W1_WELLAND_ADD':'W2_YUNKANGBAO_ADD'];ck($raw[0]['data']===$payload['raw_json_bytes'],'Original full raw JSON exact bytes');$summary=[];foreach($rows as $i=>$row){$code=['weight','height','bmi'][$i];ck($row['metric_code']===$code,'Original records/summary source array order');$summary[$code]=['value'=>(float)$payload['form'][$code],'unit'=>['weight'=>'kg','height'=>'cm','bmi'=>null][$code]];}return ['session_id'=>(int)$id,'measured_at'=>$s['start_time'],'vendor'=>$vendor,'device_type'=>'body_scale','algorithm_vendor'=>$vendor,'algorithm_version'=>'CDXSCALE11S1','summary'=>$summary,'segments'=>[],'raw'=>$payload['form'],'bmi_cn'=>'标准'];}
function checkDTO($label,$r,$snapshot){$d=json_decode($r['raw_response_body'],true,512,JSON_THROW_ON_ERROR);ck($r['http_status']===200&&array_keys($d)===['status','message','data','trace_id']&&$d['status']===200&&is_string($d['trace_id'])&&preg_match('/^[0-9a-f]{13}$/D',$d['trace_id']),'Complete original envelope');$writer=strpos($label,'W')===0;$message=$writer?($label==='W1_WELLAND_ADD'?'体脂秤数据上传成功':'云康宝体脂秤数据上传成功'):'ok';$want=$writer?[]:expectReader($label,$snapshot);ck($d['message']===$message&&json_encode($d['data'],JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)===json_encode($want,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),'Whole original typed/ordered source DTO');saveOnce('oracle-'.$label.'.json',['expected_message'=>$message,'expected_data'=>$want,'full_typed_ordered_DTO'=>true,'Welland_sql_vendor_filter'=>'commented_out_not_claimed_isolated']);}
