opendsd

package module
v0.0.0-...-b5233eb Latest Latest
Warning

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

Go to latest
Published: Apr 19, 2019 License: MIT Imports: 7 Imported by: 0

README

opendsd

GoDoc

Package for interfacing with the City of San Diego's Open DSD API and parsing permit activity reports.

Supports the following:

  • Permit activity reports (XML) - weekly permit feeds published online here
  • Project API (JSON)
  • Invoice API (JSON)
  • Approval API (JSON)
  • Code Enforcement API (JSON)
  • Code Enforcement cases (XML) - published periodically here
  • Mapped Complaint Type Codes
  • Mapped Approval Type Codes

TODO

Usage


package main

import (
	"log"

	"github.com/scoutred/opendsd"
)

func main(){
	//	instantiate a new API client
	client := opendsd.NewClient()

	//	fetch a project by id
	project, err := client.ProjectByID(319781)
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("project %v", project)
}

Notes

  • The Invoice, Approval and Project data structures were cobbled together based on combining several API results from each endpoint. I was not able to find a comprehensive version of the data structure so some fields might be missing. I will happily accept pull requests to help flush out the entire data structure.
  • The timestamps from the API come in multiple versions. This package parses the various time formats to time.Time structs.

License

The MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Documentation

Index

Constants

View Source
const (
	ApplicationTimestampFormat = "01/02/2006 15:04"
	ApplicationDatestampFormat = "01/02/2006"
)
View Source
const (
	APIRoot                      = "https://opendsd.sandiego.gov/api"
	HeaderExtractTimestampFormat = "1/2/2006 3:04:05 PM"
	TimestampFormat              = "2006-01-02T15:04:05"
)

Variables

View Source
var ApprovalTypes = map[int]ApprovalType{
	100: {
		ID:            100,
		ProcessCode:   1,
		Short:         "CE",
		Approval:      "Code Enforcement",
		Category:      "S",
		EffectiveFrom: "12/31/2019",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "City Council Section Code input here",
	},
	106: {
		ID:            106,
		ProcessCode:   1,
		Short:         "P",
		Approval:      "Plumbing Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0402",
	},
	107: {
		ID:            107,
		ProcessCode:   1,
		Short:         "E",
		Approval:      "Electrical Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0302",
	},
	108: {
		ID:            108,
		ProcessCode:   1,
		Short:         "M",
		Approval:      "Mechanical Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0402",
	},
	113: {
		ID:            113,
		ProcessCode:   1,
		Short:         "DA",
		Approval:      "Development Agreement",
		Category:      "P",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 124.0101",
	},
	120: {
		ID:            120,
		ProcessCode:   1,
		Short:         "G",
		Approval:      "Grading Permit",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0602",
	},
	127: {
		ID:            127,
		ProcessCode:   1,
		Short:         "RD",
		Approval:      "Public Right of Way Dedication",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	129: {
		ID:            129,
		ProcessCode:   1,
		Short:         "CUP",
		Approval:      "Conditional Use Permit",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0303",
	},
	131: {
		ID:            131,
		ProcessCode:   1,
		Short:         "CDP",
		Approval:      "Coastal Development Permit",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0702",
	},
	132: {
		ID:            132,
		ProcessCode:   1,
		Short:         "SDP",
		Approval:      "Site Development Permit",
		Category:      "V",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0502",
	},
	133: {
		ID:            133,
		ProcessCode:   1,
		Short:         "B",
		Approval:      "Building Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0202",
	},
	134: {
		ID:            134,
		ProcessCode:   1,
		Short:         "COC",
		Approval:      "Certificate of Compliance",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0210",
	},
	135: {
		ID:            135,
		ProcessCode:   1,
		Short:         "LLA",
		Approval:      "Lot-Line Adjustment",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0310",
	},
	136: {
		ID:            136,
		ProcessCode:   1,
		Short:         "TM",
		Approval:      "Tentative Map",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0410",
	},
	137: {
		ID:            137,
		ProcessCode:   1,
		Short:         "VTM",
		Approval:      "Vesting Tentative Map",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0410",
	},
	138: {
		ID:            138,
		ProcessCode:   1,
		Short:         "FM",
		Approval:      "Final Map",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0610",
	},
	139: {
		ID:            139,
		ProcessCode:   1,
		Short:         "EV",
		Approval:      "Easement Vacation",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.1010",
	},
	140: {
		ID:            140,
		ProcessCode:   1,
		Short:         "ED",
		Approval:      "Easement Dedication",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 62.",
	},
	141: {
		ID:            141,
		ProcessCode:   1,
		Short:         "SNC",
		Approval:      "Street Name Change",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 62.",
	},
	142: {
		ID:            142,
		ProcessCode:   1,
		Short:         "SA",
		Approval:      "Public Right of Way Vacation",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0910",
	},
	144: {
		ID:            144,
		ProcessCode:   1,
		Short:         "COR",
		Approval:      "Certificate of Correction",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0140",
	},
	145: {
		ID:            145,
		ProcessCode:   1,
		Short:         "AM",
		Approval:      "Amendment of Approved Map",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0140",
	},
	146: {
		ID:            146,
		ProcessCode:   1,
		Short:         "REZ",
		Approval:      "Rezone",
		Category:      "P",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 123.0102",
	},
	205: {
		ID:            205,
		ProcessCode:   1,
		Short:         "S",
		Approval:      "Sign Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0802",
	},
	208: {
		ID:            208,
		ProcessCode:   1,
		Short:         "VAR",
		Approval:      "Variance",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0802",
	},
	223: {
		ID:            223,
		ProcessCode:   1,
		Short:         "ERA",
		Approval:      "Encroachment Agreement",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 62.",
	},
	227: {
		ID:            227,
		ProcessCode:   1,
		Short:         "PM",
		Approval:      "Parcel Map",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0510",
	},
	230: {
		ID:            230,
		ProcessCode:   1,
		Short:         "SCR",
		Approval:      "Substantial Conformance Review",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	240: {
		ID:            240,
		ProcessCode:   1,
		Short:         "ZUC",
		Approval:      "Zoning Use Certificate",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 123.0302",
	},
	244: {
		ID:            244,
		ProcessCode:   1,
		Short:         "MW",
		Approval:      "Map Waiver",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0120",
	},
	245: {
		ID:            245,
		ProcessCode:   1,
		Short:         "RM",
		Approval:      "Reversion to Acreage",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0810",
	},
	247: {
		ID:            247,
		ProcessCode:   1,
		Short:         "PDP",
		Approval:      "Planned Development Permit",
		Category:      "V",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0603",
	},
	248: {
		ID:            248,
		ProcessCode:   1,
		Short:         "HRD",
		Approval:      "Historic Resource Designation",
		Category:      "V",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 123.0202",
	},
	249: {
		ID:            249,
		ProcessCode:   1,
		Short:         "MP",
		Approval:      "Merger of Parcels",
		Category:      "S",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0710",
	},
	250: {
		ID:            250,
		ProcessCode:   1,
		Short:         "NDP",
		Approval:      "Neighborhood Developmnt Permit",
		Category:      "V",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0402",
	},
	251: {
		ID:            251,
		ProcessCode:   1,
		Short:         "NUP",
		Approval:      "Neighborhood Use Permit",
		Category:      "V",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0203",
	},
	252: {
		ID:            252,
		ProcessCode:   1,
		Short:         "R",
		Approval:      "Right Of Way Permit",
		Category:      "S",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0702",
	},
	254: {
		ID:            254,
		ProcessCode:   1,
		Short:         "C",
		Approval:      "Combination Building Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Ca. Building Code",
	},
	255: {
		ID:            255,
		ProcessCode:   1,
		Short:         "SIA",
		Approval:      "Subdivision Improvement Agrmnt",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 144.0430",
	},
	256: {
		ID:            256,
		ProcessCode:   1,
		Short:         "DIA",
		Approval:      "Deferred Improvement Agrmnt",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	257: {
		ID:            257,
		ProcessCode:   1,
		Short:         "CRD",
		Approval:      "Cost Recovery District",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	258: {
		ID:            258,
		ProcessCode:   1,
		Short:         "LUP",
		Approval:      "Land Use Plan",
		Category:      "P",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 122.0102",
	},
	259: {
		ID:            259,
		ProcessCode:   1,
		Short:         "FP",
		Approval:      "Financing Plan",
		Category:      "P",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	260: {
		ID:            260,
		ProcessCode:   1,
		Short:         "SP",
		Approval:      "Special Permit",
		Category:      "B",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Stephen Haase",
	},
	261: {
		ID:            261,
		ProcessCode:   1,
		Short:         "LMA",
		Approval:      "Landscape Maintenance Agrmnt",
		Category:      "S",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	262: {
		ID:            262,
		ProcessCode:   1,
		Short:         "CRA",
		Approval:      "Cost Reimbursement Agreement",
		Category:      "V",
		EffectiveFrom: "03/16/1998",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	263: {
		ID:            263,
		ProcessCode:   1,
		Short:         "CCA",
		Approval:      "City Council Approval",
		Category:      "V",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      720,
		Authority:     "M.C.",
	},
	264: {
		ID:            264,
		ProcessCode:   1,
		Short:         "CMA",
		Approval:      "City Manager Approval",
		Category:      "S",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      720,
		Authority:     "M.C.",
	},
	265: {
		ID:            265,
		ProcessCode:   1,
		Short:         "ADD",
		Approval:      "Street Address Change",
		Category:      "B",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 62.",
	},
	267: {
		ID:            267,
		ProcessCode:   1,
		Short:         "A",
		Approval:      "Agreement",
		Category:      "S",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	268: {
		ID:            268,
		ProcessCode:   1,
		Short:         "D",
		Approval:      "Demolition Permit",
		Category:      "B",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0502",
	},
	269: {
		ID:            269,
		ProcessCode:   1,
		Short:         "TUP",
		Approval:      "Temporary Use Permit",
		Category:      "S",
		EffectiveFrom: "01/01/2000",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 123.0401",
	},
	271: {
		ID:            271,
		ProcessCode:   1,
		Short:         "CCB",
		Approval:      "Construction Change - Building",
		Category:      "B",
		EffectiveFrom: "03/20/2003",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "MC",
	},
	272: {
		ID:            272,
		ProcessCode:   1,
		Short:         "RTC",
		Approval:      "ROW Permit-Traffic Control",
		Category:      "B",
		EffectiveFrom: "06/29/2004",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0702",
	},
	273: {
		ID:            273,
		ProcessCode:   1,
		Short:         "CCE",
		Approval:      "Construction Change - Eng.",
		Category:      "S",
		EffectiveFrom: "03/21/2004",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C.",
	},
	275: {
		ID:            275,
		ProcessCode:   1,
		Short:         "GR",
		Approval:      "Grading + Right of Way Permit",
		Category:      "S",
		EffectiveFrom: "11/08/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0602",
	},
	277: {
		ID:            277,
		ProcessCode:   1,
		Short:         "SWA",
		Approval:      "Storm Water Maintenance Agrmnt",
		Category:      "S",
		EffectiveFrom: "11/08/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 43.0310",
	},
	278: {
		ID:            278,
		ProcessCode:   1,
		Short:         "DDR",
		Approval:      "Deferred Document Review",
		Category:      "B",
		EffectiveFrom: "04/27/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Strohminger",
	},
	279: {
		ID:            279,
		ProcessCode:   1,
		Short:         "N",
		Approval:      "Newsrack Permit",
		Category:      "S",
		EffectiveFrom: "04/27/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 62.1001",
	},
	280: {
		ID:            280,
		ProcessCode:   1,
		Short:         "T",
		Approval:      "Transportation Permit",
		Category:      "B",
		EffectiveFrom: "04/27/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 85.21",
	},
	281: {
		ID:            281,
		ProcessCode:   1,
		Short:         "ZCA",
		Approval:      "Zone Code Amendment",
		Category:      "S",
		EffectiveFrom: "04/27/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      720,
		Authority:     "M.C. 103.0106",
	},
	282: {
		ID:            282,
		ProcessCode:   1,
		Short:         "CNP",
		Approval:      "Construction Noise Permit",
		Category:      "S",
		EffectiveFrom: "07/29/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 59.5.0404",
	},
	283: {
		ID:            283,
		ProcessCode:   1,
		Short:         "DAB",
		Approval:      "Damage Appraisal - Bldg",
		Category:      "B",
		EffectiveFrom: "07/29/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Afsaneh Ahmadi",
	},
	284: {
		ID:            284,
		ProcessCode:   1,
		Short:         "DAC",
		Approval:      "Damage Appraisal - Combo",
		Category:      "B",
		EffectiveFrom: "07/29/2007",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Afsaneh Ahmadi",
	},
	288: {
		ID:            288,
		ProcessCode:   1,
		Short:         "RHO",
		Approval:      "Res. High Occupancy Permit",
		Category:      "B",
		EffectiveFrom: "04/20/2008",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 123.0502",
	},
	289: {
		ID:            289,
		ProcessCode:   1,
		Short:         "SC5",
		Approval:      "Sprinkler Certification-5 Year",
		Category:      "B",
		EffectiveFrom: "04/20/2008",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "CCR 904.4",
	},
	290: {
		ID:            290,
		ProcessCode:   1,
		Short:         "DFA",
		Approval:      "Deferred Fire Approval",
		Category:      "B",
		EffectiveFrom: "02/15/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Afsaneh Ahmadi",
	},
	291: {
		ID:            291,
		ProcessCode:   1,
		Short:         "RW",
		Approval:      "Reclaimed Water Permit",
		Category:      "B",
		EffectiveFrom: "02/15/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 64.0807(e)",
	},
	292: {
		ID:            292,
		ProcessCode:   1,
		Short:         "CCF",
		Approval:      "Construction Change - Fire",
		Category:      "B",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Afsaneh Ahmadi",
	},
	293: {
		ID:            293,
		ProcessCode:   1,
		Short:         "EPV",
		Approval:      "Electrical-Photovoltaic",
		Category:      "B",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0302",
	},
	294: {
		ID:            294,
		ProcessCode:   1,
		Short:         "EAE",
		Approval:      "Emergency Authorization-ESL",
		Category:      "S",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 143.0126",
	},
	295: {
		ID:            295,
		ProcessCode:   1,
		Short:         "EAH",
		Approval:      "Emergency Authorization-Hist",
		Category:      "S",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 143.0214",
	},
	296: {
		ID:            296,
		ProcessCode:   1,
		Short:         "ECD",
		Approval:      "Emergency Coastal Dev Permit",
		Category:      "S",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0718",
	},
	297: {
		ID:            297,
		ProcessCode:   1,
		Short:         "EOT",
		Approval:      "Extension of Time - Dev. Pmt",
		Category:      "V",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 126.0111",
	},
	298: {
		ID:            298,
		ProcessCode:   1,
		Short:         "EOT",
		Approval:      "Extension of Time - TM",
		Category:      "V",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0461",
	},
	299: {
		ID:            299,
		ProcessCode:   1,
		Short:         "NOT",
		Approval:      "Notice of Termination",
		Category:      "S",
		EffectiveFrom: "12/20/2009",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "Jeff Strohminger",
	},
	301: {
		ID:            301,
		ProcessCode:   1,
		Short:         "R",
		Approval:      "Right Of Way Permit-Const Plan",
		Category:      "S",
		EffectiveFrom: "03/13/2010",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0702",
	},
	303: {
		ID:            303,
		ProcessCode:   1,
		Short:         "EU",
		Approval:      "Elec.-UG Program-City only",
		Category:      "B",
		EffectiveFrom: "09/11/2011",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0302",
	},
	304: {
		ID:            304,
		ProcessCode:   1,
		Short:         "EU",
		Approval:      "Elec.-UG Program-Cust Upgrades",
		Category:      "B",
		EffectiveFrom: "09/11/2011",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 129.0302",
	},
	305: {
		ID:            305,
		ProcessCode:   1,
		Short:         "LTA",
		Approval:      "Lot Tie Agreement",
		Category:      "B",
		EffectiveFrom: "09/11/2011",
		EffectiveTo:   "12/31/2019",
		ApplDays:      360,
		Authority:     "M.C. 125.0760",
	},
	306: {
		ID:            306,
		ProcessCode:   1,
		Short:         "FA",
		Approval:      "Fire Permit - Alarm",
		Category:      "B",
		EffectiveFrom: "09/27/2012",
		EffectiveTo:   "12/31/2019",
		ApplDays:      720,
		Authority:     "M.C. 129.0102",
	},
	307: {
		ID:            307,
		ProcessCode:   1,
		Short:         "FKH",
		Approval:      "Fire Permit - Kitchen Hood",
		Category:      "B",
		EffectiveFrom: "09/27/2012",
		EffectiveTo:   "12/31/2019",
		ApplDays:      720,
		Authority:     "M.C. 129.0102",
	},
	308: {
		ID:            308,
		ProcessCode:   1,
		Short:         "FSP",
		Approval:      "Fire Permit - Suppression",
		Category:      "B",
		EffectiveFrom: "09/27/2012",
		EffectiveTo:   "12/31/2019",
		ApplDays:      720,
		Authority:     "M.C. 129.0102",
	},
}

map of approval types with the ID property is also used as the map key

View Source
var ComplaintTypes = map[int]ComplaintType{}/* 138 elements not displayed */

Functions

This section is empty.

Types

type APIError

type APIError struct {
	ErrorMessage string `json:"ErrorMessage"`
}

func (APIError) Error

func (a APIError) Error() string

type ApplicationDatestamp

type ApplicationDatestamp time.Time

func (ApplicationDatestamp) String

func (ad ApplicationDatestamp) String() string

func (*ApplicationDatestamp) UnmarshalXML

func (ad *ApplicationDatestamp) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

type ApplicationTimestamp

type ApplicationTimestamp time.Time

func (ApplicationTimestamp) String

func (at ApplicationTimestamp) String() string

func (*ApplicationTimestamp) UnmarshalXML

func (at *ApplicationTimestamp) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

type Applications

type Applications struct {
	Metadata struct {
		Jurisdiction  string `xml:"jurisdiction"`
		Agency        string `xml:"agency"`
		AgencyAddress string `xml:"agency_address"`
		AgencyWebsite string `xml:"agency_website"`
		DataExtract   struct {
			ExtractSystem string               `xml:"extract_system"`
			Query         string               `xml:"query"`
			ExtractDate   ApplicationTimestamp `xml:"extract_date"`
			StartDate     ApplicationDatestamp `xml:"start_date"`
			EndDate       ApplicationDatestamp `xml:"end_date"`
			ReportTitle   string               `xml:"report_title"`
			RequestID     string               `xml:"request_id"`
		} `xml:"data_extract"`
	} `xml:"metadata"`
	Approvals []struct {
		XMLName         xml.Name             `xml:"approval"`
		ID              string               `xml:"approval_id,attr"`
		Type            string               `xml:"approval_type"`
		TypeID          int                  `xml:"approval_type_id"`
		ProjectID       int                  `xml:"project_id"`
		MapReference    string               `xml:"map_reference"`
		Lat             float64              `xml:"latitude"`
		Lon             float64              `xml:"longitude"`
		ApplicationDate ApplicationTimestamp `xml:"application_date"`
	} `xml:"approvals>approval"`
}

func DecodeApplication

func DecodeApplication(r io.Reader) (*Applications, error)

type Approval

type Approval struct {
	Header []struct {
		Jurisdiction  string                 `json:"Jurisdiction"`
		Agency        string                 `json:"Agency"`
		AgencyAddress string                 `json:"AgencyAddress"`
		AgencyWebsite string                 `json:"AgencyWebsite"`
		ExtractSystem string                 `json:"ExtractSystem"`
		ExtractDate   HeaderExtractTimestamp `json:"ExtractDate"`
		ExtractQuery  string                 `json:"ExtractQuery"`
	} `json:"Header"`
	ApprovalID int `json:"ApprovalId"`
	Project    struct {
		Customers             interface{} `json:"Customers"`
		ReviewCycles          interface{} `json:"ReviewCycles"`
		Jobs                  interface{} `json:"Jobs"`
		Fees                  interface{} `json:"Fees"`
		Invoices              interface{} `json:"Invoices"`
		ProjectID             int         `json:"ProjectId"`
		Title                 string      `json:"Title"`
		Scope                 string      `json:"Scope"`
		ApplicationExpiration string      `json:"ApplicationExpiration"`
		ApplicationExpired    bool        `json:"ApplicationExpired"`
		AdminHold             bool        `json:"AdminHold"`
		DevelopmentID         int         `json:"DevelopmentId"`
		DevelopmentTitle      string      `json:"DevelopmentTitle"`
		ApplicationDate       Timestamp   `json:"ApplicationDate"`
		AccountNum            string      `json:"AccountNum"`
		JobOrderNum           interface{} `json:"JobOrderNum"`
		Header                interface{} `json:"Header"`
		ProjectManagerID      int         `json:"ProjectManagerId"`
		ProjectManager        struct {
			ProjectManagerID int    `json:"ProjectManagerId"`
			Name             string `json:"Name"`
			PhoneNum         string `json:"PhoneNum"`
			EmailAddress     string `json:"EmailAddress"`
			ActiveIndicator  bool   `json:"ActiveIndicator"`
		} `json:"ProjectManager"`
	} `json:"Project"`
	Job struct {
		SignOffs              []interface{} `json:"SignOffs"`
		ApprovalInfo          []interface{} `json:"ApprovalInfo"`
		Approvals             []interface{} `json:"Approvals"`
		ProjectID             int           `json:"ProjectId"`
		JobID                 int           `json:"JobId"`
		Description           string        `json:"Description"`
		APN                   string        `json:"APN"`
		StreetAddress         string        `json:"StreetAddress"`
		MapReference          string        `json:"MapReference"`
		SortableStreetAddress string        `json:"SortableStreetAddress"`
		Latitude              float64       `json:"Latitude"`
		Longitude             float64       `json:"Longitude"`
		NAD83Northing         interface{}   `json:"NAD83Northing"`
		NAD83Easting          interface{}   `json:"NAD83Easting"`
		JobFeesSubTotal       interface{}   `json:"JobFeesSubTotal"`
	} `json:"Job"`
	BCCodes []struct {
		JobID    int    `json:"JobId"`
		BCCodeID int    `json:"BCCodeId"`
		BCCode   string `json:"BCCode"`
	} `json:"BCCodes"`
	Approval struct {
		JobID               int         `json:"JobId"`
		ApprovalID          int         `json:"ApprovalId"`
		Type                string      `json:"Type"`
		Status              string      `json:"Status"`
		Scope               string      `json:"Scope"`
		Depiction           string      `json:"Depiction"`
		IssuedBy            string      `json:"IssuedBy"`
		IssueDate           Timestamp   `json:"IssueDate"`
		FirstInspectionDate Timestamp   `json:"FirstInspectionDate"`
		CompleteCancelDate  Timestamp   `json:"CompleteCancelDate"`
		PermitHolder        string      `json:"PermitHolder"`
		NetChangeDU         string      `json:"NetChangeDU"`
		Valuation           string      `json:"Valuation"`
		SquareFootage       interface{} `json:"SquareFootage"`
	} `json:"Approval"`
	Inspections []struct {
		ApprovalID            int           `json:"ApprovalId"`
		InspectionID          int           `json:"InspectionId"`
		InspectionTier        string        `json:"InspectionTier"`
		InspectionType        string        `json:"InspectionType"`
		InspectionDiscipline  string        `json:"InspectionDiscipline"`
		InspectionStatus      string        `json:"InspectionStatus"`
		InspectionStatusSeq   string        `json:"InspectionStatusSeq"`
		InspectorID           interface{}   `json:"InspectorId"`
		InspectorName         string        `json:"InspectorName"`
		InspectorPhone        string        `json:"InspectorPhone"`
		InspectorActive       string        `json:"InspectorActive"`
		SchedulingInstruction string        `json:"SchedulingInstruction"`
		CustRequestable       string        `json:"CustRequestable"`
		ScheduledDt           interface{}   `json:"ScheduledDt"`
		PerformedDt           interface{}   `json:"PerformedDt"`
		InspectionResult      string        `json:"InspectionResult"`
		InspectorEmail        string        `json:"InspectorEmail"`
		InspectionDetails     []interface{} `json:"InspectionDetails"`
	} `json:"Inspections"`
	InspectionIssues []struct {
		InspectionIssueID int         `json:"InspectionIssueId"`
		ApprovalID        int         `json:"ApprovalId"`
		InspectionTier    string      `json:"InspectionTier"`
		Issue             string      `json:"Issue"`
		Class             string      `json:"Class"`
		Visibility        string      `json:"Visibility"`
		CreatedBy         string      `json:"CreatedBy"`
		CreatedDt         string      `json:"CreatedDt"`
		ClearedBy         string      `json:"ClearedBy"`
		ClearedDt         interface{} `json:"ClearedDt"`
		ClearedNote       string      `json:"ClearedNote"`
	} `json:"InspectionIssues"`
	ApprovalFees []struct {
		FeeTypeID           int    `json:"FeeTypeId"`
		ProjectID           int    `json:"ProjectId"`
		FeeType             string `json:"FeeType"`
		FeeCategory         string `json:"FeeCategory"`
		FeeTypeUnit         string `json:"FeeTypeUnit"`
		FeeQuantityRequired string `json:"FeeQuantityRequired"`
		FeeQuantityPaid     string `json:"FeeQuantityPaid"`
		InvoiceID           int    `json:"InvoiceId"`
		InvoiceStatus       string `json:"InvoiceStatus"`
	} `json:"ApprovalFees"`
	Exceptions []struct {
		ApprovalID        int         `json:"ApprovalId"`
		ApprovalStatusSeq interface{} `json:"ApprovalStatusSeq"`
		Exception         string      `json:"Exception"`
		ApprovalStatus    string      `json:"ApprovalStatus"`
	} `json:"Exceptions"`
	DependentPackages  []interface{} `json:"DependentPackages"`
	DependantApprovals []struct {
		ApprovalID        int    `json:"ApprovalId"`
		InspectionTier    string `json:"InspectionTier"`
		DepApprApprovalID int    `json:"DepApprApprovalId"`
		DepApprType       string `json:"DepApprType"`
		DepApprStatus     string `json:"DepApprStatus"`
		StatusReq         string `json:"StatusReq"`
		RequirementMet    string `json:"RequirementMet"`
		AddedBy           string `json:"AddedBy"`
		AddedDt           string `json:"AddedDt"`
	} `json:"DependantApprovals"`
}

func DecodeApproval

func DecodeApproval(r io.Reader) (*Approval, error)

type ApprovalType

type ApprovalType struct {
	ID            int
	ProcessCode   int
	Short         string
	Approval      string
	Category      string
	EffectiveFrom string
	EffectiveTo   string
	ApplDays      int
	Authority     string
}

type Client

type Client struct {
	APIRoot    string
	HTTPClient *http.Client
}

func NewClient

func NewClient() *Client

func (*Client) ApprovalByID

func (c *Client) ApprovalByID(id int) (*Approval, error)

func (*Client) CodeEnforcementByID

func (c *Client) CodeEnforcementByID(id int) (*CodeEnforcement, error)

func (*Client) InvoiceByID

func (c *Client) InvoiceByID(id int) (*Invoice, error)

func (*Client) ProjectByID

func (c *Client) ProjectByID(id int) (*Project, error)

type CodeEnforcement

type CodeEnforcement struct {
	Complaints []struct {
		ComplaintType string `json:"ComplaintType"`
		CaseID        int    `json:"CaseId"`
	} `json:"Complaints"`
	CaseID                int       `json:"CaseId"`
	CaseSource            string    `json:"CaseSource"`
	Description           string    `json:"Description"`
	OpenDate              Timestamp `json:"OpenDate"`
	CloseDate             Timestamp `json:"CloseDate"`
	StreetAddress         string    `json:"StreetAddress"`
	SortableStreetAddress string    `json:"SortableStreetAddress"`
	CloseNote             string    `json:"CloseNote"`
	CloseReason           string    `json:"CloseReason"`
	APN                   string    `json:"APN"`
	MapReference          string    `json:"MapReference"`
	Longitude             float64   `json:"Longitude"`
	Latitude              float64   `json:"Latitude"`
	NAD83Northing         string    `json:"NAD83Northing"`
	NAD83Easting          string    `json:"NAD83Easting"`
	Workgroup             string    `json:"Workgroup"`
	InvestigatorName      string    `json:"InvestigatorName"`
	InvestiagtorPhone     string    `json:"InvestiagtorPhone"`
	InvestigatorActive    string    `json:"InvestigatorActive"`
	InvestigatorEmail     string    `json:"InvestigatorEmail"`
	LastAction            string    `json:"LastAction"`
	LastActionDueDate     string    `json:"LastActionDueDate"`
	RemedyMsg             string    `json:"RemedyMsg"`
	Header                []struct {
		Jurisdiction  string                 `json:"Jurisdiction"`
		Agency        string                 `json:"Agency"`
		AgencyAddress string                 `json:"AgencyAddress"`
		AgencyWebsite string                 `json:"AgencyWebsite"`
		ExtractSystem string                 `json:"ExtractSystem"`
		ExtractDate   HeaderExtractTimestamp `json:"ExtractDate"`
		ExtractQuery  string                 `json:"ExtractQuery"`
	} `json:"Header"`
}

func DecodeCodeEnforcement

func DecodeCodeEnforcement(r io.Reader) (*CodeEnforcement, error)

type CodeEnforcementCase

type CodeEnforcementCase struct {
	XMLName                  xml.Name                       `xml:"case"`
	ID                       string                         `xml:"case_id,attr"`
	CaseSource               string                         `xml:"case_source"`
	Description              string                         `xml:"description"`
	OpenDate                 string                         `xml:"open_date"`
	CloseDate                string                         `xml:"close_date"`
	CloseReason              string                         `xml:"close_reason"`
	CloseNote                string                         `xml:"close_note"`
	APN                      string                         `xml:"APN"`
	StreetAddress            string                         `xml:"street_address"`
	SortableStreetAddress    string                         `xml:"sortable_street_address"`
	MapReference             string                         `xml:"map_reference"`
	Lat                      float64                        `xml:"latitude"`
	Lon                      float64                        `xml:"longitude"`
	NAD83Northing            string                         `xml:"nad83_northing"`
	NAD83Easting             string                         `xml:"nad83_easting"`
	Workgroup                string                         `xml:"workgroup"`
	InvestigatorName         string                         `xml:"investigator_name"`
	InvestigatorPhoneNumber  string                         `xml:"investigator_phone_number"`
	InvestigatorEmailAddress string                         `xml:"investigator_email_address"`
	InvestigatorActive       string                         `xml:"investigator_active"`
	LastAction               string                         `xml:"last_action"`
	LastActionDueDate        string                         `xml:"last_action_due_date"`
	RemedyMsg                string                         `xml:"remedy_msg"`
	Complaints               []CodeEnforcementCaseComplaint `xml:"complaints>complaint"`
}

type CodeEnforcementCaseComplaint

type CodeEnforcementCaseComplaint struct {
	XMLName xml.Name `xml:"complaint"`
	TypeID  string   `xml:"complaint_type_id,attr"`
	Type    string   `xml:"complaint_type"`
}

type CodeEnforcementCases

type CodeEnforcementCases struct {
	Metadata Metadata              `xml:"metadata"`
	Cases    []CodeEnforcementCase `xml:"cases>case"`
}

func DecodeCodeEnforcementCases

func DecodeCodeEnforcementCases(r io.Reader) (*CodeEnforcementCases, error)

type ComplaintType

type ComplaintType struct {
	ID          int
	Description string
}

type DataExtract

type DataExtract struct {
	ExtractSystem string               `xml:"extract_system"`
	Query         string               `xml:"query"`
	ExtractDate   ApplicationTimestamp `xml:"extract_date"`
	ReportTitle   string               `xml:"report_title"`
	RequestID     string               `xml:"request_id"`
}

type HeaderExtractTimestamp

type HeaderExtractTimestamp time.Time

func (HeaderExtractTimestamp) String

func (aet HeaderExtractTimestamp) String() string

func (*HeaderExtractTimestamp) UnmarshalJSON

func (aet *HeaderExtractTimestamp) UnmarshalJSON(data []byte) error

type Invoice

type Invoice struct {
	InvoiceID          int         `json:"InvoiceId"`
	Status             string      `json:"Status"`
	IssueDate          Timestamp   `json:"IssueDate"`
	IssuedBy           string      `json:"IssuedBy"`
	CustomerName       string      `json:"CustomerName"`
	CustomerFirmName   string      `json:"CustomerFirmName"`
	TotalAmount        float64     `json:"TotalAmount"`
	PaidDate           string      `json:"PaidDate"`
	ReverseDate        Timestamp   `json:"ReverseDate"`
	InvoiceTotalAmount interface{} `json:"InvoiceTotalAmount"`
	Header             []struct {
		Jurisdiction  string                 `json:"Jurisdiction"`
		Agency        string                 `json:"Agency"`
		AgencyAddress string                 `json:"AgencyAddress"`
		AgencyWebsite string                 `json:"AgencyWebsite"`
		ExtractSystem string                 `json:"ExtractSystem"`
		ExtractDate   HeaderExtractTimestamp `json:"ExtractDate"`
		ExtractQuery  string                 `json:"ExtractQuery"`
	} `json:"Header"`
	InvoiceNotes []struct {
		InvoiceID int    `json:"InvoiceId"`
		NoteID    int    `json:"NoteId"`
		Note      string `json:"Note"`
	} `json:"InvoiceNotes"`
	ProjectDetails []struct {
		Jobs        []interface{} `json:"Jobs"`
		ProjectFees []struct {
			InvoiceDetialID     int         `json:"InvoiceDetialId"`
			InvoiceID           int         `json:"InvoiceId"`
			ProjectID           int         `json:"ProjectId"`
			JobID               interface{} `json:"JobId"`
			ApprovalID          interface{} `json:"ApprovalId"`
			FeeTypeID           int         `json:"FeeTypeId"`
			FeeDescription      string      `json:"FeeDescription"`
			FeeQuantityRequired string      `json:"FeeQuantityRequired"`
			FeeTypeUnit         string      `json:"FeeTypeUnit"`
			FeeAmount           float64     `json:"FeeAmount"`
			PreviousCreditInv   string      `json:"PreviousCreditInv"`
			FeeAuthority        string      `json:"FeeAuthority"`
			InvoiceCalcRules    []struct {
				InvoiceDetailID   int           `json:"InvoiceDetailId"`
				FeeThresholdID    int           `json:"FeeThresholdId"`
				BaseQuantity      string        `json:"BaseQuantity"`
				BaseIncrement     string        `json:"BaseIncrement"`
				RuleRate          string        `json:"RuleRate"`
				RuleRateAmt       float64       `json:"RuleRateAmt"`
				FeeRule           string        `json:"FeeRule"`
				PreSurchargeAmt   float64       `json:"PreSurchargeAmt"`
				PreviousCreditAmt string        `json:"PreviousCreditAmt"`
				FeeSurchargeRules []interface{} `json:"FeeSurchargeRules"`
			} `json:"InvoiceCalcRules"`
		} `json:"ProjectFees"`
		ProjectID             int         `json:"ProjectId"`
		Title                 string      `json:"Title"`
		Scope                 string      `json:"Scope"`
		ApplicationExpiration string      `json:"ApplicationExpiration"`
		ApplicationExpired    bool        `json:"ApplicationExpired"`
		AdminHold             bool        `json:"AdminHold"`
		DevelopmentID         int         `json:"DevelopmentId"`
		DevelopmentTitle      string      `json:"DevelopmentTitle"`
		ApplicationDate       Timestamp   `json:"ApplicationDate"`
		AccountNum            string      `json:"AccountNum"`
		JobOrderNum           interface{} `json:"JobOrderNum"`
		ProjectFeesTotal      float64     `json:"ProjectFeesTotal"`
		ProjectFeesSubTotal   float64     `json:"ProjectFeesSubTotal"`
		ProjectManagerID      int         `json:"ProjectManagerId"`
		ProjectManager        struct {
			ProjectManagerID int    `json:"ProjectManagerId"`
			Name             string `json:"Name"`
			PhoneNum         string `json:"PhoneNum"`
			EmailAddress     string `json:"EmailAddress"`
			ActiveIndicator  bool   `json:"ActiveIndicator"`
		} `json:"ProjectManager"`
	} `json:"ProjectDetails"`
	InvoiceRevenue []struct {
		InvoiceID     int     `json:"InvoiceId"`
		FundNum       string  `json:"FundNum"`
		GLNum         string  `json:"GLNum"`
		CostObjectNum string  `json:"CostObjectNum"`
		Fund          string  `json:"Fund"`
		GL            string  `json:"GL"`
		Amount        float64 `json:"Amount"`
	} `json:"InvoiceRevenue"`
}

func DecodeInvoice

func DecodeInvoice(r io.Reader) (*Invoice, error)

type Metadata

type Metadata struct {
	Jurisdiction  string      `xml:"jurisdiction"`
	Agency        string      `xml:"agency"`
	AgencyAddress string      `xml:"agency_address"`
	AgencyWebsite string      `xml:"agency_website"`
	DataExtract   DataExtract `xml:"data_extract"`
}

type Project

type Project struct {
	Customers []struct {
		ProjectID  int    `json:"ProjectId"`
		CustomerID int    `json:"CustomerId"`
		Role       string `json:"Role"`
		FirmName   string `json:"FirmName"`
		Name       string `json:"Name"`
	} `json:"Customers"`
	ReviewCycles []struct {
		ReviewCycleID  int         `json:"ReviewCycleId"`
		CycleNum       int         `json:"CycleNum"`
		Method         string      `json:"Method"`
		Status         string      `json:"Status"`
		StatusSequence int         `json:"StatusSequence"`
		SubmitDate     interface{} `json:"SubmitDate"`
		DueDate        interface{} `json:"DueDate"`
		CloseDate      interface{} `json:"CloseDate"`
		Performance    interface{} `json:"Performance"`
		Reviews        []struct {
			ReviewCycleID int         `json:"ReviewCycleId"`
			ReviewID      int         `json:"ReviewId"`
			Discipline    string      `json:"Discipline"`
			Status        string      `json:"Status"`
			DueDate       interface{} `json:"DueDate"`
			CompletedDate interface{} `json:"CompletedDate"`
			Performance   string      `json:"Performance"`
			Name          string      `json:"Name"`
			Phone         string      `json:"Phone"`
			Email         string      `json:"Email"`
			IsActive      bool        `json:"IsActive"`
		} `json:"Reviews"`
	} `json:"ReviewCycles"`
	Jobs []struct {
		SignOffs []struct {
			DisciplineID          int    `json:"DisciplineId"`
			DisciplineDescription string `json:"DisciplineDescription"`
			SignedDate            string `json:"SignedDate"`
		} `json:"SignOffs"`
		ApprovalInfo []interface{} `json:"ApprovalInfo"`
		Approvals    []struct {
			JobID               int         `json:"JobId"`
			ApprovalID          int         `json:"ApprovalId"`
			Type                string      `json:"Type"`
			Status              string      `json:"Status"`
			Scope               string      `json:"Scope"`
			Depiction           string      `json:"Depiction"`
			IssuedBy            string      `json:"IssuedBy"`
			IssueDate           Timestamp   `json:"IssueDate"`
			FirstInspectionDate Timestamp   `json:"FirstInspectionDate"`
			CompleteCancelDate  Timestamp   `json:"CompleteCancelDate"`
			PermitHolder        string      `json:"PermitHolder"`
			NetChangeDU         string      `json:"NetChangeDU"`
			Valuation           string      `json:"Valuation"`
			SquareFootage       interface{} `json:"SquareFootage"`
		} `json:"Approvals"`
		ProjectID             int         `json:"ProjectId"`
		JobID                 int         `json:"JobId"`
		Description           string      `json:"Description"`
		APN                   string      `json:"APN"`
		StreetAddress         string      `json:"StreetAddress"`
		MapReference          string      `json:"MapReference"`
		SortableStreetAddress string      `json:"SortableStreetAddress"`
		Latitude              float64     `json:"Latitude"`
		Longitude             float64     `json:"Longitude"`
		NAD83Northing         interface{} `json:"NAD83Northing"`
		NAD83Easting          interface{} `json:"NAD83Easting"`
		JobFeesSubTotal       interface{} `json:"JobFeesSubTotal"`
	} `json:"Jobs"`
	Fees []struct {
		FeeID            int    `json:"FeeId"`
		Description      string `json:"Description"`
		Category         string `json:"Category"`
		Unit             string `json:"Unit"`
		QuantityRequired int    `json:"QuantityRequired"`
		QuantityPaid     int    `json:"QuantityPaid"`
		InvoiceID        int    `json:"InvoiceId"`
		InvoiceStatus    string `json:"InvoiceStatus"`
		ProjectID        int    `json:"ProjectId"`
	} `json:"Fees"`
	Invoices []struct {
		InvoiceID        int    `json:"InvoiceId"`
		InvoiceIssueDate string `json:"InvoiceIssueDate"`
		InvoiceStatus    string `json:"InvoiceStatus"`
		ProjectID        int    `json:"ProjectId"`
	} `json:"Invoices"`
	ProjectID             int         `json:"ProjectId"`
	Title                 string      `json:"Title"`
	Scope                 string      `json:"Scope"`
	ApplicationExpiration Timestamp   `json:"ApplicationExpiration"`
	ApplicationExpired    bool        `json:"ApplicationExpired"`
	AdminHold             bool        `json:"AdminHold"`
	DevelopmentID         int         `json:"DevelopmentId"`
	DevelopmentTitle      string      `json:"DevelopmentTitle"`
	ApplicationDate       Timestamp   `json:"ApplicationDate"`
	AccountNum            string      `json:"AccountNum"`
	JobOrderNum           interface{} `json:"JobOrderNum"`
	Header                []struct {
		Jurisdiction  string                 `json:"Jurisdiction"`
		Agency        string                 `json:"Agency"`
		AgencyAddress string                 `json:"AgencyAddress"`
		AgencyWebsite string                 `json:"AgencyWebsite"`
		ExtractSystem string                 `json:"ExtractSystem"`
		ExtractDate   HeaderExtractTimestamp `json:"ExtractDate"`
		ExtractQuery  string                 `json:"ExtractQuery"`
	} `json:"Header"`
	ProjectManagerID int `json:"ProjectManagerId"`
	ProjectManager   struct {
		ProjectManagerID int    `json:"ProjectManagerId"`
		Name             string `json:"Name"`
		PhoneNum         string `json:"PhoneNum"`
		EmailAddress     string `json:"EmailAddress"`
		ActiveIndicator  bool   `json:"ActiveIndicator"`
	} `json:"ProjectManager"`
}

func DecodeProject

func DecodeProject(r io.Reader) (*Project, error)

type RemedyType

type RemedyType struct {
	Sequence       int
	ID             int
	Remedy         string
	ActionSequence int
	ActionTypeID   int
	Action         string
}

type Timestamp

type Timestamp time.Time

func (Timestamp) String

func (at Timestamp) String() string

func (*Timestamp) UnmarshalJSON

func (at *Timestamp) UnmarshalJSON(data []byte) error

Jump to

Keyboard shortcuts

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