a5sys/fec-bundle

本软件包最新版本(V2.0.2)无可用许可证信息。

生成FEC文件(法国会计)

V2.0.2 2017-02-13 09:57 UTC

This package is auto-updated.

Last update: 2024-08-30 01:22:55 UTC


README

FecBundle 允许生成FEC文件和从FEC文件读取数据。

FEC代表“fichier d'écritures comptables”,是法国会计特有的。

FEC文件是标准化的。法国会计标准接受四种格式

  • 平文件CSV,以制表符为分隔符
  • 平文件CSV,以管道符号(|)为分隔符
  • 平文件,具有固定宽度的列
  • 遵循XSD规范的XML文件

此捆绑包目前可以生成和读取前两种类型:平文件CSV制表符或管道分隔符,但可以扩展以连接自己的适配器来生成XML或平固定宽度列格式。

无论FEC文件的类型如何,每个会计行至少应有18个字段,但可以是21或22列。

18列 :

  • BIC / IS:工业和商业利润/公司税
  • BNC/BA Droit commercial:商业法和农业利润

21列 :

  • BA trésorerie:农业利润金库

22列 :

  • BNC trésorerie:非商业利润金库

所有字段都是标准化的,即使借方和贷方字段可以通过Montant(金额)和Sens(方向,可以是D/C或+1/-1)进行交换。

注意:此捆绑包不生成相关的文本描述文件。

安装

使用composer

php composer.phar require "a5sys/fec-bundle:dev-master"

composer require "a5sys/fec-bundle:dev-master"

AppKernel.php中声明捆绑包

new A5sys\FecBundle\FecBundle(),

配置

config.yml

您可以为FEC文件的生成配置默认临时目录

fec:
    defaultTempDir: /a/writable/path

如果未设置,则捆绑包将使用系统临时目录

组合并使用FEC生成器服务

组合

要生成FEC文件,请声明一个服务,使用参数fec.manager.class中预配置的类。

services.yml

fec.manager.my:
    class: %fec.manager.class%
    arguments:
        - %fec.defaultTempDir%
        - "@fec.dumper.csv.tab.txt"
        - "@fec.normalizer.bic.is"
        - "@fec.computer.debitcredit"
  • 参数1
    • 不应在此处修改fec.defaultTempDir参数,最好在config.yml中修改该参数

最后三个参数是您应谨慎选择以生成正确FEC文件的服务

  • 参数2
    • 在示例中:"@fec.dumper.csv.tab.txt"
    • 目前提供以下选项
      • "@fec.dumper.csv.tab.txt"
        • 带有制表符分隔符和.txt扩展名的CSV文件
      • "@fec.dumper.csv.pipe.txt"
        • 带有管道符号分隔符和.txt扩展名的CSV文件
  • 参数3
    • 在示例中 "@fec.normalizer.bic.is"
    • 目前提供以下选项
      • "@fec.normalizer.bic.is"
        • 使用以下类型的输入对象
          • EcritureBICIS
          • AbstractEcritureComptable的实例
          • EcritureComptableInterface的实例。
        • 对于18列的会计条目
      • "@fec.normalizer.bnc.ba.dc"
        • 使用以下类型的输入对象
          • EcritureBNCBADroitCommercial
          • AbstractEcritureComptable的实例
          • EcritureComptableInterface的实例。
        • 对于18列的会计条目
      • "@fec.normalizer.ba.tresorerie"
        • 使用以下类型的输入对象
          • EcritureBATresorerie
          • EcritureBATresorerieInterface的实例
        • 对于21列的会计条目
      • "@fec.normalizer.bnc.tresorerie"
        • 使用以下类型的输入对象
          • EcritureBNCTresorerie
          • EcritureBNCTresorerieInterface的实例
        • 对于22列的会计条目
  • 参数4
    • 在示例中 "@fec.computer.debitcredit"
    • 目前提供以下选项
      • "@fec.computer.debitcredit"
        • 用于生成字段DebitCredit,金额在两个之一
      • "@fec.computer.montantsens.alpha"
        • 用于生成字段MontantSens
        • D和C在Sens中
      • "@fec.computer.montantsens.num"
        • 用于生成字段MontantSens
        • 在 Sens 中,借记为 +1,贷记为 -1

使用

控制器中

    $fecLines = array();
    foreach ($ecritureLignes as $ecritureLigne) {
        $fecLine = new \A5sys\FecBundle\ValueObject\EcritureBICIS();
        $fecLine
            ->setJournalCode($jCode)
            ->setJournalLib($jLib)
            ->setEcritureNum($eNum)
            ->setEcritureDate($eDate)
            ->setCompteNum($cNum)
            ->setCompteLib($cLib)
            ->setCompAuxNum($caNum)
            ->setCompAuxLib($caLib)
            ->setPieceRef($numeroPiece)
            ->setPieceDate($datePiece)
            ->setEcritureLib($eLib)
            ->setDebit($debit)
            ->setCredit($credit)
            ->setEcritureLet($eLet)
            ->setDateLet($dLet)
            ->setValidDate($dateValid)
            ->setMontantdevise($mDev)
            ->setIdevise($iDev)
        ;

        $fecLines[] = $fecLine;
    }

	$this->get('fec.manager.my')->generateFile($sirenNumber, $dateCloture, $fecLines)

服务中

简单地将你的 "fec.manager.my" 注入到你的其他服务中。

注意:

由于约定,经理需要警笛和截止日期来生成正确的文件名。

所有输入对象都指定借记和贷记,而不是金额和方向,输出格式在文件中可以选择,但不能选择输入方法。

输入对象和必填字段

EcritureBICIS, EcritureBNCBADroitCommercial,以及更广泛的EcritureComptableInterface,必须为这些字段指定值

  • JournalCode
  • JournalLib
  • EcritureNum
  • EcritureDate
  • CompteNum
  • CompteLib
  • PieceRef
  • PieceDate
  • EcritureLib
  • ValidDate

EcritureBATresorerie, EcritureBNCTresorerie,以及EcritureBATresorerieInterface,EcritureBNCTresorerieInterface接口,必须为这些附加字段提供值

  • DateRglt
  • ModeRglt

更改文件扩展名

services.yml

声明另一个服务如下,以获取具有 管道 分隔符和 ".fec" 扩展名的 CSV 文件

fec.dumper.csv.pipe.fec:
    class: %fec.dumper.csv.class%
    arguments:
        - "|"
        - "fec"

现在在 services.yml 中的 fec.manager.my 定义中使用 "@fec.dumper.csv.pipe.fec" 服务。

组合并使用 FEC 读取器服务

组合

要读取 FEC 文件,声明一个服务,使用参数 fec.manager.class 中的预配置类。

services.yml

fec.reader.my:
    class: %fec.reader.class%
    arguments:
        - "@fec.dumper.csv.tab.txt"
        - "@fec.normalizer.standard"
        - "@fec.computer.debitcredit"

最后三个参数是您应谨慎选择以生成正确FEC文件的服务

  • 参数1
    • 在示例中:"@fec.dumper.csv.tab.txt"
    • 目前提供以下选项
      • "@fec.reader.csv.tab"
        • 具有 制表符 分隔符的 CSV 文件
      • "@fec.dumper.csv.pipe"
        • 具有 | 分隔符的 CSV 文件
  • 参数2
    • 例如 "@fec.normalizer.standard"
    • 目前提供以下选项
      • "@fec.normalizer.bic.is"
        • 生成类型为的对象
          • EcritureBICIS
        • 对于18列的会计条目
      • "@fec.normalizer.bnc.ba.dc"
        • 生成类型为的对象
          • EcritureBNCBADroitCommercial
        • 对于18列的会计条目
      • "@fec.normalizer.ba.tresorerie"
        • 生成类型为的对象
          • EcritureBATresorerie
        • 对于21列的会计条目
      • "@fec.normalizer.bnc.tresorerie"
        • 生成类型为的对象
          • EcritureBNCTresorerie
        • 对于22列的会计条目
  • 参数3
    • 在示例中 "@fec.computer.debitcredit"
    • 目前提供以下选项
      • "@fec.computer.debitcredit"
        • 用于生成字段DebitCredit,金额在两个之一
      • "@fec.computer.montantsens.alpha"
        • 用于生成字段MontantSens
        • D和C在Sens中
      • "@fec.computer.montantsens.num"
        • 用于生成字段MontantSens
        • 在 Sens 中,借记为 +1,贷记为 -1

使用

控制器中

/**
 * Import a FEC file
 *
 * @param Request $request
 * @return Response
 *
 * @Route("/import/fec", name="import_fec")
 */
public function importFecAction(Request $request)
{
    // get the uploaded file. With Symfony you directly get a UploadedFile which extends File
    $uploadedFile = $request->files->get('file');

    // Get the list of A5sys\FecBundle\ValueObject\EcritureBICIS by giving a File to the service you've just composed
    $ecrituresComptables = $this->get('fec.reader.expertim')->readFile($uploadedFile);

	...
}

服务中

简单地将你的 "fec.reader.my" 注入到你的其他服务中。

验证

在读取 CSV FEC 文件时,将对所有行的良好格式进行检查。

如果一行中的列数与标题数不同,则抛出 FecException。如果日期字段不是 Ymd 格式,则抛出 FecException。如果数值字段不是数值,则抛出 FecException。

更多详细信息,请参阅 CsvReader 类。

然后,当创建 ValueObject (EcritureXxx) 时,验证器会进行检查,如果数据不遵守法国规范,则可能抛出 FecValidationException。

参考

https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000027788276&dateTexte=&categorieLien=id