定制 noith/fiscal-receipt 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

noith/fiscal-receipt

Composer 安装命令:

composer require noith/fiscal-receipt

包简介

DTO, enums, serialization and validation for Russian fiscal receipts FFD 1.05 and 1.2.

README 文档

README

PHP-библиотека с DTO, enum, value object, сериализацией и валидацией кассовых чеков для российских форматов ФФД 1.05 и ФФД 1.2.

Возможности

  • DTO для черновиков чеков и фискализированных чеков.
  • Общие value object для денег, количества, ИНН, контактов, ФН, РН ККТ и UInt64.
  • Enum для типов оплаты, предметов расчета, ставок НДС, систем налогообложения и операций.
  • JSON/array-сериализация чеков.
  • Парсинг JSON фискализированных чеков обратно в DTO.
  • Валидация ФЛК для ФФД 1.05 и ФФД 1.2.

Требования

  • PHP 8.2+
  • Composer

Установка

composer require noith/fiscal-receipt

Для разработки:

composer install
composer test

Быстрый старт: ФФД 1.05

<?php

use FiscalReceipt\Common\Enum\OperationType;
use FiscalReceipt\Common\Enum\PaymentMethod;
use FiscalReceipt\Common\Enum\PaymentObject;
use FiscalReceipt\Common\Enum\TaxationType;
use FiscalReceipt\Common\Enum\VatRate;
use FiscalReceipt\Common\Value\Money;
use FiscalReceipt\Common\Value\Quantity;
use FiscalReceipt\Ffd105\Dto\PaymentBreakdown;
use FiscalReceipt\Ffd105\Dto\ReceiptDraft;
use FiscalReceipt\Ffd105\Dto\ReceiptItem;
use FiscalReceipt\Ffd105\Enum\DocumentType;
use FiscalReceipt\Ffd105\Serialization\ReceiptDraftSerializer;

$item = new ReceiptItem(
    price: new Money(10_000),          // 100.00 RUB в копейках
    quantity: new Quantity(1.0),
    sum: new Money(10_000),
    vatRate: VatRate::Vat20,
    name: 'Товар',
    paymentMethod: PaymentMethod::FullPayment,
    paymentObject: PaymentObject::Commodity,
);

$receipt = new ReceiptDraft(
    documentType: DocumentType::Receipt,
    operationType: OperationType::Income,
    taxationType: TaxationType::Osn,
    payments: PaymentBreakdown::electronicOnly(new Money(10_000)),
    items: [$item],
    internetPayment: true,
);

$json = (new ReceiptDraftSerializer())->toJson($receipt);

Быстрый старт: ФФД 1.2

<?php

use FiscalReceipt\Common\Enum\OperationType;
use FiscalReceipt\Common\Enum\PaymentMethod;
use FiscalReceipt\Common\Enum\PaymentObject;
use FiscalReceipt\Common\Enum\QuantityMeasure;
use FiscalReceipt\Common\Enum\TaxationType;
use FiscalReceipt\Common\Enum\VatRate;
use FiscalReceipt\Common\Value\Money;
use FiscalReceipt\Common\Value\Quantity;
use FiscalReceipt\Ffd12\Dto\PaymentBreakdown;
use FiscalReceipt\Ffd12\Dto\ProductCodeNew;
use FiscalReceipt\Ffd12\Dto\ReceiptDraft;
use FiscalReceipt\Ffd12\Dto\ReceiptItem;
use FiscalReceipt\Ffd12\Enum\DocumentType;
use FiscalReceipt\Ffd12\Serialization\ReceiptDraftSerializer;

$item = new ReceiptItem(
    paymentType: PaymentMethod::FullPayment,
    productType: PaymentObject::Commodity,
    sum: new Money(10_000),
    price: new Money(10_000),
    quantity: new Quantity(1.0),
    itemsQuantityMeasure: QuantityMeasure::Piece,
    name: 'Товар',
    nds: VatRate::Vat20,
    productCodeNew: ProductCodeNew::ean13('4601234567890'),
);

$receipt = new ReceiptDraft(
    code: DocumentType::Receipt,
    operationType: OperationType::Income,
    appliedTaxationType: TaxationType::Osn,
    retailPlaceAddress: 'https://example.com',
    retailPlace: 'https://example.com',
    payments: PaymentBreakdown::electronicOnly(new Money(10_000)),
    items: [$item],
    internetPayment: true,
);

$json = (new ReceiptDraftSerializer())->toJson($receipt);

Валидация

use FiscalReceipt\Ffd105\Validation\FiscalizedReceiptValidator;

$result = (new FiscalizedReceiptValidator())->validate($fiscalizedReceipt);

if (!$result->isValid()) {
    foreach ($result->violations as $violation) {
        echo $violation->code . ': ' . $violation->message . PHP_EOL;
    }
}

Для ФФД 1.2 используйте FiscalReceipt\Ffd12\Validation\FiscalizedReceiptValidator.

Парсинг фискализированного чека

use FiscalReceipt\Ffd105\Serialization\FiscalizedReceiptJsonParser;

$receipt = (new FiscalizedReceiptJsonParser())->fromJson($json);

Для ФФД 1.2 используйте FiscalReceipt\Ffd12\Serialization\FiscalizedReceiptJsonParser.

Деньги и суммы

Money хранит значение в копейках:

new Money(10_000);              // 100.00
Money::fromRubles('100.50');    // 10050 копеек

Тесты

composer test

Лицензия

MIT. См. LICENSE.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-22