Symbium Build for Business
Continue →
Browse all business types →
Where would you like to locate your business?
Search by address or select a location on the map.
Your business should be allowed at this location.
See your report →















select(keyword,K) & ~empty(K) ==> newkeyword(K)
select(keyword,K) & newkeyword(X) ==> ~newkeyword(X)

click(browseuse) & newkeyword(X) ==> ~newkeyword(X)

empty(X) :- matches(X,"^\s*$")
somekeyword :- keyword(K)
somenewkeyword :- newkeyword(K)

value(keyword,K) :- newkeyword(K)

attribute(keyword,class,X) :- evaluate(
  if(
    somenewkeyword,
    "search semi-bold hascontent",
    true,
    "search semi-bold"
  ), X
)
attribute(searchbusiness,href,X) :- evaluate(
  if(
    somenewkeyword,
    stringappend("/business/sanmateo/search?keyword=",choose(K,newkeyword(K))),
    true,
    ""
  ), X
)
attribute(searchbusiness,onclick,X) :- evaluate(
  if(
    somenewkeyword,
    "return true;",
    true,
    "document.querySelector('.search').focus(); return false;"
  ), X
)
attribute(browseuse,href,"/business/sanmateo/search")
attribute(keyword,placeholder,"Enter your business type")

load & evaluate(searchkeyword(),[X,Y]) & ~empty(X) & empty(Y) ==> keyword(X) & newkeyword(X) & searchbykeyword
load & evaluate(searchkeyword(),[X,Y]) & ~empty(X) & ~empty(Y) ==> keyword(Y) & newkeyword(Y) & use(Y)


load & evaluate(searchkeyword(),[X,Y]) & ~empty(Y) ==> use(Y)

attribute(scroll,class,X) :- evaluate(
  if(
    somekeyword,
    "scroll",
    true,
    "scroll bycategory"
  ), X
)
attribute(searchbar,class,Y) :- evaluate(
  if(
    searchbykeyword,
    "searchbar",
    true,
    "searchbar hidden"
  ), Y
)
attribute(searchbar(X),class,Y) :- evaluate(
  if(
    searchbar(X),
    "full-height",
    true,
    "hidden"
  ), Y
)
searchbar(X) :- evaluate(
  if(
    somekeyword,
    keyword,
    true,
    browse
  ), X
)

attribute(searchfooter,class,X) :- evaluate(
  if(
    searchbykeyword,
    "hidden",
    someuse,
    "hidden",
    true,
    "continue text-right"
  ), X
)
attribute(continue,disabled,X) :- evaluate(
  if(
    somecandidate,
    "no",
    true,
    "yes"
  ), X
)
attribute(continue,href,X) :- evaluate(
  if(
    somecandidate,
    stringappend("/business/sanmateo/search?keyword=",choose(A,candidate(A)),"&use=",choose(B,candidate(B))),
    true,
    "#"
  ), X
)

innerhtml(searchHeader,X) :- evaluate(
  if(
    searchbykeyword,
    if(
      somematch,
      "Select the best match for your proposed business.",
      true,
      "We are unable to locate business types that match your search."
    ),
    someuse,
    stringappend("Your proposed business:","<br>",choose(U,use(U))),
    true,
    ""
  ), X
)

style(legend,display,X) :- evaluate(
  if(
    someuse,
    "",
    somecandidate,
    "",
    true,
    "none"
  ), X
)


select(use,X) ==> use(X)
select(use,X) & use(Y) ==> ~use(Y)

select(use,X) ==> newkeyword(X)
select(use,X) & newkeyword(Y) ==> ~newkeyword(Y)
value(use,X) :- use(X)


select(candidate,X) ==> candidate(X)
select(candidate,X) & candidate(Y) ==> ~candidate(Y)

select(candidate,X) ==> newkeyword(X)
select(candidate,X) & newkeyword(Y) ==> ~newkeyword(Y)

value(candidate,X) :- candidate(X)
somecandidate :- candidate(X)

attribute(usematch,class,X) :- evaluate(
  if(
    searchbykeyword,
    "",
    true,
    "hidden"
  ), X
)


section(browse) :- ~somekeyword
section(use) :- somekeyword
section(location) :- someuse
section(status) :- someuse & somelocation

attribute(section(X),class,Y) :- evaluate(
  if(
    section(X),
    "",
    true,
    "hidden"
  ), Y
)

attribute(location,placeholder,"Search by address")
attribute(location,class,X) :- evaluate(
  if(
    somelocation,
    "search semi-bold hascontent",
    true,
    "search semi-bold"
  ), X
)
attribute(clearlocation,class,X) :- evaluate(
  if(
    somelocationtext,
    "clear-btn clickable",
    true,
    "clear-btn clickable hidden"
  ), X
)
clearlocation :- click(clearlocation)
clearlocation & location(X) ==> ~location(X)

select(location,X) & ~empty(X) ==> location(X)
select(location,X) & location(Y) ==> ~location(Y)

value(location,X) :- somelocation & evaluate(
  if (
    someaddress,
    capitalizeone(choose(A,address(A))),
    true,
    choose(A,apn(A))
  ), X
)
value(location,L) :- ~somelocation & location(L)
someaddress :- address(X) & ~empty(X)

%apn or address
select(locationtype,X) ==> locationtype(X)
select(locationtype,X) & locationtype(Y) ==> ~locationtype(Y)

%`some_questionss_not_answered` will never be in the model for SM since there are no additional questions 
attribute(viewreport,disabled,X) :- evaluate(
  if(
    some_questionss_not_answered,
    "yes",
    true,
    "no"
  ), X
)
attribute(viewreport,href,X) :- evaluate(
  if(
    somereportlink,
    choose(X,reportlink(X)),
    true,
    "#"
  ), X
)
somereportlink :- reportlink(X)
reportlink(X) :- apn(A) & address(B) & use(U) & evaluate(
  stringappend(
    "/business/sanmateo/report?apn=",A,"&address=",B,"&use=",U
  ), X
)



attribute(status(header),class,X) :- statusmessage(A,B,C) & evaluate(stringappend("h4 status status-",A),X)
innerhtml(status(header),B) :- statusmessage(A,B,C)
innerhtml(status(message),C) :- statusmessage(A,B,C)


innerhtml(marker,Y) :- statusmessage(X,Y,Z)

attribute(marker,"class",C) :- statusmessage(X,Y,Z) & evaluate(stringappend("marker ",X), C)
marker("allowed") :- ~unknown & minmaxstatus(3,3)

statusmessage("allowed","Allowed","Your business should be allowed at this location.") :- ~unknown & minmaxstatus(3,3)
statusmessage("notallowed","Not Allowed","It looks like your business isn't permitted at this location.") :- ~unknown & minmaxstatus(0,0)
statusmessage("error","Special Use Permit Required","Your business would require a special use permit at this location.") :- ~unknown & minmaxstatus(2,2)

additional_research_required :- ~additional_research_not_required
additional_research_not_required :- ~unknown & minmaxstatus(X,X)

statusmessage("error","Contact Planning","More research is needed to determine if your business is allowed here.") :- additional_research_required


someuse :- use(X)
somematch :- usematch(X)
somelocation :- apn(X)
somelocationtext :- location(X)

allusedescr(CATEGORY,USE,DESCR) :- classifiedas(USE,CATEGORY) & evaluate(
  if(
    somedescription(USE),
    choose(Z,description(USE,Z)),
    true,
    ""
  ), DESCR
)

usematchdescr(X,Y) :- usematch(X) & evaluate(
  if(
    somedescription(X),
    choose(Z,description(X,Z)),
    true,
    ""
  ), Y
)
somedescription(X) :- description(X,Y)

usematch(X) :- searchspace(X,Y) & keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch(Y,LK),1) & ~doNotMatch(X)
searchspace(X,X) :- classifiedas(X,C)
searchspace(X,C) :- classifiedas(X,C)
searchspace(X,T) :- description(X,D) & evaluate(html2text(D),T)
searchspace(X,K) :- keywordOf(X,K)
searchspace(X,D) :- keywordOf(X,K) & meaningOf(K,D)



doNotMatch("Minor motor vehicle repair") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("major",LK),1)
doNotMatch("Major motor vehicle repair") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("minor",LK),1)
doNotMatch("Parking facility") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("storage, dismantled, wrecked, parts, store",LK),1)
doNotMatch("Alternative financial service") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("bank, credit union, mortgage, savings, retail",LK),1)
doNotMatch("Home occupation") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("auto, repair, retail, sales",LK),1)
doNotMatch("Laboratory") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("manufacturing, manufacture, assembly, packaging",LK),1)
doNotMatch("Auditorium, stadium, arena, armory, gymnasium, and other similar places for public events") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("office",LK),1)
doNotMatch("Philanthropic institution and/or eleemosynary use") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("mental",LK),1)
doNotMatch("Sanitarium") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("animal, hospital",LK),1)
doNotMatch("Railroad rights-of-way and improvements") :- keyword(K) & lowercase(K,LK) & evaluate(fuzzymatch("depot, loading, platform, station, shed, warehouse, shop, car, yard, water, tower",LK),1)

%locationselected & location(X) ==> ~location(X)
locationselected & address(X) ==> ~address(X)
locationselected & apn(X) ==> ~apn(X)
locationselected & zone(X) ==> ~zone(X)
locationselected & othercondition(X) ==> ~othercondition(X)

attribute(page,class,X) :- evaluate(
  if(
    cat_party,
    "cat-party",
    true,
    ""
  ), X
)
cat_party :- value(keyword,"10 cats")