Oihana PHP System

CustomerReceivables extends Statistics uses CustomerReceivablesTrait, CustomerStatisticsTrait, HasReceivables, HasReceivablesTrait

What one customer owes and is late with, at one date.

A Statistics record whose subject is a Customer, carrying the figures of HasReceivables : the amount past due, split by how long it has been late, the part of it in doubt, how late the oldest piece is and how many pieces there are. Its Statistics::$direction is a sale — the operator is the creditor.

🔑 A snapshot, not a year. Every other family describes a year of trade cut month by month ; this one describes a debt as it stood on one day, named by CustomerReceivables::$observationDate. It carries no Statistics::$year and no Statistics::$observationPeriod — both are left unset and never serialized —, and each of its measures holds a value and never a values. A new reading replaces the previous one.

🔑 The three dimensions are the ones the customer had when the record was written, copied from the customer rather than joined at read time, exactly as CustomerStatistics does : who holds the account (CustomerReceivables::$assignedSeller), which point of sale serves it (CustomerReceivables::$assignedPOS) and what kind of customer it is (CustomerReceivables::$category). They are what lets a reader group a portfolio, a branch or a kind of customer — the group's own companies, for one — without walking back to the customer for every figure.

⚠️ And they are a photograph. The record credits the debt to whoever holds the account now — the one who will chase it —, not to whoever made the sale. A customer reassigned takes its late payments along at the next reading.

What it is not : a statement of account. A Statement lists the pieces that moved an account over a period ; this record sums what is late, and names no piece.

The amounts are those of the books, tax included.

Tags
author

Marc Alcaraz (eKameleon)

since
1.5.0

Table of Contents

Constants

ABOUT  : string = 'about'
ASSIGNED_COMPANY  : string = 'assignedCompany'
ASSIGNED_POS  : string = 'assignedPOS'
ASSIGNED_SELLER  : string = 'assignedSeller'
CATEGORY  : string = 'category'
CONTEXT  : string = \xyz\oihana\schema\constants\Oihana::SCHEMA
The @context of the json-ld representation of the thing.
DAYS_LATE  : string = 'daysLate'
DIRECTION  : string = 'direction'
DOUBTFUL  : string = 'doubtful'
JSON_PRIORITY_KEYS  : array<string|int, mixed> = [\org\schema\constants\Schema::AT_TYPE, \org\sc...
Defines the priority order of keys when serializing the object to JSON-LD.
NUMBER_OF_DOCUMENTS  : string = 'numberOfDocuments'
OBSERVATION_DATE  : string = 'observationDate'
OBSERVATION_PERIOD  : string = 'observationPeriod'
OVERDUE  : string = 'overdue'
OVERDUE_1_TO_30  : string = 'overdue1To30'
OVERDUE_31_TO_60  : string = 'overdue31To60'
OVERDUE_61_TO_90  : string = 'overdue61To90'
OVERDUE_OVER_90  : string = 'overdueOver90'
YEAR  : string = 'year'

Properties

$_from  : string|null
The metadata to indicates the edge 'from' identifier.
$_id  : null|string
The metadata identifier of the item.
$_key  : null|string
The metadata unique key identifier of the thing.
$_rev  : null|string
The metadata revision value of the thing.
$_to  : string|null
The metadata to indicates the edge 'to' identifier.
$about  : null|int|string|array<string|int, mixed>|Thing
The customer this debt is owed by.
$active  : bool|null
The visibility flag.
$additionalType  : array<string|int, mixed>|string|null|object
An additionalType for the item.
$alternateName  : string|object|array<string|int, mixed>|null
An alias for the item.
$assignedCompany  : null|int|string|array<string|int, mixed>|Organization
The company these figures were measured for.
$assignedPOS  : null|int|string|array<string|int, mixed>|Warehouse
The point of sale the customer is served by.
$assignedSeller  : null|int|string|array<string|int, mixed>|Person
The salesperson the customer is attached to — the one who chases the debt.
$category  : null|string|array<string|int, mixed>|DefinedTerm
The kind of customer this is.
$created  : null|string
Date of creation of the resource.
$daysLate  : null|array<string|int, mixed>|ObservationSeries
How late the oldest piece past due is, in days, at the date the figures were read.
$description  : string|object|array<string|int, mixed>|null
A short description of the item.
$direction  : null|string|BusinessDocumentDirection
Which side of the trade these figures were measured on — sales or purchases, from the operator's point of view.
$disambiguatingDescription  : string|null
A sub property of description. A short description of the item used to disambiguate from other, similar items. Information from other properties (in particular, name) may be necessary for the description to be useful for disambiguation.
$doubtful  : null|array<string|int, mixed>|ObservationSeries
The part of {@see HasReceivables::$overdue} booked on doubtful accounts — the pieces the books have moved out of the customer's ordinary account because their recovery is in doubt.
$hasPart  : string|Thing|array<string|int, Thing>|null
Indicates an item that this part of this item.
$id  : null|int|string
The unique identifier of the item.
$identifier  : string|null
The identifier of the item.
$image  : string|ImageObject|array<string|int, ImageObject|string>|null
The image reference of this resource.
$isPartOf  : string|Thing|array<string|int, Thing>|null
Indicates an item that this item is part of.
$license  : string|object|null
A legal document giving official permission to do something with the resource.
$mainEntityOfPage  : string|null
Indicates a page (or other CreativeWork) for which this thing is the main entity being described.
$modified  : null|string
Date on which the resource was changed.
$name  : int|string|null
The name of the item.
$numberOfDocuments  : null|int
How many pieces past due make up {@see HasReceivables::$overdue}, credit notes included.
$observationDate  : null|string
The date the figures were read at, as an ISO 8601 date (`2026-09-22`).
$observationPeriod  : null|string
The step the series inside this record are cut at, as an ISO 8601 duration — `P1M` for one value a month, `P1W` a week, `P1D` a day.
$overdue  : null|array<string|int, mixed>|ObservationSeries
What is owed and past its due date, at the date the figures were read : the sum of the balances of the pieces not settled whose due date has passed, credit notes deducted.
$overdue1To30  : null|array<string|int, mixed>|ObservationSeries
The part of {@see HasReceivables::$overdue} due between 1 and 30 days ago.
$overdue31To60  : null|array<string|int, mixed>|ObservationSeries
The part of {@see HasReceivables::$overdue} due between 31 and 60 days ago.
$overdue61To90  : null|array<string|int, mixed>|ObservationSeries
The part of {@see HasReceivables::$overdue} due between 61 and 90 days ago.
$overdueOver90  : null|array<string|int, mixed>|ObservationSeries
The part of {@see HasReceivables::$overdue} due more than 90 days ago.
$owner  : null|string|Thing
The owner of this Thing.
$potentialAction  : array<string|int, mixed>|Action|null
Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role.
$publisher  : string|array<string|int, string|Person|Organization>|Person|Organization|null
The publisher of the resource.
$sameAs  : string|array<string|int, mixed>|null
URL of a reference Web page that unambiguously indicates the item's identity.
$subjectOf  : null|string|array<string|int, mixed>|CreativeWork|Event
A CreativeWork or Event about this Thing.
$url  : int|string|null
URL of the item.
$year  : null|int
The calendar year these figures cover.
$atContext  : string|null
The JSON-LD `@context` value.
$atType  : string|null
The JSON-LD `@type` value.
$DEFAULT_JSON_SERIALIZE_OPTIONS  : array<string|int, mixed>
The default static jsonSerialize options (class-level configuration).
$schemaTypeCache  : array<string, string>
Internal cache for resolved schema types.

Methods

__construct()  : mixed
Constructor to hydrate public properties from an array or stdClass.
getJsonSerializeOptions()  : array<string|int, mixed>
Returns the default JSON serialization options.
getSchemaType()  : string
Returns the fully qualified URI of the schema type.
jsonSerialize()  : array<string|int, mixed>
Serializes the current object into a JSON-LD array.
withAtContext()  : $this
Sets the internal JSON-LD `@context` attribute.
withAtType()  : $this
Sets the internal JSON-LD `@type` attribute.
withJSONLDMeta()  : $this
Initializes both JSON-LD metadata: `@type` and `@context`.

Constants

CONTEXT

The @context of the json-ld representation of the thing.

public string CONTEXT = \xyz\oihana\schema\constants\Oihana::SCHEMA

JSON_PRIORITY_KEYS

Defines the priority order of keys when serializing the object to JSON-LD.

public array<string|int, mixed> JSON_PRIORITY_KEYS = [\org\schema\constants\Schema::AT_TYPE, \org\schema\constants\Schema::AT_CONTEXT, \org\schema\constants\Schema::_KEY, \org\schema\constants\Schema::_FROM, \org\schema\constants\Schema::_TO, \org\schema\constants\Schema::ID, \org\schema\constants\Schema::NAME, \org\schema\constants\Schema::URL, \org\schema\constants\Schema::CREATED, \org\schema\constants\Schema::MODIFIED]

Keys listed here will always appear first in the serialized array, in the order specified. All remaining public properties will be sorted alphabetically after these priority keys.

This ensures that important JSON-LD metadata and system fields (like @type, @context, _key, id, url, created, modified, etc.) appear at the top of the output for consistency and readability.

Usage:

$orderedKeys = self::JSON_PRIORITY_KEYS;

Notes:

  • Can be overridden in a subclass by redefining the constant.
  • Late static binding (static::JSON_PRIORITY_KEYS) allows child classes to modify the serialization order.

List of JSON-LD keys in priority order.

Properties

$_from

The metadata to indicates the edge 'from' identifier.

public string|null $_from

$_id

The metadata identifier of the item.

public null|string $_id

$_key

The metadata unique key identifier of the thing.

public null|string $_key

$_rev

The metadata revision value of the thing.

public null|string $_rev

$_to

The metadata to indicates the edge 'to' identifier.

public string|null $_to

$about

The customer this debt is owed by.

public null|int|string|array<string|int, mixed>|Thing $about

Redeclares Statistics::$about with the same union, to name the subject : a stored row is read back as a Customer, a bare code is left as read.

Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\organizations\Customer::class

$active

The visibility flag.

public bool|null $active

$additionalType

An additionalType for the item.

public array<string|int, mixed>|string|null|object $additionalType

$alternateName

An alias for the item.

public string|object|array<string|int, mixed>|null $alternateName

$assignedCompany

The company these figures were measured for.

public null|int|string|array<string|int, mixed>|Organization $assignedCompany

A code, or the resolved organization. Statistics are commonly kept per legal entity as well as consolidated over all of them ; keeping the entity on the record is what lets a reader tell one from the other, and what a consumer scopes a reader's perimeter by.

Reuses the name, the shape and the meaning Customer::$assignedCompany already carries.

Tags
since
1.4.0

$assignedPOS

The point of sale the customer is served by.

public null|int|string|array<string|int, mixed>|Warehouse $assignedPOS

A code, or the resolved warehouse. Reuses the name, the shape and the meaning Customer::$assignedPOS already carries.

Tags
since
1.5.0

$assignedSeller

The salesperson the customer is attached to — the one who chases the debt.

public null|int|string|array<string|int, mixed>|Person $assignedSeller

A code, or the resolved person. Reuses the name, the shape and the meaning Customer::$assignedSeller already carries.

Tags
since
1.5.0

$category

The kind of customer this is.

public null|string|array<string|int, mixed>|DefinedTerm $category

A code, or the resolved term. Reuses the name, the shape and the meaning Company::$category already carries. It is what lets a reader set aside the debts of a kind of customer — the operator's own companies, typically, whose late payments are not a risk of the same nature.

Tags
since
1.5.0

$created

Date of creation of the resource.

public null|string $created

$daysLate

How late the oldest piece past due is, in days, at the date the figures were read.

public null|array<string|int, mixed>|ObservationSeries $daysLate

One figure for the whole record — the longest wait, not an average —, with the UN/CEFACT day code DAY as its unit. Absent when nothing is past due. A maximum, never a sum : see HasReceivables.

Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$description

A short description of the item.

public string|object|array<string|int, mixed>|null $description

$direction

Which side of the trade these figures were measured on — sales or purchases, from the operator's point of view.

public null|string|BusinessDocumentDirection $direction

The same enumeration, the same name and the same meaning as BusinessDocument::$direction : a figure and the document it was computed from say it the same way.

Tags
since
1.4.0

$disambiguatingDescription

A sub property of description. A short description of the item used to disambiguate from other, similar items. Information from other properties (in particular, name) may be necessary for the description to be useful for disambiguation.

public string|null $disambiguatingDescription

$doubtful

The part of {@see HasReceivables::$overdue} booked on doubtful accounts — the pieces the books have moved out of the customer's ordinary account because their recovery is in doubt.

public null|array<string|int, mixed>|ObservationSeries $doubtful

A part of overdue, never an addition to it : doubtful ≤ overdue. Absent when nothing is booked that way.

Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$hasPart

Indicates an item that this part of this item.

public string|Thing|array<string|int, Thing>|null $hasPart

$id

The unique identifier of the item.

public null|int|string $id

$identifier

The identifier of the item.

public string|null $identifier

$isPartOf

Indicates an item that this item is part of.

public string|Thing|array<string|int, Thing>|null $isPartOf

$license

A legal document giving official permission to do something with the resource.

public string|object|null $license

$mainEntityOfPage

Indicates a page (or other CreativeWork) for which this thing is the main entity being described.

public string|null $mainEntityOfPage

$modified

Date on which the resource was changed.

public null|string $modified

$name

The name of the item.

public int|string|null $name

$numberOfDocuments

How many pieces past due make up {@see HasReceivables::$overdue}, credit notes included.

public null|int $numberOfDocuments

A plain count, not a measure : it has no unit and no series, and it adds up across records the way StatisticsSummary::$numberOfItems counts records. It tells one large invoice from fifteen small ones, which are not chased the same way.

Tags
since
1.5.0

$observationDate

The date the figures were read at, as an ISO 8601 date (`2026-09-22`).

public null|string $observationDate

The figures are true on that day and on no other. Same term, same format as Observation::$observationDate, which every measure of this record could carry on its own ; stated once here instead, since a snapshot reads all of them on the same day.

Not to be confused with modified, which says when the record was written down : the two usually coincide, and only this one says which day the books were read on when they do not.

Tags
since
1.5.0

$observationPeriod

The step the series inside this record are cut at, as an ISO 8601 duration — `P1M` for one value a month, `P1W` a week, `P1D` a day.

public null|string $observationPeriod

Stated on the record rather than on each measure : every series of a given record is cut the same way, and saying it twelve times is twelve chances to disagree. Same term, same format as Observation::$observationPeriod.

Tags
since
1.4.0

$overdue

What is owed and past its due date, at the date the figures were read : the sum of the balances of the pieces not settled whose due date has passed, credit notes deducted.

public null|array<string|int, mixed>|ObservationSeries $overdue

Not what is due later, not what a bill of exchange awaiting acceptance covers, not what is settled. The sum of the four buckets, to the cent.

Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$overdue1To30

The part of {@see HasReceivables::$overdue} due between 1 and 30 days ago.

public null|array<string|int, mixed>|ObservationSeries $overdue1To30
Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$overdue31To60

The part of {@see HasReceivables::$overdue} due between 31 and 60 days ago.

public null|array<string|int, mixed>|ObservationSeries $overdue31To60
Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$overdue61To90

The part of {@see HasReceivables::$overdue} due between 61 and 90 days ago.

public null|array<string|int, mixed>|ObservationSeries $overdue61To90
Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$overdueOver90

The part of {@see HasReceivables::$overdue} due more than 90 days ago.

public null|array<string|int, mixed>|ObservationSeries $overdueOver90
Tags
since
1.5.0
Attributes
#[HydrateAs]
\xyz\oihana\schema\statistics\ObservationSeries::class

$owner

The owner of this Thing.

public null|string|Thing $owner

Represents any entity (person, organization, system, or other object) that can be considered the possessor of this Thing.

$potentialAction

Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role.

public array<string|int, mixed>|Action|null $potentialAction

$sameAs

URL of a reference Web page that unambiguously indicates the item's identity.

public string|array<string|int, mixed>|null $sameAs

E.g. the URL of the item's Wikipedia page, Wikidata entry, or official website.

$subjectOf

A CreativeWork or Event about this Thing.

public null|string|array<string|int, mixed>|CreativeWork|Event $subjectOf

$url

URL of the item.

public int|string|null $url

$year

The calendar year these figures cover.

public null|int $year

An integer : a year is compared, sorted and grouped far more often than it is printed, and 2025 does all three without a cast. The wider period a record covers, when it is not a plain year, belongs to temporalCoverage on whatever publishes it — not here.

Tags
since
1.4.0

$atContext

The JSON-LD `@context` value.

protected string|null $atContext = null

Default is https://schema.org.

$atType

The JSON-LD `@type` value.

protected string|null $atType = null

This can be manually set or automatically inferred from the class name.

$DEFAULT_JSON_SERIALIZE_OPTIONS

The default static jsonSerialize options (class-level configuration).

protected static array<string|int, mixed> $DEFAULT_JSON_SERIALIZE_OPTIONS = []

$schemaTypeCache

Internal cache for resolved schema types.

private static array<string, string> $schemaTypeCache = []

Methods

__construct()

Constructor to hydrate public properties from an array or stdClass.

public __construct([array<string|int, mixed>|object|null $init = null ]) : mixed

This allows objects to be quickly populated with associative data without manually setting each property.

Parameters
$init : array<string|int, mixed>|object|null = null

A data array or object used to initialize the instance. Keys must match public property names.

Tags
throws
ReflectionException
example
use org\schema\Person;
use org\schema\constants\Prop;

$person = new Person
([
    Prop::NAME => 'Jane Doe',
    Prop::URL  => 'https://example.com/janedoe'
]);

echo $person->name; // Outputs: Jane Doe

getJsonSerializeOptions()

Returns the default JSON serialization options.

public getJsonSerializeOptions() : array<string|int, mixed>

This method determines how the jsonSerialize() output is reduced or compressed, etc. It can be overridden in child classes to customize serialization behavior.

Return values
array<string|int, mixed> —

Returns the reduction/compression options for JSON serialization.

getSchemaType()

Returns the fully qualified URI of the schema type.

public static getSchemaType() : string

This method combines the class's CONTEXT constant with its short name to produce a globally unique identifier for the entity type.

  • It uses Late Static Binding to ensure the correct context is retrieved even when called from an inherited class (e.g., Corporation vs. Affiliate).
  • Performance Optimization: Results are stored in a static cache ($schemaTypeCache) to avoid redundant Reflection calls during the same execution lifecycle.
Return values
string —

The absolute URI of the type (e.g., "https://schema.org/Thing"). ** @example

echo Thing::getSchemaType();      // https://schema.org/Thing
echo Affiliate::getSchemaType();  // https://schema.oihana.xyz/Pagination

jsonSerialize()

Serializes the current object into a JSON-LD array.

public jsonSerialize() : array<string|int, mixed>

Includes public properties, the JSON-LD @context and @type. Null values are automatically removed.

Tags
throws
ReflectionException

If reflection fails when accessing properties.

example
use org\schema\Person;
use org\schema\constants\Prop;

$person = new Person
([
    Prop::NAME => 'John Smith',
    Prop::ID   => 'jsmith-001'
]);

echo json_encode($person, JSON_PRETTY_PRINT);

Output:

{
   "@type": "Person",
   "@context": "https://schema.org",
   "id": "jsmith-001",
   "name": "John Smith"
}
Return values
array<string|int, mixed> —

JSON-LD representation of the object.

withAtContext()

Sets the internal JSON-LD `@context` attribute.

public withAtContext(string $context) : $this

Useful if you need a custom JSON-LD context.

Parameters
$context : string

Optional JSON-LD context.

Return values
$this

withAtType()

Sets the internal JSON-LD `@type` attribute.

public withAtType(string $type) : $this

Allows overriding the default type inferred from the class.

Parameters
$type : string

Optional JSON-LD type

Return values
$this

withJSONLDMeta()

Initializes both JSON-LD metadata: `@type` and `@context`.

public withJSONLDMeta([string|null $atType = null ][, string|null $atContext = null ]) : $this

Can be called from constructor or later to override default values.

Parameters
$atType : string|null = null

Optional JSON-LD type

$atContext : string|null = null

Optional JSON-LD context

Return values
$this
On this page

Search results