一个用于与卢旺达税务局销售数据控制器(SDC)交互的包

1.0.0 2019-07-05 08:11 UTC

This package is auto-updated.

Last update: 2024-09-12 13:11:41 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

销售数据控制器是法律强制要求的一种设备,用于监控所有在缴纳增值税的商店内进行的销售。此包用于控制 SDC 设备。

结构

src/
tests/
vendor/

安装

安装

服务器要求

KAMARO SDC 有一些系统要求。当然,这些要求中的大多数都可以由 Laragon 满足,因此强烈建议您使用 Laragon 作为您的本地 Laravel 开发环境。

但是,如果您不使用 Laragon,您需要确保您的服务器满足以下要求

安装 KAMARO SDC

KAMARO 使用 Composer 来管理其依赖项。因此,在使用此包之前,请确保您的机器上已安装 Composer。

通过 Composer Create-Project

或者,您也可以通过在终端中执行 Composer 的 create-project 命令来安装 Laravel

    composer create-project kamaro/sdc your_project_name_here  dev-master  

在现有项目中安装

composer require Kamaro/Sdc

使用方法

注册 php serial 扩展。

每次您打开端口时,都必须使用供应商的许可证或串行端口将其注册。

<?php
$device = new Kamaro\Sdc\SDCController('COM5','KAMARO LAMBERT #1','12345123'); // Assume your SDC is connect to COM Port 5
echo $device->isOpen(); // true

获取 SDC ID

<?php
$device = new Kamaro\Sdc\SDCController('COM5'); // Assume your SDC is connect to COM Port 5
echo $device->getID(); // SDC002001531 equivalent to the connected SDC

获取 SDC 状态

<?php
$device = new Kamaro\Sdc\SDCController('COM5');
print_r($device->getStatus());
结果
array(6) {                                            
  ["SDC_SERIAL_NUMBER"]=>                                    
  string(12) "SDC002000173"                                  
  ["FIRMWARE_VERSION"]=>                                     
  string(10) "2.1302.2.8"                                    
  ["HARDWARE_REVISION"]=>                                    
  string(3) "530"                                            
  ["THE_NUMBER_OF_CURRENT_SDC_DAILY_REPORT"]=>               
  string(2) "37"                                             
  ["LAST_REMOTE_AUDIT_DATE_TIME"]=>                          
  string(19) "28/03/2014 11:14:08"                           
  ["LAST_LOCAL_AUDIT_DATE_TIME"]=>                           
  string(0) ""                                               
}                                                          

发送收据数据

当您想要将税务信息发送到 SDC 时,您需要遵循以下格式,否则包将抛出异常。

发票类型

格式
RtypeTTypeMRC,TIN,Date TIME, Rnumber,TaxRate1,TaxrRate2,TaxRate3,TaxRate4,Amount1,Amount2,Amount3,Amount4,Tax1,Tax2,Tax3,Tax4
示例
NS01012345,100600570,11/05/2016 12:35:20,23,0.00,18.00,0.00,0.00,11.00,12.00,0.00,0.00,0.00,1.83,0.00,0.00
<?php
// Set Data
$data = "NS01012345,100600570,14/04/2017 12:35:20,23,0.00,18.00,0.00,0.00,11.00,12.00,0.00,0.00,0.00,1.83,0.00,0.00";

// Get Device Instance on PORT 5
$device = new Kamaro\Sdc\SDCController('COM5');
echo $device->sendReceiptData($data); // P for success or ERROR

获取签名

向设备发送收据数据后,您需要发送另一个请求以获取内部数据和签名,该签名将放在发票上。您必须将发票号码作为参数传递

<?php
// Get Device Instance on PORT 5
$device = new Kamaro\Sdc\SDCController('COM5');
$results = $device->getSignature(23); // Previous Sent Invoice Number 23

var_dump($results);
结果
array(5) {                                                 
  ["date_time"]=>                                                     
  string(19) "14/04/2017 15:50:40"                                    
  ["SDC_ID"]=>                                                        
  string(12) "SDC002000173"                                           
  ["SDC_RECEIPT_NUMBER"]=>                                            
  string(12) "1127/1429/NS"                                           
  ["INTERNAL_DATA"]=>                                                 
  string(32) "6RUG-P4NR-7UIJ-EL7I-WS54-UN7R-MI"                       
  ["RECEIPT_SIGNATURE"]=>                                             
  string(19) "5T54-N5GG-B2WY-IY6S"
}                                                                                                                          

发送电子账本

现在在这个阶段,您已经拥有了构建认证发票所需的所有信息。您需要将 getSignature 方法中获取的内部数据和签名添加到您的发票中,然后逐行构建您的发票并发送。

B 标记收据的开始或第一行 N 标记收据正文中的行 E 标记收据的结束或最后一行。逐行读取文件并显示。

假设我们的最终收据如下所示

B 				  Trade Name
N 				Gikondo, Kigali
N 				TIN: 100600570                        
N                      COPY                        
N -------------------------------------------------
N                    Normal Sale                       
N -------------------------------------------------
N           REFUND IS APPROVED ONLY FOr           
N              ORIGINAL SALES RECEIPT             
N                    400600570                    
N ------------------------------------------------
N Plain Bread            1000.00x 1.00 1000.00A-EX
N Wriggly gum                  60.00x 5.00 300.00B
N ------------------------------------------------
N         THIS IS NOT AN OFFICIAL RECEIPT         
N ------------------------------------------------
N TOTAL                                  -36139.50
N TOTAL                         B-18.00% -36139.50
N TOTAL                             TAX B -5512.81
N ------------------------------------------------
N CASH                                   -36139.50
N ITEMS NUMBER                                   1
N ------------------------------------------------
N               SDC INFORMATION                  
N Date: 14/04/2017                  Time: 11:48:27
N SDC ID:                            SDC001000001
N RECEIPT NUMBER:                       12/259 NR
N                Internal Data:                  
N         IR84-99TN-FCYY-CE22-4HWE-V5TA-EE       
N              Receipt Signature:                
N             669X-TBMM-GPE4-445D                
N -----------------------------------------------
N RECEIPT NUMBER:                             153
N DATE: 25/5/2012                  TIME: 11:50:24
N MRC:                                   01012345
N -----------------------------------------------
N                 THANK YOU                      
E         WE APPRECIATE YOUR BUSINESS     

假设您正在读取一个名为 receipt.txt 的收据文件,您将这样做:

	$receipt = __DIR__.'/stubs/A8.txt';
	$lines   = file($receipt);
	$endLine = count($lines) - 1;

	$sequence = 32;

	$device = new Kamaro\Sdc\SDCController('COM5');

	foreach ($lines as $key => $line) {
	    // Update sequence
	    if ($sequence > 127) {
			$sequence = 32;
		}
		switch ($key) {
			case 0:
				$results = $device->sendElectronicJournal('B'.$line,$sequence);
				break;
			case $endLine:
				$results = $device->sendElectronicJournal('E'.$line,$sequence);
				break;				
			default:
				$results = $device->sendElectronicJournal('N'.$line,$sequence);
				break;
		}
		$sequence++;
	}

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

测试

使用 composer 和 PHPUNIT

如果您已全局安装 phpunit,则转到项目目录并运行

$ composer test

使用传统方式。

转到此包根目录中的 index.php 并更新 SDC 的端口,然后从浏览器访问它。您应该看到以下页面 alt text

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全

如果您发现任何安全相关的问题,请通过电子邮件:author_email联系,而不是使用问题跟踪器。

鸣谢

许可协议

MIT 许可协议 (MIT)。请参阅许可文件获取更多信息。