a5sys / fec-bundle
生成FEC文件(法国会计)
Requires
- php: >=5.6
- symfony/symfony: >=2.7
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文件
- "@fec.dumper.csv.tab.txt"
- 参数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列的会计条目
- 使用以下类型的输入对象
- "@fec.normalizer.bic.is"
- 参数4
- 在示例中 "@fec.computer.debitcredit"
- 目前提供以下选项
- "@fec.computer.debitcredit"
- 用于生成字段Debit和Credit,金额在两个之一
- "@fec.computer.montantsens.alpha"
- 用于生成字段Montant和Sens
- D和C在Sens中
- "@fec.computer.montantsens.num"
- 用于生成字段Montant和Sens
- 在 Sens 中,借记为 +1,贷记为 -1
- "@fec.computer.debitcredit"
使用
控制器中
$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 文件
- "@fec.reader.csv.tab"
- 参数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列的会计条目
- 生成类型为的对象
- "@fec.normalizer.bic.is"
- 参数3
- 在示例中 "@fec.computer.debitcredit"
- 目前提供以下选项
- "@fec.computer.debitcredit"
- 用于生成字段Debit和Credit,金额在两个之一
- "@fec.computer.montantsens.alpha"
- 用于生成字段Montant和Sens
- D和C在Sens中
- "@fec.computer.montantsens.num"
- 用于生成字段Montant和Sens
- 在 Sens 中,借记为 +1,贷记为 -1
- "@fec.computer.debitcredit"
使用
控制器中
/**
* 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。