Residence on Property
Area of Primary Residence
Reset Property Information
We’re assuming there’s a single-family home on this property.
If not, click here.
Information based on best available data. Please confirm accuracy.
Show more property infomation
Soil may lose its strength during an earthquake.
%this is to add custom data disclaimers per jurisdiction
innerhtml(data_disclaimer,X) :- data_disclaimer(X)
jurisdictionname(X,Y) :- evaluate(getjur(),X) & evaluate(getjurprettyname(),Y)
jurisdictionlink(X,Y,Z) :- evaluate(getjur(),X) & evaluate(getplanningdescriptiontext(),Y) & evaluate(planningdeptlink(),Z)
%common logic
status(allowed) :- someallowed & someresidence & ~sometalkToPlanning
status(talkToPlanning) :- ~notallowed & sometalkToPlanning
status(notallowed) :- notallowed
somestatus :- status(X)
notallowed :- zoningdoesntallow
notallowed :- noresidence
permittedadu :- someallowed & ~noresidence
somewaitandlisten :- waitandlisten(X)
somewaitandlistenmoretext :- waitandlistenmoretext(X)
somecontactPlanning :- contactPlanning(X)
sometalkToPlanning :- talkToPlanning(X)
sometalkToPlanning :- contactPlanning(X)
sometalkToPlanning :- talktoDCP
sometalkToPlanning :- someallowed & somenotallowed
some_allowed_status_override :- allowed_status_override(X)
unknownstandards :- someallowed & somenotallowed
%unknownstandards :- splitzoning
%innerhtml(propertyinformation,X) :- renderedinfo(X)
%Capture SF MF case
showstandards :- someallowed & someresidence & ~unknownstandards & ~somecontactPlanning
domoreavailable :- ~status(notallowed)
recheckavailable :- status(X) & ~zoningdoesntallow & ~unknownstandards
zoningdoesntallow :- ~someallowed
somenotallowedreason :- notallowedreason(X)
%talkToPlanning :- planned_development
%talkToPlanning :- talkToDCP
%talkToPlanning :- someallowed & somenotallowed
planned_development :- zone(Z) & pdzone(Z)
singlefamilyresidence :- hometype(singlefamily)
multifamilyresidence :- hometype(multifamily)
someresidence :- somehometype & ~noresidence
noresidence :- hometype(none)
savedefaultdata & property_area(X,Y) ==> default_property_area(X,Y)
savedefaultdata & residence_assumption & evaluate(default_residence_type(),R) ==> hometype(R)
default_residence_type() := if(
defaultmultifamily, multifamily,
true, singlefamily
)
innerhtml(residence_assumption_text,X) :- evaluate(
if(
hometype(singlefamily),
"a single-family home",
hometype(multifamily),
"a multi-family home",
true,
"no residence"
), X
)
click(resetpropertybtn) & default_property_area(primaryarea,X) & temp(primaryarea,Z) ==> temp(primaryarea,X) & ~temp(primaryarea,Z)
click(resetpropertybtn) & default_property_area(otherarea,X) & temp(otherstructures,Z) ==> temp(otherstructures,X) & ~temp(otherstructures,Z)
click(resetpropertybtn) & default_property_area(garagearea,X) & temp(garagearea,Z) ==> temp(garagearea,X) & ~temp(garagearea,Z)
property_area(primaryarea,X) :- primaryarea(X)
property_area(otherarea,X) :- otherarea(X)
property_area(garagearea,X) :- garagearea(X)
style(multifamilyallowed,display,X) :- evaluate(
if(
multifamilyunitallowed,
"",
true,
"none"
), X
)
innerhtml(singlefamilystatus,X) :- evaluate(
if(
proposedsf,
"an existing or proposed",
true,
"existing"
), X
)
innerhtml(multifamilystatus,X) :- evaluate(
if(
true,
"an existing"
), X
)
attribute(locationtext,placeholder,X) :- locationvalue(X)
attribute(designlink(X),href,Y) :- designhref(Y)
designhref(X) :- apn(A) & address(B) & evaluate(
stringappend(
"/design/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur()
)
)
), X
)
sketchhref(X) :- apn(A) & address(B) & uuid(P) & evaluate(
stringappend(
"/sketch/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
"&project=",P,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur()
)
)
), X
)
attribute(sketchlink(X),href,Y) :- sketchhref(Y)
attribute(viewsketch(X),href,Y) :- sketchhref(Y)
reporthref(X) :- apn(A) & address(B) & evaluate(
stringappend(
"/designstandards/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur()
)
)
), X
)
attribute(reportlink(X),href,Y) :- reporthref(Y)
attribute(viewdesign(X),href,Y) :- designhref(Y)
attribute(reportlink(D),"disabled-link",X) :- evaluate(
if(
showstandards,
"no",
true,
"yes"
), X
)
attribute(designlink(D),"disabled-link",X) :- evaluate(
if(
somestatus & ~notallowed,
"no",
true,
"yes"
), X
)
attribute(sketchlink(D),"disabled-link",X) :- evaluate(
if(
somestatus & ~notallowed,
"no",
true,
"yes"
), X
)
style(designlink(D),display,X) :- evaluate(
if (
design_disabled,
"none",
true,
""
), X
)
attribute(designlink(X),onclick,"return openandcheckdisclaimer()")
attribute(viewdesign(X),onclick,"return openandcheckdisclaimer()")
attribute(sketchlink(X),onclick,"return true;")
attribute(reportlink(X),onclick,"_fullreport_was_clicked = true; doSomethingOnLogin(()=>{view_general_report(); location = this.getAttribute('href');}); return false;")
attribute(viewstandards(X),onclick,"_fullreport_was_clicked = true; doSomethingOnLogin(()=>{view_general_report(); location = this.getAttribute('href');}); return false;")
attribute(viewstandards(X),href,Y) :- apn(A) & jurisdiction(J) & hometype(H) & evaluate(
stringappend(
"/designstandards/", convertbtoa(stringappend("jurisdiction=",J,"&apn=",A,"&residence=",H))
)
,Y
)
locationvalue(X) :- addresstext(A) & apn(B) & jurisdiction(C) & jurisdictionname(C,N) & evaluate(
if(
distinct(A,"-"),
A,
true,
stringappend(B,", ",N)
), X
)
addresstext(Y) :- address(X) & evaluate(
if(
empty(X),
"-",
true,
capitalizeone(X)
), Y
)
innerhtml(eligiblityaddressheader,X) :- addresstext(X)
splitzoning :- allowedzone(X) & allowedzone(Y) & distinct(X,Y)
style(recheck(X),display,Y) :- evaluate(
if(
recheckavailable,
"",
true,
"none"
), Y
)
attribute(eligibilitystatus(X),class,Y) :- evaluate(
if(
status(allowed),
"green-text",
status(talkToPlanning),
"",
true,
"red-text"
), Y
)
planningDepartmentLink(L) :- evaluate(
stringappend(
linkstyle("Planning Department",planningdeptlink())
), L
)
linkstyle(T,L) := stringappend("<a class='link' href='",L,"' target='_blank'>",T,"</a>")
n(1) n(2)
%Main eligibility title status
innerhtml(eligibilitystatus(X),Y) :- n(X) & evaluate(
if(
status(allowed),
if (
some_allowed_status_override,
choose(R,allowed_status_override(R)),
california_law_applies,
"California law allows an ADU here. Your city may have more restrictions.",
true,
"An ADU is possible here!"
),
status(talkToPlanning),
if(
somecontactPlanning,
choose(Y,contactPlanning(Y)),
true,
"An ADU is possible here!"
),
somenotallowedreason,
"An ADU is not allowed here",
zoningdoesntallow,
"An ADU is not allowed here",
true,
"An ADU is not allowed here"
), Y
)
california_law_applies :- ~evaluate(jurisdictionimplemented(),yes)
innerhtml(moreeligibilitytext,Y) :- evaluate(
if(
status(allowed),
if (
california_law_applies,
"",
splitzoning,
stringappend("However, your property has split zoning. Contact the ",choose(L,planningDepartmentLink(L))," to learn what standards apply to your property."),
somewaitandlisten,
choose(W,waitandlisten(W)),
somewaitandlistenmoretext,
choose(W,waitandlistenmoretext(W)),
true,
""
),
status(talkToPlanning),
if(
somecontactPlanning,
"",
sometalkToPlanningMessage,
stringappend(
choose(Y,talkToPlanningMessage(Y)),
" Contact the ",choose(L,planningDepartmentLink(L))," to learn what standards apply to your property."
),
true,
""
),
somenotallowedreason,
choose(R,notallowedreason(R)),
zoningdoesntallow,
"ADUs are only allowed in zoning districts in which residential uses are allowed. Because residential uses are not allowed in your zoning district, an ADU is not allowed here.",
true,
"Unfortunately, accessory dwelling units are not allowed on properties without a single-family or multi-family residence."
), Y
)
statustext(X) :- evaluate(
if(
status(allowed),
"An Accessory Dwelling Unit is possible here!",
status(talkToPlanning),
stringappend("Contact the Planning Department to find out what standards apply."),
true,
"An Accessory Dwelling Unit is not allowed here."
), X
)
statusclass(X) :- evaluate(
if(
status(allowed),
"large-text bold allowed",
status(talkToPlanning),
"large-text bold contactplanning",
true,
"large-text bold notallowed"
), X
)
innerhtml(statustext,X) :- statustext(X)
attribute(statustext,class,X) :- statusclass(X)
style(viewstandards(X),display,Y) :- evaluate(
if(
showstandards,
"",
true,
"none"
), Y
)
style(viewdesign(D),display,X) :- evaluate(
if (
design_disabled,
"none",
true,
""
), X
)
style(viewsketch(D),display,X) :- evaluate(
if (
~somestatus & notallowed,
"none",
true,
""
), X
)
style(allowedaction(X),display,Y) :- evaluate(
if(
~status(notallowed),
"",
true,
"none"
), Y
)
style(notallowedaction(X),display,Y) :- evaluate(
if(
status(notallowed),
"",
true,
"none"
), Y
)
click(donemap) & editmap ==> ~editmap
click(editmap) ==> editmap
style(editmap,display,X):- evaluate(
if (
editmap,
"none",
true,
""
), X
)
attribute(maplayer,editmode,X):- evaluate(
if (
editmap,
"yes",
true,
"no"
), X
)
innerhtml(talkToPlanningMessage,X) :- talkToPlanningMessage(X)
talkToPlanningMessage(X) :- evaluate(
if(
someallowed & somenotallowed,
"Your property has split zoning and ADUs may not be allowed in some parts of your property.",
somecontactPlanning,
choose(Y,contactPlanning(Y)),
sometalkToPlanning,
stringappend(
"Your property is in ",
listappend(setofall(P, talkToPlanning(P))),
"."
),
somewaitandlisten,
choose(Y,waitandlisten(Y)),
splitzoning,
"Your property has split zoning.",
true,
""
), X
)
sometalkToPlanningMessage :- talkToPlanningMessage(X) & distinct(X,"")
style(noresidence,display,X) :- evaluate(
if(
noresidence,
"",
true,
"none"
), X
)
style(talkToPlanning,display,X) :- evaluate(
if(
sometalkToPlanningMessage & ~status(notallowed),
"",
true,
"none"
), X
)
style(eligibility(X),display,Y) :- evaluate(
if(
somestatus,
"",
true,
"none"
), Y
)
empty(X) :- matches(X,"^(\s*)$")
select(locationtext,X) & ~empty(X) ==> locationsearch(X)
select(locationtext,X) & locationsearch(Y) ==> ~locationsearch(Y)
value(locationtext,X) :- locationsearch(X)
load ==> tab(general)
%Hijacking the tab(X) feature now that there is no more Zone tab for the Statewide roll out
click(showmore) & ~tab(showmore) ==> tab(showmore)
click(showmore) & tab(showmore) ==> ~tab(showmore)
innerhtml(showmore,X) :- evaluate(
if(
tab(showmore),
"Show less property information",
true,
"Show more property information"
), X
)
%click(toggletab(X)) ==> tab(X)
%click(toggletab(X)) & tab(Y) ==> ~tab(Y)
%Property edit modal section
click(checkeligibility(X)) ==> showpropertyeditmodal
click(primaryarea) ==> showpropertyeditmodal
click(otherarea) ==> showpropertyeditmodal
select(temp(X),Y) ==> temp(X,Y)
select(temp(X),Y) & temp(X,Z) ==> ~temp(X,Z)
value(temp(primaryarea),Y) :- temp(primaryarea,Y)
value(temp(otherstructures),Y) :- temp(otherstructures,Y)
value(temp(hometype),Y) :- temp(hometype,Y)
%click(propertyinfocancel) & showpropertyeditmodal ==> ~showpropertyeditmodal
click(propertyinfocancel) & temp(X,Y) ==> ~temp(X,Y) & ~showpropertyeditmodal
click(propertyinfosave) & temp(primaryarea,X) & primaryarea(A) ==> primaryarea(X) & ~primaryarea(A)
click(propertyinfosave) & temp(otherstructures,Y) & otherarea(B) ==> otherarea(Y) & ~otherarea(B)
click(propertyinfosave) & temp(hometype,Z) ==> hometype(Z)
click(propertyinfosave) & hometype(C) ==> ~hometype(C)
click(propertyinfosave) & showpropertyeditmodal ==> ~showpropertyeditmodal
click(propertyinfosave) ==> ~residence_assumption
~showpropertyeditmodal & primaryarea(X) & otherarea(Y) & hometype(Z) ==> temp(primaryarea,X) & temp(otherstructures,Y) & temp(hometype,Z)
residenceonpropertyselect
style(propertyinfomodal,display,X) :- evaluate(
if (
~showpropertyeditmodal,
"none",
true,
"flex"
), X
)
showsection(overview)
click(hometype(X)) ==> hometype(X)
click(hometype(X)) & hometype(Y) ==> ~hometype(Y)
style(eligibilityquestion,display,X) :- evaluate(
if (
~show_eligibility_question,
"none",
true,
""
), X
)
somehometype :- hometype(X)
%TO-DO AM - get rid of this rule
style(eligibilitymodal,display,"none") :- evaluate(
if (
somehometype,
"none",
start_survey,
"none",
true,
"flex"
), X
)
attribute(checkeligibility(1),interactive,X) :- evaluate(
if(
somestatus,
"no",
true,
"yes"
), X
)
attribute(checkeligibility(1),class,X) :- evaluate(
if(
status(notallowed),
"button-capsule icon-button icon-left active icon-notallowed",
status(allowed),
"button-capsule icon-button icon-left active icon-allowed",
status(talkToPlanning),
"button-capsule icon-button icon-left active icon-warning",
true,
"button-capsule"
), X
)
style(header(X),display,Y) :- evaluate(
if(
showsection(X),
"",
true,
"none"
), Y
)
style(content(X),display,Y) :- evaluate(
if(
showsection(X),
"",
true,
"none"
), Y
)
attribute(aducheck,"interactive",X) :- evaluate(
if(
permittedadu,
"no",
notpermittedadu,
"no",
true,
"yes"
), X
)
attribute(aducheck,"class",X) :- evaluate(
if(
permittedadu,
"button-capsule active icon-button icon-allowed icon-left",
notpermittedadu,
"button-capsule active icon-button icon-notallowed icon-left",
true,
"button-capsule"
), X
)
style(tab(X),display,Y) :- evaluate(
if(
tab(X),
"",
true,
"none"
), Y
)
style(editing,display,Y) :- evaluate(
if(
tab(general),
"",
true,
"none"
), Y
)
attribute(toggletab(X),"class",Y) :- evaluate(
if(
tab(X),
"button-capsule active",
true,
"button-capsule"
), Y
)
click(editmap) ==> editmap
click(donemap) ==> ~editmap
click(remove) ==> action(remove)
click(add) ==> action(add)
attribute(maplayer,delete,"yes") :- action(remove)
attribute(maplayer,delete,"no") :- ~action(remove)
resetaction & action(X) ==> ~action(X)
resetaction :- click(cancellocal)
resetaction :- click(donelocal)
someaction :- action(X)
%Edited during statewide update and modal update since there is no more tab switching
attribute(page,class,X) :- evaluate(
if(
~checkeligibility,
"sidebar property-overview full-height shadowed",
true,
"sidebar property-overview full-height shadowed"
%"sidebar eligibility full-height shadowed"
), X
)
style(page,display,X) :- evaluate(
if(
~editmap,
"",
true,
"none"
), X
)
style(mapaction,display,X) :- evaluate(
if(
editmap & ~someaction,
"",
true,
"none"
), X
)
style(mapmessage,display,X) :- evaluate(
if(
someaction,
"",
editmap,
"",
true,
"none"
), X
)
style(mapbuttons,display,X) :- evaluate(
if(
action(remove),
"",
true,
"none"
), X
)
style(undobtn,display,X) :- evaluate(
if(
action(add),
"",
true,
"none"
), X
)
style(donebtn,display,X) :- evaluate(
if(
~action(add),
"",
true,
"none"
), X
)
innerhtml(mapmessage,X) :- evaluate(
if(
action(add),
"<div class='leaflet-control-addbuilding-link white-icon'><a class='flex-box'></a></div><div class='hgap-1x'></div>Add Building: click on map to start drawing",
action(remove),
"<div class='leaflet-control-demolish-link white-icon'><a class='flex-box'></a></div><div class='hgap-1x'></div>Remove Building: click on incorrect building to remove it",
editmap,
"<div class='leaflet-control-editmap-link white-icon'><a class='flex-box'></a></div><div class='hgap-1x'></div>Edit Building: click and drag to reshape buildings"
), X
)
attribute(editmapdata,class,X) :- evaluate(
if(
sf_specialcased,
"overview-row flex-box wrap border-bottom hidden",
true,
"overview-row flex-box wrap border-bottom"
), X
)
shouldMapClickBeHonored :- ~editmap
%If there is an address, use everything before the ","| If just APN, then use APN + Jur
innerhtml(title,X) :- locationvalue(K) & addresstext(I) & evaluate(
stringappend(
"Property | ",
if(
matches(I,"-"),
K,
true,
choose(V,matches(K,"^([^,]*),.*$",V))
),
" | Symbium Build"
), X
)
show_residence_assumption :- residence_assumption & ~zoningdoesntallow & ~somenotallowedreason
style(residence_assumption,display,X) :- evaluate(
if (
show_residence_assumption,
"",
true,
"none"
), X
)