umka

package
v0.220727.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 27, 2022 License: CC0-1.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const TimeLayout = "02 Jan 2006 15:04:05 -0700"

RFC822Z +century,seconds or RFC1123Z -dayofweek

Variables

This section is empty.

Functions

func EnsureCycleValid

func EnsureCycleValid(u Umker, status *Status, maxAge time.Duration) (*ru_nalog.Doc, error)

func ParseResponseDoc

func ParseResponseDoc(b []byte) (*ru_nalog.Doc, error)

Types

type Document

type Document struct {
	Result  int `json:"result,omitempty"` // 0=OK
	Message struct {
		Description string `json:"resultDescription,omitempty"`
	} `json:"message,omitempty"`
	Data      docdata `json:"data"`
	SessionID string  `json:"sessionId"`
	Print     int     `json:"print"` // bool, 1=print
}

type Frame

type Frame struct {
	Protocol      int       `json:"protocol,omitempty"` // 1=JSON 3=XML
	Version       string    `json:"version,omitempty"`  // "1.0"
	CashboxStatus *Status   `json:"cashboxStatus,omitempty"`
	Document      *Document `json:"document,omitempty"`
}

Request/response container for marshalling

func (*Frame) String

func (f *Frame) String() string

type Prop

type Prop struct {
	Caption   string       `json:"caption,omitempty"`
	Printable string       `json:"printable,omitempty"`
	Props     []Prop       `json:"fiscprops,omitempty"`
	Tag       ru_nalog.Tag `json:"tag"`
	Value     interface{}  `json:"value,omitempty"`
}

type Status

type Status struct {
	AgentFlags     byte   `json:"agentFlags" fdn:"1057"`
	AllowGames     bool   `json:"allowGames" fdn:"1193"`
	AllowLotteries bool   `json:"allowLotteries" fdn:"1126"`
	AllowServices  bool   `json:"allowServices" fdn:"1109"`
	AtmNumber      string `json:"atmNumber" fdn:"1036"`
	AutomatMode    bool   `json:"automatMode" fdn:"1001"`
	Cash           uint64 `json:"cash"`
	CashBoxNumber  uint32 `json:"cashBoxNumber"` // номер ккм в зале
	Cashier        uint32 `json:"cashier"`       // номер кассира (в текущем режиме)
	CycleNumber    uint32 `json:"cycleNumber" fdn:"1038"`
	CycleOpened    string `json:"cycleOpened"` // дата/время открытия смены в кассе (текущей или последней закрытой) если смен не было — не передается
	CycleClosed    string `json:"cycleClosed"` // дата/время закрытия последней смены в кассе если смена открыта — не передается
	Dt             string `json:"dt"`          // дата/время сейчас в кассе
	Email          string `json:"email"`
	ExcisableGoods bool   `json:"excisableGoods" fdn:"1207"`
	ExternPrinter  bool   `json:"externPrinter" fdn:"1221"`
	FSFDFVersion   byte   `json:"fSFDFVersion" fdn:"1190"` // версия ФФД ФН — из текущих данных фискализации (1 — 1.0, 2 — 1.05, 3 — 1.1 (см ФФД))
	FDFVersion     byte   `json:"fDFVersion"`              // версия ФФД ККТ — из текущих данных фискализации (1 — 1.0, 2 — 1.05, 3 — 1.1 (см ФФД))
	Flags          byte   `json:"flags"`                   // Флаги состояния ККМ( ПРИЛОЖЕНИЕ 3)
	FnsSite        string `json:"fnsSite" fdn:"1060"`
	FsNumber       string `json:"fsNumber" fdn:"1041"` // Номер ФН, с которым была фискализована касса
	FsStatus       struct {
		CycleIsOpen   byte   `json:"cycleIsOpen"`
		DebugMode     bool   `json:"debugMode"`
		FsNumber      string `json:"fsNumber"`
		FsVersion     string `json:"fsVersion"`
		LastDocDt     string `json:"lastDocDt"`
		LastDocNumber uint64 `json:"lastDocNumber"`
		LifeTime      struct {
			AvailableRegistrations uint32 `json:"availableRegistrations"`
			CompletedRegistrations uint32 `json:"completedRegistrations"`
			ExpirationDt           string `json:"expirationDt"` // "2020-07-20"
		} `json:"lifeTime"`
		Phase     byte `json:"phase"`
		Transport struct {
			DocIsReading     bool   `json:"docIsReading"`
			FirstDocDt       string `json:"firstDocDt"`
			FirstDocNumber   uint64 `json:"firstDocNumber" fdn:"1116"`
			OfflineDocsCount uint32 `json:"offlineDocsCount" fdn:"1097"`
			State            uint32 `json:"state"` // Состояние обмена с ОФД ( ПРИЛОЖЕНИЕ 5)
		} `json:"transport"`
	} `json:"fsStatus"`
	InternetOnly     bool   `json:"internetOnly" fdn:"1108"`
	Introductions    uint32 `json:"introductions"`
	IntroductionsSum uint64 `json:"introductionsSum"`
	MakeBso          bool   `json:"makeBso"`
	Model            uint16 `json:"model"`
	Modelstr         string `json:"modelstr"` // "УМКА-01-ФА"
	OfdInn           string `json:"ofdInn" fdn:"1017"`
	OfdName          string `json:"ofdName" fdn:"1046"`
	OfflineMode      bool   `json:"offlineMode"`
	PaymentAddress   string `json:"paymentAddress" fdn:"1009"` // "г. Воронеж, ул. Липецкая, д.3"
	PaymentPlace     string `json:"paymentPlace" fdn:"1187"`   // "ОФИС1"
	Payouts          uint32 `json:"payouts"`
	PayoutsSum       uint64 `json:"payoutsSum"`
	RegCashierInn    string `json:"regCashierInn"`            // "000000000000"
	RegCashierName   string `json:"regCashierName"`           // "CASHIER 17"
	RegDate          string `json:"regDate"`                  // дата фискализации "2006-01-02"
	RegDocNumber     uint64 `json:"regDocNumber"`             // 1
	RegNumber        string `json:"regNumber" fdn:"1037"`     // "0000000001020321"
	ShortFlags       uint32 `json:"shortFlags"`               // 3
	Taxes            uint32 `json:"taxes" fdn:"1055"`         // 15
	UseEncryption    bool   `json:"useEncryption" fdn:"1056"` // false
	UserInn          string `json:"userInn" fdn:"1018"`       // "7725225244"
	UserName         string `json:"userName" fdn:"1048"`      // "ООО ВЕКТОР-М"
	Serial           string `json:"serial" fdn:"1013"`        // "16999987"

	Mode        string
	XXX_Mode    uint32 `json:"mode"`    // 0:choice 1:reg 2:x-report 3:z-report 4:prog 5:serial 6:fstore 7:aux
	XXX_SubMode uint32 `json:"subMode"` //

	XXX_Ver    uint32 `json:"ver"`
	XXX_Subver uint32 `json:"subver"`
}

func (*Status) CycleAge

func (s *Status) CycleAge() (time.Duration, error)

Duration of open cycle (if >= 0) or since last closed cycle (if < 0) relative to `s.Dt` Returns -1,nil if no cycles were opened yet (new fiscal storage). Intended usage: if age, err := status.CycleAge(); err != nil { return err } else if age < 0 { u.CycleOpen() } else if age >= 24*Hour { u.CycleClose() ; u.CycleOpen() }

func (*Status) FsExpireDate

func (s *Status) FsExpireDate() time.Time

func (*Status) IsCycleOpen

func (s *Status) IsCycleOpen() bool

func (*Status) OfdOfflineCount

func (s *Status) OfdOfflineCount() uint32

type Umka

type Umka struct {
	// contains filtered or unexported fields
}

func (*Umka) CalcReport

func (u *Umka) CalcReport() (*ru_nalog.Doc, error)

func (*Umka) CycleClose

func (u *Umka) CycleClose() (*ru_nalog.Doc, error)

func (*Umka) CycleOpen

func (u *Umka) CycleOpen() (*ru_nalog.Doc, error)

func (*Umka) Danger_CloseFiscalStorage

func (u *Umka) Danger_CloseFiscalStorage(sessionId string) (*ru_nalog.Doc, error)

func (*Umka) FiscalCheck

func (u *Umka) FiscalCheck(sessionId string, d *ru_nalog.Doc) (*ru_nalog.Doc, error)

func (*Umka) Fiscalize

func (u *Umka) Fiscalize(sessionId string, d *ru_nalog.Doc) (*ru_nalog.Doc, error)

func (*Umka) GetDoc

func (u *Umka) GetDoc(number uint32) (*ru_nalog.Doc, error)

func (*Umka) Status

func (u *Umka) Status() (*Status, error)

func (*Umka) XReport

func (u *Umka) XReport() (*ru_nalog.Doc, error)

type UmkaConfig

type UmkaConfig struct {
	BaseURL   string
	SecretFun func() (string, string)
	RT        http.RoundTripper
}

type Umker

type Umker interface {
	CalcReport() (*ru_nalog.Doc, error)
	CycleClose() (*ru_nalog.Doc, error)
	CycleOpen() (*ru_nalog.Doc, error)
	Danger_CloseFiscalStorage(sessionId string) (*ru_nalog.Doc, error)
	FiscalCheck(sessionId string, d *ru_nalog.Doc) (*ru_nalog.Doc, error)
	Fiscalize(sessionId string, d *ru_nalog.Doc) (*ru_nalog.Doc, error)
	GetDoc(number uint32) (*ru_nalog.Doc, error)
	Status() (*Status, error)
	XReport() (*ru_nalog.Doc, error)
}

func NewUmka

func NewUmka(config *UmkaConfig) (Umker, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL