Select the ADU type you want to learn more about...
Alternatives
Other ways to add a dwelling unit:
click(showsummary(N)) & adutype(X) ==> ~adutype(X)
click(adutype(X,Y)) ==> adutype(Y)
click(adutype(X,Y)) & adutype(Z) ==> ~adutype(Z)
attribute(stickiness,class,X) :- evaluate(
if (
someadutype,
"blue2-bg", %sticks-at-top - to stick to top
true,
"blue2-bg"
), X
)
style(showsummary(X),display,Y) :- evaluate(
if(
someproject,
"none",
true,
""
), Y
)
style(goaway(X),display,Y) :- evaluate(
if (
someproject,
"",
true,
"none"
), Y
)
style(goawaycontainer(X),display,Y) :- evaluate(
if (
someproject,
"",
true,
"none"
), Y
)
attribute(goaway(X),href,Y) :- apn(A) & address(B) & evaluate(
stringappend(
"/designstandards/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur()
)
)
), Y
)
innerhtml(designadu,X) :- someproject & evaluate(design_sketch_header(),X)
attribute(editlink,href,Y) :- someproject & apn(A) & address(B) & evaluate(
stringappend(
if(
projectype(sketch),
"/sketch/",
true,
"/design/"
),
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur(),
if(
projectype(sketch),
stringappend("&project=",choose(P,project(P))),
projectype(design),
stringappend("&project=",choose(P,project(P))),
true,
""
)
)
)
), Y
)
innerhtml(summary,X) :- evaluate(summary_container(),X)
innerhtml(disclaimertop,X) :- disclaimertop(X)
innerhtml(aduheadercontainer,X) :- evaluate(aduheader_container(),X)
innerhtml(propertyinfo,X) :- evaluate(factoids(),X)
innerhtml(sitechallenge,X) :- evaluate(challengefactoids(),X)
innerhtml(disclaimerbottom,X) :- disclaimerbottom(X)
innerhtml(typeofadu(1),X) :- adutype(T) & evaluate(headingOf(T),X)
innerhtml(typeofadu(2),X) :- adutype(T) & evaluate(headingOf(T),X)
style(sitechallengecontainer,display,X) :- evaluate(
if (
somelotcondition,
"",
true,
"none"
), X
)
style(alternatives,display,X) :- evaluate(
if(
somealternativescontent,
"",
true,
"none"
), X
)
style(design,display,X) :- evaluate(
if (
someproject,
"",
true,
"none"
), X
)
innerhtml(costheading,X) :- costheadingtext(X)
innerhtml(costdisclaimer,X) :- costdisclaimer(X)
innerhtml(location,X) :- address(A) & apn(B) & evaluate(
if(
distinct(A,""),
capitalizeone(A),
true,
stringappend(B,", ",getjurprettyname())
), X
)
style(downloadreport,display,X) :- evaluate(
if(
someadutype, "",
true, "none"
), X
)
style(section(X),display,Y) :- evaluate(
if(
showsection(X), "",
true, "none"
), Y
)
showsection(summary) :- ~someadutype
showsection(report) :- someadutype
attribute(adutype(2,Y),class,C) :- evaluate(
if(
adutype(Y), "button-text1-bold summary-nav-link active",
true, "button-text1-bold summary-nav-link"
), C
)
style(costwidget(X),display,Y) :- evaluate(
if(
costwidget(X),
"",
true,
"none"
), Y
)
style(estimatedcosttooltip,display,Y) :- evaluate(
if(
projectype(design),
"none",
true,
""
), Y
)
attribute(footer,class,X) :- evaluate(
if(
someadutype, "",
true, "blue2-bg"
), X
)
style(timeline,display,X) :- evaluate(
if(
hidetimeline,
"none",
true,
""
), X
)
%%Generic Defs
interiorconversion :- adutype(interior)
attachedadu :- adutype(attached)
detachedadu :- adutype(detached)
junioradu :- adutype(junior)
someproject :- projectype(X)
somedesign :- projectype(X) & distinct(X,sketch)
interioradus :- interiorconversion
interioradus :- junioradu
someadutype :- adutype(X)
%residence type
singlefamilyresidence :- hometype(singlefamily)
multifamilyresidence :- hometype(multifamily)
someresidence :- somehometype & ~noresidence
somehometype :- hometype(X)
noresidence :- hometype(none)
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
unknownstandards :- someallowed & somenotallowed
innerhtml(moreeligibilitytext,Y) :- evaluate(
if(
status(allowed),
if (
california_law_applies,
"",
splitzoning,
"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,
"",
true,
stringappend(
choose(Y,talkToPlanningMessage(Y)),
" Contact the ",choose(L,planningDepartmentLink(L))," to learn what standards apply to your property."
)
),
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
)
%Capture SF MF case
showstandards :- someallowed & someresidence & ~unknownstandards & ~somecontactPlanning
adu_heading_with_preposition() := if(
custom_heading,
custom_adu_heading_with_preposition(),
adutype(attached),
"An attached ADU",
adutype(detached),
"A detached ADU",
adutype(interior),
"A conversion ADU",
adutype(junior),
"A junior ADU",
true,
""
)
adu_heading_with_lowercase_preposition() := if(
custom_heading,
custom_adu_heading_with_lowercase_preposition(),
adutype(attached),
"an attached ADU",
adutype(detached),
"a detached ADU",
adutype(interior),
"a conversion ADU",
adutype(junior),
"a junior ADU",
true,
""
)
attribute(adustatuscontainer,class,Y) :- evaluate(
if(
status(allowed),
"adustatus green100-bg white-fg padding-3x",
status(talkToPlanning),
"adustatus yellow100-bg white-fg padding-3x",
true,
"adustatus red100-bg white-fg padding-3x"
), Y
)
innerhtml(adustatus,Y) :- evaluate(
if(
status(allowed),
if (
california_law_applies,
if (
multifamilyresidence,
if (
detachedadu,
stringappend("California law allows two detached ADUs here. Your ",cityorcounty()," may have more restrictions."),
true,
stringappend("California law allows at least one conversion ADU here. Your ",cityorcounty()," may have more restrictions.")
),
true,
stringappend("California law allows ",adu_heading_with_lowercase_preposition()," here. Your ",cityorcounty()," may have more restrictions.")
),
splitzoning,
stringappend(adu_heading_with_preposition(), " is possible here"),
somewaitandlisten,
stringappend(adu_heading_with_preposition(), " is possible here"),
true,
stringappend(adu_heading_with_preposition(), " is possible here")
),
status(talkToPlanning),
if(
somecontactPlanning,
choose(Y,contactPlanning(Y)),
true,
stringappend(adu_heading_with_preposition(), " might be allowed here")
),
somenotallowedreason,
stringappend(adu_heading_with_preposition(), " is not allowed here"),
zoningdoesntallow,
stringappend(adu_heading_with_preposition(), " is not allowed here"),
true,
stringappend(adu_heading_with_preposition(), " is not allowed here")
), Y
)
california_law_applies :- ~evaluate(jurisdictionimplemented(),yes)
%Nav rules -- separate them out
attribute(locationtext,placeholder,X) :- locationvalue(X)
attribute(backtooverview(D),href,Y) :- apn(A) & address(B) & evaluate(
stringappend(
"/overview/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
"&jurisdiction=",getjur()
)
)
), Y
)
attribute(designlink(X),href,Y) :- apn(A) & address(B) & evaluate(
stringappend(
"/design/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur()
)
)
), Y
)
attribute(sketchlink(X),href,Y) :- 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()
)
)
), Y
)
attribute(reportlink(X),href,Y) :- apn(A) & address(B) & evaluate(
stringappend(
"/designstandards/",
convertbtoa(
stringappend(
"&apn=",A,
"&address=",B,
if(
somehometype,
stringappend("&residence=",choose(H,hometype(H))),
true,
""
),
"&jurisdiction=",getjur()
)
)
), Y
)
style(designlink(D),display,X) :- evaluate(
if (
design_disabled,
"none",
true,
""
), X
)
attribute(designlink(X),onclick,"return openandcheckdisclaimer()")
attribute(sketchlink(X),onclick,"return true;")
attribute(reportlink(X),onclick,"visitlinkonlogin(this.getAttribute('href')); return false;")
attribute(designlink(2),class,X) :- evaluate(
if (
design_disabled,
"disabled black",
notallowed,
"disabled black",
true,
""
), X
)
attribute(designlink(1),class,X) :- evaluate(
if(
somestatus & ~notallowed,
"link designlink",
true,
"link designlink disabled"
), X
)
attribute(sketchlink(1),class,X) :- evaluate(
if(
somestatus & ~notallowed,
"link designlink",
true,
"link designlink disabled"
), X
)
locationvalue(X) :- addresstext(A) & apn(B) & jurisdiction(C) & jurisdictionname(C,N) & evaluate(
if(
distinct(A,"-"),
A,
true,
stringappend(B,", ",N)
), X
)
jurisdictionname(X,Y) :- evaluate(getjur(),X) & evaluate(getjurprettyname(),Y)
jurisdictionlink(X,Y,Z) :- evaluate(getjur(),X) & evaluate(getplanningdescriptiontext(),Y) & evaluate(planningdeptlink(),Z)
addresstext(Y) :- address(X) & evaluate(
if(
empty(X),
"-",
true,
capitalizeone(X)
), Y
)
%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(
"ADU Report | ",
if(
matches(I,"-"),
K,
true,
choose(V,matches(K,"^([^,]*),.*$",V))
),
" | Symbium Build"
), X
)