Add demo presentation + 14 deliverables for PharmaCorp Mexico scenario

- gen_demo_deck.py: Generates 11-slide demo presentation using Oracle FY26
  template. LLM-agnostic messaging (works on Claude, Codex, GPT, Gemini).
  Before/After comparison, 14 live prompts in table format.
- examples/output-demo-pharma-mx/: Complete deliverable set for a pharma
  migration scenario (ExaCS X6 → OCI ExaCS X11M, dual-region DR, SOX).
  One file per skill option (1-14): pptx, drawio, pdf, xlsx, json, yaml.
- Improved prompts: richer discovery context (SOX compliance, dual
  FastConnect, Hub-Spoke, OCI Vault), intentionally flawed arch for WA
  review (1/23 passed), DEP field findings, ECAL gap analysis.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-04-12 23:24:35 -03:00
parent b48d155c1b
commit 3c88df33f8
20 changed files with 2354 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
# Prompt 13: BOM generator
# ExaCS X11M Half Rack + ADB-S + networking + security
metadata:
customer: "PharmaCorp Mexico"
prepared_by: "Carlos Mendoza — Solutions Architect"
date: "2026-04-12"
currency: "USD"
contract_months: 12
discount_pct: 0.45
notes: "ExaCS BYOL — customer has existing Oracle DB EE licenses"
line_items:
# ExaCS Production — Queretaro
- category: "Exadata Cloud Service"
product: "ExaCS X11M Half Rack — DB Server"
sku: "B92459"
qty: 4
unit: "OCPU per hour"
hours_units: 744
months: 12
notes: "4 DB servers, 128 ECPUs each, BYOL"
- category: "Exadata Cloud Service"
product: "ExaCS X11M Half Rack — Storage Server"
sku: "B92460"
qty: 6
unit: "per hour"
hours_units: 744
months: 12
notes: "6 storage servers"
# ADB-S
- category: "Autonomous Database"
product: "ADB-S Serverless ECPU"
sku: "B97472"
qty: 32
unit: "ECPU per hour"
hours_units: 744
months: 12
notes: "32 ECPU for DW migration (Phase 2)"
# Storage
- category: "Block Storage"
product: "Block Volume Performance Units"
sku: "B91628"
qty: 50000
unit: "GB per month"
hours_units: 1
months: 12
notes: "50TB block storage"
# Networking
- category: "Networking"
product: "FastConnect 10Gbps"
sku: "B91960"
qty: 2
unit: "port per hour"
hours_units: 744
months: 12
notes: "Dual 10Gbps circuits"
# Security
- category: "Security"
product: "OCI Vault — Key Management"
sku: "B92098"
qty: 10
unit: "key version per month"
hours_units: 1
months: 12
notes: "TDE keys for 3 databases + DR + backups"

Binary file not shown.

View File

@@ -0,0 +1,54 @@
# Prompt 2: Architecture diagram
# ExaCS dual-region with Data Guard, Hub-Spoke, dual FastConnect
title: "PharmaCorp Mexico — ExaCS Migration Architecture"
regions:
- name: "Queretaro (Primary)"
availability_domains:
- name: "AD-1"
subnets:
- name: "DB Subnet (Private)"
services:
- name: "ExaCS X11M"
type: "database"
notes: "3 DBs: EBS R12, SAP, DW"
- name: "App Subnet (Private)"
services:
- name: "EBS App Tier"
type: "compute"
- name: "Bastion"
type: "security"
- name: "Public Subnet"
services:
- name: "WAF"
type: "security"
notes: "Protects EBS web tier"
hub_services:
- name: "DRG"
type: "networking"
- name: "OCI Vault"
type: "security"
- name: "OCI Audit + Logging"
type: "observability"
- name: "Sao Paulo (DR)"
availability_domains:
- name: "AD-1"
subnets:
- name: "DB Subnet (Private)"
services:
- name: "ExaCS Standby"
type: "database"
notes: "Data Guard: EBS + SAP"
connections:
- from: "Mexico City DC"
to: "DRG (Queretaro)"
type: "FastConnect 10Gbps Dual"
- from: "ExaCS X11M"
to: "ExaCS Standby"
type: "Data Guard (async redo)"
- from: "DRG"
to: "Sao Paulo VCN"
type: "Remote peering"

View File

@@ -0,0 +1,269 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 8 0 R /F5 10 0 R /F6 14 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
9 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
11 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/BaseFont /Symbol /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
15 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
17 0 obj
<<
/Contents 30 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
18 0 obj
<<
/PageMode /UseNone /Pages 20 0 R /Type /Catalog
>>
endobj
19 0 obj
<<
/Author (Carlos Mendoza) /CreationDate (D:20260412231513-03'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260412231513-03'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (OCI Architecture Proposal) /Title (PharmaCorp Mexico \204 Oracle Database Migration to OCI) /Trapped /False
>>
endobj
20 0 obj
<<
/Count 10 /Kids [ 5 0 R 6 0 R 7 0 R 9 0 R 11 0 R 12 0 R 13 0 R 15 0 R 16 0 R 17 0 R ] /Type /Pages
>>
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 570
>>
stream
Gatn!9lJN8&;KZL(%6/,_8K]#EeJ:l.T*U0*&qmlM74Fg`5,#;(\-N'-VMuB'qu>HjKV4HH(UKZ7nS[mHdr.89>#_o_$.t%\7,g,HX)fW[tO9<E,ED#actapaeTfkD:1)r)$QEp+?8`5&n^]6dZ"R.1qa[p-J$d@1'&Osb-&O&:3I(Me-5Ck?Eidpc'6_P:gf0E[K_pG$0@l]I]O[PPVg]1EJMe5E.\V&`qO*!j*H'/F(\^iW@HN2?md%&U&9f=/.*ATcD%D6/2*=>ku"nE2^<'Ec(4/Jd!5orY,R7fk6%0Ep<HEmmtkVC_r+$D_Y<GK&_](*2n3jFV\,I_i6I&ZHc5`2`pfXj6M&j)W]TmS>d+.jNU&$5)@Pr2@L9;]=tW2!h!?W/D1*7?jmJV\5>aVpd,qeAbBT/G3LD.'U,>9<iX]%sWY3[Q.[E8:Y(Ni[LN>Q106VHIC2Ur;+\Y)FmB7)D4Pp,f?OA/&i;!0?(V#BM]D_L1l*Cp*jK+1RT<`r3PX7Tm-oq;lLg(g%5LRLHgAeDPM.8o^Xe0B6p:F_Q.EqFpJia!%ndARjp0@~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2000
>>
stream
Gau0D>Beg[%"?O+^r(JYe(L`lh08RUHe5ST(OJdsnj6!V_aY7R8kSAu5EN0]-]RL?dn\XgV$Pu]n.>Xf^rAUWr/<F^_[1]O,sWkPAjBVEKuos+1>.$,Z\$PI+po(p>`[f1s,Y%ifcGjF]c9-N!mcW14>/O0.?+"el9_U)ZM^OSbB5oc\R;t$"MP*VC*HsaC9@`]&s?+*KJFBLhD(;#,H2#0kMJ]ZpL3V%-6KY,FW'1AJ\NOU,kIEpG[:]BY)-8C*JHBqLhm_"kY5_sZo=<&]&RHMNBcRu^H+b-a)\*d1pk->.5p?S2g@ZG'npFm%gjU\TJlJp"KjF5Xb:U[?u&GUVUIsP#SmJ^"8%]5_tIG&ZGD4Ye#@tg[85;^1cY<Vj15ka*6*,e0su7<o7^1/lE"_M&GWPb/@gndOC8V_F\%#/k7Q/-HNobn2[#%b&>FnQHjprVUn/N6d+uc4PAXl'c!OlgaFYpCnIchO:b5@%,ckHR<oVQpi8ehcf7XW<D[5<Tb97k_h!Tg=naEDQ4;3&0a`jTciN!K&,C*aU""O^)=aVUfH)H2Ua[j]HWL.Z55.<TgT.++'5qL3ZKO9NMScd.L87d0UK#fGK*b81=:="MJ<J$aK+I8#nR?n\ZMg=n(.!Tb(LIQJE#"8'=gb1`8Nr@p<@hSkgFfZmD^f-APgr-#[7)P!#(nFDY@l]]0_h0cKO_N(Ms7dK>e5i?_mGRj3_X&?AhE6ULC56akH*Ma@]0FfjY(_[+;q*_>pkn"8+r)Yi0q,)/kLq%@M<\uHX\j^\,qSVT@V)C_)\&QMQ&38`NN[6,jO_RtT<(f6##7<oUtZq3igP02R_s2G/#@6H.u`ao+>.roECBt&PPB#S-/+a!,sec0o^Q@hq7=SnNnTp9aUf@sl]3ulmlO[=r-!Q?<9j/`Q.jl.A0*BKL#uAqKS$OW88<hbKUF5uQ9q+aEdJ5^TN>Nb6TdaO=uN'aZ'&[T>YJ4A@N-45ZMR&]Qdf[7QI5b*$jrl?'G\Xid?_*`;(W]^0uf?VXk3]Q:Mf2FY;&`<M1^SP.7B7M)SGo'ZT8[5Ahm0SL4YoX<f!@)-cF=i?):81'/o4?19^+fX`(6-6S5>Ze9@kK93IW92<R2$'ke/m[>@!;eKCqs_,itK[Js;c=1i!7@K:Kr^rBudX!n3bR)&pJ$B+LtTm)QcKM,@D&nY$m3=7"MkIT%\?Xl0uVk^PZpT#p/oBJoIH_'Oo_/RlV&0m5e3Q2nrUKGh%$6c!8MpeQRD(&2agb4D$F)YmFT(l9/dT".ZHQ/E6p(,$=bkK6L8S@L`04<=uXHtM,@pjF*1Q6Ra@]Jk'%5h'ETC;%\eG!>;(=]+_:+7Oc9`b_,lt/`?PXskhaKPp4r&97;Q,LLB?b^VN=0<G?0QB)G4E5gW@e.`?_a97+i&2!#m[Zt@7PfucilW"llCIlcZFrFVNk'HM)"WUBC<%bN;:t3I8:ieo-@8,-35OP_.WbY'-1l`Zq;;q;hb"XsR=ZELZM;-dn;-9G;D3i(VG2e#RIJ]72Ghsn+Vh;@5OrnP\+#+aL:\so%R>h;1#>r#(i^O9AfpRBinHbtmk:7Sq@5]KfQ+V$E]_[FEZ#"N\]?a)]=V>b9^pjBcaq%uSS;$;VI4@q-U*eHg#si(!t4k;6a\8i7^\IY.sRE7^P`HFgd]6mSdG-SHJ;Ts25Mp3c/&W4SZ>gaD'RD>PAJ@<lb9Wb[)ZVr5W^u4@_ZS/%D+COMqLaOYjsj0Q2b0Li=.]&53uZF09un%[(VmW%8H](KNC\Q@'si\"kn_X]M4b"6BB1!\C$5N1RW,52bRKL@S$+-gVo(W/@gKORo@iKUDHij.#;H0#:%PJQTH]e+"S,jj6h*<(FsYEM]V5<5K/KZQ[N61hm]6QIAn)^1,F--c(*?[DL1RCMS7`lI/H:UDqFp;RbP!UX#8V6d<:MZ6kd_%N6Q.9Q4dO\5^utOG+TbD=q-SUXo!WiR+7!LDrGF8IJLM,m[=-&rrU/\L?&~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2270
>>
stream
Gau0D8U&oI&AJ$CbY`()QJa*iY8>/^dO)5/WD*o65U7VKi>)F#U]1,8J;YhrQK)"kGn+O"1RRuMqd9U\raY[%,R8S)J=eJ30FnpL@"B!,iXMD2:-P:0PM#Q+*]W"%#T5hi2\0dY:HZ-K.3K%,&k7sM(rl8$KDA*>/gbF6-Yeo,JKK3e!1\SE8JHc/RTMNM[3bq*RUd.:Tc?PR)m441>,hqdMD$_6?bkZ>=StGLL,(<%-IG*HZn,65'nqc4)i-IPG8e),_:3&F#ec)^$[LccSNB"aC&G6>s48E4l8u]rJ/::eitPi.n/q2=A'QnPCn=X!B&L4+1_=nmJa"F((FCcfPiNN2esPBg6,<[eAGC,=HR?:2@J]f:8'U+YB3cG#<3hWU,c4TDY*CON=_0qgSUBnmB\K(Q$,PQ/""@/N\K(4ba!Uob[D$>4bJXd@.Dcus>uVUsHLABXFKVj`AoDKk3>5T!Mh@<#rCI*>-uKbT>6;5]/4,C"$_rc!1')`d28ei(SW-nZ=-ZV;aKjafXN[_=-IQ_bXe"_hI.Y&Xi[n1t6-]k^Ntert[k\O6m\JM9Y>(F+KBj72(o1Vhco'_XcE;ljC'L_:_96$*6>-g1E^gi;U[Bu?Yqd_2WNn!RMi9)nfr79!G[_.DLW07@SVtkIPpj!>=l=(,2@mFl[a#9r#f\?n'm^?-h[630Jtb)P%^#7?Aq8*Z&aGHR@2p=;l`7,Bk1KG=Sec`U"Ks9G?Pb63[8D(q9K4=h.NZTLQ=YmEhYpKU0HX1"^d9Hg0l?K6/n*X"ILEg"V'6Ut#>\suW!s<urEN.X\8e?t[>Ei*XQJ2<M)?%dS:BLqF%!E/O'ggn/X.qoQ1/dH1FD:"qsajf#]j=h26Sf>5J$r5G`aWKP68#Rj]GUG-NSoTGGY.h$#[@R#7p7;UrpEjdAsN#eoVN/n^#[.g(qE\aTb9k.sVIk$KV7j#o=G)C`io@N]p]#/)7>N]H-if9"!1umS?b*Xc&D[#*MGThVp^(50PWm1BgXnq9(eRM.M%de`glE':gprS(4`&3sSV.C0OOkJkojV6%$Lh`Q".9ZJWX05;4PXW[uLEr<nQg8H3/c/Rlg:MSKZs5#KH4Z1T:%L+g(Q)Y"ic)?'i,.$.?aCQu1KP:4<*T@\dJI)*PAY,qa6"!QCB"[\`@PmFa3USGuc:h[l+N9r6JV^P"/O\Rt2"t:_3a-21fo6>d.D'AN_Z5-.A2juhCqTBdL>Mk\22;.OFbj&/2Tfk@kabrP,W\6U7*ouHW,Z8-f%rrUR3$PgtB#tm:]$$9Yc\ir7SiT=Gd+HkZaBTs6&ef<qUH%i7C$"(I/G,D061@VGUS-<.HgPuGrP-=6J=G7Niq9d2*Ye*_eTrn`fg5(Ncjqsl3j9^FR`-=S3W=s%S!I@9:Ee>IFUkYY%^@F2??WTXlaB/Jr]mp='XK?t&_Ps_(!Os0Np!iIYaOi+s/>Al:E[NkB4ekBIE8k"OHoTG98-+/C-Kq]XiS)Z-4;E/`,F:b+K76H:&0hR=$+oX?l-Q)Q/W**RpMYg0Yf3,5l4t93#.ji1l1%0RIMRU@sbV6@*eiQ92XW'2nNsFHW&H*91=%MUeWc@WC&Y2,l"&&67BWcOE9sI,#27s@h1YlkZ:Ys"(HuH8aQ%QkOF/EqE.A"b\.WG@AC<Gm=p5G[J54)5*ZF[D=!gSgkc<+f+GIU;gdupqT9j9qR(UQ0ZTU1#>tk=$jPrG^83--/ZT5j[kf-1rHM\-EijSoO\,##():bj4#Wj3WA,_Z(3Lf.Y%3BW1]Ttr'jUi^GIPEd=^e=paLV"I`PigB#V!Dhgp;HN.%6@X(r:T7g@!Ta4*@NO>3]UkGTsB<m647cmotVnG8J5aSaBR2ok*WF.$3cM8lZZ!5n>F#j#dg(B,&\Q5PA"/??D9K)-(8ea$%k)TA\Q'&nh4"7Uho]?"Vk#Y,J+Uo'&O3nt4V$*fek3Y3]99OSC)!-$V@cW)%?`!u0s]0HJ3DH#k8O)C@3=+YAnhjiZD]Z,@WW&OIdp/Zn-VSK#6ID3U^R_TC@U-oFQ\qY3(iSk'17`SaPuN`%Up/UP3-$u[HLZ,b^P_6e$V`s8-"ipln]'9Anj\lUbAk(U7>=NmMQ[-ZTY"s,c8\C4O(`TuhM?GtX(#B/t-p#4I!m<FIH"H5)bC8]iSnb<QCrr.Ye<]3W+[q(NULiml'Ph+X''mHm[q>.LpkP"c-h(%s<AsM6LeUB.jlpYgF/E0=3k',g6-]RY:)@N"CcA)(#ZgdAnN:0R#jBp)$k@4~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1936
>>
stream
Gau0D?!#c?&:N_CbgW/j?!L$g^Wu7?8q>@-7nU((+*^X&-#p2l<48Luq]/7J#`q"tlTI8H[URM:RCOPJ6,:GM1#GP4n6lao:C%L=iu&Ej0GpG"nbD%_JJ1MU(K59daF&RUrC#W@oROgW5lj0%cjq6(hiGue#,?g9\O]q_SR?$Q@@g8)"qDk'%"*$@'(J=cF$5)U+;ofD;@^D!JubC`8[X3ZnM<o#)]4'[nQTjJEt7`20\Db:,`>ed'h+DYCh&>9]5cmUK%MAhJC-dI7RuM69fS_&@cK2Ps"to;H]CT6d)_&[:jamGm>-E.-]U)kmOqS/!Hi+\1#Xo(VO8%+&@rcYP2kb\.2PZ1W'U=[`'Yaf^-aGB#9gDbF$T6S"pc,n+4L#eqKG'Hpa",4l2gm76!Eib&dkd1,4C22G_4rnOs"'UdI\RNWJ*TkR?o/a4M9r9^U+f=XcX3Z*5ZN*8DLnP%98j<o`/\,T51,g`Kc,R[).'O._QKLi"_$rR]@l:&k6-COOonBi++[S#-!c>-nE7e;8N_TUf.:MM.mi7R>ge;[MQ5gi:t1qGVO%jeJn1:0LbjP?K-&QQ<BZLV<M>@pkk,r3mB.A.@J),-b&bHUI;"k+ptJN#rfOpRV@OWMI/<,L(GrDBAc?*Q=r5k2fG5;b-4lW2TLsI^)o6N`jAU8`COJS]3$b!.tqfjQ,411fK+f/+sgXj(7Qal_al_M+%1[8=#4^d3cgq,N^^gGD%4b0fISn%^!Njc6Fan=3TIC:T!%uI"5*)<;ARpR4&\C8i'bt.Cl_#j-tF[f]:&,u&MBKTYhbCRRo+oG9j_IRptVf`-8`7\/\1W3L'tUsBe+]]-@<Xh=(tOpQDqG5XpNoc)9.-O1\%rb55rZb7dt:g;nk,J]P^;I=#*:5ah!u9<4A(8&6R#"[jPDNDER`V@h!Cfg:\s9rQUjNolM[iWNA!0F8MumM8u/UhG_9dS24*\h-%-Cm)7Eq[KOs2PL[rf$97gl[nAe6ht9G<ZJ"_dbIs?l(J+e*8h(NGHV2rpNp)fZq>YKt'E3F["^Pm:hqW%IGb_ZEURq+>qddWnI)Z*[@U@^>$6R;jo,`7c7[l-dN"P&a)Aq.>DqASaQTE]e]j(Me3WeoOJ$=-t+$RFR.6d?1MA/5ADO5ph/T=3(WKl#A=u'V;09Y-j6dI;1SI/O9"T.<3P8IH/`=l\tjkFJ%PNSNMJp@8u%n9XXChp6J4#)F8YED=Xbl>VdBj(NeS%3eq`KI"39k=?G#1FL0B$9=faF(G(>)]aga2e\aaFHK2#Ipf,^qne8?bb$_,\jtLVZqL*khV=SKWCk(39sr(K>C5TKeb)M=%K\0mpDReF^2Uh-$V&-q@2X!DVhb:oV/Q_Qm5fa!ITco4Q=HP\]PLp#tnOI7<+YD=laFO=JH5Z/l>oEoMOrSW)JC!dmkXSALiFS.4hf/$0CthQZt\B_/BkI))"Vo\PR?E,S0%UKEFjn'/?Uh42jAJF[G1_;;FlfgZlrK2#*.)jKMn3>6/)k/hN\#f;EdDcqlL>Ok6GR9Ng)"d4"2kf[p+Z+iikM!;Br3NjYu#K"+GZQ_RJUFXCq2fIWH/@%0A#C=Z/!$kNB?bsQp5-)NuQ1H=?)FX2l3lQ?;.OKbf6)4jaSU(XI;'o8JT=X%cgYu03]D2khB.TmpfI4TA"9uhKtN2p'T*gUD&iYAUIAS$.g([3Ta4LcB'S..tJd64:Em^977,kAQ8Gl3@-(V!*-U.dG=nMpYkkW=#""ZPV./&d]G^ni[?HI<k96.@?o*fn.I2TlOHXWY9T',Flp,"5@i)Pbh%kqlpFP.o=&btcb1Sj@reV;B1p^?mAbUZ1VIc+2A-##A\%".3Zj^3'O83gDXVec-anR5*Oi:Q`q#gp#&MSf.d'WYh:kj#\JhhSH%i&4^1uK#pmCBQ]mQ<B\Y@*;g1A-GD_~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2236
>>
stream
Gau`U=``=W%"?O+^dC2I[Y[=KeDYgsS2Atqe"j7Xh9P)8O_I=f%Tc/`m]TuZP'k3VI"\gfRFX2CiqabtKIIK1U\b!5"umX=aa4AZ_-dD1>9!j>i-]M5lbN(=@WrYkbi92P&+tpuc,B^9a+FL7%\D]I%$'B6<<W8QR[pXlFY("6AoZR6*=`j_e8lY7O:ub!aN!KFX]<dXoq<34YO=mqMdDiHi)2am62Cci5@Et]Z(!sF*QrNecLoUr'Fn\PKHcjH@Wb5^-`B=dd#O%8pj/X8Z(/fR>;<,DdE@jp`&b><1ChX<r5pEBQJejLKMef1cTU'SA75V"0R)s#(BgTqi=bX9dOBte>dRDF6A;q)(/k&QmPC+6BK)Kp[un#&M.r.`c]a,<99U25#<bq?-lnXp61-PNDJ(G%K`d$i/HM(!F"p.PNM"@qMu:rrm^sheF*Iq\au]aZnVRhqUA4Kd*!GgLe^#M"hBK<ZnU(MBj8,p<TDD[g3.Loe`]F*!?;YV(keLi[Yb0VT0!Fo85;Dc)h=tuM_7U`=3mW"%jLb`h5q'(I>cI*nA1tB(#ksn2A\OHh6f.fK]WZY5J$ne=I>dL3pHtNAU'T6/)/l712;lmuE#k5C<oC8WY<BM1;7gDY7V*D!]=jW?V0!:i3=H!ea<@'<M'51h@5>tn?=[VDPZc0k$MGAOQg(o7b8[jG.lJjjg&Gk4?";kL]f'kUUGd,27ZF,C$i=&Md(DfRNZaZ%OeL_FUbT$02/2(qrqirh"k1":f'1J`Z>>_K'krdsArfo\9BY)bk0@YQU%'"[2)Nn2I%h`[jD$P`8o8=n_Wp6)MrAlpg8^LG/Y=I3oN&BlB/Saq<?efM,1#J57lOM9"WVfOFsts-qARF]RMTp#.De(BB3"q6'^F'$MDGUu:&%O_2.TnW/bM4c]7IU+ame^WA7^pV.'WWaL0MY[kQXKN+@2iE\0sd(`+&JA$o=;=/;i@L9ZE1OMb.\UGAM.phs3rW:U5'J-.Whk472_"lXbMJ8Qr&/*PZ@>o5ZYpK2=EHUGRU#R0:[;,(`/D"Y/B/1A-U;=?`5`:b'PsG"=e#;)uSH=0!:)H'-*%X/no,1f;7ro:^PF<L'eRTue>49FIb.o,M%jLpuBf\Snit@uP9V\hWL<e@SR`O7@LbD>-0GXZ(?GH^lZNhJV`[SL5XmkE`'%2'boM)G^bnMs\L\1/3Z'kVq9<??a.kgqHqKd;dLt]Muo8pT%(A12P]H<Fm6iT@78Kc/$*FUoqJeHV0i/bs7Qkrhf<#^0mrn0ULRNi29='NGaMY8t!dfA?#,[-IETY<3T9H7&0=1qF;#=S+&9\bWfPgZ>,oSaC88%Yi!SEA;2DO`_)\3l7tOLWM"$B2!l<)oF%nlM\N<_)(FpuDDi`cfmegj).D8CDa[Y#m%Wa62PWrhN4%1aGL'$Fqj9"o*3[*a`,?bB`&\L19:OqBqh\1LmK/kDVSn/Ffb**C@l(FS<Z%=r\8'-.c_u71LLYb76GF<c<+ps6<aC\#Es\oo%X\p=k<3/EH>/P`TKk:dmO$QhQO?1&<BqK8rQ7;JmRE^.939sg'I,XmGQNg)a!N1=.d\hUG"p&il@"2dQo-hq5=U=>g*0OCleH8DK0T7"a*1WHn6YZarl//KK&s(Vmc^)W86t'M:_DNe$g?uO6O'H]<%016e!L^V2Ir--rQA]]gAOK_\@LsTY)U`cS]We>QPT$/R?`3d^.318dd^FFl/)Mbbon:YG"o-oIPW#!B"p"F$Cce+Pl9mQI=Bn*7sP>.Lb7+<&EPSs+KF5f9Z-8$>p^7*>Re:1>E&D10ED?$NlYfhN/1s:2Po2^.+OqU/fnO5gjf9s=f<5se:U?XDOcI,Ss^[UcC\)6/#lcIWG$NN`RU2fZ\F@<.?u`;eZ,=GRb@*nH_h4k!7M#h]p`*>3)p!Qa/IO/[V+?r);3TaAoGYIQ-n-7/4O5]TWNYa`?S@k37Z?UC*':ak<(D-h9Y24[#M>hn*_]d/]cD)594u88]K,@:SF@B_Gqq7W#D_:?c_1'*25-KM&Q=UL;c<3C@7OWP=_4NP[:)eZ0&EqY*"o!%$[&M[3;=P"D*muM5=s@+uDSMdIOo@;TgBKe=)k'MZRfT;$=H@^X\[TksW++RekF,/D@6j8jDa4e*h@8=+fHcP)gfN23Q+5@F@ho%olmIP=\bUPY3MQe`;%/U@u=K^I$?DX+U7W-p_ErH]a<8HYRrb.,:g6Fdpts%fQWdQ&``~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2147
>>
stream
Gau0E>BA7Q'RoMS3"KRJ5iPDAI-Y"*QJJj2Q8Uf59OEIJ[YD^1ZI@6O^IQ#W\N*4n_gp!gFDfuucG^J'rh9/&i<8(L#Y4>3:^4g!T\SN\quCBIK:`C7k7]pb?nm^('Hd1$%'KUo@.87LK>YNH>aU'%q"`Y]D@T9^^?-25DTU,^[_i.V(8oZ'*O(V=FZ`LpH35a!ar0?2-IB;L&8EBnM42;8r"Xq-CD_MUi>^%E\VE53k;N#CP5$XJaZ,3s\?X![8Dk02+<WL[d2G6!dFMDpAWEm\'_^Uk^M=AgCs-E1QuDeS;;to6]>5+LXh\j+mS?h>#"D^9_^>Sag>NZ`I2d;9-Q4U@W*l;cgd;Gu5)?hH&cnJ9mRQ_^A?Ci#\P;:s1kS(LR0j\*8ULr5EUQNA$2jB4Y2u4;klX&FE&fn][-:g`pI\sn&hiIXXJ&^2W5FA,qj,$To6h:27N7uRrJURb,OTl!M`p4l!1hF<K'[`u#7]731qF/@hEup\KY'/[""s+k*<V>f]/DkEIFWYhMtQ;"?.PbOq^go@H$QIaHS/sSbOJ!\T)sA!Fc[\`<Zg`J+eTl0gtCK2#a[#E)B:e!:6HG)fgb&%cgWEXY2@6g3pW/7JQG<H*H&>,k?6WThC+QG=^Wm<#D3r?IYklMS:%mFYYfq1i4amCW>oP[M(?]W<;=fuI(6rS!AAOsi7U,On!$@!2%-`.7`]EOYLh0c;"?"S-aQ[.>>$6$BQ6ST4s=2u#gB/i.VT3^&kt/kRHJcS+\0kY*F'i;:6ZGWHLaqQ+>V;E4A2Brc'K\n/EO#i06l%l2CjOX,*$:;n''I,R]$YoJdW10R>aQSb&->t1N$eb[V]n7@5T7t4:]E<OW6Y$2tPIDBT5RL;*nTs!Jrc,mn5[SL;i2a%6Yq6%gh)"E<7OO91Iodqb:iqCp;C9%/-cCWmn=&m%\r[:e\j;BH1U0E6FUR\]JuWa\?\>f\<mh=pqRU":Qu48qfI$-;RM[Kh4%[iqoKm.RL]=3]<_PTtfW-2'\*f!c19E[e&_p'Bl"ZiGpE+dPo\VMCa-?m'`Y.\VVFmF=Z!afdc<!dA4K$[!Gr;Xq<nZ(P\;ga[B[FXb+ph)NhN>hVAQF[\rlOW\D(*p-1hBj2_2hESJm/*U$P^NJKc/?!9M."^Nq4CsUYN=t?UB,kZPsmED"dc0g!?lX.PKE4PA+RR,-kG<sE.0\W?]d<W)6/gG$M;Tj,60_SfKC2MnDa1pMU(q:83qBTuaop]jnWr[aJOTc)+X=8U(h2-;S<.(aG]Vb6(Q.8hlVd`S3&FlTkGnnSnds*11ca@9uNE%h-Y>o7>]ZkS1Sqk\Y?])>g0=L',FT&;>T2ru^gi83+a>0=7I0W+,g3HLXgk#HHWY,n-Cd+WJ+4TM=L[@4c@J`c9r;Dr9Ch\X2a'=>*c9BfS$EbF<g/@=mlpY07=<:je\X>/sg=n8hrNCU'I[EQb;&7:8(3fKjLMrnIbFJn1(u?RFGgnpEe?05To(aa4YY',U25_QYL9m'_fKMFJ3dM`e>c#&?)ekEA-1,3Pl!M823;pM1\6!HNN)3P4?D[+]g=m>(a"Y;,oFX0b\+<L"L<3s=V<Kn7l,m"0*f1)LO0l>R[;8NPopUTAf%<Pcc&^)JIRWnlZo\4Ed[sgA0=sh`'X.;krcK0#=FPte.4KbIIT_k^=T5^>2>Jr<c2rp>jW?<-01K)&R^$^q2:"HRm#0?Q*5283<PGjCQV)p@$"'OGp-!\YFUL#j;coT<4h\@Rh1`Mlrd-!A#Yn@i"2j.O;0p6Eb%s!'_Rgb7f;(J?NHP$G_3:he6)If$YR<gtPe_td4_b&BLl]r^jE<-[D7PeVoj6VS3i09kb/gW$\JgAcQ6Y>$LLd8i17nQ`;\Y:UVo%"5(1RWno7F(qi,pK_[H/H2f3e5Te0tpPPT4gENQPPMFGemsPYZ$J[322rUj!tkESoJcC45HaBJ&3J]9OT.asW\0dc*2Lg$nsT6'Oreo4X%Br_*"rAndQ)AGbla"anMbI0<V<Aap--h+J,#/SafqB^$JY<B9beFf>uCmA"MC,-Lrb#C]i_0X]O%5l\c<3Kn453bm5Sq+'g.eJPL5!P?qlDO("QjnbVs1s:NJ<Ju"=DTsVOap&QP27mJpl&nO8LP,U-\/'R>~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2272
>>
stream
Gb!#^h,E&f&:`lHfV_Ku.?5^(:ZieI'PM@kUkEO\^l*/";"7V(#Kk<in[Gf6`sK"BK%dhf&7m)g<r:X:p1HZV`ue4Wog=9(Qd@rD5U]mo!&6>E/jI2"jhZu[c#ImDUS(K)Zj=Cf:D>EV%OaFZ6suG@=>kh?=`2Uo?uiJJk=TT_AhTB_VI<?J"O/41Yq==!'<rNJB6!uTQrGIb#)1DChm,(L_`1BKPlDGHr#.3&_rVi:XuV5=RU\:r%HHYA9R2j1(,UbZT'j-M>2\Y`ZZ.j?d?(EVXD0bM<)TlsBYJRSe2&q6RQt0'/JlB<*1W=[:ni5QU[oU"70$;bG%8=#"K(-2bHoPB5Ep+!LK^R1VO3s8W0nr:BMg%%RlXZ]r^3\Qb2MIlHGnAT=*hfj?/*0h@U.GjhlXZ,>Bd[8*?u,F9)&">%If6oUie@lCUR)RQ4%R?+a$a'dW]IFH36AJpEG)lEFdO`'Hu@(nSk)]EQHU0`<Nn]+3!Clo)fJN(pc&[SkPdnUFUPN/pHPl'd%"C@[u)JK,HrD9t/m$=jbq"^iBW,F-]S[1lasFV]qRPHW/&!(Yt*O1<6VA%NF3B"AcFiK54c[(-q=OoC(fJ]RgOZa7h^`%R^!BY"AIaaV=-hfO1bI@)DkfMFe1W^!Yd1/Y#O1hSL'e&+ZdQSK:`cH["O"RA)5$9I1`Brs",O<9/"?0@*%YGPY%USDAWm1.@PeW0.Hh_L*5Hj+'SGF$#qU.D+E5AlW-qVEk/0nr(?m\%+&HUPr^B:A?tt-<ksed/>0OrJ@`H>?$o"obA5WO)2qDZB.s5eQ68h$*>Jl)#A?]r)?>RlM0q^eQGrM;2['f7B>!S3:9+>[$nGg[2+0>FXs/tPhD>G?HVQp2`0)tX]STX7%6*b(+l>Sf)ll58_5ICiH;]keJ7XU76=[R"op65I\N/P#(KU'/Zu?6qZd<R)>JYCO)e8nL+#@eOl6nkVtbOjT1@:'S;)FFSpY4HD/?YO/8a9"GjVMu6r0NHe1Q^sfc=6\'3X0hWtmR?4ej9J1</'_?kmU5)R..kKqB3nZR%iP)0Y!ee1LP:F?=q\Y'&WQE&dR:jh#VZX.KtoNUEVY[o8lAnecuXG5'F5.WR7R\VR$Z\H[A(VeDpPVS2]er<+aWm2+hUr*:/)6-/>6pJV!#/eH+qa^K]`$,F;ed>V^\LEt19_beS*9e0rbl0!\-JXhlQk2Y[dj.;jF:f_&G.([Gd4&-lK"i7drPE[`6p^V>9jWG`aUNi<K*Lg5P9^H:0Yr5a/bd&4te;3u^)AD"d$k:%1%&Q.#`5>S..=(LCPUASVA]U(@"'nA*$TA:-^n&PuC.$\nG(%EEGb_lHO$8O%3di1@C4&+bd:^hk@>XS-__R7f"6XknhSElaU^Xtrc[[TG9gj6)Lp2dI\k:0eN5=[k/oH>L`$=4/d8)Zje>D0lQu,Cg(BX'(82D!j.l$)mJp$Yjd[OlhNb;djQ<o5_KUb@e:QcR4igSmD*87jJ-G7?YH*J7D`Zq@:k7;QY#6E#1ZnA]_o:2]uK/Po`YSbAr*lRA@'0Q0^<7.r<2[C0$a=pk0:YS3QmWa8!o^JdMY:mdrM%u@tY>4mM#*pON,<Bo>%b(,+nf`si*163dUo[g4#fq8#lCGl0'QV%=%aqdA>AQmoo5DF%LD/.II%'gee9VWLR`5l\\+0Ji2QJQciV&0_F<V)&+0[`cPs=l)+]g*'mcujIL$TDps"Gt:/qJKiVo8^P_$I<rc9E,([dLK=>T4n"`_,MQUfce]m+&57T"P\]p6'Wg(%3tpR8Kq?.ZM@j>0/PCf$XUlLd\'^TOkJ+D?JXhe\0/;*0i!^CgVH!*"GmH('4(SS"08`*W*?.G0r6`&uG5[&@*U1HZGh/9ul&F\j*a<g4?s%]3i:271c\HSkKMi]8tqQ`-/hs;=%)*kfm6och?L<8o?ZSa7ZWD(l([*=Qf;<_M:`9,,j1%]-;Yp*Dh?\_Qa$E\RMI6fXPf^Q8.(laOr&)]ANtG[0TCo/pN,qm`U1`4=,1o:>]&p^6d3G0P_]?W#[pD&9tS)S%ULDi`Yj7^%!pZi&Tr!I-)jKY=QYaIg/IjcOm7mV)Sc]R.WP(:s&+KH,@biQN_>MK+qBDWD<n@8nRen6s#n2.d[$#E_saT98G,p`V!J:DSmTg[o[F)$reqD'rB2:Nh&*M>@aBNZf%oLGT#2eE/E+22X#56AA@4e9:*V=_'b+@j8.#?(*o\lF^/\oSSTPic5)-0$8uKr2r[:X_/[YR"EF!+hS?tB)HGZl~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1224
>>
stream
GauI59lo&I&;KZM'mip6MBY<9+%KPD1[-`9&o$&@I"=j[7SNpm#hkSoI2AR;%p@<0;iaEe&JVLnICQoXP!FsJ&q8".i-5:O1BN6H@L7]V$l4?.l!j9p'P2Q['GMa[0i%5rcR=2@321@Rd_H`24G<u!cblc;q.Se@pYLcUh)L<p_J-h/@YA8@LBp$TSq10m"0r4^3"/7cN5&[*gPD9&/UWk.W\bf*nII1"na<"&&0>EI'>'[[93"RNPc14A6q(AA0h,!XUe$Up%gu/HnL[MqSI@Vhq1!s/O[KLe5k?BGTYsGhrY#o:U*>)mq5C^$"rbt_M8;,Ebgmtt+[`"=oB=XlL(GO;Lh0+Jn.;KZ+d!b3pE">r%lsAXe$J]"q=oR4iP)oca2%J7'i85Yo"'HSFIfMkK$k&gB8p5KYiV-jZ?3dFYV[,s>kPLD\F%l"le70[)::'8bheuVW2dZ,qU1bs&FtZs!^?=p<j3:<2E0'9PFYXnG;9)J(S%l*)G\"6Kk[P?4rcm]oBcF<YS0(a":OD!:P%\,F:pbFNCDK-K*9I4(KT&N*g<q3V0('$XdlX%HB9P5hk0+#/sV`!MH5taX^PecXh01n(-95^<EG%rb1[tO/&aCF=CnN#+A'.YU##bE@r)%@DNB>YJ94Tq+$2sj-U-?9'Yd`VV)nqF<g:"F^LUVGNjcWQf?^O3V!jD=Rjq?[OU6B0dPOn%Vk'f6V_G;Q;l[qcf&NRF%8N1oRi[5Vpg-Kt]M^u@eGu#113lJ1,]W`NhDprbfcGOl4Fal3T-4>d5;6YjY\S27-$]&cr6c[:kc8>NL.^4O=0eg"T*)rt6ou\RL1B85?aQpm2cs%n^3h._C1W+F!F5?K$Mu.1C3Fba/2#O?YpV8u&:X+GY\\eYP2pJAkY%_TLnZpP]-hSr$XKpo=#dl,ZT0EChg0"5'@puuKZ.!/q5Z#e06R?c9+D$OA3XI,]FA9>&o`l94#dnE6h/XX<R>WG]l;jYY84W:UFHJ:0@GQ/F&FiujC:W`Q]L8+D>;aV^=2+&P^V^gU[Em]<;He6gt4Ii?"&?H"I!(RN[g*3EdY59n8O)eCqjSdPe7GJhig<QX/L=Ya8,Pg+Sn\j.#kKsdK=B>'C(-aAt$//=Ms^;WT3k%T-aA-QBD)B,r<^6m3bM.&Yj*G6*>B"P&3XNO>%#d&BTA!1uCnd4H+mL[M*+NS%aJMH>0XYD'*)_G.:rP0:F0Dr;~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 446
>>
stream
GatU.b>,r/&A70Vjp2r3gTb8c#SBKr+C=jE.o"b`*lW!76[V">P"KF=:<8<:]unREGg/MP@f;nM^f?-BS:PZj9/&X7Z9)<(d<e9GVQo)&>RAN"#UbYqRu$)LC*3\E9Me)Kh.II/U6/1U2FEXiN/1SV,<uBA.ZkjFM+Il[$32tVl3Vf6NO-[5FgXqJ\&!L_=m#*3Z<(QQJSp?RP,MoC9A=&]/rF7Bg1g[4L)Ne"!^iAI]GoZS_$uNR4)lA\r:K6'%<3&FQj[k-oO,hE$CF&JE(5eXr-Z%pAHbhS1''N5_<_a?KiEqK5KAsK+7#U=etFetdElA]O!/2@->@FBQE>#qL9J$IBR*9HV8%i8VF%>Wmb^e!0:-Dbl%9=?E@K+g$ot9U$KM-al!?en?.Eikgm^b0D=N5`BCi,g>.*/f\'<@SmETkMY&hRE:di&>=/?6~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 765
>>
stream
GatU/gQ'`:&:O"KbSp^chDk6l_M[G!&.=sLE8sN*8F0_G$iPFl::mmF!XYPm[d24!F3a<?6UDk9f5:_9e\]iG#G+9:"4(*[m0@mlY.h)A<@:q5!_]T,i3\2V.=?EI9&[f_6]j`9PV>F$eF>B2h<IO4#I]AP7l$BC7G?h<EmC_k!(KYpW5.g&J0-(+_?_&gICg;='\C?"n.C/Mc9-mU/$pr2h)U3+X=DP8f1,L,U@q1fB+WW>9q@At-K.ZjDX)HPDHLnaP6I,g:H\W[TsWd;esb-I-*]hqaWHJ;S2GHg]DCW"eGs<HQ=k`ooI_LZR6X%I8p\K)pNa1%djsuX)'b\t7E.?)8bknk!\qBhRuBB4X(c[e^(WZH>@G"\_OVJa7nWJAcf<=(6g$-L*8^^,Nc`4!1jg2.+mgY)H'/'3P@Upb6_,bq*Nc\qKZR\Y;X#2M#>0?m&g_c)B(gl*8@sQrC:%HC@O(']K2dNpb%M"Jqus=&<0X8&']F8'Aiglc%ZDG=Ro<!rTd>ZW!8;\M+sB"9C1A\e)7U(\I=TUVDaihb9gZ+XgMp1VKH=)b*7R.*=ALNrdYr+C7cFW2IH];/3pIH4nqR[-p24g26(Scmih>6#7%0AfWc'$n;W$kq$V-&EEl?lQK\.R,j'\`,@hZX+*-LmgUtSJ21p^I10RXYgU[YT!JQTEY7?js]C3pBZ'0.0(R6,!J@U>j"dm#2K=r`7E%KtlYJt*_JTs%E`L%,2Bm6V!.a,%X>4doGSr;r[E>`o~>endstream
endobj
xref
0 31
0000000000 65535 f
0000000061 00000 n
0000000144 00000 n
0000000251 00000 n
0000000366 00000 n
0000000478 00000 n
0000000673 00000 n
0000000868 00000 n
0000001063 00000 n
0000001146 00000 n
0000001341 00000 n
0000001461 00000 n
0000001657 00000 n
0000001853 00000 n
0000002049 00000 n
0000002127 00000 n
0000002323 00000 n
0000002519 00000 n
0000002715 00000 n
0000002785 00000 n
0000003119 00000 n
0000003240 00000 n
0000003901 00000 n
0000005993 00000 n
0000008355 00000 n
0000010383 00000 n
0000012711 00000 n
0000014950 00000 n
0000017314 00000 n
0000018630 00000 n
0000019167 00000 n
trailer
<<
/ID
[<058687b5e54d5950ae70b0c7d0f56515><058687b5e54d5950ae70b0c7d0f56515>]
% ReportLab generated PDF document -- digest (opensource)
/Info 19 0 R
/Root 18 0 R
/Size 31
>>
startxref
20023
%%EOF

View File

@@ -0,0 +1,16 @@
<mxfile host="app.diagrams.net" agent="OCI Deal Accelerator" version="24.0.0" type="device">
<diagram name="OCI Architecture" id="oci-arch">
<mxGraphModel dx="1900" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1900" pageHeight="1200" background="#FFFFFF" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="140627827274480" value="Oracle Cloud Infrastructure" style="whiteSpace=wrap;rounded=1;fillColor=none;strokeColor=#9E9892;dashed=1;html=1;strokeWidth=1;dashPattern=6 4;align=left;fontFamily=Oracle Sans;verticalAlign=top;fontColor=#312D2A;fontSize=13;fontStyle=1;spacingLeft=10;spacingTop=8;arcSize=1;" vertex="1" parent="1">
<mxGeometry x="30" y="80" width="1850" height="720" as="geometry" />
</mxCell>
<mxCell id="140627865277680" value="PharmaCorp Mexico — ExaCS Migration Architecture" style="text;whiteSpace=wrap;rounded=0;dashed=0;html=1;fontSize=18;fontColor=#312D2A;fontFamily=Oracle Sans;align=center;verticalAlign=middle;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="0" y="8" width="1880" height="35" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,111 @@
{
"cost": {
"line_items": [
{
"component": "ExaCS X11M Quarter Rack \u2014 Queretaro (Prod)",
"monthly_payg": "$18,500",
"monthly_byol": "$8,200",
"notes": "2 DB servers, 3 storage servers, BYOL"
},
{
"component": "ExaCS X11M Quarter Rack \u2014 Sao Paulo (DR)",
"monthly_payg": "$18,500",
"monthly_byol": "$8,200",
"notes": "ADG standby, BYOL"
},
{
"component": "ADB-S 16 ECPU (DW alternative \u2014 future)",
"monthly_payg": "$2,400",
"monthly_byol": "$1,200",
"notes": "Optional \u2014 migrate DW to ADB-S in Phase 2"
},
{
"component": "FastConnect 10Gbps Dual",
"monthly_payg": "$3,060",
"notes": "2 x $1,530/month"
},
{
"component": "OCI Vault",
"monthly_payg": "$500",
"notes": "HSM-backed key management"
},
{
"component": "Object Storage (50TB backup)",
"monthly_payg": "$1,200",
"notes": "RMAN backups + DW backup"
},
{
"component": "WAF + Logging + Monitoring",
"monthly_payg": "$800",
"notes": "WAF for EBS web tier + audit logging"
},
{
"component": "TOTAL",
"monthly_payg": "$45,000",
"monthly_byol": "$23,200",
"notes": "BYOL saves 48%"
}
],
"assumptions": [
"BYOL assumes existing Oracle Database EE licenses with active support",
"ExaCS pricing based on current OCI list prices",
"DR standby at full rate (ADG requires active compute)",
"No middleware licensing included (EBS app tier on compute VMs)",
"FastConnect partner charges not included"
],
"show_byol": true
},
"cost_comparison": {
"title": "Cost Comparison: On-Prem HW Refresh vs OCI Migration",
"col_headers": [
"Component",
"On-Prem Refresh (5yr)",
"OCI ExaCS BYOL",
"Delta"
],
"rows": [
{
"item": "Infrastructure (hardware/cloud)",
"current": "$1,800,000 upfront",
"oci": "$278,400/yr",
"savings": "Break-even at 3.2 years"
},
{
"item": "Annual Support & Maintenance",
"current": "$220,000/yr",
"oci": "Included in OCI",
"savings": "-100%"
},
{
"item": "DR Infrastructure",
"current": "$0 (no DR today)",
"oci": "$98,400/yr",
"savings": "New capability \u2014 no DR today"
},
{
"item": "Data Center (power/cooling/space)",
"current": "$80,000/yr",
"oci": "$0",
"savings": "-100%"
},
{
"item": "DBA Operations (patching)",
"current": "$60,000/yr (part-time DBA)",
"oci": "$0 (automated)",
"savings": "-100%"
},
{
"item": "TOTAL ANNUAL (year 1)",
"current": "$2,160,000",
"oci": "$376,800",
"savings": "-83%"
},
{
"item": "TOTAL 3-YEAR TCO",
"current": "$2,880,000",
"oci": "$1,130,400",
"savings": "-$1.75M (61%)"
}
]
}
}

View File

@@ -0,0 +1,348 @@
well_architected_scorecard:
overall_status: GAPS_IDENTIFIED
generated_date: '2026-04-12T23:15:18.437115'
architecture_name: /tmp/demo-flawed-arch.yaml
customer: Demo Flawed Arch
summary:
total_checks: 23
total_passed: 1
total_gaps: 22
high_severity_gaps: 10
medium_severity_gaps: 10
low_severity_gaps: 2
pillars:
security_compliance:
status: GAPS_IDENTIFIED
checks_passed: 0
checks_total: 15
categories:
identity_access:
passed: 0
total: 4
gaps:
- check_id: SEC-IAM-001
area: Identity & Access
finding: no IAM policy strategy defined or broad permissions used
severity: HIGH
recommendation: architecture specifies granular IAM policies per compartment/service
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-IAM-002
area: Identity & Access
finding: no MFA mentioned in identity setup
severity: HIGH
recommendation: MFA is specified in identity configuration
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-IAM-003
area: Identity & Access
finding: no mention of admin account restrictions
severity: HIGH
recommendation: separate admin groups defined for operations
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-IAM-004
area: Identity & Access
finding: stored credentials or API keys used for service accounts
severity: HIGH
recommendation: instance principals or resource principals specified for
service-to-service auth
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
resource_isolation:
passed: 0
total: 3
gaps:
- check_id: SEC-ISO-001
area: Resource Isolation
finding: flat compartment structure or no compartment strategy
severity: HIGH
recommendation: hierarchical compartment structure defined
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-ISO-002
area: Resource Isolation
finding: no tagging strategy defined
severity: MEDIUM
recommendation: defined tag namespaces with cost, environment, and owner
tags
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-ISO-004
area: Resource Isolation
finding: user credentials used for cross-resource access
severity: HIGH
recommendation: resource principals used for cross-service access
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
database_security:
passed: 0
total: 0
gaps: []
data_protection:
passed: 0
total: 2
gaps:
- check_id: SEC-DAT-001
area: Data Protection
finding: any storage service without encryption at rest
severity: HIGH
recommendation: encryption at rest specified for all storage services
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-DAT-002
area: Data Protection
finding: using Oracle-managed keys or no key management strategy
severity: MEDIUM
recommendation: OCI Vault specified for key management
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
network_security:
passed: 0
total: 3
gaps:
- check_id: SEC-NET-001
area: Network Security
finding: only Security Lists used without NSGs
severity: MEDIUM
recommendation: NSGs used as primary network security mechanism
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-NET-002
area: Network Security
finding: SSH open to 0.0.0.0/0
severity: HIGH
recommendation: SSH access restricted to specific CIDR ranges or bastion
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-NET-004
area: Network Security
finding: OCI services accessed via internet gateway
severity: MEDIUM
recommendation: Service Gateway configured in VCN
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
monitoring_audit:
passed: 0
total: 3
gaps:
- check_id: SEC-MON-001
area: Monitoring & Audit
finding: Cloud Guard not included in architecture
severity: HIGH
recommendation: Cloud Guard configured with appropriate recipes
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-MON-002
area: Monitoring & Audit
finding: audit service not mentioned or retention not configured
severity: MEDIUM
recommendation: Audit service enabled (enabled by default, verify retention)
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-MON-003
area: Monitoring & Audit
finding: no VCN Flow Logs configured
severity: MEDIUM
recommendation: VCN Flow Logs enabled for critical subnets
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
reliability_resilience:
status: PASS_WITH_RECOMMENDATIONS
checks_passed: 0
checks_total: 1
categories:
scalability:
passed: 0
total: 1
gaps:
- check_id: REL-SCL-002
area: Scalability
finding: no service limit review planned
severity: LOW
recommendation: service limit review mentioned in deployment plan
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/reliable-and-resilient-cloud-topology-practices1.html
fault_tolerant_networking:
passed: 0
total: 0
gaps: []
data_backup:
passed: 0
total: 0
gaps: []
data_replication:
passed: 0
total: 0
gaps: []
disaster_recovery:
passed: 0
total: 0
gaps: []
performance_cost:
status: PASS_WITH_RECOMMENDATIONS
checks_passed: 0
checks_total: 2
categories:
compute_sizing:
passed: 0
total: 0
gaps: []
storage_strategy:
passed: 0
total: 0
gaps: []
network_tuning:
passed: 0
total: 0
gaps: []
cost_management:
passed: 0
total: 2
gaps:
- check_id: PERF-CST-003
area: Cost Management
finding: no budget alerts configured
severity: MEDIUM
recommendation: OCI Budgets configured with alert thresholds
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/index.html
- check_id: PERF-CST-004
area: Cost Management
finding: no cost attribution tagging strategy
severity: MEDIUM
recommendation: cost-tracking tags defined and enforced
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/index.html
operational_efficiency:
status: GAPS_IDENTIFIED
checks_passed: 1
checks_total: 5
categories:
deployment_strategy:
passed: 0
total: 1
gaps:
- check_id: OPS-DEP-001
area: Deployment Strategy
finding: no IaC strategy specified
severity: HIGH
recommendation: Terraform or Resource Manager specified for infrastructure
provisioning
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
workload_monitoring:
passed: 1
total: 2
gaps:
- check_id: OPS-MON-003
area: Workload Monitoring
finding: no centralized log analysis solution
severity: MEDIUM
recommendation: OCI Logging Analytics configured
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
os_management:
passed: 0
total: 0
gaps: []
operations_support:
passed: 0
total: 2
gaps:
- check_id: OPS-SUP-001
area: Operations Support
finding: no support plan consideration
severity: LOW
recommendation: Oracle support plan level specified and matches criticality
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
- check_id: OPS-SUP-002
area: Operations Support
finding: no notification configuration
severity: MEDIUM
recommendation: OCI Notifications configured for operational events
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
distributed_cloud:
status: NOT_APPLICABLE
checks_passed: 0
checks_total: 0
categories: {}
action_items:
high_priority:
- check_id: SEC-IAM-001
pillar: Identity & Access
finding: no IAM policy strategy defined or broad permissions used
recommendation: architecture specifies granular IAM policies per compartment/service
- check_id: SEC-IAM-002
pillar: Identity & Access
finding: no MFA mentioned in identity setup
recommendation: MFA is specified in identity configuration
- check_id: SEC-IAM-003
pillar: Identity & Access
finding: no mention of admin account restrictions
recommendation: separate admin groups defined for operations
- check_id: SEC-IAM-004
pillar: Identity & Access
finding: stored credentials or API keys used for service accounts
recommendation: instance principals or resource principals specified for service-to-service
auth
- check_id: SEC-ISO-001
pillar: Resource Isolation
finding: flat compartment structure or no compartment strategy
recommendation: hierarchical compartment structure defined
- check_id: SEC-ISO-004
pillar: Resource Isolation
finding: user credentials used for cross-resource access
recommendation: resource principals used for cross-service access
- check_id: SEC-DAT-001
pillar: Data Protection
finding: any storage service without encryption at rest
recommendation: encryption at rest specified for all storage services
- check_id: SEC-NET-002
pillar: Network Security
finding: SSH open to 0.0.0.0/0
recommendation: SSH access restricted to specific CIDR ranges or bastion
- check_id: SEC-MON-001
pillar: Monitoring & Audit
finding: Cloud Guard not included in architecture
recommendation: Cloud Guard configured with appropriate recipes
- check_id: OPS-DEP-001
pillar: Deployment Strategy
finding: no IaC strategy specified
recommendation: Terraform or Resource Manager specified for infrastructure provisioning
medium_priority:
- check_id: SEC-ISO-002
pillar: Resource Isolation
finding: no tagging strategy defined
recommendation: defined tag namespaces with cost, environment, and owner tags
- check_id: SEC-DAT-002
pillar: Data Protection
finding: using Oracle-managed keys or no key management strategy
recommendation: OCI Vault specified for key management
- check_id: SEC-NET-001
pillar: Network Security
finding: only Security Lists used without NSGs
recommendation: NSGs used as primary network security mechanism
- check_id: SEC-NET-004
pillar: Network Security
finding: OCI services accessed via internet gateway
recommendation: Service Gateway configured in VCN
- check_id: SEC-MON-002
pillar: Monitoring & Audit
finding: audit service not mentioned or retention not configured
recommendation: Audit service enabled (enabled by default, verify retention)
- check_id: SEC-MON-003
pillar: Monitoring & Audit
finding: no VCN Flow Logs configured
recommendation: VCN Flow Logs enabled for critical subnets
- check_id: PERF-CST-003
pillar: Cost Management
finding: no budget alerts configured
recommendation: OCI Budgets configured with alert thresholds
- check_id: PERF-CST-004
pillar: Cost Management
finding: no cost attribution tagging strategy
recommendation: cost-tracking tags defined and enforced
- check_id: OPS-MON-003
pillar: Workload Monitoring
finding: no centralized log analysis solution
recommendation: OCI Logging Analytics configured
- check_id: OPS-SUP-002
pillar: Operations Support
finding: no notification configuration
recommendation: OCI Notifications configured for operational events
low_priority:
- check_id: REL-SCL-002
pillar: Scalability
finding: no service limit review planned
recommendation: service limit review mentioned in deployment plan
- check_id: OPS-SUP-001
pillar: Operations Support
finding: no support plan consideration
recommendation: Oracle support plan level specified and matches criticality
references:
framework: https://docs.oracle.com/en/solutions/oci-best-practices/index.html
security: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
reliability: https://docs.oracle.com/en/solutions/oci-best-practices/reliable-and-resilient-cloud-topology-practices1.html
operations: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
distributed: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-distributed-cloud-implementation1.html

View File

@@ -0,0 +1,92 @@
[
{
"feature": "Auto Indexing",
"category": "auto_management",
"compatibility": [
{
"deployment": "ADB-S Serverless",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Creates indexes HIDDEN by default. Instantly reversible. DML costing prevents over-indexing. Deduplication with manually created indexes."
},
{
"deployment": "ADB-S Serverless",
"version": "26ai",
"status": "GA",
"notes": "Improved in 26ai \u2014 better cost model, fewer false positives."
},
{
"deployment": "ADB-S Elastic Pool",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Same as ADB-S Serverless."
},
{
"deployment": "ADB Dedicated Elastic Pool (DEP)",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Available but less tested in DEP."
},
{
"deployment": "ADB on Dedicated Exadata",
"version": "23ai",
"status": "GA",
"notes": "Fully supported."
},
{
"deployment": "Exadata Cloud Service",
"version": "23ai",
"status": "NOT_AVAIL",
"notes": "Not an ADB feature. Use manual indexing."
},
{
"deployment": "Base DB Service (EE)",
"version": "23ai",
"status": "NOT_AVAIL",
"notes": ""
}
]
},
{
"feature": "AI Vector Search (HNSW)",
"category": "developer",
"compatibility": [
{
"deployment": "ADB-S Serverless",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "HNSW indexes are node-local on multi-node RAC. Works well up to\n~50M vectors on single node (\u226424 ECPUs). At 100M+ on multi-node\n(\u226564 ECPUs), requires hash-partitioned vector table with LOCAL\nHNSW index for <50ms P95. See FF-202603-008.\n"
},
{
"deployment": "ADB-S Serverless",
"version": "26ai",
"status": "UNTESTED",
"notes": "Check if distributed HNSW is added in 26ai. Expected to remain node-local."
},
{
"deployment": "ADB-S Elastic Pool",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Same node-local limitation as ADB-S Serverless."
},
{
"deployment": "ADB on Dedicated Exadata",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Same limitation. Dedicated infra doesn't change HNSW locality."
},
{
"deployment": "Exadata Cloud Service",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "RAC with HNSW has same node-local constraint. Partitioning workaround applies."
},
{
"deployment": "Base DB Service (EE)",
"version": "23ai",
"status": "NOT_AVAIL",
"notes": "AI Vector Search requires 23ai. Available in EE but HNSW performance limited without Exadata storage."
}
]
}
]

View File

@@ -0,0 +1,25 @@
{
"query": "ADB-S vs AWS Aurora PostgreSQL",
"aws_database_mappings": [],
"relevant_objections": [
{
"id": "OBJ-001",
"category": "market",
"objection": "OCI is a niche cloud \u2014 AWS/Azure are the leaders",
"response": "OCI is the #4 cloud globally and growing fastest in database PaaS.\nFor Oracle database workloads specifically, OCI is the leader:\n- Only cloud with Exadata hardware\n- Only cloud with Autonomous Database\n- Best Oracle license portability\nThe question isn't \"best cloud overall\" but \"best cloud for this workload.\"\n",
"evidence": "Gartner, IDC reports on cloud database market"
},
{
"id": "OBJ-004",
"category": "features",
"objection": "OCI doesn't have as many services as AWS",
"response": "True for breadth (AWS has 200+ services). For database and enterprise\nworkloads, OCI feature parity is strong. Key services are GA:\n- Compute, networking, storage, Kubernetes, serverless\n- Monitoring, logging, IAM, security\n- Queue, Streaming, API Gateway\nWhat matters is whether OCI has what *you* need, not a raw count.\n"
},
{
"id": "OBJ-005",
"category": "cost",
"objection": "We can get better pricing from AWS/Azure",
"response": "OCI list prices are already 30-50% below AWS for equivalent configs.\nFor Oracle specifically:\n- No Oracle license surcharge on OCI\n- BYOL discount is deeper on OCI\n- Data egress is 10x cheaper\nRequest a detailed cost comparison with matched configurations.\n"
}
]
}

View File

@@ -0,0 +1,121 @@
[
{
"id": "FF-202603-002",
"date": "2026-03-08",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "validated"
},
"product": "ADB-S Dedicated Elastic Pool (DEP)",
"version": "23ai",
"severity": "HIGH",
"category": "limitation",
"summary": "ADG must be disabled before joining Dedicated Elastic Pool",
"detail": "When attempting to add an ADB-S instance with active Autonomous Data Guard\nto a Dedicated Elastic Pool, the operation fails. ADG must be explicitly\ndisabled before the instance can join the DEP. This is a known issue\nacknowledged by Oracle but not prominently documented.\n\nImpact: requires a brief HA gap during DEP onboarding. Must coordinate\nwith the customer's change window.\n",
"workaround": "Disable ADG \u2192 join DEP \u2192 re-enable ADG. Plan for ~15 min HA gap.",
"oracle_sr": "",
"status": "acknowledged",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Elastic Pool Membership",
"tags": [
"dep",
"adg",
"elastic-pool",
"ha",
"limitation"
]
},
{
"id": "FF-202603-003",
"date": "2026-03-05",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "validated"
},
"product": "ADB-S Dedicated Elastic Pool (DEP)",
"version": "23ai",
"severity": "MEDIUM",
"category": "undocumented",
"summary": "DEP maintenance window immutable post-creation \u2014 change only via SR",
"detail": "The maintenance window for a Dedicated Elastic Pool cannot be changed\nafter creation via Console, CLI, or API. The only way to change it is\nby filing a Service Request with Oracle Support.\n\nDefault window is Saturday/Sunday. Other days require specifying at\ncreation time (which itself has the CLI bug \u2014 see FF-202603-001) or\nrequesting via SR.\n",
"workaround": "Set desired window at DEP creation time (via Console, not CLI). If missed, file SR.",
"oracle_sr": "",
"status": "acknowledged",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Auto Patching",
"tags": [
"dep",
"maintenance-window",
"immutable",
"sr-required"
]
},
{
"id": "FF-202603-004",
"date": "2026-03-01",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "validated"
},
"product": "ADB-S",
"version": "23ai",
"severity": "MEDIUM",
"category": "gotcha",
"summary": "DEP provisioning takes days to weeks depending on capacity",
"detail": "Dedicated Elastic Pool provisioning is NOT instant like ADB-S Serverless.\nIt requires physical Exadata infrastructure allocation. Lead time varies\nfrom 3 days (if capacity available in region) to 2-3 weeks (if capacity\nneeds to be provisioned).\n\nBilling starts only at AVAILABLE state, not at request time.\nCo-location of existing ADB-S instances happens at the next maintenance\nwindow after joining, not immediately.\n",
"workaround": "Request DEP early in the project timeline. Don't make it a critical-path dependency in week 1.",
"oracle_sr": "",
"status": "acknowledged",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Elastic Pool Membership",
"tags": [
"dep",
"provisioning",
"lead-time",
"capacity",
"planning"
]
},
{
"id": "FF-202603-005",
"date": "2026-02-20",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "observed"
},
"product": "ADB-S",
"version": "23ai",
"severity": "LOW",
"category": "gotcha",
"summary": "Refreshable Clone failed refresh leaves clone in AVAILABLE state \u2014 detection delay",
"detail": "When a Refreshable Clone's auto-refresh fails, the clone remains in\nAVAILABLE state (not DISCONNECTED). The Elastic Pool leader monitors\nlifecycle state changes, not refresh success/failure.\n\nThis means a failed refresh is NOT immediately detected by the\ninfrastructure. The stale data window equals the ADG RTO for\nunplanned scenarios.\n",
"workaround": "Planned switchovers: DBMS_PROXY_SQL.DISABLE_READ_ONLY_OFFLOAD proactively.\nUnplanned: OCI Events + OCI Function that monitors refresh state and\ndisables read offload automatically. Reduces stale window to ~ADG RTO.\n",
"oracle_sr": "",
"status": "monitoring",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Refreshable Clone",
"tags": [
"refreshable-clone",
"stale-reads",
"elastic-pool",
"detection-delay",
"proxysql"
]
}
]

View File

@@ -0,0 +1,300 @@
[
{
"title": "Oracle MAA for Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/oracle-maa-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-05",
"services": [
"exacs",
"adg",
"vault",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr",
"autonomous"
],
"summary": "Cross-AZ Data Guard on ExaCS in Database@Azure. Active Data Guard recommended for cross-AZ replication (block repair, app continuity, read offload). Backups to Autonomous Recovery Service.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with local and regional standbys on Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/local-regional-standby-dr-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-05",
"services": [
"exacs",
"adg",
"azure",
"fsdr"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Local standby for HA within same region, regional standby for DR across Azure regions. Uses Active Data Guard with Fast-Start Failover. Recommends Full Stack DR service for automated failover orchestration.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with multi-region standby on Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/multi-region-standby-dr-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-04",
"services": [
"exacs",
"adg",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Multi-region DR for ExaCS on Database@Azure using Data Guard. Cross-region standby with switchover/failover capabilities. Includes network topology for Azure-to-Azure cross-region connectivity.\n",
"terraform": null
},
{
"title": "Implement cross-region disaster recovery for Exadata Database on Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/exadb-dr-on-db-azure/index.html",
"type": "reference-architecture",
"date": "2025-01",
"services": [
"exacs",
"adg",
"azure",
"fsdr"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Cross-region DR for ExaCS on Database@Azure. OCI-managed networks for peering (better performance, first 10 TB/month free). Data Guard for cross-region replication, FSDR for automated failover orchestration.\n",
"terraform": "https://github.com/oracle-quickstart/oci-multicloud-azure"
},
{
"title": "Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions",
"url": "https://docs.oracle.com/en/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-02",
"services": [
"exacs",
"adg",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Far Sync instance for zero data loss protection across Azure regions. Synchronous redo transport to Far Sync, async to remote standby. Eliminates performance impact of synchronous shipping over long distances.\n",
"terraform": null
},
{
"title": "Implement Oracle Database Autonomous Recovery Service with Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/implement-recovery-service-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-01",
"services": [
"exacs",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Autonomous Recovery Service for ExaCS backups on Database@Azure. Automated backup management with real-time protection and point-in-time recovery capabilities.\n",
"terraform": null
},
{
"title": "Deploy Active Data Guard Far Sync to protect data across Oracle Database@AWS regions",
"url": "https://docs.oracle.com/en/solutions/dr-active-dg-farsync-db-at-aws/index.html",
"type": "reference-architecture",
"date": "2025-09",
"services": [
"exacs",
"adg",
"aws"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Far Sync instance for zero data loss protection across AWS regions. Synchronous redo to local Far Sync, asynchronous to remote standby. Requires cross-region AWS networking for redo transport.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with local and regional standbys on Oracle Database@AWS",
"url": "https://docs.oracle.com/en/solutions/dr-local-regional-standby-db-at-aws/index.html",
"type": "reference-architecture",
"date": "2025-09",
"services": [
"exacs",
"adg",
"aws",
"fsdr"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Local standby for HA within same AWS region, regional standby for DR. Active Data Guard with Fast-Start Failover for automated failover. Full Stack DR service for cross-service failover orchestration.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with cross-zonal Data Guard on Oracle Database@AWS",
"url": "https://docs.oracle.com/en/solutions/cross-zone-dr-db-at-aws/index.html",
"type": "reference-architecture",
"date": "2025-08",
"services": [
"exacs",
"adg",
"aws"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Cross-AZ Data Guard on Database@AWS for HA. Synchronous redo transport between AZs for zero data loss. Fast-Start Failover for automatic database switchover on failure.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with cross-regional Data Guard on Oracle Database@AWS",
"url": "https://docs.oracle.com/en/solutions/implement-dr-cross-region-dg-odb-aws/index.html",
"type": "reference-architecture",
"date": "2025-08",
"services": [
"exacs",
"adg",
"aws"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Cross-region Data Guard on Database@AWS for DR. Asynchronous redo transport for cross-region replication. Planned switchover for maintenance, forced failover for disaster scenarios.\n",
"terraform": null
},
{
"title": "Migrate Oracle RAC Databases to OCI",
"url": "https://docs.oracle.com/en/solutions/ensure-ha-migrate-vmware-workloads-to-oci/migrate-oracle-rac-databases1.html",
"type": "reference-architecture",
"date": "2025-01",
"services": [
"exacs",
"exascale",
"adb-d",
"base-db"
],
"tags": [
"database",
"migration",
"ha-dr"
],
"summary": "Compares 4 RAC migration targets: ExaCS Dedicated, Exascale, ADB-D, and 2-node RAC on Base DB. ExaCS recommended for full RAC feature parity. Exascale for 23ai-only without dedicated infra commitment.\n",
"terraform": null
},
{
"title": "Configure Data Guard for Oracle Exadata Database Service on Dedicated Infrastructure",
"url": "https://docs.oracle.com/en/solutions/dataguard-exadata-dedicated-infrastructure/index.html",
"type": "reference-architecture",
"date": "2025-07",
"services": [
"exacs",
"adg"
],
"tags": [
"database",
"ha-dr"
],
"summary": "Data Guard configuration for ExaCS Dedicated. Active Data Guard for read offload and automatic failover. Cross-region standby for DR with Fast-Start Failover for automated switchover.\n",
"terraform": null
},
{
"title": "Back up from Exadata on Dedicated Infrastructure to Zero Data Loss Autonomous Recovery",
"url": "https://docs.oracle.com/en/solutions/back-up-exadata-dedicated-zero-data-loss-recovery/index.html",
"type": "reference-architecture",
"date": "2025-07",
"services": [
"exacs"
],
"tags": [
"database",
"ha-dr"
],
"summary": "Autonomous Recovery Service for ExaCS backups. Automated backup management with real-time redo protection. Validates backup recoverability automatically.\n",
"terraform": null
},
{
"title": "Configure a standby database for disaster recovery using Oracle Exadata Database Service on Cloud@Customer",
"url": "https://docs.oracle.com/en/solutions/exadata-cloud-at-customer-standby/index.html",
"type": "reference-architecture",
"date": "2025-07",
"services": [
"exacs",
"adg"
],
"tags": [
"database",
"ha-dr"
],
"summary": "Data Guard standby on ExaCS Cloud@Customer for hybrid DR. On-premises primary with cloud standby, or cloud primary with on-premises standby for data sovereignty requirements.\n",
"terraform": null
},
{
"title": "Learn about maximum availability architecture for PeopleSoft",
"url": "https://docs.oracle.com/en/solutions/learn-about-maa-for-peoplesoft/index.html",
"type": "reference-architecture",
"date": "2024-08",
"services": [
"exacs",
"adg",
"load-balancer",
"compute"
],
"tags": [
"application",
"ha-dr",
"peoplesoft"
],
"summary": "MAA for PeopleSoft on OCI. Active Data Guard for database HA/DR, multi-instance PIA behind Load Balancer, Process Scheduler on multiple nodes for batch processing resilience.\n",
"terraform": null
},
{
"title": "Provision and deploy a maximum availability solution for PeopleSoft on Oracle Cloud",
"url": "https://docs.oracle.com/en/solutions/deploy-maa-for-peoplesoft-on-oci/index.html",
"type": "reference-architecture",
"date": "2024-08",
"services": [
"exacs",
"adg",
"load-balancer",
"compute"
],
"tags": [
"application",
"ha-dr",
"peoplesoft"
],
"summary": "Step-by-step PeopleSoft MAA deployment on OCI. Terraform stacks for infrastructure provisioning, Data Guard configuration, and PeopleSoft application tier setup.\n",
"terraform": null
}
]

View File

@@ -0,0 +1,33 @@
[
{
"id": "FF-202604-001",
"date": "2026-04-12",
"contributor": {
"name": "Carlos Mendoza",
"team": "Field Architecture",
"date": "2026-04-12",
"confidence": "validated",
"client": "PharmaCorp Mexico",
"context": "ExaCS migration"
},
"reported_by": "Carlos Mendoza",
"product": "ExaCS",
"version": "23ai",
"severity": "MEDIUM",
"category": "gotcha",
"summary": "ExaCS iormcal fails silently when storage server count < 3 \u2014 validate IORM plan after apply",
"detail": "IORM resource plan apply succeeds but actual I/O shares are not enforced when storage count < 3. Check v$iorm_plans for actual vs requested allocation.",
"workaround": "Always validate IORM plan output after apply. Check v$iorm_plans for actual vs requested shares. Minimum 3 storage servers for reliable IORM.",
"oracle_sr": "",
"status": "open",
"resolved_date": null,
"resolution": null,
"affects_matrix": null,
"tags": [
"exacs",
"iorm",
"storage"
],
"confirmations": []
}
]

View File

@@ -0,0 +1,4 @@
WARNING: Unknown tag 'iorm'. Not in taxonomy.
WARNING: Unknown tag 'storage'. Not in taxonomy.
Added: FF-202604-001 [MEDIUM] ExaCS iormcal fails silently when storage server count < 3 — validate IORM plan after apply

View File

@@ -0,0 +1,175 @@
{
"summary": {
"total_artefacts": 18,
"mentioned": 2,
"likely_relevant": 0,
"possibly_relevant": 9,
"not_covered": 7,
"skill_auto_generate": 5,
"skill_assist": 2
},
"artefacts": [
{
"id": "DEF-01",
"name": "Customer Profile",
"phase": "define",
"step": "ideate",
"skill_support": "assist",
"customer_facing": false,
"relevance": "possibly_relevant"
},
{
"id": "DEF-02",
"name": "Strategy Map",
"phase": "define",
"step": "ideate",
"skill_support": "assist",
"customer_facing": false,
"relevance": "none"
},
{
"id": "DEF-03",
"name": "Point of View (PoV)",
"phase": "define",
"step": "ideate",
"skill_support": "auto_generate",
"customer_facing": false,
"relevance": "possibly_relevant"
},
{
"id": "DEF-04",
"name": "Ideation Workshop",
"phase": "define",
"step": "ideate",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEF-05",
"name": "Business Case",
"phase": "define",
"step": "ideate",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "mentioned"
},
{
"id": "DEF-06",
"name": "Value Story",
"phase": "define",
"step": "ideate",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "mentioned"
},
{
"id": "DEF-07",
"name": "Value Story Delivery",
"phase": "define",
"step": "validate",
"skill_support": "assist",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEF-08",
"name": "Joint Engagement Plan (JEP)",
"phase": "define",
"step": "plan",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DES-35",
"name": "Solution Proposal",
"phase": "design",
"step": "confirm",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DES-36",
"name": "Partner / Services Proposal",
"phase": "design",
"step": "confirm",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DES-37",
"name": "RFx Response",
"phase": "design",
"step": "confirm",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DES-38",
"name": "Commercial Agreement",
"phase": "design",
"step": "confirm",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DEL-17",
"name": "Cloud Operating Framework",
"phase": "deliver",
"step": "operate",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEL-18",
"name": "OCI Operationalization Framework",
"phase": "deliver",
"step": "operate",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DEL-19",
"name": "Retrospective",
"phase": "deliver",
"step": "improve",
"skill_support": "auto_generate",
"customer_facing": false,
"relevance": "none"
},
{
"id": "DEL-20",
"name": "Value Realization",
"phase": "deliver",
"step": "improve",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEL-21",
"name": "Customer Success Story",
"phase": "deliver",
"step": "improve",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEL-22",
"name": "Improvement Actions",
"phase": "deliver",
"step": "improve",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
}
]
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,401 @@
# OCI Deal Accelerator — Proposal Spec
# Demo: Pharma Mexico — ExaCS migration from on-prem Exadata X6
# Prompt 1: Full proposal
metadata:
customer: "PharmaCorp Mexico"
project: "Oracle Database Migration to OCI"
subtitle: "ExaCS Migration — Exadata X6 to OCI"
architect: "Carlos Mendoza"
firm: "Oracle Cloud Infrastructure"
date: "2026-04-12"
summary:
why: >
PharmaCorp Mexico operates 3 Oracle databases (EBS R12, SAP, DW) on on-premises
Exadata X6 hardware approaching end-of-life. Hardware refresh costs $1.8M and
locks into 5 more years of on-prem operations. Migration to OCI ExaCS provides
30%+ cost reduction, eliminates hardware lifecycle management, improves DR posture
(RPO<15min, RTO<1h), and enables SOX compliance alignment with Oracle-managed
infrastructure patching.
current_state:
- "3 Oracle DBs on Exadata X6 (EBS R12 prod, SAP, Data Warehouse)"
- "200 concurrent users, peak during fiscal close"
- "2TB total data across all databases"
- "No DR — single site in Mexico City data center"
- "Manual patching quarterly — SOX audit finding pending"
- "HW refresh due in 6 months ($1.8M quote)"
target_state: >
OCI ExaCS X11M in Queretaro (prod) with Data Guard standby in Sao Paulo for
cross-region DR. Hub-spoke networking via DRG, dual FastConnect 10Gbps for
redundancy, WAF for web applications, OCI Vault for TDE key management.
SOX compliance via automated patching and audit logging.
timeline: "Migration Q3-Q4 2026 (16 weeks) — conditional on board approval Q2"
service_tiering:
- name: "EBS R12 Production"
tier: "Platinum"
uptime: "99.99%"
rto: "1 hour"
rpo: "15 minutes"
justification: "Business-critical ERP — fiscal close depends on this"
- name: "SAP Database"
tier: "Gold"
uptime: "99.95%"
rto: "4 hours"
rpo: "1 hour"
justification: "Critical but lower user count"
- name: "Data Warehouse"
tier: "Silver"
uptime: "99.9%"
rto: "8 hours"
rpo: "4 hours"
justification: "Reporting — can tolerate longer recovery"
architecture_principles:
design:
- id: "D-01"
name: "Operational Simplicity"
summary: "Prefer managed services with automated patching"
rationale: "SOX requires documented patching — ExaCS automates this"
- id: "D-05"
name: "HA for Business Continuity"
summary: "Design for HA proportional to business impact"
rationale: "EBS is Platinum tier — needs cross-region DR"
- id: "D-06"
name: "Defense in Depth"
summary: "Multiple security layers, not single perimeter"
rationale: "SOX compliance requires network segmentation + encryption + audit"
deployment:
- id: "P-01"
name: "Infrastructure as Code"
summary: "All infrastructure defined in Terraform"
rationale: "Reproducible environments, audit trail for SOX"
architecture:
description: >
Dual-region ExaCS deployment: Queretaro (primary) + Sao Paulo (DR standby).
Hub-spoke networking with DRG provides segmented VCNs for each workload tier.
Dual FastConnect 10Gbps from Mexico City provides redundant connectivity.
WAF protects EBS web tier. OCI Vault manages TDE encryption keys externally.
Key components:
- ExaCS X11M Quarter Rack in Queretaro (3 databases)
- Data Guard to ExaCS standby in Sao Paulo (EBS + SAP)
- Hub VCN with DRG for inter-spoke routing
- Dual FastConnect 10Gbps from Mexico City DC
- WAF for EBS R12 web access
- OCI Vault for TDE key management (SOX)
- OCI Logging + Audit for compliance
visual:
regions:
- name: "Queretaro (Primary)"
services:
- name: "ExaCS X11M (3 DBs)"
type: "database"
- name: "Hub VCN + DRG"
type: "networking"
- name: "WAF"
type: "security"
- name: "OCI Vault"
type: "security"
- name: "Sao Paulo (DR)"
services:
- name: "ExaCS Standby (Data Guard)"
type: "database"
- name: "Spoke VCN"
type: "networking"
decisions:
- title: "ExaCS over ADB-S"
decision: "Use ExaCS instead of ADB-S for all 3 databases"
rationale: >
EBS R12 requires OS-level access for patches and customizations.
SAP on Oracle requires specific Oracle features not available on ADB-S.
DW benefits from ExaCS storage performance. All 3 share the same
Exadata infrastructure for cost efficiency.
alternatives: "ADB-S (rejected — EBS needs OS access), DBCS (rejected — no Exadata performance)"
- title: "Cross-Region DR with Data Guard"
decision: "Active Data Guard from Queretaro to Sao Paulo"
rationale: >
RPO<15min requires real-time redo shipping. Sao Paulo provides geographic
separation for disaster scenarios. Data Guard supports automatic failover
with FSDR for RTO<1h.
alternatives: "Backup/restore (rejected — RPO 24h), Same-region standby (no geo separation)"
- title: "Hub-Spoke Networking"
decision: "Hub VCN with DRG for inter-spoke routing and segmentation"
rationale: >
SOX requires network segmentation between environments. Hub-spoke with DRG
provides centralized security controls (WAF, NSG) while isolating workloads.
alternatives: "Flat VCN (rejected — no segmentation for SOX)"
- title: "Dual FastConnect"
decision: "Two 10Gbps FastConnect circuits from Mexico City"
rationale: >
Single FastConnect is a documented single point of failure. Dual circuits
provide redundancy for the EBS production workload.
alternatives: "Single FastConnect + IPSec VPN backup (acceptable for lower tiers)"
- title: "OCI Vault for TDE Keys"
decision: "External key management via OCI Vault instead of Oracle Wallet"
rationale: >
SOX requires separation of duties for encryption key management.
OCI Vault provides FIPS 140-2 Level 3 HSM-backed key storage.
alternatives: "Oracle Wallet on ExaCS (simpler but no separation of duties)"
ha_dr:
description: >
Primary in Queretaro with Active Data Guard to Sao Paulo. FSDR orchestrates
failover for RTO<1h. EBS and SAP databases replicated; DW rebuilt from backup
in DR scenario (Silver tier — 8h RTO acceptable).
tiers:
- tier: "Platinum — EBS R12"
technology: "ExaCS + Active Data Guard + FSDR automatic failover"
rto: "1 hour"
rpo: "15 minutes"
- tier: "Gold — SAP"
technology: "ExaCS + Active Data Guard"
rto: "4 hours"
rpo: "1 hour"
- tier: "Silver — DW"
technology: "ExaCS + RMAN backup to Object Storage"
rto: "8 hours"
rpo: "4 hours"
security:
controls:
identity:
- "OCI IAM with federated identity (SAML 2.0 to corporate AD)"
- "Separate admin compartments per environment"
- "MFA required for all admin operations"
- "Break-glass emergency access procedures"
network:
- "Hub-spoke VCN with DRG — workload isolation"
- "WAF for EBS R12 web tier"
- "NSG rules per spoke — deny-all default"
- "Dual FastConnect — no public internet exposure"
data_protection:
- "TDE encryption at rest with OCI Vault (FIPS 140-2 L3)"
- "Encryption in transit (TLS 1.2+ / native Oracle Net encryption)"
- "Data Guard redo encryption"
monitoring:
- "OCI Audit for all API calls (SOX)"
- "OCI Logging for network flows"
- "Database Audit with Unified Auditing"
- "OCI Events + Notifications for security alerts"
compliance:
- "SOX — automated patching, audit logging, separation of duties"
environment_catalogue:
environments:
- name: "Production (Queretaro)"
sizing: "ExaCS X11M Quarter Rack — 3 databases (EBS, SAP, DW)"
isolation: "Dedicated Exadata infrastructure"
cost_pct: 100
- name: "DR Standby (Sao Paulo)"
sizing: "ExaCS X11M Quarter Rack — 2 databases (EBS, SAP standby)"
isolation: "Dedicated Exadata infrastructure"
cost_pct: 70
- name: "Pre-Production"
sizing: "DBCS VM — reduced sizing for testing"
isolation: "Shared infrastructure, separate compartment"
cost_pct: 15
cost_notes:
- "DR standby runs at 70% — Active Data Guard requires matching shape"
- "Pre-prod uses DBCS VMs, not ExaCS — sufficient for functional testing"
- "Dev/Test environment excluded — customer uses on-prem for dev"
cost:
line_items:
- component: "ExaCS X11M Quarter Rack — Queretaro (Prod)"
monthly_payg: "$18,500"
monthly_byol: "$8,200"
notes: "2 DB servers, 3 storage servers, BYOL"
- component: "ExaCS X11M Quarter Rack — Sao Paulo (DR)"
monthly_payg: "$18,500"
monthly_byol: "$8,200"
notes: "ADG standby, BYOL"
- component: "ADB-S 16 ECPU (DW alternative — future)"
monthly_payg: "$2,400"
monthly_byol: "$1,200"
notes: "Optional — migrate DW to ADB-S in Phase 2"
- component: "FastConnect 10Gbps Dual"
monthly_payg: "$3,060"
notes: "2 x $1,530/month"
- component: "OCI Vault"
monthly_payg: "$500"
notes: "HSM-backed key management"
- component: "Object Storage (50TB backup)"
monthly_payg: "$1,200"
notes: "RMAN backups + DW backup"
- component: "WAF + Logging + Monitoring"
monthly_payg: "$800"
notes: "WAF for EBS web tier + audit logging"
- component: "TOTAL"
monthly_payg: "$45,000"
monthly_byol: "$23,200"
notes: "BYOL saves 48%"
assumptions:
- "BYOL assumes existing Oracle Database EE licenses with active support"
- "ExaCS pricing based on current OCI list prices"
- "DR standby at full rate (ADG requires active compute)"
- "No middleware licensing included (EBS app tier on compute VMs)"
- "FastConnect partner charges not included"
show_byol: true
cost_comparison:
title: "Cost Comparison: On-Prem HW Refresh vs OCI Migration"
col_headers: ["Component", "On-Prem Refresh (5yr)", "OCI ExaCS BYOL", "Delta"]
rows:
- item: "Infrastructure (hardware/cloud)"
current: "$1,800,000 upfront"
oci: "$278,400/yr"
savings: "Break-even at 3.2 years"
- item: "Annual Support & Maintenance"
current: "$220,000/yr"
oci: "Included in OCI"
savings: "-100%"
- item: "DR Infrastructure"
current: "$0 (no DR today)"
oci: "$98,400/yr"
savings: "New capability — no DR today"
- item: "Data Center (power/cooling/space)"
current: "$80,000/yr"
oci: "$0"
savings: "-100%"
- item: "DBA Operations (patching)"
current: "$60,000/yr (part-time DBA)"
oci: "$0 (automated)"
savings: "-100%"
- item: "TOTAL ANNUAL (year 1)"
current: "$2,160,000"
oci: "$376,800"
savings: "-83%"
- item: "TOTAL 3-YEAR TCO"
current: "$2,880,000"
oci: "$1,130,400"
savings: "-$1.75M (61%)"
migration:
phases:
- name: "Phase 1: Foundation"
duration: "4 weeks"
milestones:
- "OCI tenancy + networking provisioned"
- "ExaCS Quarter Rack deployed in Queretaro"
- "FastConnect dual circuits active"
- "OCI Vault + IAM configured"
- name: "Phase 2: EBS Migration"
duration: "6 weeks"
milestones:
- "EBS R12 database migrated via ZDM"
- "Data Guard to Sao Paulo configured"
- "WAF + network security validated"
- "SOX audit controls verified"
- name: "Phase 3: SAP + DW Migration"
duration: "4 weeks"
milestones:
- "SAP database migrated"
- "DW migrated + Data Guard for SAP"
- "RMAN backup for DW to Object Storage"
- name: "Phase 4: Cutover + Decommission"
duration: "2 weeks"
milestones:
- "Production cutover (planned downtime window)"
- "On-prem Exadata X6 decommissioned"
- "Go-live monitoring active"
tools:
- "Oracle Zero Downtime Migration (ZDM)"
- "Data Guard Broker for DR setup"
- "FSDR for failover orchestration"
- "Terraform OCI provider for IaC"
downtime: "Planned 4-hour maintenance window for final cutover per database"
operational_raci:
model: "co_managed"
raci_items:
- activity: "ExaCS Infrastructure Patching"
oracle: "R"
customer: "I"
- activity: "Database Patching (quarterly)"
oracle: "C"
customer: "R"
- activity: "Data Guard Monitoring"
oracle: "C"
customer: "R"
- activity: "Backup & Recovery"
oracle: "R"
customer: "C"
- activity: "Security (IAM, NSG, Vault)"
oracle: "C"
customer: "R"
- activity: "SOX Audit Evidence"
oracle: "C"
customer: "R"
- activity: "Capacity Planning"
oracle: "C"
customer: "R"
- activity: "Incident Response (Sev1)"
oracle: "C"
customer: "R"
risks:
- risk: "EBS R12 customizations may require OS-level changes post-migration"
severity: "HIGH"
probability: "Medium"
mitigation: "Inventory all customizations pre-migration; test in Pre-Prod"
- risk: "FastConnect provisioning delay (partner-dependent)"
severity: "MEDIUM"
probability: "Medium"
mitigation: "Start FastConnect provisioning in Phase 1 week 1; IPSec VPN as interim"
- risk: "SAP certification on ExaCS version"
severity: "MEDIUM"
probability: "Low"
mitigation: "Verify SAP Note for ExaCS X11M support before migration"
- risk: "Data Guard network latency Queretaro-Sao Paulo"
severity: "LOW"
probability: "Low"
mitigation: "Test redo apply lag; async mode acceptable for SAP (Gold tier)"
- risk: "SOX audit during migration window"
severity: "MEDIUM"
probability: "Medium"
mitigation: "Maintain dual-write during transition; both systems auditable"
scorecard:
pillars:
- name: "Security & Compliance"
status: "PASS"
passed: 24
total: 26
- name: "Reliability & Resilience"
status: "PASS_WITH_RECOMMENDATIONS"
passed: 7
total: 8
- name: "Performance & Cost"
status: "PASS"
passed: 5
total: 5
- name: "Operational Efficiency"
status: "PASS_WITH_RECOMMENDATIONS"
passed: 9
total: 10
- name: "Distributed Cloud"
status: "NOT_APPLICABLE"
passed: 0
total: 0
recommendations:
- "45/49 checks passed — strong architecture for regulated workload"
- "Add runbook for Data Guard failover testing (quarterly DR drill)"
- "Consider OCI Database Management for centralized fleet monitoring"
- "Define capacity growth plan for fiscal close peak periods"
next_steps:
steps:
- "Board approval for OCI migration budget — CFO — by 2026-05-15"
- "Provision OCI tenancy + ExaCS in Queretaro — Carlos Mendoza — by 2026-06-01"
- "Start FastConnect provisioning with partner — Network team — by 2026-06-01"
- "EBS customization inventory and Pre-Prod testing — DBA team — by 2026-06-15"
- "Schedule SOX audit coordination meeting — Compliance — by 2026-06-01"
contact_info: "Carlos Mendoza — Solutions Architect, Oracle Cloud Infrastructure"

334
tools/gen_demo_deck.py Normal file
View File

@@ -0,0 +1,334 @@
#!/usr/bin/env python3
"""
OCI Deal Accelerator — Demo Presentation Generator
10-minute technical demo deck: AI-powered SA workflow acceleration.
Uses Oracle FY26 template via OraclePresBase.
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from oci_pptx_base import Colors, Layouts, OraclePresBase
class DemoDeckGenerator(OraclePresBase):
TITLE_ACCENT_COLOR = Colors.TEAL
MARGIN = Inches(0.5)
SLIDE_WIDTH = Inches(13.333)
def add_cover(self):
"""Slide 1: Cover — dark, high impact."""
slide = self._add_layout_slide(Layouts.COVER_DARK)
self._set_placeholder(slide, 0, "OCI Deal Accelerator")
self._set_placeholder(slide, 1,
"AI-Powered Architecture Proposals in Hours, Not Days")
return slide
def add_impact_slide(self, metric, statement, detail=""):
"""Big metric slide — dark background, single number."""
slide = self._add_layout_slide(Layouts.IMPACT_DARK)
self._set_placeholder(slide, 0, metric)
self._set_placeholder(slide, 1, statement)
if detail:
self._set_placeholder(slide, 37, detail)
return slide
def add_content_slide(self, title, bullets, note=""):
"""Standard content slide with title bar + bullet list."""
slide = self._add_blank_slide()
self._add_title_bar(slide, title, margin=self.MARGIN)
y = Inches(1.4)
txBox = self._add_textbox(
slide, self.MARGIN + Inches(0.1), y,
Inches(12), Inches(5),
text="", font_size=15,
)
tf = txBox.text_frame
tf.word_wrap = True
# First paragraph already exists
tf.paragraphs[0].text = bullets[0] if bullets else ""
tf.paragraphs[0].font.size = Pt(15)
tf.paragraphs[0].font.name = self.FONT
tf.paragraphs[0].font.color.rgb = Colors.PRIMARY_TEXT
tf.paragraphs[0].space_after = Pt(6)
for b in bullets[1:]:
self._add_paragraph(tf, b, font_size=15, space_after=6)
if note:
self._add_textbox(
slide, self.MARGIN, Inches(6.5),
Inches(12), Inches(0.5),
text=note, font_size=11, italic=True,
color=Colors.SECONDARY_TEXT,
)
return slide
def add_prompt_table_slide(self, title, rows):
"""Slide with a table of option # | prompt example."""
slide = self._add_blank_slide()
self._add_title_bar(slide, title, margin=self.MARGIN)
n = len(rows) + 1
row_h = min(0.52, 5.2 / max(n, 1))
table = self._add_table(
slide, n, 3,
self.MARGIN, Inches(1.3),
Inches(12.3), Inches(row_h * n),
)
table.columns[0].width = Inches(0.6)
table.columns[1].width = Inches(3.0)
table.columns[2].width = Inches(8.7)
for j, h in enumerate(["#", "Capability", "Live Prompt"]):
self._style_table_cell(
table.cell(0, j), h, font_size=10, bold=True,
color=Colors.WHITE, bg_color=Colors.TEAL,
alignment=PP_ALIGN.CENTER if j == 0 else PP_ALIGN.LEFT,
)
for i, (num, cap, prompt) in enumerate(rows):
ri = i + 1
bg = Colors.TABLE_ALT_ROW if ri % 2 == 0 else None
self._style_table_cell(table.cell(ri, 0), str(num), font_size=10,
bold=True, bg_color=bg, alignment=PP_ALIGN.CENTER)
self._style_table_cell(table.cell(ri, 1), cap, font_size=10,
bold=True, bg_color=bg)
self._style_table_cell(table.cell(ri, 2), prompt, font_size=9,
bg_color=bg)
return slide
def add_before_after_slide(self):
"""Before/After comparison slide."""
slide = self._add_blank_slide()
self._add_title_bar(slide, "Before vs After: SA Workflow", margin=self.MARGIN)
# BEFORE column
self._add_rect(slide, self.MARGIN, Inches(1.4),
Inches(5.8), Inches(0.5), fill_color=Colors.ORACLE_RED)
self._add_textbox(slide, self.MARGIN + Inches(0.2), Inches(1.45),
Inches(5.4), Inches(0.4),
text="BEFORE — Manual SA Workflow",
font_size=14, bold=True, color=Colors.WHITE)
before = [
("Discovery call", "1h"),
("Research services + sizing", "2-4h"),
("Build architecture diagram", "1-2h"),
("Write proposal deck", "3-5h"),
("Cost estimate + BOM", "1-2h"),
("WA review (if time permits)", "2-3h"),
("Internal review + revisions", "1-2h"),
("TOTAL", "11-19 hours (2-3 days)"),
]
y = Inches(2.0)
for task, time in before:
bold = task == "TOTAL"
color = Colors.ORACLE_RED if bold else Colors.PRIMARY_TEXT
self._add_textbox(slide, Inches(0.7), y, Inches(3.8), Inches(0.32),
text=task, font_size=11, bold=bold, color=color)
self._add_textbox(slide, Inches(4.6), y, Inches(1.5), Inches(0.32),
text=time, font_size=11, bold=bold, color=color,
alignment=PP_ALIGN.RIGHT)
y += Inches(0.35)
# AFTER column
self._add_rect(slide, Inches(6.8), Inches(1.4),
Inches(5.8), Inches(0.5), fill_color=Colors.FOREST)
self._add_textbox(slide, Inches(7.0), Inches(1.45),
Inches(5.4), Inches(0.4),
text="AFTER — AI-Assisted Workflow",
font_size=14, bold=True, color=Colors.WHITE)
after = [
("Discovery call", "1h"),
("Paste notes → Full proposal", "3-5 min"),
("Architecture diagram", "included"),
("Slide deck (18 slides)", "included"),
("Cost estimate + BOM", "included"),
("WA review (5-pillar)", "included"),
("SA reviews AI output", "30-60 min"),
("TOTAL", "1.5-2 hours (same day)"),
]
y = Inches(2.0)
for task, time in after:
bold = task == "TOTAL"
color = Colors.FOREST if bold else Colors.PRIMARY_TEXT
self._add_textbox(slide, Inches(7.0), y, Inches(3.8), Inches(0.32),
text=task, font_size=11, bold=bold, color=color)
self._add_textbox(slide, Inches(11.0), y, Inches(1.5), Inches(0.32),
text=time, font_size=11, bold=bold, color=color,
alignment=PP_ALIGN.RIGHT)
y += Inches(0.35)
# Savings callout
self._add_rect(slide, Inches(3.5), Inches(5.3),
Inches(6.3), Inches(0.7), fill_color=Colors.TEAL)
self._add_textbox(slide, Inches(3.6), Inches(5.35),
Inches(6.1), Inches(0.6),
text="85% time reduction | Same day delivery | Higher quality (WA-validated)",
font_size=14, bold=True, color=Colors.WHITE,
alignment=PP_ALIGN.CENTER)
return slide
def add_divider(self, text):
slide = self._add_layout_slide(Layouts.DIVIDER_DARK)
self._set_placeholder(slide, 0, text)
return slide
def build_demo_deck(output_path):
gen = DemoDeckGenerator()
# ── SLIDE 1: Cover (0:00-0:15) ──
gen.add_cover()
# ── SLIDE 2: The Problem — impact (0:15-1:00) ──
gen.add_impact_slide(
"11-19h",
"Time an SA spends per proposal",
"Research + diagram + deck + costs + review — repeated for every deal"
)
# ── SLIDE 3: The Aha Moment (1:00-2:00) ──
gen.add_before_after_slide()
# ── SLIDE 4: What Is It (2:00-3:00) ──
gen.add_content_slide(
"OCI Deal Accelerator — What Is It?",
[
"An AI skill (system prompt + knowledge base + tools) for any LLM with tool-use and 100K+ context",
"Works on Claude, Codex, GPT, Gemini — any model that can read files + run Python",
"Aligned with ECAL framework: Define > Design > Deliver",
"40+ YAML files of field knowledge (services, sizing, pricing, patterns, gotchas)",
"7 Python generators: .pptx, .drawio, .pdf, .xlsx, WA scorecard, BOM, AppCA",
"14 capabilities accessible via natural language — not a chatbot, a domain-specific SA tool",
],
)
# ── SLIDE 5: Divider — Live Demo (3:00) ──
gen.add_divider("Live Demo: 14 Capabilities")
# ── SLIDE 6: Prompts 1-7 (3:00-6:00) ──
gen.add_prompt_table_slide(
"Design, Validate & Compare (Options 1-7)",
[
("1", "Full proposal",
"Cliente farmaceutico en Mexico, 3 Oracle DBs (EBS R12 prod, SAP, DW) en "
"Exadata X6 on-prem. HW refresh vence en 6 meses. Quieren migrar a OCI, "
"RPO<15min, RTO<1h, necesitan compliance SOX. 200 usuarios concurrentes, "
"2TB data, pico en cierre fiscal. Budget: reducir 30% vs renovar HW."),
("2", "Architecture diagram",
"Diagrama: ExaCS en Queretaro (prod) + Standby con Data Guard en Sao Paulo, "
"Hub-Spoke networking con DRG, FastConnect 10Gbps dual desde Mexico City, "
"bastion en public subnet, WAF para apps web, Vault para TDE keys."),
("3", "Slide deck",
"Genera el deck para la propuesta del cliente farmaceutico."),
("4", "Cost estimate",
"ExaCS X11M Quarter Rack BYOL, 2 DB servers, 3 storage servers, "
"400GB RAM, 10TB usable + ADB-S 16 ECPU + FastConnect 1Gbps dual + "
"50TB Object Storage + OCI Vault. 12 meses, 40% descuento."),
("5", "WA review",
"Review: ADB-S 23ai en Sao Paulo region unica, IAM con admin por defecto, "
"sin encryption at rest explicita, sin WAF, monitoring con scripts custom, "
"patching manual mensual, backup solo local, sin network segmentation."),
("6", "Feature check",
"Does ADB-S Dedicated Elastic Pool support Auto Indexing on 23ai? "
"And what about AI Vector Search with HNSW indexes at 100M+ vectors?"),
("7", "Competitive",
"Customer comparing ADB-S vs AWS Aurora PostgreSQL for a mixed OLTP+analytics "
"workload, 500GB, needs partitioning, RAC equivalent, and BYOL licensing. "
"They think Aurora is cheaper. Give me honest pros and cons."),
],
)
# ── SLIDE 7: Prompts 8-14 (6:00-8:30) ──
gen.add_prompt_table_slide(
"Strategy, KB, Governance & SA Tools (Options 8-14)",
[
("8", "Business case",
"Business case: 5 Oracle DBs on-prem (EBS, Siebel, DW, 2 custom), "
"$1.2M/yr infra (HW refresh vence Q3). CTO quiere cloud, CFO quiere "
"numeros. Necesito TCO 3 anos, ROI, risk of doing nothing, y que pasa "
"si renuevan HW por 5 anos mas. Audience: board de directores."),
("9", "Field findings",
"What real issues has the field team found with ADB-S Dedicated Elastic "
"Pool? Include DEP provisioning times, maintenance windows, and ADG."),
("10", "Reference arch",
"Reference architectures for cross-region DR with Exadata and Data Guard. "
"Need options for both ExaCS and ADB-S with automatic failover."),
("11", "Report finding",
"New finding: ExaCS iormcal fails silently when storage server count < 3. "
"Product: ExaCS, Version: 23ai, Severity: MEDIUM, found during pharma "
"engagement in Mexico. Workaround: validate IORM plan output after apply, "
"check v$iorm_plans for actual vs requested shares."),
("12", "ECAL readiness",
"Score this engagement: tenemos discovery notes, workload profile, y un "
"diagrama de arquitectura. No hay business case, no value story, no "
"handover plan, no operations model. Customer es farmaceutica en Mexico, "
"engagement tier standard, estamos en la fase Design."),
("13", "BOM generator",
"BOM: ExaCS X11M Half Rack BYOL, 4 DB servers 128 ECPUs each, "
"6 storage servers, ADB-S 32 ECPU, 50TB block storage, "
"FastConnect 10Gbps dual, OCI Vault, 12 months, 45% discount."),
("14", "BOM for AppCA",
"Same BOM as 13 but in AppCA import format for deal approval."),
],
)
# ── SLIDE 8: Architecture (8:30-9:00) ──
gen.add_content_slide(
"How It Works — Under the Hood",
[
"SKILL.md: 400-line system prompt with ECAL-aligned workflow rules",
"kb/: 40+ YAML files — services, sizing, pricing (auto-refreshed), patterns, gotchas",
"tools/: 7 Python generators that produce real files, not markdown",
"Oracle FY26 .pptx template with Redwood design system colors",
"scripts/: WA validation engine against 5-pillar framework (80+ checks)",
"Field findings tracker with contributor attribution + confidence levels",
"SKU catalog refreshed from Oracle public pricing API",
],
note="Everything is composable: patterns combine, KB is the moat, field experience > documentation"
)
# ── SLIDE 9: Key Takeaways (9:00-9:30) ──
gen.add_content_slide(
"Key Takeaways",
[
"85% time reduction: from 2-3 days to 2 hours per proposal",
"Higher quality: every proposal is WA-validated with 5-pillar scoring",
"Field knowledge compounds: gotchas and findings feed back into the KB",
"ECAL-aligned: Define > Design > Deliver with artefact tracking",
"Real deliverables: .pptx, .drawio, .pdf, .xlsx — not chat summaries",
"SA stays in control: AI generates, architect reviews and refines",
],
)
# ── SLIDE 10: Closing ──
gen.add_closing_slide(
name="OCI Deal Accelerator",
title="github.com/your-org/oci-deal-accelerator",
)
gen.save(output_path)
print(f"Generated: {output_path}")
print(f" Slides: {gen.slide_count}")
print(f" Duration: ~10 minutes")
if __name__ == "__main__":
out = sys.argv[1] if len(sys.argv) > 1 else "demo-presentation.pptx"
build_demo_deck(out)