"""
增值税机打发票识别
"""
from apphelper.image import union_rbox
import re
import numpy as np

class invoice_m:
    """
    增值税机打发票结构化识别
    """
    def __init__(self,result):
        self.result = union_rbox(result,0.2)
        self.N = len(self.result)
        self.res = {}
        self.code()                             #发票代码
        self.number()                           #发票号码
        self.date()                             #开票日期
        self.price()                            #税后价格（小写）
        self.check_code()                       #校验码


    def code(self):
        """
        发票代码识别
        """
        No = {}
        for i in range(self.N):
            txt = self.result[i]['text'].replace(' ', '')
            txt = txt.replace(' ', '')
            res1 = re.findall('(?:(?<!\d)\d{10}(?!\d))', txt)
            res1 += re.findall('(?:(?<!\d)\d{12}(?!\d))', txt)
            if len(res1) > 0:
                No['发票代码'] = res1[0]
                self.res.update(No)
                break

    def number(self):
        """
        识别发票号码
        """
        nu = {}
        for i in range(self.N):
            txt = self.result[i]['text'].replace(' ','')
            txt = txt.replace(' ','')
            res1 = re.findall('(?:(?<!\d)\d{8}(?!\d))',txt)
            if len(res1) > 0:
                nu["发票号码"] = res1[0]
                self.res.update(nu)
                break

    def date(self):
        """
        识别开票日期
        """
        da = {}
        for i in range(self.N):
            txt = self.result[i]['text'].replace(' ','')
            txt = txt.replace(' ','')
            res1 = re.findall('[0-9]{1,4}年[0-9]{1,2}月[0-9]{1,2}日',txt)
            if len(res1) > 0:
                da["开票日期"] = res1[0]
                self.res.update(da)
                break

    def price(self):
        """
        识别税后价格（小写）
        """
        pri = {}
        for i in range(self.N):
            txt = self.result[i]['text'].replace(' ','')
            txt = txt.replace(' ','')
            res1 = re.findall('￥[0-9]{1,8}.[0-9]{1,2}',txt)
            if len(res1) > 0:
                pri["税后价格"] = res1[0]
                self.res.update(pri)
                break

    def check_code(self):
        """
        校验码识别
        """
        check = {}
        for i in range(self.N):
            txt = self.result[i]['text'].replace(' ','')
            txt = txt.replace(' ','')
            res = re.findall('校验码[0-9]{1,20}',txt)
            res += re.findall('码[0-9]{1,20}', txt)
            res += re.findall('校验码:[0-9]{1,20}',txt)
            if len(res) > 0:
                check['校验码'] = res[0].replace('校验码','').replace('校验码:','').replace('码','')
                self.res.update(check)
                break
                
                
                
            
            




