package value_objects import ( "errors" "strings" ) // InvoiceInfo 发票信息值对象 type InvoiceInfo struct { CompanyName string `json:"company_name"` // 公司名称 TaxpayerID string `json:"taxpayer_id"` // 纳税人识别号 BankName string `json:"bank_name"` // 基本开户银行 BankAccount string `json:"bank_account"` // 基本开户账号 CompanyAddress string `json:"company_address"` // 企业注册地址 CompanyPhone string `json:"company_phone"` // 企业注册电话 ReceivingEmail string `json:"receiving_email"` // 发票接收邮箱 } // NewInvoiceInfo 创建发票信息值对象 func NewInvoiceInfo(companyName, taxpayerID, bankName, bankAccount, companyAddress, companyPhone, receivingEmail string) *InvoiceInfo { return &InvoiceInfo{ CompanyName: strings.TrimSpace(companyName), TaxpayerID: strings.TrimSpace(taxpayerID), BankName: strings.TrimSpace(bankName), BankAccount: strings.TrimSpace(bankAccount), CompanyAddress: strings.TrimSpace(companyAddress), CompanyPhone: strings.TrimSpace(companyPhone), ReceivingEmail: strings.TrimSpace(receivingEmail), } } // ValidateForGeneralInvoice 验证普票信息 func (ii *InvoiceInfo) ValidateForGeneralInvoice() error { if ii.CompanyName == "" { return errors.New("公司名称不能为空") } if ii.TaxpayerID == "" { return errors.New("纳税人识别号不能为空") } if ii.ReceivingEmail == "" { return errors.New("发票接收邮箱不能为空") } return nil } // ValidateForSpecialInvoice 验证专票信息 func (ii *InvoiceInfo) ValidateForSpecialInvoice() error { // 先验证普票必填项 if err := ii.ValidateForGeneralInvoice(); err != nil { return err } // 专票额外必填项 if ii.BankName == "" { return errors.New("基本开户银行不能为空") } if ii.BankAccount == "" { return errors.New("基本开户账号不能为空") } if ii.CompanyAddress == "" { return errors.New("企业注册地址不能为空") } if ii.CompanyPhone == "" { return errors.New("企业注册电话不能为空") } return nil } // IsComplete 检查信息是否完整(专票要求) func (ii *InvoiceInfo) IsComplete() bool { return ii.CompanyName != "" && ii.TaxpayerID != "" && ii.BankName != "" && ii.BankAccount != "" && ii.CompanyAddress != "" && ii.CompanyPhone != "" && ii.ReceivingEmail != "" } // GetMissingFields 获取缺失的字段(专票要求) func (ii *InvoiceInfo) GetMissingFields() []string { var missing []string if ii.CompanyName == "" { missing = append(missing, "公司名称") } if ii.TaxpayerID == "" { missing = append(missing, "纳税人识别号") } if ii.BankName == "" { missing = append(missing, "基本开户银行") } if ii.BankAccount == "" { missing = append(missing, "基本开户账号") } if ii.CompanyAddress == "" { missing = append(missing, "企业注册地址") } if ii.CompanyPhone == "" { missing = append(missing, "企业注册电话") } if ii.ReceivingEmail == "" { missing = append(missing, "发票接收邮箱") } return missing }