<?php
$out=[];$prepared=['CODE','NAME','TYPE','PRINT_RECEIPT','SN','RESTAURANT_ID','STATUS','DEL_FLAG','MATE_FLAG','HEARTTIME','CREATE_TIME','CREATE_BY','UPDATE_TIME','UPDATE_BY'];
foreach(['B','C']as $lane){$h=fopen('/tmp/cdx-prepay-code-scan-fresh-'.$lane.'-evidence-20261011/events.jsonl','r');$records=[];while(($line=fgets($h))!==false){$e=json_decode($line,true);if(($e['event']??'')==='original-read-result')$records[$e['statement']['label']]=$e['rows'];}fclose($h);
 $table=$lane==='C'?'YDY_EQUIPMENT':'ydy_equipment';$cols=array_values(array_filter($records['schema.columns'],static function($r)use($table){return $r['table_name']===$table;}));$ddl=$records['schema.ddl.'.$table][0][$lane==='C'?'ddl':'create table'];$idLine=null;foreach(explode("\n",$ddl)as $line)if(preg_match('/^\s*[`"]id[`"]\s/i',$line))$idLine=trim($line);
 $pk=array_values(array_filter($records['schema.constraints'],static function($r)use($lane,$table){return $r['table_name']===$table&&($lane==='C'?$r['constraint_type']==='P':$r['constraint_type']==='PRIMARY KEY');}));$defaults=[];
 foreach($cols as $c){$name=strtoupper($c['column_name']);if(in_array($name,$prepared,true)||$name==='ID')continue;$value=$c[$lane==='C'?'data_default':'column_default'];$defaults[]=['column'=>$name,'physical_type'=>$c['data_type'],'nullable'=>$c[$lane==='C'?'nullable':'is_nullable'],'default_native_type'=>gettype($value),'default_is_null'=>$value===null,'default_sha256'=>$value===null?null:hash('sha256',(string)$value)];}
 $index=array_values(array_filter($records['schema.indexes'],static function($r)use($table){return $r['table_name']===$table;}));$out[$lane]=['actual_equipment_columns'=>count($cols),'ID_declaration_actual'=>$idLine,'primary_constraint'=>$pk,'indexes_sha256'=>hash('sha256',json_encode($index,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRESERVE_ZERO_FRACTION)),'omitted_total'=>17,'omitted_ID_auto'=>1,'omitted_nonID_defaults'=>count($defaults),'default_descriptors'=>$defaults,'unknown_omitted_required'=>[]];
 if(count($cols)!==31||count($pk)!==1||count($defaults)!==16||$idLine===null||(stripos($idLine,'AUTO_INCREMENT')===false&&preg_match('/\bIDENTITY\s*\(/i',$idLine)!==1))throw new RuntimeException('Actual PK-auto/default proof incomplete '.$lane.' '.json_encode(['columns'=>count($cols),'pk'=>count($pk),'defaults'=>count($defaults),'IDlineFound'=>$idLine!==null]));
}
echo json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRESERVE_ZERO_FRACTION)."\n";
