package dto import ( "time" "tyapi-server/internal/domains/finance/entities" "tyapi-server/internal/domains/finance/value_objects" "github.com/shopspring/decimal" ) // InvoiceApplicationResponse 发票申请响应 type InvoiceApplicationResponse struct { ID string `json:"id"` UserID string `json:"user_id"` InvoiceType value_objects.InvoiceType `json:"invoice_type"` Amount decimal.Decimal `json:"amount"` Status entities.ApplicationStatus `json:"status"` InvoiceInfo *value_objects.InvoiceInfo `json:"invoice_info"` CreatedAt time.Time `json:"created_at"` } // InvoiceInfoResponse 发票信息响应 type InvoiceInfoResponse 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"` // 用户可编辑 IsComplete bool `json:"is_complete"` MissingFields []string `json:"missing_fields,omitempty"` // 字段权限标识 CompanyNameReadOnly bool `json:"company_name_read_only"` // 公司名称是否只读 TaxpayerIDReadOnly bool `json:"taxpayer_id_read_only"` // 纳税人识别号是否只读 } // InvoiceRecordResponse 发票记录响应 type InvoiceRecordResponse struct { ID string `json:"id"` UserID string `json:"user_id"` InvoiceType value_objects.InvoiceType `json:"invoice_type"` Amount decimal.Decimal `json:"amount"` Status entities.ApplicationStatus `json:"status"` // 开票信息(快照数据) 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"` // 接收邮箱 // 文件信息 FileName *string `json:"file_name,omitempty"` FileSize *int64 `json:"file_size,omitempty"` FileURL *string `json:"file_url,omitempty"` // 时间信息 ProcessedAt *time.Time `json:"processed_at,omitempty"` CreatedAt time.Time `json:"created_at"` // 拒绝原因 RejectReason *string `json:"reject_reason,omitempty"` } // InvoiceRecordsResponse 发票记录列表响应 type InvoiceRecordsResponse struct { Records []*InvoiceRecordResponse `json:"records"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` TotalPages int `json:"total_pages"` } // FileDownloadResponse 文件下载响应 type FileDownloadResponse struct { FileID string `json:"file_id"` FileName string `json:"file_name"` FileSize int64 `json:"file_size"` FileURL string `json:"file_url"` FileContent []byte `json:"file_content"` } // AvailableAmountResponse 可开票金额响应 type AvailableAmountResponse struct { AvailableAmount decimal.Decimal `json:"available_amount"` // 可开票金额 TotalRecharged decimal.Decimal `json:"total_recharged"` // 总充值金额 TotalGifted decimal.Decimal `json:"total_gifted"` // 总赠送金额 TotalInvoiced decimal.Decimal `json:"total_invoiced"` // 已开票金额 PendingApplications decimal.Decimal `json:"pending_applications"` // 待处理申请金额 } // PendingApplicationResponse 待处理申请响应 type PendingApplicationResponse struct { ID string `json:"id"` UserID string `json:"user_id"` InvoiceType value_objects.InvoiceType `json:"invoice_type"` Amount decimal.Decimal `json:"amount"` Status entities.ApplicationStatus `json:"status"` 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"` FileName *string `json:"file_name,omitempty"` FileSize *int64 `json:"file_size,omitempty"` FileURL *string `json:"file_url,omitempty"` ProcessedAt *time.Time `json:"processed_at,omitempty"` CreatedAt time.Time `json:"created_at"` RejectReason *string `json:"reject_reason,omitempty"` } // PendingApplicationsResponse 待处理申请列表响应 type PendingApplicationsResponse struct { Applications []*PendingApplicationResponse `json:"applications"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` TotalPages int `json:"total_pages"` }