Files
SGF/app/Modules/Purchasing/PayableAge.php
T
2026-11-11 09:00:17 +02:00

20 lines
997 B
PHP

<?php
namespace App\Modules\Purchasing;
/** Classification only; balances/terms remain in their existing authoritative readers. */
final class PayableAge
{
public static function classify(array $row,?string $reference):array
{
$days=null;$bucket=null;
if($reference!==null){
if(!$row['obligation_id'])$bucket='unrecognised';
elseif($row['source_conflict']||$row['balance_minor']===null)$bucket='indeterminate';
elseif($row['balance_minor']==='0')$bucket='settled';
elseif(($due=$row['reviewed_terms']['due_on']??null)===null)$bucket='unknown';
else{$zone=new \DateTimeZone('UTC');$days=max(0,(int)(new \DateTimeImmutable($due,$zone))->diff(new \DateTimeImmutable($reference,$zone))->format('%r%a'));$bucket=$days===0?'not_due':($days<=30?'days_1_30':($days<=60?'days_31_60':($days<=90?'days_61_90':'days_over_90')));}
}
return ['reviewed_age_days'=>$days,'reviewed_age_bucket'=>$bucket];
}
}