20 lines
997 B
PHP
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];
|
|
}
|
|
}
|